prigun

Untitled

Jun 29th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DECLARE
  2.     partner_type boolean;
  3. BEGIN
  4.     SELECT
  5.         "Тип"
  6.     INTO
  7.         partner_type   
  8.     FROM
  9.         dblink('application_name="Billing.SpisokPartnerovSUchetomPrav" ' || "СтрокаПодключения",
  10.         $q$
  11.             SELECT
  12.                 P3."Тип"
  13.             FROM   
  14.                 "ПользовательБиллинг" P1
  15.                 JOIN
  16.                     "ПользовательБиллинг" P2 ON
  17.                         P1."Раздел" = P2."@Пользователь"
  18.                 JOIN
  19.                     "Пользователь" U2 ON
  20.                         U2."@Пользователь" = P2."@Пользователь"
  21.                 JOIN
  22.                     "Партнер" P3 ON
  23.                         P1."Раздел" = P3."@Пользователь"
  24.             WHERE
  25.                 P1."@Пользователь" = $q$ || "Пользователь" || $q$
  26.             LIMIT
  27.                 1
  28.         $q$) T("Тип" boolean);
  29.    
  30.     RETURN QUERY
  31.         (
  32.             SELECT
  33.                 "Пользователи"
  34.             ,   "Фильтрация"
  35.             FROM
  36.                 dblink('application_name="Billing.SpisokPartnerovSUchetomPrav" ' || "СтрокаПодключения",
  37.                 $q$
  38.                     WITH RECURSIVE U AS (
  39.                         SELECT
  40.                             COALESCE(P3."Видимость", P1."Раздел") parent
  41.                         ,   U2."Логин"
  42.                         FROM   
  43.                             "ПользовательБиллинг" P1
  44.                             LEFT JOIN
  45.                                 "ПользовательБиллинг" P2 ON
  46.                                     P1."Раздел" = P2."@Пользователь"
  47.                             LEFT JOIN
  48.                                 "Пользователь" U2 ON
  49.                                     U2."@Пользователь" = P2."@Пользователь"
  50.                             LEFT JOIN
  51.                                 "Партнер" P3 ON
  52.                                     P1."Раздел" = P3."@Пользователь"
  53.                         WHERE
  54.                             P1."@Пользователь" = $q$ || "Пользователь" || $q$
  55.                     )
  56.                     , T AS (
  57.                         SELECT
  58.                             P."@Пользователь"  
  59.                         FROM
  60.                             "ПользовательБиллинг" U
  61.                             JOIN
  62.                                 "Партнер" P
  63.                                     USING("@Пользователь")
  64.                         WHERE
  65.                             "@Пользователь" = (
  66.                                 SELECT
  67.                                     parent
  68.                                 FROM
  69.                                     U
  70.                             )
  71.                             $q$ ||
  72.                                 CASE
  73.                                     WHEN "Подразделение" = 1 THEN $q$ AND "Тип" IS FALSE $q$
  74.                                     WHEN "Подразделение" = 2 THEN $q$ AND "Тип" IS TRUE $q$
  75.                                     WHEN "Подразделение" = 0 THEN ''
  76.                                     ELSE ''
  77.                                 END
  78.                             || $q$
  79.                     UNION ALL
  80.                         SELECT
  81.                             P."@Пользователь"  
  82.                         FROM
  83.                             "Партнер" P
  84.                             JOIN
  85.                                 T ON
  86.                                     T."@Пользователь" = P."Раздел"
  87.                     )
  88.                     SELECT
  89.                         coalesce(array_agg("@Пользователь"::integer), '{}')
  90.                     ,   coalesce((
  91.                             SELECT
  92.                                 "Логин" <> '__сбис__биллинг' AND "Логин" <> '__сбис__администратор' AND "Логин" IS NOT NULL OR "Логин" IS NULL
  93.                             FROM
  94.                                 U
  95.                         ), true)
  96.                     FROM
  97.                         $q$ ||
  98.                             CASE
  99.                                 WHEN partner_type IS TRUE THEN
  100.                                 $q$
  101.                                 (
  102.                                     SELECT
  103.                                         "@Пользователь"
  104.                                     FROM
  105.                                         "Партнер"
  106.                                     WHERE
  107.                                         "Тип" IS TRUE
  108.                                     UNION
  109.                                     SELECT
  110.                                         "@Пользователь"
  111.                                     FROM
  112.                                         T
  113.                                 ) T
  114.                                 $q$
  115.                                 ELSE $q$ T $q$
  116.                             END
  117.                         || $q$
  118.                 $q$
  119.                 ) T("Пользователи" integer[], "Фильтрация" boolean)
  120.         );
  121. END
Add Comment
Please, Sign In to add comment