Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --$1 = id_zadania kliknietego (które chcemy przesunąć)
  2. --$2 - numer zadania na ktore chcemy przesunąć nasze zadanie
  3.  
  4. DECLARE
  5. numer_zadania_1 integer;
  6. ilosc_zadan_1 integer;
  7. id_nadzadania_1 integer;
  8.  
  9. id_zadania_2 integer;
  10. ilosc_zadan_2 integer;
  11. id_nadzadania_2 integer;
  12.  
  13. w_ktora_strone boolean;
  14.  
  15.  
  16. BEGIN
  17.  
  18.  
  19. SELECT numer
  20. INTO numer_zadania_1
  21. FROM zadania
  22. WHERE id = $1;
  23.  
  24. SELECT id
  25. INTO id_zadania_2
  26. FROM zadania
  27. WHERE numer = $2 AND id_projektu = (SELECT id_projektu FROM zadania WHERE id = $1);
  28.  
  29. SELECT id_nadzadania
  30. INTO id_nadzadania_1
  31. FROM zadania
  32. WHERE id = $1;
  33.  
  34. SELECT id_nadzadania
  35. INTO id_nadzadania_2
  36. FROM zadania
  37. WHERE id = id_zadania_2;
  38.  
  39. if(numer_zadania_1 > $2)
  40. then
  41.     w_ktora_strone = 0;
  42. else
  43.     w_ktora_strone = 1;
  44. end if;
  45.  
  46.  
  47. IF ( id_nadzadania_1 = id_nadzadania_2)
  48. THEN
  49.     IF w_ktora_strone = false
  50.     THEN
  51.         WITH RECURSIVE cte(id, id_nadzadania) AS (
  52.             SELECT id, id_nadzadania FROM zadania WHERE id = $1
  53.             UNION ALL
  54.             SELECT z.id, z.id_nadzadania
  55.             FROM zadania z
  56.             INNER JOIN cte c ON c.id = z.id_nadzadania
  57.         )
  58.             SELECT count(id)
  59.             INTO ilosc_zadan_1
  60.             FROM cte;
  61.  
  62.         WITH RECURSIVE cte(id, id_nadzadania) AS (
  63.             SELECT id, id_nadzadania FROM zadania WHERE id = id_zadania_2
  64.             UNION ALL
  65.             SELECT z.id, z.id_nadzadania
  66.             FROM zadania z
  67.             INNER JOIN cte c ON c.id = z.id_nadzadania
  68.         )
  69.             SELECT count(id)
  70.             INTO ilosc_zadan_2
  71.             FROM cte;
  72.  
  73.  
  74.         WITH RECURSIVE cte(id, id_nadzadania) AS (
  75.             SELECT id, id_nadzadania FROM zadania WHERE id = $1
  76.             UNION ALL
  77.             SELECT z.id, z.id_nadzadania
  78.             FROM zadania z
  79.             INNER JOIN cte c ON c.id = z.id_nadzadania
  80.         )
  81.             UPDATE zadania
  82.             SET numer = numer - ilosc_zadan_2
  83.             WHERE id IN (SELECT id FROM cte);
  84.  
  85.         WITH RECURSIVE cte(id, id_nadzadania) AS (
  86.             SELECT id, id_nadzadania FROM zadania WHERE id = id_zadania_2
  87.             UNION ALL
  88.             SELECT z.id, z.id_nadzadania
  89.             FROM zadania z
  90.             INNER JOIN cte c ON c.id = z.id_nadzadania
  91.         )
  92.             UPDATE zadania
  93.             SET numer = numer + ilosc_zadan_1
  94.             WHERE id IN (SELECT id FROM cte);
  95.     ELSE
  96.             WITH RECURSIVE cte(id, id_nadzadania) AS (
  97.             SELECT id, id_nadzadania FROM zadania WHERE id = $1
  98.             UNION ALL
  99.             SELECT z.id, z.id_nadzadania
  100.             FROM zadania z
  101.             INNER JOIN cte c ON c.id = z.id_nadzadania
  102.         )
  103.             SELECT count(id)
  104.             INTO ilosc_zadan_1
  105.             FROM cte;
  106.  
  107.         WITH RECURSIVE cte(id, id_nadzadania) AS (
  108.             SELECT id, id_nadzadania FROM zadania WHERE id = id_zadania_2
  109.             UNION ALL
  110.             SELECT z.id, z.id_nadzadania
  111.             FROM zadania z
  112.             INNER JOIN cte c ON c.id = z.id_nadzadania
  113.         )
  114.             SELECT count(id)
  115.             INTO ilosc_zadan_2
  116.             FROM cte;
  117.  
  118.  
  119.         WITH RECURSIVE cte(id, id_nadzadania) AS (
  120.             SELECT id, id_nadzadania FROM zadania WHERE id = $1
  121.             UNION ALL
  122.             SELECT z.id, z.id_nadzadania
  123.             FROM zadania z
  124.             INNER JOIN cte c ON c.id = z.id_nadzadania
  125.         )
  126.             UPDATE zadania
  127.             SET numer = numer + ilosc_zadan_2
  128.             WHERE id IN (SELECT id FROM cte);
  129.  
  130.         WITH RECURSIVE cte(id, id_nadzadania) AS (
  131.             SELECT id, id_nadzadania FROM zadania WHERE id = id_zadania_2
  132.             UNION ALL
  133.             SELECT z.id, z.id_nadzadania
  134.             FROM zadania z
  135.             INNER JOIN cte c ON c.id = z.id_nadzadania
  136.         )
  137.             UPDATE zadania
  138.             SET numer = numer - ilosc_zadan_1
  139.             WHERE id IN (SELECT id FROM cte);
  140.  
  141.     END IF;
  142. END IF;
  143. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement