package fsql // fsql — SQL-запросы к учётным системам DEPO и SPECTRE и к экспорту QUIK, // вынесенные из lkgateway отдельным пакетом. В релизной сборке этот пакет // (и только он) обфусцируется garble: строки запросов шифруются и в бинаре // не читаются `strings`. Именно здесь лежит знание о чужих схемах (какие // таблицы, связи и столбцы), которое дороже всего восстанавливать. // // ВАЖНО: только var, не const — константу компилятор вставил бы в // вызывающий (необфусцированный) пакет, и шифрование бы не сработало. // Запросы — data-only: параметры передаются через sql.Named на месте вызова. var Arch01 = `SELECT r.ID, b.NUM_S, ISNULL(b.SYS_NAME,''), b.NUM_1, ISNULL(r.REG_2,0), ISNULL(r.VALUE_ID,0), CAST(ISNULL(r.A,0) AS float), CAST(ISNULL(r.D,0) AS float), CAST(ISNULL(r.EQ_D,0) AS float), ISNULL(vs.ISIN,''), ISNULL(vs.NAME,''), ISNULL(vc.SYSNAME,''), ISNULL(sh.CLASS,0), CAST(ISNULL(sh.NOMINAL,0) AS float) FROM OD_RESTS r JOIN OD_BALANCES b ON b.ID = r.BAL_ACC LEFT JOIN OD_VALUES vs ON vs.ID = r.REG_2 LEFT JOIN OD_VALUES vc ON vc.ID = r.VALUE_ID LEFT JOIN OD_SHARES sh ON sh.ID = r.REG_2 WHERE r.REG_3 = @c AND b.IS_BAL = 1 AND b.PART = 39 AND b.NUM_1 IN (50,51,52,55,58) ORDER BY b.NUM_1, vs.NAME` var Arch02 = `SELECT REST, CAST(SUM(CASE WHEN TYPE_ = 1 THEN AMOUNT_ ELSE -AMOUNT_ END) AS float), CAST(SUM(CASE WHEN TYPE_ = 1 THEN VALUE_ ELSE -VALUE_ END) AS float), CAST(SUM(CASE WHEN TYPE_ = 1 THEN EQ_ ELSE -EQ_ END) AS float) FROM OD_TURNS WHERE REST IN (%s) AND WIRDATE >= @d AND IS_PLAN = 'F' AND YEAR(WIRDATE) < 9000 GROUP BY REST` var Arch03 = `SELECT MAX(R_DATE) FROM OD_DOCS WHERE YEAR(R_DATE) < 9000` var Arch04 = `SELECT TOP 1 OFICDATE, CAST(RATE3 AS float), CAST(PFR_PRICE AS float), CAST(CLOSE_ AS float) FROM OD_VALUES_RATES WHERE VALUE_ID = @v AND OFICDATE <= @d AND (RATE3 > 0 OR PFR_PRICE > 0 OR CLOSE_ > 0) ORDER BY OFICDATE DESC` var Arch05 = `SELECT TOP 1 CAST(RATE AS float) FROM OD_VALUES_RATES WHERE VALUE_ID = @v AND MARKET = 0 AND OFICDATE <= @d AND RATE > 0 ORDER BY OFICDATE DESC` var Arch06 = `SELECT r.ID, b.NUM_1, ISNULL(b.SYS_NAME,'') FROM OD_RESTS r JOIN OD_BALANCES b ON b.ID = r.BAL_ACC WHERE r.REG_3 = @c AND b.PART = 39 AND ((b.NUM_1 = 58 AND b.SYS_NAME LIKE N'ПОРТФЕЛЬ%') OR b.NUM_1 IN (50,51,52,55))` var Arch07 = ` WITH w AS ( SELECT wr.WIRDATE, wr.EQ_, wr.D_REST, wr.K_REST, wr.D_SUMMA, wr.K_SUMMA, wr.D_AMOUNT, wr.K_AMOUNT, wr.NAME, wr.D_REST AS sec_rest, wr.K_REST AS money_rest FROM OD_WIRING wr WHERE wr.D_REST IN (%[1]s) AND wr.IS_PLAN = 'F' AND YEAR(wr.WIRDATE) < 9000 AND wr.WIRDATE >= @f AND wr.WIRDATE < @t AND (wr.D_AMOUNT <> 0 OR wr.K_AMOUNT <> 0) UNION ALL SELECT wr.WIRDATE, wr.EQ_, wr.D_REST, wr.K_REST, wr.D_SUMMA, wr.K_SUMMA, wr.D_AMOUNT, wr.K_AMOUNT, wr.NAME, wr.K_REST, wr.D_REST FROM OD_WIRING wr WHERE wr.K_REST IN (%[1]s) AND wr.D_REST NOT IN (%[1]s) AND wr.IS_PLAN = 'F' AND YEAR(wr.WIRDATE) < 9000 AND wr.WIRDATE >= @f AND wr.WIRDATE < @t AND (wr.D_AMOUNT <> 0 OR wr.K_AMOUNT <> 0)) SELECT w.WIRDATE, CAST(ISNULL(w.EQ_,0) AS float), w.D_REST, w.K_REST, CAST(ISNULL(w.D_SUMMA,0) AS float), CAST(ISNULL(w.K_SUMMA,0) AS float), CAST(ISNULL(w.D_AMOUNT,0) AS float), CAST(ISNULL(w.K_AMOUNT,0) AS float), ISNULL(w.NAME,''), ISNULL(sv.NAME,''), ISNULL(sv.ISIN,''), ISNULL(mv.SYSNAME,'') FROM w LEFT JOIN OD_RESTS sr ON sr.ID = w.sec_rest LEFT JOIN OD_VALUES sv ON sv.ID = sr.REG_2 LEFT JOIN OD_RESTS mr ON mr.ID = w.money_rest LEFT JOIN OD_VALUES mv ON mv.ID = mr.VALUE_ID ORDER BY w.WIRDATE` var Arch08 = `SELECT w.WIRDATE, CAST(ISNULL(w.EQ_,0) AS float), w.D_REST, w.K_REST, CAST(ISNULL(w.D_SUMMA,0) AS float), CAST(ISNULL(w.K_SUMMA,0) AS float), ISNULL(w.NAME,''), ISNULL(mv.SYSNAME,'') FROM OD_WIRING w JOIN OD_RESTS mr ON mr.ID = CASE WHEN w.D_REST IN (%[1]s) THEN w.D_REST ELSE w.K_REST END LEFT JOIN OD_VALUES mv ON mv.ID = mr.VALUE_ID WHERE (w.D_REST IN (%[1]s) OR w.K_REST IN (%[1]s)) AND w.IS_PLAN = 'F' AND YEAR(w.WIRDATE) < 9000 AND w.WIRDATE >= @f AND w.WIRDATE < @t ORDER BY w.WIRDATE` var Arch09 = `SELECT r.ID FROM OD_RESTS r JOIN OD_BALANCES b ON b.ID = r.BAL_ACC WHERE r.REG_3 = @c AND b.SYS_NAME = N'ВЫРУЧКА'` var Arch10 = ` WITH w AS ( SELECT wr.WIRDATE, wr.EQ_, wr.D_REST, wr.K_REST, wr.D_SUMMA, wr.K_SUMMA, wr.D_REST AS sec_rest FROM OD_WIRING wr WHERE wr.K_REST IN (%[1]s) AND wr.IS_PLAN = 'F' AND YEAR(wr.WIRDATE) < 9000 AND wr.WIRDATE >= @f AND wr.WIRDATE < @t AND wr.EQ_ <> 0 UNION ALL SELECT wr.WIRDATE, wr.EQ_, wr.D_REST, wr.K_REST, wr.D_SUMMA, wr.K_SUMMA, wr.K_REST FROM OD_WIRING wr WHERE wr.D_REST IN (%[1]s) AND wr.K_REST NOT IN (%[1]s) AND wr.IS_PLAN = 'F' AND YEAR(wr.WIRDATE) < 9000 AND wr.WIRDATE >= @f AND wr.WIRDATE < @t AND wr.EQ_ <> 0) SELECT w.WIRDATE, CAST(ISNULL(w.EQ_,0) AS float), w.D_REST, w.K_REST, CAST(ISNULL(w.D_SUMMA,0) AS float), CAST(ISNULL(w.K_SUMMA,0) AS float), ISNULL(sv.ISIN,'') FROM w LEFT JOIN OD_RESTS sr ON sr.ID = w.sec_rest LEFT JOIN OD_VALUES sv ON sv.ID = sr.REG_2`