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
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "af-db-ts",
3
- "version": "1.0.5",
3
+ "version": "2.0.2",
4
4
  "description": "A highly specialized function library",
5
- "main": "./dist/cjs/index.js",
6
- "module": "./dist/esm/index.js",
7
- "types": "./dist/types/index.d.ts",
5
+ "main": "./dist/cjs/src/index.js",
6
+ "module": "./dist/esm/src/index.js",
7
+ "types": "./dist/types/src/index.d.ts",
8
8
  "author": "Viacheslav Makarov <npmjs@bazilio.ru>",
9
9
  "license": "ISC",
10
10
  "scripts": {
@@ -18,32 +18,29 @@
18
18
  "cb": "npm run clean && npm run build"
19
19
  },
20
20
  "dependencies": {
21
+ "@types/pg": "^8.10.7",
21
22
  "af-color": "^0.0.8",
22
- "af-echo-ts": "^1.0.9",
23
- "af-tools-ts": "^1.0.53",
23
+ "af-echo-ts": "^1.0.12",
24
+ "af-tools-ts": "^1.0.63",
24
25
  "config": "^3.3.9",
25
- "lodash": "^4.17.21",
26
- "luxon": "^3.4.2",
26
+ "luxon": "^3.4.3",
27
27
  "memory-cache": "^0.2.0",
28
- "moment": "^2.29.4",
29
- "moment-timezone": "^0.5.43",
30
- "mssql": "^9.2.0"
28
+ "mssql": "^10.0.1",
29
+ "pg": "^8.11.3"
31
30
  },
32
31
  "devDependencies": {
33
- "@babel/register": "^7.22.15",
34
- "@jest/test-sequencer": "^29.6.4",
35
- "@types/config": "^3.3.0",
36
- "@types/jest": "^29.5.4",
37
- "@types/lodash": "^4.14.197",
38
- "@types/luxon": "^3.3.2",
39
- "@types/memory-cache": "^0.2.3",
40
- "@types/mssql": "^8.1.2",
41
- "@types/node": "^20.5.9",
42
- "@types/supertest": "^2.0.12",
43
- "chai": "^4.3.8",
32
+ "@jest/test-sequencer": "^29.7.0",
33
+ "@types/config": "^3.3.2",
34
+ "@types/jest": "^29.5.6",
35
+ "@types/lodash": "^4.14.200",
36
+ "@types/luxon": "^3.3.3",
37
+ "@types/memory-cache": "^0.2.4",
38
+ "@types/mssql": "^9.1.2",
39
+ "@types/node": "^20.8.9",
40
+ "@types/supertest": "^2.0.15",
41
+ "chai": "^4.3.10",
44
42
  "eslint-config-af-22": "^1.0.13",
45
- "jest": "^29.6.4",
46
- "mocha": "^10.2.0",
43
+ "jest": "^29.7.0",
47
44
  "shx": "^0.3.4",
48
45
  "supertest": "^6.3.3",
49
46
  "ts-jest": "^29.1.1",
@@ -0,0 +1,39 @@
1
+ import { DateTimeOptions } from 'luxon';
2
+
3
+ export type IDialect = 'mssql' | 'pg';
4
+
5
+ /**
6
+ * Имя поля БД
7
+ */
8
+ export type TFieldName = string;
9
+
10
+ /**
11
+ * Значение ключевого поля записи БД
12
+ */
13
+ export type TRecordKey = string | number;
14
+
15
+ /**
16
+ * Запись БД. Объект, проиндексированный именами полей. Значения - значения полей
17
+ */
18
+ export interface TDBRecord {
19
+ [fieldName: TFieldName]: any
20
+ }
21
+
22
+ /**
23
+ * Массив записей БД
24
+ *
25
+ * _isPreparedForSQL - Признак того, что значения полей подготовлены для использования в строке SQL
26
+ */
27
+ export type TRecordSet = TDBRecord[] & { _isPreparedForSQL?: boolean }
28
+
29
+ /**
30
+ * Пакет записей БД.
31
+ * Объект, проиндексированный алиасами. Каждый подобъект содержит TDBRecord.
32
+ */
33
+ export interface TRecordSetAssoc {
34
+ [recordKey: TRecordKey]: TDBRecord
35
+ }
36
+
37
+ export interface IDateTimeOptionsEx extends DateTimeOptions {
38
+ correctionMillis?: number,
39
+ }
@@ -0,0 +1,75 @@
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
+
9
+ export interface IDBConfigMs extends IDBConfigCommon {
10
+ server: string,
11
+ }
12
+
13
+ export interface IDBConfigPg extends IDBConfigCommon {
14
+ host: string,
15
+ port: number,
16
+ }
17
+
18
+ export interface IDbOptionsMs {
19
+ options: {
20
+ enableArithAbort: boolean
21
+ },
22
+ pool: {
23
+ max: number,
24
+ min: number,
25
+ idleTimeoutMillis: number
26
+ acquireTimeoutMillis?: number,
27
+ createTimeoutMillis?: number,
28
+ destroyTimeoutMillis?: number,
29
+ reapIntervalMillis?: number,
30
+ createRetryIntervalMillis?: number,
31
+ },
32
+ trustServerCertificate: boolean,
33
+ stream: boolean,
34
+ parseJSON: boolean,
35
+ requestTimeout: number
36
+ connectionTimeout: number
37
+ }
38
+
39
+ export interface IDbOptionsPg {
40
+ // all valid client config options are also valid here
41
+ // in addition here are the pool specific configuration parameters:
42
+ // number of milliseconds to wait before timing out when connecting a new client
43
+ // by default this is 0 which means no timeout
44
+ connectionTimeoutMillis: number,
45
+ // number of milliseconds a client must sit idle in the pool and not be checked out
46
+ // before it is disconnected from the backend and discarded
47
+ // default is 10000 (10 seconds) - set to 0 to disable auto-disconnection of idle clients
48
+ idleTimeoutMillis: number, // 3 h
49
+ // maximum number of clients the pool should contain
50
+ // by default this is set to 10.
51
+ max: 10,
52
+ statement_timeout: number, // number of milliseconds before a statement in query will time out, default is no timeout
53
+ query_timeout: number, // number of milliseconds before a query call will timeout, default is no timeout
54
+ }
55
+
56
+ export interface IDbsMs {
57
+ [dbId: string]: IDBConfigMs,
58
+ }
59
+
60
+ export interface IDbsPg {
61
+ [dbId: string]: IDBConfigPg,
62
+ }
63
+
64
+ export interface IAFDatabasesConfig {
65
+ db: {
66
+ mssql: {
67
+ options: IDbOptionsMs,
68
+ dbs: IDbsMs,
69
+ },
70
+ postgres: {
71
+ options: IDbOptionsPg,
72
+ dbs: IDbsPg,
73
+ },
74
+ },
75
+ }
@@ -1,22 +1,11 @@
1
1
  import { ConnectionPool, IColumnMetadata, ISqlType } from 'mssql';
2
- import { DateTimeOptions } from 'luxon';
3
-
4
- export type IDialect = 'mssql' | 'pg';
5
-
6
- /**
7
- * Имя поля БД
8
- */
9
- export type TFieldName = string;
10
-
11
- /**
12
- * Значение ключевого поля записи БД
13
- */
14
- export type TRecordKey = string | number;
2
+ import { IDateTimeOptionsEx, IDialect, TFieldName, TRecordSet } from './i-common';
3
+ import { IDBConfigMs } from './i-config';
15
4
 
16
5
  /**
17
6
  * Метаинформация о поле БД
18
7
  */
19
- export interface IFieldSchema {
8
+ export interface IFieldSchemaMs {
20
9
  index?: number,
21
10
  name?: string,
22
11
  length?: number,
@@ -35,20 +24,16 @@ export interface IFieldSchema {
35
24
  escapeOnlySingleQuotes?: boolean,
36
25
  }
37
26
 
38
- export interface IDateTimeOptionsEx extends DateTimeOptions {
39
- correctionMillis?: number,
40
- }
41
-
42
27
  /**
43
28
  * Массив объектов с метаинформацией о полях
44
29
  */
45
- export type TRecordSchema = IFieldSchema[] & { dateTimeOptions?: IDateTimeOptionsEx, dialect?: IDialect }
30
+ export type TRecordSchemaMs = IFieldSchemaMs[] & { dateTimeOptions?: IDateTimeOptionsEx, dialect?: IDialect }
46
31
 
47
32
  /**
48
33
  * Метаинформацией о полях, проиндексированная именами полей. (sql.recordset.columns)
49
34
  */
50
- export interface TRecordSchemaAssoc {
51
- [fieldName: TFieldName]: IFieldSchema
35
+ export interface TRecordSchemaAssocMs {
36
+ [fieldName: TFieldName]: IFieldSchemaMs
52
37
  }
53
38
 
54
39
  /**
@@ -58,35 +43,11 @@ export interface TRecordSchemaAssoc {
58
43
  * тогда необходимо явно задать тип поля "json". Если имя поля заканчивается на _json, коррекция типа произойдет автоматически.
59
44
  * Также используется для указания входного формата для преобразования строки в тип datetime (свойство inputDateFormat в схеме поля)
60
45
  */
61
- export interface TFieldTypeCorrection {
62
- [fieldName: TFieldName]: IFieldSchema
46
+ export interface TFieldTypeCorrectionMs {
47
+ [fieldName: TFieldName]: IFieldSchemaMs
63
48
  }
64
49
 
65
- // =============================== records =====================================
66
-
67
- /**
68
- * Запись БД. Объект, проиндексированный именами полей. Значения - значения полей
69
- */
70
- export interface TDBRecord {
71
- [fieldName: TFieldName]: any
72
- }
73
-
74
- /**
75
- * Массив записей БД
76
- *
77
- * _isPreparedForSQL - Признак того, что значения полей подготовлены для использования в строке SQL
78
- */
79
- export type TRecordSet = TDBRecord[] & { _isPreparedForSQL?: boolean }
80
-
81
- /**
82
- * Пакет записей БД.
83
- * Объект, проиндексированный алиасами. Каждый подобъект содержит TDBRecord.
84
- */
85
- export interface TRecordSetAssoc {
86
- [recordKey: TRecordKey]: TDBRecord
87
- }
88
-
89
- export interface TMergeResult {
50
+ export interface TMergeResultMs {
90
51
  // кол-во затронутых записей
91
52
  total: number,
92
53
  // кол-во добавленных записей
@@ -98,7 +59,7 @@ export interface TMergeResult {
98
59
  /**
99
60
  * Метаинформация для формирования инструкции SQL MERGE
100
61
  */
101
- export interface TMergeRules {
62
+ export interface TMergeRulesMs {
102
63
  // массив имен полей, идентифицирующих запись, используемый в выражении ON в MERGE
103
64
  mergeIdentity?: TFieldName[],
104
65
  // массив имен полей, исключаемых из списка при вставке в MERGE. Обычно это автоинкрементное поле.
@@ -109,19 +70,19 @@ export interface TMergeRules {
109
70
  withClause?: string,
110
71
  }
111
72
 
112
- export interface TGetRecordSchemaOptions {
73
+ export interface TGetRecordSchemaOptionsMs {
113
74
  // массив имен полей, которые нужно удалить из схемы (не уитывается, если asArray = false)
114
75
  omitFields?: string[],
115
76
  // массив имен полей, которые нужно оставить в схеме
116
77
  pickFields?: string[],
117
78
  // кол-во измененных записей
118
- fieldTypeCorrection?: TFieldTypeCorrection,
119
- mergeRules?: TMergeRules,
79
+ fieldTypeCorrection?: TFieldTypeCorrectionMs,
80
+ mergeRules?: TMergeRulesMs,
120
81
  noReturnMergeResult?: boolean,
121
82
  dateTimeOptions?: IDateTimeOptionsEx,
122
83
  }
123
84
 
124
- export interface TGetPoolConnectionOptions {
85
+ export interface TGetPoolConnectionOptionsMs {
125
86
  // Префикс в сообщении о закрытии пула (название синхронизации)
126
87
  prefix?: string,
127
88
  // Что делать при ошибке соединения:
@@ -132,25 +93,7 @@ export interface TGetPoolConnectionOptions {
132
93
  errorCode?: number
133
94
  }
134
95
 
135
- interface IDBConfigCommon {
136
- dialect: IDialect,
137
- port: string | number | null,
138
- database: string,
139
- user: string,
140
- password: string,
141
- }
142
-
143
- interface IDBConfigMSSQL extends IDBConfigCommon {
144
- server: string,
145
- }
146
-
147
- interface IDBConfigPG extends IDBConfigCommon {
148
- host: string,
149
- }
150
-
151
- export type IDBConfig = IDBConfigMSSQL | IDBConfigPG
152
-
153
- export interface ISchemaItem {
96
+ export interface ISchemaItemMs {
154
97
  index: number;
155
98
  name: string;
156
99
  length: number;
@@ -164,7 +107,7 @@ export interface ISchemaItem {
164
107
  readOnly: boolean;
165
108
  }
166
109
 
167
- export interface IPrepareSqlStringArgs {
110
+ export interface IPrepareSqlStringArgsMs {
168
111
  // Значение, которое нужно подготовить для передачи в SQL
169
112
  value: string | number | null,
170
113
  // Значение, которое будет подставлено, если передано null | undefined и nullable = false
@@ -177,45 +120,45 @@ export interface IPrepareSqlStringArgs {
177
120
  escapeOnlySingleQuotes?: boolean,
178
121
  }
179
122
 
180
- export interface IValueForSQLPartialArgs {
123
+ export interface IValueForSQLPartialArgsMs {
181
124
  dateTimeOptions?: IDateTimeOptionsEx,
182
125
  dialect?: IDialect
183
126
  escapeOnlySingleQuotes?: boolean,
184
127
  needValidate?: boolean, // Флаг необходимости валидации значения
185
128
  }
186
129
 
187
- export interface IPrepareRecordParams {
130
+ export interface IPrepareRecordParamsMs {
188
131
  // Если TRUE - в записи добавляются пропущенные поля со значениями NULL, '', ...
189
132
  addMissingFields?: boolean,
190
133
  // Для полей, не допускающих NULL будет добавлено наиболее подходящее значение
191
134
  addValues4NotNullableFields?: boolean,
192
135
  }
193
136
 
194
- export interface IGetValueForSQLArgs extends IValueForSQLPartialArgs {
137
+ export interface IGetValueForSqlArgsMs extends IValueForSQLPartialArgsMs {
195
138
  value: any,
196
- fieldSchema: IFieldSchema | string,
139
+ fieldSchema: IFieldSchemaMs | string,
197
140
  }
198
141
 
199
- export interface IPrepareArgs extends IValueForSQLPartialArgs, IPrepareRecordParams {
142
+ export interface IPrepareRecordForSqlArgsMs extends IValueForSQLPartialArgsMs, IPrepareRecordParamsMs {
200
143
  // объект описания структуры таблицы
201
- recordSchema: TRecordSchema,
144
+ recordSchema: TRecordSchemaMs,
202
145
  }
203
146
 
204
- export interface IGetMergeSQLOptions extends IValueForSQLPartialArgs, IPrepareRecordParams {
147
+ export interface IGetMergeSQLOptionsMs extends IValueForSQLPartialArgsMs, IPrepareRecordParamsMs {
205
148
  isPrepareForSQL?: boolean,
206
149
  }
207
150
 
208
- export type ISchemaArray = ISchemaItem[] & { dateTimeOptions?: IDateTimeOptionsEx, dialect?: IDialect };
151
+ export type ISchemaArrayMs = ISchemaItemMs[] & { dateTimeOptions?: IDateTimeOptionsEx, dialect?: IDialect };
209
152
 
210
- export interface TGetRecordSchemaResult {
153
+ export interface TGetRecordSchemaResultMs {
211
154
 
212
155
  connectionId: string,
213
- dbConfig: IDBConfig,
156
+ dbConfig: IDBConfigMs,
214
157
  schemaAndTable: string,
215
158
  dbSchemaAndTable: string,
216
159
  columns: IColumnMetadata,
217
160
  schemaAssoc: Partial<IColumnMetadata>,
218
- schema: ISchemaArray,
161
+ schema: ISchemaArrayMs,
219
162
  fields: string[],
220
163
  insertFields: string[],
221
164
  insertFieldsList: string,
@@ -223,13 +166,13 @@ export interface TGetRecordSchemaResult {
223
166
  updateFields: string[],
224
167
  mergeIdentity: string[],
225
168
 
226
- getMergeSQL: (_packet: TRecordSet, _prepareOptions?: IGetMergeSQLOptions) => string,
169
+ getMergeSQL: (_packet: TRecordSet, _prepareOptions?: IGetMergeSQLOptionsMs) => string,
227
170
 
228
171
  getInsertSQL: (_packet: TRecordSet, _addOutputInserted?: boolean) => string,
229
172
 
230
173
  getUpdateSQL: (_record: TRecordSet) => string,
231
174
  }
232
175
 
233
- export interface IConnectionPools {
176
+ export interface IConnectionPoolsMs {
234
177
  [poolId: string]: ConnectionPool
235
178
  }
@@ -0,0 +1,67 @@
1
+ import { Pool, PoolClient } from 'pg';
2
+
3
+ export enum EDataTypePg {
4
+ 'USER_DEFINED' = 'USER-DEFINED',
5
+ 'bigint' = 'bigint',
6
+ 'boolean' = 'boolean',
7
+ 'character' = 'character',
8
+ 'varchar' = 'character varying',
9
+ 'date' = 'date',
10
+ 'integer' = 'integer',
11
+ 'json' = 'json',
12
+ 'jsonb' = 'jsonb',
13
+ 'numeric' = 'numeric',
14
+ 'real' = 'real',
15
+ 'smallint' = 'smallint',
16
+ 'text' = 'text',
17
+ 'timestamptz' = 'timestamp with time zone',
18
+ 'timestamp' = 'timestamp without time zone',
19
+ 'uuid' = 'uuid',
20
+ 'ARRAY' = 'ARRAY',
21
+ }
22
+
23
+ export interface IFieldDefPg {
24
+ name: string,
25
+ isNullable: boolean,
26
+ columnDefault: string | number | boolean,
27
+ hasDefault: boolean,
28
+ dataType: EDataTypePg,
29
+ maxLen?: number,
30
+ precision?: number,
31
+ radix?: number,
32
+ dtPrecision?: number,
33
+ udtName?: string,
34
+ }
35
+
36
+ export interface TRecordSchemaPg {
37
+ [fieldName: string]: IFieldDefPg,
38
+ }
39
+
40
+ export interface TUniqueConstraintsPg {
41
+ [constraintName: string]: string[]
42
+ }
43
+
44
+ export interface ITableSchemaPg {
45
+ recordSchema: TRecordSchemaPg,
46
+ pk: string[],
47
+ uc: TUniqueConstraintsPg,
48
+ serials: string[],
49
+ defaults: { [fieldName: string]: string },
50
+ fieldsList: string[],
51
+ fieldsWoSerials: string[],
52
+ }
53
+
54
+ export interface IPoolClientPg extends PoolClient {
55
+ _connected: boolean,
56
+ processID: number,
57
+ database: string,
58
+ end: Function,
59
+ }
60
+
61
+ export interface IPoolPg extends Pool {
62
+ _clients: IPoolClientPg[]
63
+ }
64
+
65
+ export interface IConnectionPoolsPg {
66
+ [connectionId: string]: IPoolPg
67
+ }
package/src/common.ts ADDED
@@ -0,0 +1,26 @@
1
+ import { magenta } from 'af-color';
2
+ import { closeAllPgConnectionsPg } from './pg/pg-pool';
3
+ import { closeAllDbConnectionsMs } from './mssql/pool-ms';
4
+ import { logger } from './logger-error';
5
+
6
+ export const logSqlError = (err: Error | any, throwError?: boolean, textSQL?: string, prefix?: string) => {
7
+ if (prefix) {
8
+ logger.error(prefix);
9
+ }
10
+ if (textSQL) {
11
+ logger.error(`SQL Error:\n${magenta}${textSQL}`);
12
+ }
13
+ logger.error(err);
14
+ if (throwError) {
15
+ throw err;
16
+ }
17
+ };
18
+
19
+ /**
20
+ * Закрывает все соединения с БД и завершает работу скрипта
21
+ */
22
+ export const graceExit = async () => {
23
+ await closeAllPgConnectionsPg();
24
+ await closeAllDbConnectionsMs();
25
+ process.exit(0);
26
+ };
package/src/index.ts CHANGED
@@ -1,48 +1,110 @@
1
- export * as db from './db';
2
-
3
- export {
4
- prepareSqlString,
5
- correctRecordSchema,
6
- getRecordSchema,
7
- wrapTransaction,
8
- serialize,
9
- getRecordValuesForSQL,
10
- getSqlSetExpression,
11
- getSqlValuesExpression,
12
- prepareRecordForSQL,
13
- prepareDataForSQL,
14
- getRowsAffected,
15
- sql,
16
- } from './sql';
1
+ export {
2
+ TDBRecord,
3
+ TRecordSetAssoc,
4
+ IDialect,
5
+ TFieldName,
6
+ TRecordKey,
7
+ TRecordSet,
8
+ IDateTimeOptionsEx,
9
+ } from './@types/i-common';
17
10
 
18
11
  export {
12
+ IAFDatabasesConfig,
13
+ IDBConfigCommon,
14
+ IDBConfigMs,
15
+ IDBConfigPg,
16
+ IDbsMs,
17
+ IDbsPg,
18
+ IDbOptionsPg,
19
+ IDbOptionsMs,
20
+ } from './@types/i-config';
21
+
22
+ export {
23
+ IFieldSchemaMs,
24
+ IGetValueForSqlArgsMs,
25
+ IConnectionPoolsMs,
26
+ IPrepareSqlStringArgsMs,
27
+ TRecordSchemaAssocMs,
28
+ IGetMergeSQLOptionsMs,
29
+ IPrepareRecordForSqlArgsMs,
30
+ IPrepareRecordParamsMs,
31
+ ISchemaArrayMs,
32
+ IValueForSQLPartialArgsMs,
33
+ TFieldTypeCorrectionMs,
34
+ ISchemaItemMs,
35
+ TGetRecordSchemaOptionsMs,
36
+ TGetRecordSchemaResultMs,
37
+ TMergeResultMs,
38
+ TMergeRulesMs,
39
+ TRecordSchemaMs,
40
+ TGetPoolConnectionOptionsMs,
41
+ } from './@types/i-ms';
42
+
43
+ export {
44
+ IFieldDefPg,
45
+ TRecordSchemaPg,
46
+ ITableSchemaPg,
47
+ EDataTypePg,
48
+ TUniqueConstraintsPg,
49
+ IPoolPg,
50
+ IConnectionPoolsPg,
51
+ IPoolClientPg,
52
+ } from './@types/i-pg';
53
+
54
+ export {
55
+ getValueForSqlMs,
19
56
  binToHexString,
20
57
  getValueForSQL,
21
- } from './get-value-for-sql';
58
+ } from './mssql/get-value-for-sql';
22
59
 
23
60
  export {
24
- IDBConfig,
25
- IFieldSchema,
26
- IGetMergeSQLOptions,
27
- TDBRecord,
28
- TFieldName,
29
- TFieldTypeCorrection,
30
- TGetRecordSchemaOptions,
31
- TRecordSchema,
32
- TRecordSchemaAssoc,
33
- TRecordSet,
34
- TRecordSetAssoc,
35
- TMergeRules,
36
- TMergeResult,
37
- TRecordKey,
38
- TGetPoolConnectionOptions,
39
- TGetRecordSchemaResult,
40
- IPrepareSqlStringArgs,
41
- IGetValueForSQLArgs,
42
- IDialect,
43
- IDateTimeOptionsEx,
44
- IPrepareArgs,
45
- IPrepareRecordParams,
46
- ISchemaItem,
47
- IValueForSQLPartialArgs,
48
- } from './interfaces';
61
+ getPoolConnectionMs,
62
+ closeAllDbConnectionsMs,
63
+ closeDbConnectionsAndExitMs,
64
+ closeDbConnectionsMs,
65
+ getDbConfigMs,
66
+ getPoolMs,
67
+ poolsCacheMs,
68
+ closeAllDbConnections,
69
+ closeDbConnectionsAndExit,
70
+ } from './mssql/pool-ms';
71
+
72
+ export { queryMs } from './mssql/query-ms';
73
+
74
+ export {
75
+ prepareSqlStringMs,
76
+ correctRecordSchemaMs,
77
+ getRecordSchemaMs,
78
+ wrapTransactionMs,
79
+ serializeMs,
80
+ getRecordValuesForSqlMs,
81
+ getSqlSetExpressionMs,
82
+ getSqlValuesExpressionMs,
83
+ prepareRecordForSqlMs,
84
+ prepareDataForSqlMs,
85
+ getRowsAffectedMs,
86
+ sql,
87
+ } from './mssql/sql';
88
+
89
+ export { mssqlEscape } from './mssql/utils';
90
+
91
+ export { getMergeSqlPg } from './pg/get-merge-sql';
92
+
93
+ export { getUpdateSqlPg } from './pg/get-update-sql';
94
+
95
+ export { insertPg, EUpdateLevel } from './pg/insert';
96
+
97
+ export { isTableOrViewExistsPg } from './pg/is-table-or-view-exists';
98
+
99
+ export {
100
+ poolsCachePg,
101
+ getPoolPg,
102
+ closePoolPg,
103
+ closeAllPgConnectionsPg,
104
+ } from './pg/pg-pool';
105
+
106
+ export { prepareSqlStringPg, prepareSqlValuePg } from './pg/prepare-value';
107
+
108
+ export { queryPg } from './pg/query-pg';
109
+
110
+ export { getFieldsAndValuesPg, getTableSchemaPg } from './pg/table-schema';
@@ -0,0 +1,11 @@
1
+ import { echo } from 'af-echo-ts';
2
+
3
+ interface IAsLogger {
4
+ error: Function,
5
+ }
6
+
7
+ export const logger: IAsLogger = echo as IAsLogger;
8
+
9
+ export const setLogger = (logger_: any) => {
10
+ logger.error = logger_.error.bind(logger_);
11
+ };