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.
- package/README.md +3 -3
- package/dist/cjs/__tests__/01_node_env.spec.js +7 -0
- package/dist/cjs/__tests__/01_node_env.spec.js.map +1 -0
- package/dist/cjs/__tests__/02_getValueForSqlMs.spec.js +50 -0
- package/dist/cjs/__tests__/02_getValueForSqlMs.spec.js.map +1 -0
- package/dist/cjs/__tests__/global-setup.js +7 -0
- package/dist/cjs/__tests__/global-setup.js.map +1 -0
- package/dist/cjs/__tests__/global-teardown.js +7 -0
- package/dist/cjs/__tests__/global-teardown.js.map +1 -0
- package/dist/cjs/{interfaces.js → src/@types/i-common.js} +1 -1
- package/dist/cjs/src/@types/i-common.js.map +1 -0
- package/dist/cjs/src/@types/i-config.js +3 -0
- package/dist/cjs/src/@types/i-config.js.map +1 -0
- package/dist/cjs/src/@types/i-ms.js +3 -0
- package/dist/cjs/src/@types/i-ms.js.map +1 -0
- package/dist/cjs/src/@types/i-pg.js +24 -0
- package/dist/cjs/src/@types/i-pg.js.map +1 -0
- package/dist/cjs/src/common.js +30 -0
- package/dist/cjs/src/common.js.map +1 -0
- package/dist/cjs/src/index.js +59 -0
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/src/logger-error.js +10 -0
- package/dist/cjs/src/logger-error.js.map +1 -0
- package/dist/cjs/{get-value-for-sql.js → src/mssql/get-value-for-sql.js} +12 -8
- package/dist/cjs/src/mssql/get-value-for-sql.js.map +1 -0
- package/dist/cjs/{db.js → src/mssql/pool-ms.js} +73 -77
- package/dist/cjs/src/mssql/pool-ms.js.map +1 -0
- package/dist/cjs/src/mssql/query-ms.js +47 -0
- package/dist/cjs/src/mssql/query-ms.js.map +1 -0
- package/dist/cjs/{sql.js → src/mssql/sql.js} +72 -49
- package/dist/cjs/src/mssql/sql.js.map +1 -0
- package/dist/cjs/src/mssql/utils.js.map +1 -0
- package/dist/cjs/src/pg/get-merge-sql.js +50 -0
- package/dist/cjs/src/pg/get-merge-sql.js.map +1 -0
- package/dist/cjs/src/pg/get-update-sql.js +29 -0
- package/dist/cjs/src/pg/get-update-sql.js.map +1 -0
- package/dist/cjs/src/pg/insert.js +93 -0
- package/dist/cjs/src/pg/insert.js.map +1 -0
- package/dist/cjs/src/pg/is-table-or-view-exists.js +21 -0
- package/dist/cjs/src/pg/is-table-or-view-exists.js.map +1 -0
- package/dist/cjs/src/pg/pg-pool.js +52 -0
- package/dist/cjs/src/pg/pg-pool.js.map +1 -0
- package/dist/cjs/src/pg/prepare-value.js +84 -0
- package/dist/cjs/src/pg/prepare-value.js.map +1 -0
- package/dist/cjs/src/pg/query-pg.js +23 -0
- package/dist/cjs/src/pg/query-pg.js.map +1 -0
- package/dist/cjs/src/pg/table-schema.js +169 -0
- package/dist/cjs/src/pg/table-schema.js.map +1 -0
- package/dist/esm/src/@types/i-common.js +2 -0
- package/dist/esm/src/@types/i-common.js.map +1 -0
- package/dist/esm/src/@types/i-config.js +2 -0
- package/dist/esm/src/@types/i-config.js.map +1 -0
- package/dist/esm/src/@types/i-ms.js +2 -0
- package/dist/esm/src/@types/i-ms.js.map +1 -0
- package/dist/esm/src/@types/i-pg.js +21 -0
- package/dist/esm/src/@types/i-pg.js.map +1 -0
- package/dist/esm/src/common.js +25 -0
- package/dist/esm/src/common.js.map +1 -0
- package/dist/esm/src/index.js +15 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/logger-error.js +6 -0
- package/dist/esm/src/logger-error.js.map +1 -0
- package/dist/esm/{get-value-for-sql.js → src/mssql/get-value-for-sql.js} +11 -7
- package/dist/esm/src/mssql/get-value-for-sql.js.map +1 -0
- package/dist/esm/{db.js → src/mssql/pool-ms.js} +35 -62
- package/dist/esm/src/mssql/pool-ms.js.map +1 -0
- package/dist/esm/src/mssql/query-ms.js +20 -0
- package/dist/esm/src/mssql/query-ms.js.map +1 -0
- package/dist/esm/{sql.js → src/mssql/sql.js} +36 -36
- package/dist/esm/src/mssql/sql.js.map +1 -0
- package/dist/esm/src/mssql/utils.js.map +1 -0
- package/dist/esm/src/pg/get-merge-sql.js +46 -0
- package/dist/esm/src/pg/get-merge-sql.js.map +1 -0
- package/dist/esm/src/pg/get-update-sql.js +25 -0
- package/dist/esm/src/pg/get-update-sql.js.map +1 -0
- package/dist/esm/src/pg/insert.js +89 -0
- package/dist/esm/src/pg/insert.js.map +1 -0
- package/dist/esm/src/pg/is-table-or-view-exists.js +17 -0
- package/dist/esm/src/pg/is-table-or-view-exists.js.map +1 -0
- package/dist/esm/src/pg/pg-pool.js +43 -0
- package/dist/esm/src/pg/pg-pool.js.map +1 -0
- package/dist/esm/src/pg/prepare-value.js +79 -0
- package/dist/esm/src/pg/prepare-value.js.map +1 -0
- package/dist/esm/src/pg/query-pg.js +19 -0
- package/dist/esm/src/pg/query-pg.js.map +1 -0
- package/dist/esm/src/pg/table-schema.js +164 -0
- package/dist/esm/src/pg/table-schema.js.map +1 -0
- package/dist/types/src/@types/i-common.d.ts +35 -0
- package/dist/types/src/@types/i-common.d.ts.map +1 -0
- package/dist/types/src/@types/i-config.d.ts +60 -0
- package/dist/types/src/@types/i-config.d.ts.map +1 -0
- package/dist/types/{interfaces.d.ts → src/@types/i-ms.d.ts} +30 -77
- package/dist/types/src/@types/i-ms.d.ts.map +1 -0
- package/dist/types/src/@types/i-pg.d.ts +62 -0
- package/dist/types/src/@types/i-pg.d.ts.map +1 -0
- package/dist/types/src/common.d.ts +6 -0
- package/dist/types/src/common.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +18 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/logger-error.d.ts +7 -0
- package/dist/types/src/logger-error.d.ts.map +1 -0
- package/dist/types/src/mssql/get-value-for-sql.d.ts +11 -0
- package/dist/types/src/mssql/get-value-for-sql.d.ts.map +1 -0
- package/dist/types/{db.d.ts → src/mssql/pool-ms.d.ts} +18 -15
- package/dist/types/src/mssql/pool-ms.d.ts.map +1 -0
- package/dist/types/src/mssql/query-ms.d.ts +3 -0
- package/dist/types/src/mssql/query-ms.d.ts.map +1 -0
- package/dist/types/{sql.d.ts → src/mssql/sql.d.ts} +17 -16
- package/dist/types/src/mssql/sql.d.ts.map +1 -0
- package/dist/types/src/mssql/utils.d.ts.map +1 -0
- package/dist/types/src/pg/get-merge-sql.d.ts +9 -0
- package/dist/types/src/pg/get-merge-sql.d.ts.map +1 -0
- package/dist/types/src/pg/get-update-sql.d.ts +3 -0
- package/dist/types/src/pg/get-update-sql.d.ts.map +1 -0
- package/dist/types/src/pg/insert.d.ts +15 -0
- package/dist/types/src/pg/insert.d.ts.map +1 -0
- package/dist/types/src/pg/is-table-or-view-exists.d.ts +2 -0
- package/dist/types/src/pg/is-table-or-view-exists.d.ts.map +1 -0
- package/dist/types/src/pg/pg-pool.d.ts +6 -0
- package/dist/types/src/pg/pg-pool.d.ts.map +1 -0
- package/dist/types/src/pg/prepare-value.d.ts +7 -0
- package/dist/types/src/pg/prepare-value.d.ts.map +1 -0
- package/dist/types/src/pg/query-pg.d.ts +3 -0
- package/dist/types/src/pg/query-pg.d.ts.map +1 -0
- package/dist/types/src/pg/table-schema.d.ts +12 -0
- package/dist/types/src/pg/table-schema.d.ts.map +1 -0
- package/package.json +21 -24
- package/src/@types/i-common.ts +39 -0
- package/src/@types/i-config.ts +75 -0
- package/src/{interfaces.ts → @types/i-ms.ts} +29 -86
- package/src/@types/i-pg.ts +67 -0
- package/src/common.ts +26 -0
- package/src/index.ts +104 -42
- package/src/logger-error.ts +11 -0
- package/src/{get-value-for-sql.ts → mssql/get-value-for-sql.ts} +15 -9
- package/src/{db.ts → mssql/pool-ms.ts} +40 -71
- package/src/mssql/query-ms.ts +25 -0
- package/src/{sql.ts → mssql/sql.ts} +56 -59
- package/src/pg/get-merge-sql.ts +60 -0
- package/src/pg/get-update-sql.ts +31 -0
- package/src/pg/insert.ts +118 -0
- package/src/pg/is-table-or-view-exists.ts +21 -0
- package/src/pg/pg-pool.ts +49 -0
- package/src/pg/prepare-value.ts +90 -0
- package/src/pg/query-pg.ts +26 -0
- package/src/pg/table-schema.ts +178 -0
- package/dist/cjs/db.js.map +0 -1
- package/dist/cjs/get-value-for-sql.js.map +0 -1
- package/dist/cjs/index.js +0 -21
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/interfaces.js.map +0 -1
- package/dist/cjs/sql.js.map +0 -1
- package/dist/cjs/utils.js.map +0 -1
- package/dist/esm/db.js.map +0 -1
- package/dist/esm/get-value-for-sql.js.map +0 -1
- package/dist/esm/index.js +0 -4
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/interfaces.js +0 -2
- package/dist/esm/interfaces.js.map +0 -1
- package/dist/esm/sql.js.map +0 -1
- package/dist/esm/utils.js.map +0 -1
- package/dist/types/db.d.ts.map +0 -1
- package/dist/types/get-value-for-sql.d.ts +0 -7
- package/dist/types/get-value-for-sql.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -5
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/interfaces.d.ts.map +0 -1
- package/dist/types/sql.d.ts.map +0 -1
- package/dist/types/utils.d.ts.map +0 -1
- /package/dist/cjs/{utils.js → src/mssql/utils.js} +0 -0
- /package/dist/esm/{utils.js → src/mssql/utils.js} +0 -0
- /package/dist/types/{utils.d.ts → src/mssql/utils.d.ts} +0 -0
- /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": "
|
|
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.
|
|
23
|
-
"af-tools-ts": "^1.0.
|
|
23
|
+
"af-echo-ts": "^1.0.12",
|
|
24
|
+
"af-tools-ts": "^1.0.63",
|
|
24
25
|
"config": "^3.3.9",
|
|
25
|
-
"
|
|
26
|
-
"luxon": "^3.4.2",
|
|
26
|
+
"luxon": "^3.4.3",
|
|
27
27
|
"memory-cache": "^0.2.0",
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"mssql": "^9.2.0"
|
|
28
|
+
"mssql": "^10.0.1",
|
|
29
|
+
"pg": "^8.11.3"
|
|
31
30
|
},
|
|
32
31
|
"devDependencies": {
|
|
33
|
-
"@
|
|
34
|
-
"@
|
|
35
|
-
"@types/
|
|
36
|
-
"@types/
|
|
37
|
-
"@types/
|
|
38
|
-
"@types/
|
|
39
|
-
"@types/
|
|
40
|
-
"@types/
|
|
41
|
-
"@types/
|
|
42
|
-
"
|
|
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.
|
|
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 {
|
|
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
|
|
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
|
|
30
|
+
export type TRecordSchemaMs = IFieldSchemaMs[] & { dateTimeOptions?: IDateTimeOptionsEx, dialect?: IDialect }
|
|
46
31
|
|
|
47
32
|
/**
|
|
48
33
|
* Метаинформацией о полях, проиндексированная именами полей. (sql.recordset.columns)
|
|
49
34
|
*/
|
|
50
|
-
export interface
|
|
51
|
-
[fieldName: TFieldName]:
|
|
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
|
|
62
|
-
[fieldName: TFieldName]:
|
|
46
|
+
export interface TFieldTypeCorrectionMs {
|
|
47
|
+
[fieldName: TFieldName]: IFieldSchemaMs
|
|
63
48
|
}
|
|
64
49
|
|
|
65
|
-
|
|
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
|
|
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
|
|
73
|
+
export interface TGetRecordSchemaOptionsMs {
|
|
113
74
|
// массив имен полей, которые нужно удалить из схемы (не уитывается, если asArray = false)
|
|
114
75
|
omitFields?: string[],
|
|
115
76
|
// массив имен полей, которые нужно оставить в схеме
|
|
116
77
|
pickFields?: string[],
|
|
117
78
|
// кол-во измененных записей
|
|
118
|
-
fieldTypeCorrection?:
|
|
119
|
-
mergeRules?:
|
|
79
|
+
fieldTypeCorrection?: TFieldTypeCorrectionMs,
|
|
80
|
+
mergeRules?: TMergeRulesMs,
|
|
120
81
|
noReturnMergeResult?: boolean,
|
|
121
82
|
dateTimeOptions?: IDateTimeOptionsEx,
|
|
122
83
|
}
|
|
123
84
|
|
|
124
|
-
export interface
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
137
|
+
export interface IGetValueForSqlArgsMs extends IValueForSQLPartialArgsMs {
|
|
195
138
|
value: any,
|
|
196
|
-
fieldSchema:
|
|
139
|
+
fieldSchema: IFieldSchemaMs | string,
|
|
197
140
|
}
|
|
198
141
|
|
|
199
|
-
export interface
|
|
142
|
+
export interface IPrepareRecordForSqlArgsMs extends IValueForSQLPartialArgsMs, IPrepareRecordParamsMs {
|
|
200
143
|
// объект описания структуры таблицы
|
|
201
|
-
recordSchema:
|
|
144
|
+
recordSchema: TRecordSchemaMs,
|
|
202
145
|
}
|
|
203
146
|
|
|
204
|
-
export interface
|
|
147
|
+
export interface IGetMergeSQLOptionsMs extends IValueForSQLPartialArgsMs, IPrepareRecordParamsMs {
|
|
205
148
|
isPrepareForSQL?: boolean,
|
|
206
149
|
}
|
|
207
150
|
|
|
208
|
-
export type
|
|
151
|
+
export type ISchemaArrayMs = ISchemaItemMs[] & { dateTimeOptions?: IDateTimeOptionsEx, dialect?: IDialect };
|
|
209
152
|
|
|
210
|
-
export interface
|
|
153
|
+
export interface TGetRecordSchemaResultMs {
|
|
211
154
|
|
|
212
155
|
connectionId: string,
|
|
213
|
-
dbConfig:
|
|
156
|
+
dbConfig: IDBConfigMs,
|
|
214
157
|
schemaAndTable: string,
|
|
215
158
|
dbSchemaAndTable: string,
|
|
216
159
|
columns: IColumnMetadata,
|
|
217
160
|
schemaAssoc: Partial<IColumnMetadata>,
|
|
218
|
-
schema:
|
|
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?:
|
|
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
|
|
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
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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';
|