af-db-ts 1.0.5 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/__tests__/01_node_env.spec.js +7 -0
  3. package/dist/cjs/__tests__/01_node_env.spec.js.map +1 -0
  4. package/dist/cjs/__tests__/02_getValueForSqlMs.spec.js +50 -0
  5. package/dist/cjs/__tests__/02_getValueForSqlMs.spec.js.map +1 -0
  6. package/dist/cjs/__tests__/global-setup.js +7 -0
  7. package/dist/cjs/__tests__/global-setup.js.map +1 -0
  8. package/dist/cjs/__tests__/global-teardown.js +7 -0
  9. package/dist/cjs/__tests__/global-teardown.js.map +1 -0
  10. package/dist/cjs/{interfaces.js → src/@types/i-common.js} +1 -1
  11. package/dist/cjs/src/@types/i-common.js.map +1 -0
  12. package/dist/cjs/src/@types/i-config.js +3 -0
  13. package/dist/cjs/src/@types/i-config.js.map +1 -0
  14. package/dist/cjs/src/@types/i-ms.js +3 -0
  15. package/dist/cjs/src/@types/i-ms.js.map +1 -0
  16. package/dist/cjs/src/@types/i-pg.js +24 -0
  17. package/dist/cjs/src/@types/i-pg.js.map +1 -0
  18. package/dist/cjs/src/common.js +30 -0
  19. package/dist/cjs/src/common.js.map +1 -0
  20. package/dist/cjs/src/index.js +59 -0
  21. package/dist/cjs/src/index.js.map +1 -0
  22. package/dist/cjs/src/logger-error.js +10 -0
  23. package/dist/cjs/src/logger-error.js.map +1 -0
  24. package/dist/cjs/{get-value-for-sql.js → src/mssql/get-value-for-sql.js} +12 -8
  25. package/dist/cjs/src/mssql/get-value-for-sql.js.map +1 -0
  26. package/dist/cjs/{db.js → src/mssql/pool-ms.js} +73 -77
  27. package/dist/cjs/src/mssql/pool-ms.js.map +1 -0
  28. package/dist/cjs/src/mssql/query-ms.js +47 -0
  29. package/dist/cjs/src/mssql/query-ms.js.map +1 -0
  30. package/dist/cjs/{sql.js → src/mssql/sql.js} +72 -49
  31. package/dist/cjs/src/mssql/sql.js.map +1 -0
  32. package/dist/cjs/src/mssql/utils.js.map +1 -0
  33. package/dist/cjs/src/pg/get-merge-sql.js +50 -0
  34. package/dist/cjs/src/pg/get-merge-sql.js.map +1 -0
  35. package/dist/cjs/src/pg/get-update-sql.js +29 -0
  36. package/dist/cjs/src/pg/get-update-sql.js.map +1 -0
  37. package/dist/cjs/src/pg/insert.js +93 -0
  38. package/dist/cjs/src/pg/insert.js.map +1 -0
  39. package/dist/cjs/src/pg/is-table-or-view-exists.js +21 -0
  40. package/dist/cjs/src/pg/is-table-or-view-exists.js.map +1 -0
  41. package/dist/cjs/src/pg/pg-pool.js +52 -0
  42. package/dist/cjs/src/pg/pg-pool.js.map +1 -0
  43. package/dist/cjs/src/pg/prepare-value.js +84 -0
  44. package/dist/cjs/src/pg/prepare-value.js.map +1 -0
  45. package/dist/cjs/src/pg/query-pg.js +23 -0
  46. package/dist/cjs/src/pg/query-pg.js.map +1 -0
  47. package/dist/cjs/src/pg/table-schema.js +169 -0
  48. package/dist/cjs/src/pg/table-schema.js.map +1 -0
  49. package/dist/esm/src/@types/i-common.js +2 -0
  50. package/dist/esm/src/@types/i-common.js.map +1 -0
  51. package/dist/esm/src/@types/i-config.js +2 -0
  52. package/dist/esm/src/@types/i-config.js.map +1 -0
  53. package/dist/esm/src/@types/i-ms.js +2 -0
  54. package/dist/esm/src/@types/i-ms.js.map +1 -0
  55. package/dist/esm/src/@types/i-pg.js +21 -0
  56. package/dist/esm/src/@types/i-pg.js.map +1 -0
  57. package/dist/esm/src/common.js +25 -0
  58. package/dist/esm/src/common.js.map +1 -0
  59. package/dist/esm/src/index.js +15 -0
  60. package/dist/esm/src/index.js.map +1 -0
  61. package/dist/esm/src/logger-error.js +6 -0
  62. package/dist/esm/src/logger-error.js.map +1 -0
  63. package/dist/esm/{get-value-for-sql.js → src/mssql/get-value-for-sql.js} +11 -7
  64. package/dist/esm/src/mssql/get-value-for-sql.js.map +1 -0
  65. package/dist/esm/{db.js → src/mssql/pool-ms.js} +35 -62
  66. package/dist/esm/src/mssql/pool-ms.js.map +1 -0
  67. package/dist/esm/src/mssql/query-ms.js +20 -0
  68. package/dist/esm/src/mssql/query-ms.js.map +1 -0
  69. package/dist/esm/{sql.js → src/mssql/sql.js} +36 -36
  70. package/dist/esm/src/mssql/sql.js.map +1 -0
  71. package/dist/esm/src/mssql/utils.js.map +1 -0
  72. package/dist/esm/src/pg/get-merge-sql.js +46 -0
  73. package/dist/esm/src/pg/get-merge-sql.js.map +1 -0
  74. package/dist/esm/src/pg/get-update-sql.js +25 -0
  75. package/dist/esm/src/pg/get-update-sql.js.map +1 -0
  76. package/dist/esm/src/pg/insert.js +89 -0
  77. package/dist/esm/src/pg/insert.js.map +1 -0
  78. package/dist/esm/src/pg/is-table-or-view-exists.js +17 -0
  79. package/dist/esm/src/pg/is-table-or-view-exists.js.map +1 -0
  80. package/dist/esm/src/pg/pg-pool.js +43 -0
  81. package/dist/esm/src/pg/pg-pool.js.map +1 -0
  82. package/dist/esm/src/pg/prepare-value.js +79 -0
  83. package/dist/esm/src/pg/prepare-value.js.map +1 -0
  84. package/dist/esm/src/pg/query-pg.js +19 -0
  85. package/dist/esm/src/pg/query-pg.js.map +1 -0
  86. package/dist/esm/src/pg/table-schema.js +164 -0
  87. package/dist/esm/src/pg/table-schema.js.map +1 -0
  88. package/dist/types/src/@types/i-common.d.ts +35 -0
  89. package/dist/types/src/@types/i-common.d.ts.map +1 -0
  90. package/dist/types/src/@types/i-config.d.ts +60 -0
  91. package/dist/types/src/@types/i-config.d.ts.map +1 -0
  92. package/dist/types/{interfaces.d.ts → src/@types/i-ms.d.ts} +30 -77
  93. package/dist/types/src/@types/i-ms.d.ts.map +1 -0
  94. package/dist/types/src/@types/i-pg.d.ts +62 -0
  95. package/dist/types/src/@types/i-pg.d.ts.map +1 -0
  96. package/dist/types/src/common.d.ts +6 -0
  97. package/dist/types/src/common.d.ts.map +1 -0
  98. package/dist/types/src/index.d.ts +18 -0
  99. package/dist/types/src/index.d.ts.map +1 -0
  100. package/dist/types/src/logger-error.d.ts +7 -0
  101. package/dist/types/src/logger-error.d.ts.map +1 -0
  102. package/dist/types/src/mssql/get-value-for-sql.d.ts +11 -0
  103. package/dist/types/src/mssql/get-value-for-sql.d.ts.map +1 -0
  104. package/dist/types/{db.d.ts → src/mssql/pool-ms.d.ts} +18 -15
  105. package/dist/types/src/mssql/pool-ms.d.ts.map +1 -0
  106. package/dist/types/src/mssql/query-ms.d.ts +3 -0
  107. package/dist/types/src/mssql/query-ms.d.ts.map +1 -0
  108. package/dist/types/{sql.d.ts → src/mssql/sql.d.ts} +17 -16
  109. package/dist/types/src/mssql/sql.d.ts.map +1 -0
  110. package/dist/types/src/mssql/utils.d.ts.map +1 -0
  111. package/dist/types/src/pg/get-merge-sql.d.ts +9 -0
  112. package/dist/types/src/pg/get-merge-sql.d.ts.map +1 -0
  113. package/dist/types/src/pg/get-update-sql.d.ts +3 -0
  114. package/dist/types/src/pg/get-update-sql.d.ts.map +1 -0
  115. package/dist/types/src/pg/insert.d.ts +15 -0
  116. package/dist/types/src/pg/insert.d.ts.map +1 -0
  117. package/dist/types/src/pg/is-table-or-view-exists.d.ts +2 -0
  118. package/dist/types/src/pg/is-table-or-view-exists.d.ts.map +1 -0
  119. package/dist/types/src/pg/pg-pool.d.ts +6 -0
  120. package/dist/types/src/pg/pg-pool.d.ts.map +1 -0
  121. package/dist/types/src/pg/prepare-value.d.ts +7 -0
  122. package/dist/types/src/pg/prepare-value.d.ts.map +1 -0
  123. package/dist/types/src/pg/query-pg.d.ts +3 -0
  124. package/dist/types/src/pg/query-pg.d.ts.map +1 -0
  125. package/dist/types/src/pg/table-schema.d.ts +12 -0
  126. package/dist/types/src/pg/table-schema.d.ts.map +1 -0
  127. package/package.json +21 -24
  128. package/src/@types/i-common.ts +39 -0
  129. package/src/@types/i-config.ts +75 -0
  130. package/src/{interfaces.ts → @types/i-ms.ts} +29 -86
  131. package/src/@types/i-pg.ts +67 -0
  132. package/src/common.ts +26 -0
  133. package/src/index.ts +104 -42
  134. package/src/logger-error.ts +11 -0
  135. package/src/{get-value-for-sql.ts → mssql/get-value-for-sql.ts} +15 -9
  136. package/src/{db.ts → mssql/pool-ms.ts} +40 -71
  137. package/src/mssql/query-ms.ts +25 -0
  138. package/src/{sql.ts → mssql/sql.ts} +56 -59
  139. package/src/pg/get-merge-sql.ts +60 -0
  140. package/src/pg/get-update-sql.ts +31 -0
  141. package/src/pg/insert.ts +118 -0
  142. package/src/pg/is-table-or-view-exists.ts +21 -0
  143. package/src/pg/pg-pool.ts +49 -0
  144. package/src/pg/prepare-value.ts +90 -0
  145. package/src/pg/query-pg.ts +26 -0
  146. package/src/pg/table-schema.ts +178 -0
  147. package/dist/cjs/db.js.map +0 -1
  148. package/dist/cjs/get-value-for-sql.js.map +0 -1
  149. package/dist/cjs/index.js +0 -21
  150. package/dist/cjs/index.js.map +0 -1
  151. package/dist/cjs/interfaces.js.map +0 -1
  152. package/dist/cjs/sql.js.map +0 -1
  153. package/dist/cjs/utils.js.map +0 -1
  154. package/dist/esm/db.js.map +0 -1
  155. package/dist/esm/get-value-for-sql.js.map +0 -1
  156. package/dist/esm/index.js +0 -4
  157. package/dist/esm/index.js.map +0 -1
  158. package/dist/esm/interfaces.js +0 -2
  159. package/dist/esm/interfaces.js.map +0 -1
  160. package/dist/esm/sql.js.map +0 -1
  161. package/dist/esm/utils.js.map +0 -1
  162. package/dist/types/db.d.ts.map +0 -1
  163. package/dist/types/get-value-for-sql.d.ts +0 -7
  164. package/dist/types/get-value-for-sql.d.ts.map +0 -1
  165. package/dist/types/index.d.ts +0 -5
  166. package/dist/types/index.d.ts.map +0 -1
  167. package/dist/types/interfaces.d.ts.map +0 -1
  168. package/dist/types/sql.d.ts.map +0 -1
  169. package/dist/types/utils.d.ts.map +0 -1
  170. /package/dist/cjs/{utils.js → src/mssql/utils.js} +0 -0
  171. /package/dist/esm/{utils.js → src/mssql/utils.js} +0 -0
  172. /package/dist/types/{utils.d.ts → src/mssql/utils.d.ts} +0 -0
  173. /package/src/{utils.ts → mssql/utils.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert.js","sourceRoot":"","sources":["../../../../src/pg/insert.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ // noinspection SqlResolve
2
+ import { queryPg } from './query-pg';
3
+ const tableOrViewExistenceCache = new Set();
4
+ export const isTableOrViewExistsPg = async (connectionId, schemaOrFullName, tableOrViewNAme) => {
5
+ var _a, _b;
6
+ const entityName = tableOrViewNAme ? `${schemaOrFullName}.${tableOrViewNAme}` : schemaOrFullName;
7
+ if (tableOrViewExistenceCache.has(entityName)) {
8
+ return true;
9
+ }
10
+ const result = await queryPg(connectionId, `SELECT to_regclass('${entityName}') as is_exists`);
11
+ if ((_b = (_a = result === null || result === void 0 ? void 0 : result.rows) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.is_exists) {
12
+ tableOrViewExistenceCache.add(entityName);
13
+ return true;
14
+ }
15
+ return false;
16
+ };
17
+ //# sourceMappingURL=is-table-or-view-exists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-table-or-view-exists.js","sourceRoot":"","sources":["../../../../src/pg/is-table-or-view-exists.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAAE,CAAC;AAE5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,YAAoB,EACpB,gBAAwB,EACxB,eAAwB,EACN,EAAE;;IACpB,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,gBAAgB,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACjG,IAAI,yBAAyB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;QAC7C,OAAO,IAAI,CAAC;KACb;IACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,uBAAuB,UAAU,iBAAiB,CAAC,CAAC;IAC/F,IAAI,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,0CAAG,CAAC,CAAC,0CAAE,SAAS,EAAE;QAChC,yBAAyB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -0,0 +1,43 @@
1
+ import config from 'config';
2
+ import { Pool } from 'pg';
3
+ import { echo } from 'af-echo-ts';
4
+ import { logger } from '../logger-error';
5
+ const pgConfigs = config.get('db.postgres');
6
+ export const poolsCachePg = {};
7
+ export const getPoolPg = async (connectionId) => {
8
+ if (!poolsCachePg[connectionId]) {
9
+ const poolConfig = { ...pgConfigs.options, ...pgConfigs.dbs[connectionId] };
10
+ const pool = new Pool(poolConfig);
11
+ poolsCachePg[connectionId] = pool;
12
+ pool.on('error', (err, client) => {
13
+ client.release(true);
14
+ logger.error(err);
15
+ });
16
+ pool.on('connect', (client) => {
17
+ const { database, processID } = client;
18
+ echo.debug(`PG client [${connectionId}] connected! DB: "${database}" / processID: ${processID}`);
19
+ });
20
+ pool.on('remove', (client) => {
21
+ const { database, processID } = client;
22
+ echo.debug(`PG client [${connectionId}] removed. DB: "${database}" / processID: ${processID}`);
23
+ });
24
+ await pool.connect();
25
+ }
26
+ return poolsCachePg[connectionId];
27
+ };
28
+ export const closePoolPg = async (connectionId) => {
29
+ if (!connectionId) {
30
+ return false;
31
+ }
32
+ const pool = poolsCachePg[connectionId];
33
+ if (!pool) {
34
+ return true;
35
+ }
36
+ const fns = (pool._clients || [])
37
+ .filter((client) => (client === null || client === void 0 ? void 0 : client._connected) && typeof (client === null || client === void 0 ? void 0 : client.end) === 'function')
38
+ .map((client) => client.end());
39
+ await Promise.all(fns);
40
+ return true;
41
+ };
42
+ export const closeAllPgConnectionsPg = async () => Promise.all(Object.keys(poolsCachePg).map((connectionId) => closePoolPg(connectionId)));
43
+ //# sourceMappingURL=pg-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg-pool.js","sourceRoot":"","sources":["../../../../src/pg/pg-pool.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,IAAI,EAA0B,MAAM,IAAI,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAIzC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAyC,aAAa,CAAC,CAAC;AAEpF,MAAM,CAAC,MAAM,YAAY,GAAuB,EAAE,CAAC;AAEnD,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,YAAoB,EAAoB,EAAE;IACxE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE;QAC/B,MAAM,UAAU,GAAe,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACxF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAY,CAAC;QAC7C,YAAY,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,MAAkB,EAAE,EAAE;YAClD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,MAAkB,EAAE,EAAE;YACxC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAkC,CAAC;YACnE,IAAI,CAAC,KAAK,CAAC,cAAc,YAAY,qBAAqB,QAAQ,kBAAkB,SAAS,EAAE,CAAC,CAAC;QACnG,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAkB,EAAE,EAAE;YACvC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAkC,CAAC;YACnE,IAAI,CAAC,KAAK,CAAC,cAAc,YAAY,mBAAmB,QAAQ,kBAAkB,SAAS,EAAE,CAAC,CAAC;QACjG,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;KACtB;IACD,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,YAAoB,EAAoB,EAAE;IAC1E,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,KAAK,CAAC;KACd;IACD,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,IAAI,CAAC;KACb;IACD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;SAC9B,MAAM,CAAC,CAAC,MAAqB,EAAE,EAAE,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,KAAI,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,CAAA,KAAK,UAAU,CAAC;SAC1F,GAAG,CAAC,CAAC,MAAqB,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,79 @@
1
+ // noinspection SqlResolve
2
+ import { DateTime } from 'luxon';
3
+ import { EDataTypePg } from '../@types/i-pg';
4
+ const NULL = 'null';
5
+ const utc$ = (millis) => DateTime.fromMillis(millis == null ? Date.now() : millis).setZone('UTC');
6
+ export const prepareSqlStringPg = (s) => {
7
+ s = String(s);
8
+ if (/['\\]|\${2,}/.test(s)) {
9
+ return `$s$${s}$s$`;
10
+ }
11
+ return `'${s}'`;
12
+ };
13
+ export const prepareSqlValuePg = (arg) => {
14
+ const { value, fieldDef } = arg;
15
+ if (value == null && fieldDef.isNullable) {
16
+ return NULL;
17
+ }
18
+ switch (fieldDef.dataType) {
19
+ case EDataTypePg.boolean: {
20
+ return value ? 'true' : 'false';
21
+ }
22
+ case EDataTypePg.bigint: {
23
+ return `'${value}'`;
24
+ }
25
+ case EDataTypePg.numeric:
26
+ case EDataTypePg.real: {
27
+ const v = Number(value);
28
+ return Number.isNaN(v) ? NULL : v;
29
+ }
30
+ case EDataTypePg.integer:
31
+ case EDataTypePg.smallint: {
32
+ const v = Number(value);
33
+ return Number.isNaN(v) ? NULL : Math.floor(v);
34
+ }
35
+ case EDataTypePg.text:
36
+ case EDataTypePg.character:
37
+ case EDataTypePg.varchar:
38
+ case EDataTypePg.uuid: {
39
+ return prepareSqlStringPg(value);
40
+ }
41
+ case EDataTypePg.json:
42
+ case EDataTypePg.jsonb: {
43
+ return prepareSqlStringPg(JSON.stringify(value));
44
+ }
45
+ case EDataTypePg.date:
46
+ case EDataTypePg.timestamp:
47
+ case EDataTypePg.timestamptz: {
48
+ let v = value;
49
+ if (value instanceof Date) {
50
+ v = +value;
51
+ }
52
+ else if (value instanceof DateTime) {
53
+ v = value.toMillis();
54
+ }
55
+ else if (typeof value === 'string') {
56
+ v = DateTime.fromISO(value).toMillis();
57
+ }
58
+ switch (fieldDef.dataType) {
59
+ case EDataTypePg.date: {
60
+ return `'${typeof v === 'number' ? utc$(v).toISODate() : v}'::date`;
61
+ }
62
+ case EDataTypePg.timestamp:
63
+ case EDataTypePg.timestamptz: {
64
+ return `'${typeof v === 'number' ? utc$(v).toISO() : v}'::timestamptz`;
65
+ }
66
+ default:
67
+ return `'${v}'`;
68
+ }
69
+ }
70
+ case EDataTypePg.USER_DEFINED:
71
+ return prepareSqlStringPg(value);
72
+ case EDataTypePg.ARRAY: {
73
+ return prepareSqlStringPg(JSON.stringify(value));
74
+ }
75
+ default:
76
+ return prepareSqlStringPg(value);
77
+ }
78
+ };
79
+ //# sourceMappingURL=prepare-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepare-value.js","sourceRoot":"","sources":["../../../../src/pg/prepare-value.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { getPoolPg } from './pg-pool';
2
+ import { logSqlError } from '../common';
3
+ export const queryPg = async (connectionId, sqlText, sqlValues, throwError, prefix) => {
4
+ const pool = await getPoolPg(connectionId);
5
+ let res;
6
+ try {
7
+ if (Array.isArray(sqlValues)) {
8
+ res = await pool.query(sqlText, sqlValues);
9
+ }
10
+ else {
11
+ res = await pool.query(sqlText);
12
+ }
13
+ return res;
14
+ }
15
+ catch (err) {
16
+ logSqlError(err, !throwError, sqlText, prefix);
17
+ }
18
+ };
19
+ //# sourceMappingURL=query-pg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-pg.js","sourceRoot":"","sources":["../../../../src/pg/query-pg.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAC1B,YAAoB,EACpB,OAAe,EACf,SAAiB,EACjB,UAAoB,EACpB,MAAe,EAEqB,EAAE;IACtC,MAAM,IAAI,GAAY,MAAM,SAAS,CAAC,YAAY,CAAC,CAAC;IACpD,IAAI,GAAgB,CAAC;IACrB,IAAI;QACF,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC5B,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;SAC5C;aAAM;YACL,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SACjC;QACD,OAAO,GAAG,CAAC;KACZ;IAAC,OAAO,GAAG,EAAE;QACZ,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;KAChD;AACH,CAAC,CAAC"}
@@ -0,0 +1,164 @@
1
+ import { queryPg } from './query-pg';
2
+ import { logger } from '../logger-error';
3
+ import { graceExit } from '../common';
4
+ import { EDataTypePg } from '../@types/i-pg';
5
+ const tableSchemaHash = {};
6
+ const getRecordSchemaMs = async (connectionId, schemaAndTable) => {
7
+ const [schema, table] = schemaAndTable.split('.');
8
+ const sql = `SELECT column_name,
9
+ column_default,
10
+ is_nullable,
11
+ data_type,
12
+ character_maximum_length,
13
+ numeric_precision,
14
+ numeric_precision_radix,
15
+ datetime_precision,
16
+ udt_name,
17
+ is_generated
18
+ FROM information_schema.columns
19
+ WHERE table_name = '${table}'
20
+ AND table_schema = '${schema}';`;
21
+ const result = await queryPg(connectionId, sql);
22
+ const fields = (result === null || result === void 0 ? void 0 : result.rows) || [];
23
+ const recordSchema = {};
24
+ fields.forEach((fieldDef) => {
25
+ const fieldSchema = {
26
+ name: fieldDef.column_name,
27
+ isNullable: /yes/i.test(fieldDef.is_nullable || ''),
28
+ columnDefault: fieldDef.column_default,
29
+ hasDefault: !!fieldDef.column_default,
30
+ dataType: fieldDef.data_type,
31
+ maxLen: fieldDef.character_maximum_length,
32
+ precision: fieldDef.numeric_precision,
33
+ radix: fieldDef.numeric_precision_radix,
34
+ dtPrecision: fieldDef.datetime_precision,
35
+ udtName: fieldDef.udt_name,
36
+ };
37
+ if (fieldDef.is_generated === 'NEVER') {
38
+ Object.entries(fieldSchema).forEach(([prop, value]) => {
39
+ if (value == null) {
40
+ delete fieldSchema[prop];
41
+ }
42
+ });
43
+ recordSchema[fieldDef.column_name] = fieldSchema;
44
+ }
45
+ });
46
+ return recordSchema;
47
+ };
48
+ const getPrimaryKey = async (connectionId, schemaAndTable) => {
49
+ const result = await queryPg(connectionId, `SELECT a.attname as f
50
+ FROM pg_index i
51
+ JOIN pg_attribute a
52
+ ON a.attrelid = i.indrelid AND a.attnum = ANY (i.indkey)
53
+ WHERE i.indrelid = '${schemaAndTable}'::regclass
54
+ AND i.indisprimary;`);
55
+ return ((result === null || result === void 0 ? void 0 : result.rows) || []).map(({ f }) => f);
56
+ };
57
+ const getUniqueConstraints = async (connectionId, schemaAndTable) => {
58
+ var _a;
59
+ const [schema, table] = schemaAndTable.split('.');
60
+ const result = await queryPg(connectionId, `
61
+ SELECT UI.cn as cn, UI.cols as cols, CASE WHEN UC.cn IS NULL THEN 'UX' ELSE 'UC' END AS typ
62
+ FROM (SELECT c.relname as cn, array_to_json(array_agg(a.attname ORDER BY a.attname)) AS cols
63
+ FROM pg_index i
64
+ JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY (i.indkey)
65
+ JOIN pg_class AS c ON c.oid = i.indexrelid
66
+ WHERE i.indrelid = '${schemaAndTable}'::regclass
67
+ AND i.indisunique
68
+ AND NOT i.indisprimary
69
+ GROUP BY c.relname) AS UI
70
+ LEFT OUTER JOIN (SELECT ccu.constraint_name AS cn
71
+ FROM information_schema.table_constraints tc
72
+ JOIN information_schema.constraint_column_usage AS ccu USING (constraint_schema, constraint_name)
73
+ JOIN information_schema.columns AS c ON c.table_schema = tc.constraint_schema
74
+ AND tc.table_name = c.table_name AND ccu.column_name = c.column_name
75
+ WHERE tc.table_schema = '${schema}'
76
+ AND tc.table_name = '${table}'
77
+ AND constraint_type = 'UNIQUE'
78
+ GROUP BY ccu.constraint_name) AS UC ON UC.cn = UI.cn
79
+ ORDER BY CASE WHEN UC.cn IS NULL THEN 2 ELSE 1 END
80
+ `);
81
+ const uc = {};
82
+ (_a = result === null || result === void 0 ? void 0 : result.rows) === null || _a === void 0 ? void 0 : _a.forEach(({ cn, cols }) => {
83
+ uc[cn] = cols;
84
+ });
85
+ return uc;
86
+ };
87
+ const getSerials = async (connectionId, schemaAndTable) => {
88
+ var _a, _b;
89
+ const result = await queryPg(connectionId, `
90
+ WITH fq_objects AS (SELECT c.oid,
91
+ n.nspname || '.' || c.relname AS fqname,
92
+ c.relkind,
93
+ c.relname AS relation
94
+ FROM pg_class c
95
+ JOIN pg_namespace n ON n.oid = c.relnamespace),
96
+ sequences AS (SELECT oid, fqname FROM fq_objects WHERE relkind = 'S'),
97
+ tables AS (SELECT oid, fqname FROM fq_objects WHERE relkind = 'r')
98
+ SELECT t.fqname AS tbl, array_to_json(array_agg(a.attname ORDER BY a.attname)) AS cols
99
+ FROM pg_depend d
100
+ JOIN sequences s ON s.oid = d.objid
101
+ JOIN tables t ON t.oid = d.refobjid
102
+ JOIN pg_attribute a ON a.attrelid = d.refobjid and a.attnum = d.refobjsubid
103
+ WHERE d.deptype = 'a'
104
+ AND t.fqname = '${schemaAndTable}'
105
+ GROUP BY t.fqname
106
+ `);
107
+ return ((_b = (_a = result === null || result === void 0 ? void 0 : result.rows) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.cols) || [];
108
+ };
109
+ export const getTableSchemaPg = async (connectionId, schemaAndTable) => {
110
+ let tableSchema = tableSchemaHash[schemaAndTable];
111
+ if (tableSchema) {
112
+ return tableSchema;
113
+ }
114
+ try {
115
+ const recordSchema = await getRecordSchemaMs(connectionId, schemaAndTable);
116
+ const pk = await getPrimaryKey(connectionId, schemaAndTable);
117
+ const uc = await getUniqueConstraints(connectionId, schemaAndTable);
118
+ const serials = await getSerials(connectionId, schemaAndTable);
119
+ const defaults = {};
120
+ Object.values(recordSchema).forEach((fieldDef) => {
121
+ const { name: f, columnDefault, hasDefault } = fieldDef;
122
+ if (hasDefault && !serials.includes(f)) {
123
+ defaults[f] = `${columnDefault}`;
124
+ }
125
+ });
126
+ const fieldsList = Object.keys(recordSchema);
127
+ const fieldsWoSerials = fieldsList.filter((fieldName) => !serials.includes(fieldName));
128
+ tableSchema = {
129
+ recordSchema, pk, uc, defaults, serials, fieldsList, fieldsWoSerials,
130
+ };
131
+ tableSchemaHash[schemaAndTable] = tableSchema;
132
+ }
133
+ catch (err) {
134
+ logger.error(`Failed to get schema for table ${schemaAndTable}`);
135
+ logger.error(err);
136
+ await graceExit();
137
+ }
138
+ return tableSchema;
139
+ };
140
+ export const getFieldsAndValuesPg = (record, recordSchema) => {
141
+ const recordNormalized = {};
142
+ Object.entries(record).forEach(([f, v]) => {
143
+ const { dataType } = recordSchema[f] || {};
144
+ if (!dataType) {
145
+ return;
146
+ }
147
+ if ((dataType === EDataTypePg.jsonb || dataType === EDataTypePg.json) && Array.isArray(v)) {
148
+ recordNormalized[f] = JSON.stringify(v);
149
+ }
150
+ else {
151
+ recordNormalized[f] = v;
152
+ }
153
+ });
154
+ const fields = Object.keys(recordNormalized);
155
+ const fieldsList = fields.join(', ');
156
+ const values = Object.values(recordNormalized);
157
+ const positionsList = fields.map((__, i) => `$${++i}`).join(', ');
158
+ const setFields = fields.map((f, i) => `${f} = $${++i}`).join(', ');
159
+ const upsertFields = fields.map((f) => `${f} = EXCLUDED.${f}`).join(',\n');
160
+ return {
161
+ fields, fieldsList, values, positionsList, setFields, upsertFields,
162
+ };
163
+ };
164
+ //# sourceMappingURL=table-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-schema.js","sourceRoot":"","sources":["../../../../src/pg/table-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { DateTimeOptions } from 'luxon';
2
+ export type IDialect = 'mssql' | 'pg';
3
+ /**
4
+ * Имя поля БД
5
+ */
6
+ export type TFieldName = string;
7
+ /**
8
+ * Значение ключевого поля записи БД
9
+ */
10
+ export type TRecordKey = string | number;
11
+ /**
12
+ * Запись БД. Объект, проиндексированный именами полей. Значения - значения полей
13
+ */
14
+ export interface TDBRecord {
15
+ [fieldName: TFieldName]: any;
16
+ }
17
+ /**
18
+ * Массив записей БД
19
+ *
20
+ * _isPreparedForSQL - Признак того, что значения полей подготовлены для использования в строке SQL
21
+ */
22
+ export type TRecordSet = TDBRecord[] & {
23
+ _isPreparedForSQL?: boolean;
24
+ };
25
+ /**
26
+ * Пакет записей БД.
27
+ * Объект, проиндексированный алиасами. Каждый подобъект содержит TDBRecord.
28
+ */
29
+ export interface TRecordSetAssoc {
30
+ [recordKey: TRecordKey]: TDBRecord;
31
+ }
32
+ export interface IDateTimeOptionsEx extends DateTimeOptions {
33
+ correctionMillis?: number;
34
+ }
35
+ //# sourceMappingURL=i-common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i-common.d.ts","sourceRoot":"","sources":["../../../../src/@types/i-common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAExC,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC;AAEtC;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,CAAC,SAAS,EAAE,UAAU,GAAG,GAAG,CAAA;CAC7B;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,EAAE,GAAG;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAEtE;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,CAAC,SAAS,EAAE,UAAU,GAAG,SAAS,CAAA;CACnC;AAED,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B"}
@@ -0,0 +1,60 @@
1
+ export interface IDBConfigCommon {
2
+ dialect?: 'mssql' | 'pg';
3
+ port: string | number | null | undefined;
4
+ database: string;
5
+ user: string;
6
+ password: string;
7
+ }
8
+ export interface IDBConfigMs extends IDBConfigCommon {
9
+ server: string;
10
+ }
11
+ export interface IDBConfigPg extends IDBConfigCommon {
12
+ host: string;
13
+ port: number;
14
+ }
15
+ export interface IDbOptionsMs {
16
+ options: {
17
+ enableArithAbort: boolean;
18
+ };
19
+ pool: {
20
+ max: number;
21
+ min: number;
22
+ idleTimeoutMillis: number;
23
+ acquireTimeoutMillis?: number;
24
+ createTimeoutMillis?: number;
25
+ destroyTimeoutMillis?: number;
26
+ reapIntervalMillis?: number;
27
+ createRetryIntervalMillis?: number;
28
+ };
29
+ trustServerCertificate: boolean;
30
+ stream: boolean;
31
+ parseJSON: boolean;
32
+ requestTimeout: number;
33
+ connectionTimeout: number;
34
+ }
35
+ export interface IDbOptionsPg {
36
+ connectionTimeoutMillis: number;
37
+ idleTimeoutMillis: number;
38
+ max: 10;
39
+ statement_timeout: number;
40
+ query_timeout: number;
41
+ }
42
+ export interface IDbsMs {
43
+ [dbId: string]: IDBConfigMs;
44
+ }
45
+ export interface IDbsPg {
46
+ [dbId: string]: IDBConfigPg;
47
+ }
48
+ export interface IAFDatabasesConfig {
49
+ db: {
50
+ mssql: {
51
+ options: IDbOptionsMs;
52
+ dbs: IDbsMs;
53
+ };
54
+ postgres: {
55
+ options: IDbOptionsPg;
56
+ dbs: IDbsPg;
57
+ };
58
+ };
59
+ }
60
+ //# sourceMappingURL=i-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i-config.d.ts","sourceRoot":"","sources":["../../../../src/@types/i-config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAY,SAAQ,eAAe;IAClD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,eAAe;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE;QACP,gBAAgB,EAAE,OAAO,CAAA;KAC1B,CAAC;IACF,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,iBAAiB,EAAE,MAAM,CAAA;QACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,yBAAyB,CAAC,EAAE,MAAM,CAAC;KACpC,CAAC;IACF,sBAAsB,EAAE,OAAO,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,YAAY;IAK3B,uBAAuB,EAAE,MAAM,CAAC;IAIhC,iBAAiB,EAAE,MAAM,CAAC;IAG1B,GAAG,EAAE,EAAE,CAAC;IACR,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,MAAM;IACrB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;CAC7B;AAED,MAAM,WAAW,MAAM;IACrB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE;QACF,KAAK,EAAE;YACL,OAAO,EAAE,YAAY,CAAC;YACtB,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;QACF,QAAQ,EAAE;YACR,OAAO,EAAE,YAAY,CAAC;YACtB,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;KACH,CAAC;CACH"}