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
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { magenta } from 'af-color';
|
|
1
|
+
import config from 'config';
|
|
3
2
|
import { echo } from 'af-echo-ts';
|
|
4
3
|
import * as sql from 'mssql';
|
|
5
|
-
import * as _ from 'lodash';
|
|
6
4
|
import { sleep } from 'af-tools-ts';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export const
|
|
5
|
+
import { logSqlError } from '../common';
|
|
6
|
+
const mssqlConfigs = config.get('db.postgres');
|
|
7
|
+
export const getDbConfigMs = (connectionId) => mssqlConfigs.dbs[connectionId];
|
|
8
|
+
export const poolsCacheMs = {};
|
|
10
9
|
/**
|
|
11
10
|
* Возвращает пул соединений для БД, соответствующей преданному ID соединения (borf|cep|hr|global)
|
|
12
11
|
* В случае, если не удается создать пул или открыть соединение, прерывает работу скрипта
|
|
13
12
|
*/
|
|
14
|
-
export const
|
|
13
|
+
export const getPoolConnectionMs = async (connectionId, options = {}) => {
|
|
15
14
|
const { prefix = '', errorCode = 0 } = options;
|
|
16
|
-
let pool =
|
|
15
|
+
let pool = poolsCacheMs[connectionId];
|
|
17
16
|
if (pool === null || pool === void 0 ? void 0 : pool.connected) {
|
|
18
17
|
return pool;
|
|
19
18
|
}
|
|
@@ -48,11 +47,11 @@ export const getPoolConnection = async (connectionId, options = {}) => {
|
|
|
48
47
|
if (typeof pool !== 'object') {
|
|
49
48
|
resume(`Can't create connection pool "${connectionId}"`);
|
|
50
49
|
}
|
|
51
|
-
|
|
50
|
+
poolsCacheMs[connectionId] = pool;
|
|
52
51
|
// @ts-ignore
|
|
53
52
|
pool._connectionId = connectionId;
|
|
54
53
|
pool.on('close', () => {
|
|
55
|
-
delete
|
|
54
|
+
delete poolsCacheMs[connectionId];
|
|
56
55
|
});
|
|
57
56
|
pool.on('error', (err) => {
|
|
58
57
|
echo.error('POOL-ERROR', err);
|
|
@@ -72,7 +71,7 @@ export const getPoolConnection = async (connectionId, options = {}) => {
|
|
|
72
71
|
* prefix - Префикс в сообщении о закрытии пула (название синхронизации)
|
|
73
72
|
* noEcho - подавление сообщений о закрытии соединения
|
|
74
73
|
*/
|
|
75
|
-
export const
|
|
74
|
+
export const closeDbConnectionsMs = async (poolsToClose, prefix, noEcho) => {
|
|
76
75
|
if (!Array.isArray(poolsToClose)) {
|
|
77
76
|
// @ts-ignore
|
|
78
77
|
poolsToClose = [poolsToClose];
|
|
@@ -84,14 +83,14 @@ export const closeDbConnections = async (poolsToClose, prefix, noEcho) => {
|
|
|
84
83
|
if (pool) {
|
|
85
84
|
if (typeof pool === 'string') {
|
|
86
85
|
connectionId = pool;
|
|
87
|
-
pool =
|
|
86
|
+
pool = poolsCacheMs[connectionId];
|
|
88
87
|
}
|
|
89
88
|
else if (typeof pool === 'object') {
|
|
90
89
|
// @ts-ignore
|
|
91
90
|
connectionId = pool._connectionId;
|
|
92
91
|
}
|
|
93
92
|
if (connectionId) {
|
|
94
|
-
delete
|
|
93
|
+
delete poolsCacheMs[connectionId];
|
|
95
94
|
}
|
|
96
95
|
if (pool && pool.close) {
|
|
97
96
|
try {
|
|
@@ -114,15 +113,29 @@ export const closeDbConnections = async (poolsToClose, prefix, noEcho) => {
|
|
|
114
113
|
}
|
|
115
114
|
}
|
|
116
115
|
};
|
|
116
|
+
/**
|
|
117
|
+
* @deprecated since version 2.0.0
|
|
118
|
+
*/
|
|
119
|
+
export const closeAllDbConnections = async (prefix, noEcho) => {
|
|
120
|
+
const poolsToClose = Object.values(poolsCacheMs);
|
|
121
|
+
await closeDbConnectionsMs(poolsToClose, prefix, noEcho);
|
|
122
|
+
};
|
|
117
123
|
/**
|
|
118
124
|
* Закрывает все соединения с БД
|
|
119
125
|
*
|
|
120
126
|
* prefix - Префикс в сообщении о закрытии пула (название синхронизации)
|
|
121
127
|
* noEcho - подавление сообщений о закрытии соединения
|
|
122
128
|
*/
|
|
123
|
-
export const
|
|
124
|
-
const poolsToClose =
|
|
125
|
-
await
|
|
129
|
+
export const closeAllDbConnectionsMs = async (prefix, noEcho) => {
|
|
130
|
+
const poolsToClose = Object.values(poolsCacheMs);
|
|
131
|
+
await closeDbConnectionsMs(poolsToClose, prefix, noEcho);
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* @deprecated since version 2.0.0
|
|
135
|
+
*/
|
|
136
|
+
export const closeDbConnectionsAndExit = async (poolsToClose, prefix) => {
|
|
137
|
+
await closeDbConnectionsMs(poolsToClose, prefix);
|
|
138
|
+
process.exit(0);
|
|
126
139
|
};
|
|
127
140
|
/**
|
|
128
141
|
* Закрывает указанные соединения с БД и прерывает работу скрипта
|
|
@@ -130,56 +143,16 @@ export const closeAllDbConnections = async (prefix, noEcho) => {
|
|
|
130
143
|
* poolsToClose - пул или массив пулов
|
|
131
144
|
* prefix - Префикс в сообщении о закрытии пула (название синхронизации)
|
|
132
145
|
*/
|
|
133
|
-
export const
|
|
134
|
-
await
|
|
146
|
+
export const closeDbConnectionsAndExitMs = async (poolsToClose, prefix) => {
|
|
147
|
+
await closeDbConnectionsMs(poolsToClose, prefix);
|
|
135
148
|
process.exit(0);
|
|
136
149
|
};
|
|
137
|
-
export const
|
|
138
|
-
const pool = await getPoolConnection(connectionId, { onError: 'throw' });
|
|
139
|
-
const request = new sql.Request(pool);
|
|
140
|
-
if (strSQL) {
|
|
141
|
-
return request.query(strSQL);
|
|
142
|
-
}
|
|
143
|
-
return request;
|
|
144
|
-
};
|
|
145
|
-
let logger = echo;
|
|
146
|
-
export const setLogger = (logger_) => {
|
|
147
|
-
logger = logger_;
|
|
148
|
-
};
|
|
149
|
-
export const logSqlError = (err, noThrow, textSQL, prefix) => {
|
|
150
|
-
if (prefix) {
|
|
151
|
-
logger.error(prefix);
|
|
152
|
-
}
|
|
153
|
-
if (textSQL) {
|
|
154
|
-
logger.error(`SQL Error:\n${magenta}${textSQL}`);
|
|
155
|
-
}
|
|
156
|
-
logger.error(err);
|
|
157
|
-
if (!noThrow) {
|
|
158
|
-
throw err;
|
|
159
|
-
}
|
|
160
|
-
};
|
|
161
|
-
export const getPool = async (dbId, noThrow = false) => {
|
|
162
|
-
try {
|
|
163
|
-
return getPoolConnection(dbId);
|
|
164
|
-
}
|
|
165
|
-
catch (err) {
|
|
166
|
-
logSqlError(err, noThrow, `Error while open connection to DB ${dbId}`);
|
|
167
|
-
}
|
|
168
|
-
};
|
|
169
|
-
export const query = async (dbId, textSQL, noThrow, prefix) => {
|
|
170
|
-
const pool = await getPool(dbId, noThrow);
|
|
171
|
-
if (!(pool === null || pool === void 0 ? void 0 : pool.connected) && !(pool === null || pool === void 0 ? void 0 : pool.connecting)) {
|
|
172
|
-
await closeDbConnections(dbId);
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
const request = new sql.Request(pool);
|
|
176
|
-
let res;
|
|
150
|
+
export const getPoolMs = async (connectionId, throwError) => {
|
|
177
151
|
try {
|
|
178
|
-
|
|
179
|
-
return res;
|
|
152
|
+
return getPoolConnectionMs(connectionId);
|
|
180
153
|
}
|
|
181
154
|
catch (err) {
|
|
182
|
-
logSqlError(err,
|
|
155
|
+
logSqlError(err, throwError, `Error while open connection to DB ${connectionId}`);
|
|
183
156
|
}
|
|
184
157
|
};
|
|
185
|
-
//# sourceMappingURL=
|
|
158
|
+
//# sourceMappingURL=pool-ms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool-ms.js","sourceRoot":"","sources":["../../../../src/mssql/pool-ms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as sql from 'mssql';
|
|
2
|
+
import { logSqlError } from '../common';
|
|
3
|
+
import { closeDbConnectionsMs, getPoolMs } from './pool-ms';
|
|
4
|
+
export const queryMs = async (connectionId, sqlText, throwError, prefix) => {
|
|
5
|
+
const pool = await getPoolMs(connectionId, throwError);
|
|
6
|
+
if (!(pool === null || pool === void 0 ? void 0 : pool.connected) && !(pool === null || pool === void 0 ? void 0 : pool.connecting)) {
|
|
7
|
+
await closeDbConnectionsMs(connectionId);
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const request = new sql.Request(pool);
|
|
11
|
+
let res;
|
|
12
|
+
try {
|
|
13
|
+
res = await request.query(sqlText);
|
|
14
|
+
return res;
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
logSqlError(err, !throwError, sqlText, prefix);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=query-ms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-ms.js","sourceRoot":"","sources":["../../../../src/mssql/query-ms.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE5D,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAC1B,YAAoB,EACpB,OAAe,EACf,UAAoB,EACpB,MAAe,EACoB,EAAE;IACrC,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACvD,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,CAAA,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAA,EAAE;QACzC,MAAM,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACzC,OAAO;KACR;IACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,GAAiB,CAAC;IACtB,IAAI;QACF,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,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"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
// noinspection SqlResolve
|
|
2
2
|
import * as sql from 'mssql';
|
|
3
|
-
import * as _ from 'lodash';
|
|
4
3
|
import { echo } from 'af-echo-ts';
|
|
5
4
|
import * as cache from 'memory-cache';
|
|
6
|
-
import
|
|
5
|
+
import { each, omit, pick } from 'af-tools-ts';
|
|
6
|
+
import * as db from './pool-ms';
|
|
7
7
|
import { q, mssqlEscape } from './utils';
|
|
8
|
-
import {
|
|
8
|
+
import { getValueForSqlMs } from './get-value-for-sql';
|
|
9
9
|
export { sql };
|
|
10
10
|
/**
|
|
11
11
|
* Подготовка строки для передачи в SQL
|
|
12
12
|
*/
|
|
13
|
-
export const
|
|
13
|
+
export const prepareSqlStringMs = (args) => {
|
|
14
14
|
const { value, defaultValue = null, length = 0, nullable = false, noQuotes = false, escapeOnlySingleQuotes = false } = args;
|
|
15
15
|
if (value == null) {
|
|
16
16
|
if (nullable) {
|
|
@@ -40,10 +40,10 @@ const FIELD_SCHEMA_PROPS = ['index', 'name', 'length', 'type', 'scale', 'precisi
|
|
|
40
40
|
* Поля с суффиксом _json получают тип "json". Остальные корректировки берутся из fieldTypeCorrection
|
|
41
41
|
* Например, для полей типа datetime можно передавать свойство inputDateFormat
|
|
42
42
|
*/
|
|
43
|
-
export const
|
|
43
|
+
export const correctRecordSchemaMs = (recordSchemaAssoc,
|
|
44
44
|
// объект корректировок
|
|
45
45
|
fieldTypeCorrection) => {
|
|
46
|
-
|
|
46
|
+
each(recordSchemaAssoc, (fieldSchema, fieldName) => {
|
|
47
47
|
if (/_json$/i.test(fieldName)) {
|
|
48
48
|
fieldSchema.type = 'json';
|
|
49
49
|
}
|
|
@@ -62,7 +62,7 @@ fieldTypeCorrection) => {
|
|
|
62
62
|
}
|
|
63
63
|
});
|
|
64
64
|
if (fieldTypeCorrection && typeof fieldTypeCorrection === 'object') {
|
|
65
|
-
|
|
65
|
+
each(fieldTypeCorrection, (correction, fieldName) => {
|
|
66
66
|
FIELD_SCHEMA_PROPS.forEach((prop) => {
|
|
67
67
|
if (correction[prop] !== undefined) {
|
|
68
68
|
if (!recordSchemaAssoc[fieldName]) {
|
|
@@ -77,9 +77,9 @@ fieldTypeCorrection) => {
|
|
|
77
77
|
/**
|
|
78
78
|
* Подготовка значений записи для использования в SQL
|
|
79
79
|
*
|
|
80
|
-
* Все поля записи обрабатываются функцией
|
|
80
|
+
* Все поля записи обрабатываются функцией getValueForSqlMs
|
|
81
81
|
*/
|
|
82
|
-
export const
|
|
82
|
+
export const prepareRecordForSqlMs = (record, args) => {
|
|
83
83
|
const { recordSchema, addValues4NotNullableFields, addMissingFields } = args;
|
|
84
84
|
const { dateTimeOptions, needValidate, escapeOnlySingleQuotes, dialect } = args;
|
|
85
85
|
const options = {
|
|
@@ -96,24 +96,24 @@ export const prepareRecordForSQL = (record, args) => {
|
|
|
96
96
|
return;
|
|
97
97
|
}
|
|
98
98
|
if (Object.prototype.hasOwnProperty.call(record, name)) {
|
|
99
|
-
record[name] =
|
|
99
|
+
record[name] = getValueForSqlMs({ ...options, value: record[name], fieldSchema });
|
|
100
100
|
}
|
|
101
101
|
else if ((!fieldSchema.nullable && addValues4NotNullableFields) || addMissingFields) {
|
|
102
|
-
record[name] =
|
|
102
|
+
record[name] = getValueForSqlMs({ ...options, value: null, fieldSchema });
|
|
103
103
|
}
|
|
104
104
|
});
|
|
105
105
|
};
|
|
106
106
|
/**
|
|
107
107
|
* Подготовка данных для SQL
|
|
108
108
|
*
|
|
109
|
-
* Все поля всех записей обрабатываются функцией
|
|
109
|
+
* Все поля всех записей обрабатываются функцией getValueForSqlMs
|
|
110
110
|
*/
|
|
111
|
-
export const
|
|
111
|
+
export const prepareDataForSqlMs = (recordSet, args) => {
|
|
112
112
|
if (recordSet._isPreparedForSQL) {
|
|
113
113
|
return;
|
|
114
114
|
}
|
|
115
115
|
recordSet.forEach((record) => {
|
|
116
|
-
|
|
116
|
+
prepareRecordForSqlMs(record, args);
|
|
117
117
|
});
|
|
118
118
|
recordSet._isPreparedForSQL = true;
|
|
119
119
|
};
|
|
@@ -121,7 +121,7 @@ export const prepareDataForSQL = (recordSet, args) => {
|
|
|
121
121
|
* Возвращает рекорд, в котором все значения преобразованы в строки и подготовлены для прямой вставки в SQL
|
|
122
122
|
* В частности, если значение типа строка, то оно уже заключено в одинарные кавычки
|
|
123
123
|
*/
|
|
124
|
-
export const
|
|
124
|
+
export const getRecordValuesForSqlMs = (record, recordSchema) => {
|
|
125
125
|
const recordValuesForSQL = {};
|
|
126
126
|
recordSchema.forEach((fieldSchema) => {
|
|
127
127
|
const { name = '_#foo#_', readOnly } = fieldSchema;
|
|
@@ -129,7 +129,7 @@ export const getRecordValuesForSQL = (record, recordSchema) => {
|
|
|
129
129
|
return;
|
|
130
130
|
}
|
|
131
131
|
if (Object.prototype.hasOwnProperty.call(record, name)) {
|
|
132
|
-
recordValuesForSQL[name] =
|
|
132
|
+
recordValuesForSQL[name] = getValueForSqlMs({
|
|
133
133
|
value: record[name],
|
|
134
134
|
fieldSchema,
|
|
135
135
|
escapeOnlySingleQuotes: true,
|
|
@@ -142,10 +142,10 @@ export const getRecordValuesForSQL = (record, recordSchema) => {
|
|
|
142
142
|
};
|
|
143
143
|
/**
|
|
144
144
|
* Возвращает схему полей таблицы БД. Либо в виде объекта, либо в виде массива
|
|
145
|
-
* Если asArray = true, то вернет
|
|
146
|
-
* Иначе вернет
|
|
145
|
+
* Если asArray = true, то вернет TRecordSchemaMs, при этом удалит поля, указанные в omitFields
|
|
146
|
+
* Иначе вернет TRecordSchemaAssocMs
|
|
147
147
|
*/
|
|
148
|
-
export const
|
|
148
|
+
export const getRecordSchemaMs = async (
|
|
149
149
|
// ID соединения (borf|cep|hr|global)
|
|
150
150
|
connectionId,
|
|
151
151
|
// Субъект в выражении FROM для таблицы, схему которой нужно вернуть
|
|
@@ -158,7 +158,7 @@ options = {}) => {
|
|
|
158
158
|
return result;
|
|
159
159
|
}
|
|
160
160
|
const { omitFields, pickFields, fieldTypeCorrection, mergeRules: { mergeIdentity = [], excludeFromInsert = [], noUpdateIfNull = false, correction: mergeCorrection, withClause, } = {}, noReturnMergeResult, dateTimeOptions, } = options;
|
|
161
|
-
const cPool = await db.
|
|
161
|
+
const cPool = await db.getPoolConnectionMs(connectionId, { prefix: 'getRecordSchemaMs' });
|
|
162
162
|
const request = new sql.Request(cPool);
|
|
163
163
|
request.stream = false;
|
|
164
164
|
let res;
|
|
@@ -167,17 +167,17 @@ options = {}) => {
|
|
|
167
167
|
FROM ${schemaAndTable}`);
|
|
168
168
|
}
|
|
169
169
|
catch (err) {
|
|
170
|
-
echo.error(`
|
|
170
|
+
echo.error(`getRecordSchemaMs SQL ERROR`);
|
|
171
171
|
echo.error(err);
|
|
172
172
|
throw err;
|
|
173
173
|
}
|
|
174
174
|
const { columns } = res.recordset;
|
|
175
175
|
const readOnlyFields = Object.entries(columns).filter(([, { readOnly: ro }]) => ro).map(([f]) => f);
|
|
176
176
|
const omitFields2 = [...readOnlyFields, ...(Array.isArray(omitFields) ? omitFields : [])];
|
|
177
|
-
let schemaAssoc =
|
|
178
|
-
schemaAssoc = Array.isArray(pickFields) ?
|
|
179
|
-
|
|
180
|
-
const schema =
|
|
177
|
+
let schemaAssoc = omit(columns, omitFields2);
|
|
178
|
+
schemaAssoc = Array.isArray(pickFields) ? pick(schemaAssoc, pickFields) : schemaAssoc;
|
|
179
|
+
correctRecordSchemaMs(schemaAssoc, fieldTypeCorrection);
|
|
180
|
+
const schema = Object.values(schemaAssoc)
|
|
181
181
|
.sort((a, b) => {
|
|
182
182
|
const ai = ((a === null || a === void 0 ? void 0 : a.index) || 0);
|
|
183
183
|
const bi = ((b === null || b === void 0 ? void 0 : b.index) || 0);
|
|
@@ -206,7 +206,7 @@ options = {}) => {
|
|
|
206
206
|
else {
|
|
207
207
|
updateFieldsList = updateFields.map((fName) => (`target.[${fName}] = source.[${fName}]`)).join(', ');
|
|
208
208
|
}
|
|
209
|
-
const dbConfig = db.
|
|
209
|
+
const dbConfig = db.getDbConfigMs(connectionId);
|
|
210
210
|
const dbSchemaAndTable = `[${dbConfig.database}].${schemaAndTable}`;
|
|
211
211
|
result = {
|
|
212
212
|
connectionId,
|
|
@@ -224,7 +224,7 @@ options = {}) => {
|
|
|
224
224
|
mergeIdentity,
|
|
225
225
|
getMergeSQL(packet, prepareOptions = {}) {
|
|
226
226
|
if (prepareOptions.isPrepareForSQL) {
|
|
227
|
-
|
|
227
|
+
prepareDataForSqlMs(packet, { recordSchema: this.schema, ...prepareOptions });
|
|
228
228
|
}
|
|
229
229
|
const values = `(${packet.map((r) => (fields.map((fName) => (r[fName]))
|
|
230
230
|
.join(',')))
|
|
@@ -282,7 +282,7 @@ SELECT @total as total, @i as inserted, @u as updated;
|
|
|
282
282
|
return `INSERT INTO ${schemaAndTable} (${insertFieldsList}) ${addOutputInserted ? ' OUTPUT inserted.* ' : ''} VALUES ${values}`;
|
|
283
283
|
},
|
|
284
284
|
getUpdateSQL(record) {
|
|
285
|
-
const recordForSQL =
|
|
285
|
+
const recordForSQL = getRecordValuesForSqlMs(record, this.schema);
|
|
286
286
|
const setArray = [];
|
|
287
287
|
updateFields.forEach((fName) => {
|
|
288
288
|
if (recordForSQL[fName] !== undefined) {
|
|
@@ -302,7 +302,7 @@ SELECT @total as total, @i as inserted, @u as updated;
|
|
|
302
302
|
/**
|
|
303
303
|
* Оборачивает инструкции SQL в транзакцию
|
|
304
304
|
*/
|
|
305
|
-
export const
|
|
305
|
+
export const wrapTransactionMs = (strSQL) => `BEGIN TRY
|
|
306
306
|
BEGIN TRANSACTION;
|
|
307
307
|
|
|
308
308
|
${strSQL}
|
|
@@ -329,8 +329,8 @@ END CATCH;`;
|
|
|
329
329
|
/**
|
|
330
330
|
* Возвращает проверенное и серилизованное значение
|
|
331
331
|
*/
|
|
332
|
-
export const
|
|
333
|
-
const val =
|
|
332
|
+
export const serializeMs = (args) => {
|
|
333
|
+
const val = getValueForSqlMs(args);
|
|
334
334
|
if (val == null || val === 'NULL') {
|
|
335
335
|
return null;
|
|
336
336
|
}
|
|
@@ -342,13 +342,13 @@ export const serialize = (args) => {
|
|
|
342
342
|
/**
|
|
343
343
|
* Возвращает подготовленное выражение SET для использования в UPDATE
|
|
344
344
|
*/
|
|
345
|
-
export const
|
|
345
|
+
export const getSqlSetExpressionMs = (record, recordSchema) => {
|
|
346
346
|
const setArray = [];
|
|
347
347
|
const { dateTimeOptions } = recordSchema;
|
|
348
348
|
recordSchema.forEach((fieldSchema) => {
|
|
349
349
|
const { name = '_#foo#_' } = fieldSchema;
|
|
350
350
|
if (Object.prototype.hasOwnProperty.call(record, name)) {
|
|
351
|
-
setArray.push(`[${name}] = ${
|
|
351
|
+
setArray.push(`[${name}] = ${getValueForSqlMs({
|
|
352
352
|
value: record[name],
|
|
353
353
|
fieldSchema,
|
|
354
354
|
dateTimeOptions,
|
|
@@ -363,7 +363,7 @@ export const getSqlSetExpression = (record, recordSchema) => {
|
|
|
363
363
|
*
|
|
364
364
|
* addOutputInserted - Если true, добавляется выражение OUTPUT inserted.* перед VALUES
|
|
365
365
|
*/
|
|
366
|
-
export const
|
|
366
|
+
export const getSqlValuesExpressionMs = (record, recordSchema, addOutputInserted = false) => {
|
|
367
367
|
const fieldsArray = [];
|
|
368
368
|
const valuesArray = [];
|
|
369
369
|
const { dateTimeOptions } = recordSchema;
|
|
@@ -371,7 +371,7 @@ export const getSqlValuesExpression = (record, recordSchema, addOutputInserted =
|
|
|
371
371
|
const { name = '_#foo#_' } = fieldSchema;
|
|
372
372
|
if (Object.prototype.hasOwnProperty.call(record, name)) {
|
|
373
373
|
fieldsArray.push(name);
|
|
374
|
-
const val =
|
|
374
|
+
const val = getValueForSqlMs({
|
|
375
375
|
value: record[name],
|
|
376
376
|
fieldSchema,
|
|
377
377
|
dateTimeOptions,
|
|
@@ -382,5 +382,5 @@ export const getSqlValuesExpression = (record, recordSchema, addOutputInserted =
|
|
|
382
382
|
});
|
|
383
383
|
return `([${fieldsArray.join('], [')}]) ${addOutputInserted ? ' OUTPUT inserted.* ' : ''} VALUES (${valuesArray.join(', ')})`;
|
|
384
384
|
};
|
|
385
|
-
export const
|
|
385
|
+
export const getRowsAffectedMs = (qResult) => (qResult.rowsAffected && qResult.rowsAffected.reduce((a, v) => a + v, 0)) || 0;
|
|
386
386
|
//# sourceMappingURL=sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../../../src/mssql/sql.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/mssql/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAW,EAAE,QAAkB,EAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AAE5F;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAE,mBAA4B,KAAK,EAAU,EAAE;IACjF,IAAI,GAAG,IAAI,IAAI,EAAE;QACf,GAAG,GAAG,EAAE,CAAC;KACV;IACD,QAAQ,OAAO,GAAG,EAAE;QAClB,KAAK,QAAQ;YACX,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAClB,MAAM;QACR,KAAK,QAAQ;YACX,MAAM;QACR,KAAK,SAAS;YACZ,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACtB,MAAM;QACR;YACE,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;KAC3B;IACD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9B,IAAI,gBAAgB,EAAE;QACpB,OAAO,GAAG,CAAC;KACZ;IACD,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { getTableSchemaPg } from './table-schema';
|
|
2
|
+
import { prepareSqlValuePg } from './prepare-value';
|
|
3
|
+
export const getMergeSqlPg = async (arg) => {
|
|
4
|
+
const { connectionId, targetSchemaAndTable, recordset, omitFields = [], noUpdateIfNull } = arg;
|
|
5
|
+
if (!(recordset === null || recordset === void 0 ? void 0 : recordset.length)) {
|
|
6
|
+
return '';
|
|
7
|
+
}
|
|
8
|
+
const tableSchema = await getTableSchemaPg(connectionId, targetSchemaAndTable);
|
|
9
|
+
const { recordSchema, pk, fieldsWoSerials, defaults } = tableSchema;
|
|
10
|
+
let insertFieldsList = fieldsWoSerials;
|
|
11
|
+
if (omitFields.length) {
|
|
12
|
+
const set = new Set(omitFields);
|
|
13
|
+
insertFieldsList = fieldsWoSerials.filter((fieldName) => !set.has(fieldName));
|
|
14
|
+
}
|
|
15
|
+
const insertValues = recordset.map((record) => {
|
|
16
|
+
const preparedValues = [];
|
|
17
|
+
insertFieldsList.forEach((fieldName) => {
|
|
18
|
+
const value = record[fieldName];
|
|
19
|
+
let pgSqlValue = prepareSqlValuePg({ value, fieldDef: recordSchema[fieldName] });
|
|
20
|
+
if (defaults[fieldName] != null && pgSqlValue === 'null') {
|
|
21
|
+
pgSqlValue = defaults[fieldName];
|
|
22
|
+
}
|
|
23
|
+
preparedValues.push(pgSqlValue);
|
|
24
|
+
});
|
|
25
|
+
return `(${preparedValues.join(', ')})`;
|
|
26
|
+
}).join(',\n').trim();
|
|
27
|
+
const upsertFields = insertFieldsList.map((f) => {
|
|
28
|
+
const vArr = [`EXCLUDED."${f}"`];
|
|
29
|
+
if (noUpdateIfNull) {
|
|
30
|
+
vArr.push(`${targetSchemaAndTable}."${f}"`);
|
|
31
|
+
}
|
|
32
|
+
if (defaults[f]) {
|
|
33
|
+
vArr.push(defaults[f]);
|
|
34
|
+
}
|
|
35
|
+
return `"${f}" = ${vArr.length > 1 ? `COALESCE(${vArr.join(', ')})` : vArr[0]}`;
|
|
36
|
+
}).join(',\n');
|
|
37
|
+
// noinspection UnnecessaryLocalVariableJS
|
|
38
|
+
const mergeSQL = `${'INSERT'} INTO ${targetSchemaAndTable}
|
|
39
|
+
(${insertFieldsList.join(', ')})
|
|
40
|
+
VALUES ${insertValues}
|
|
41
|
+
ON CONFLICT (${pk.map((f) => `"${f}"`).join(', ')})
|
|
42
|
+
DO UPDATE SET ${upsertFields}
|
|
43
|
+
`;
|
|
44
|
+
return mergeSQL;
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=get-merge-sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-merge-sql.js","sourceRoot":"","sources":["../../../../src/pg/get-merge-sql.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { getTableSchemaPg } from './table-schema';
|
|
2
|
+
import { prepareSqlValuePg } from './prepare-value';
|
|
3
|
+
export const getUpdateSqlPg = async (connectionId, schemaAndTable, record, customSets = {}) => {
|
|
4
|
+
const tableSchema = await getTableSchemaPg(connectionId, schemaAndTable);
|
|
5
|
+
const { recordSchema, pk, fieldsWoSerials } = tableSchema;
|
|
6
|
+
const sqlValue = (fieldName) => prepareSqlValuePg({ value: record[fieldName], fieldDef: recordSchema[fieldName] });
|
|
7
|
+
const preparedRecord = {};
|
|
8
|
+
fieldsWoSerials.forEach((f) => {
|
|
9
|
+
if (pk.includes(f)) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (customSets[f] !== undefined) {
|
|
13
|
+
preparedRecord[f] = customSets[f];
|
|
14
|
+
}
|
|
15
|
+
else if (record[f] !== undefined) {
|
|
16
|
+
preparedRecord[f] = sqlValue(f);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const sets = Object.entries(preparedRecord).map(([f, v]) => `"${f}" = ${v}`).join(', ');
|
|
20
|
+
const where = pk.map((f) => `"${f}" = ${sqlValue(f)}`).join(' AND ');
|
|
21
|
+
return `${'UPDATE'} ${schemaAndTable} SET
|
|
22
|
+
${sets}
|
|
23
|
+
WHERE ${where};`;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=get-update-sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-update-sql.js","sourceRoot":"","sources":["../../../../src/pg/get-update-sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIpD,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,YAAoB,EACpB,cAAsB,EACtB,MAAiB,EACjB,aAAwB,EAAE,EACT,EAAE;IACnB,MAAM,WAAW,GAAmB,MAAM,gBAAgB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACzF,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,eAAe,EAAE,GAAG,WAAW,CAAC;IAC1D,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC3H,MAAM,cAAc,GAAc,EAAE,CAAC;IACrC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5B,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAClB,OAAO;SACR;QACD,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YAC/B,cAAc,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;SACnC;aAAM,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YAClC,cAAc,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;SACjC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxF,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrE,OAAO,GAAG,QAAQ,IAAI,cAAc;MAChC,IAAI;UACA,KAAK,GAAG,CAAC;AACnB,CAAC,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { omitBy } from 'af-tools-ts';
|
|
2
|
+
import { getFieldsAndValuesPg, getTableSchemaPg } from './table-schema';
|
|
3
|
+
import { queryPg } from './query-pg';
|
|
4
|
+
import { logger } from '../logger-error';
|
|
5
|
+
export var EUpdateLevel;
|
|
6
|
+
(function (EUpdateLevel) {
|
|
7
|
+
EUpdateLevel[EUpdateLevel["NEVER_UPDATE"] = 0] = "NEVER_UPDATE";
|
|
8
|
+
EUpdateLevel[EUpdateLevel["UPDATE_IF_NOT_FOUND"] = 1] = "UPDATE_IF_NOT_FOUND";
|
|
9
|
+
EUpdateLevel[EUpdateLevel["UPDATE_ALWAYS"] = 2] = "UPDATE_ALWAYS";
|
|
10
|
+
})(EUpdateLevel || (EUpdateLevel = {}));
|
|
11
|
+
const hasAllValues = (fieldList, record) => (fieldList === null || fieldList === void 0 ? void 0 : fieldList.length) && fieldList.every((f) => record[f] !== undefined);
|
|
12
|
+
const selectByAnyIdentity = async (connectionId, identities, record, source) => {
|
|
13
|
+
var _a, _b;
|
|
14
|
+
const identityAlternativesArr = [];
|
|
15
|
+
let pos = 0;
|
|
16
|
+
const positionValues = [];
|
|
17
|
+
identities.forEach((identityFieldList) => {
|
|
18
|
+
if (hasAllValues(identityFieldList, record)) {
|
|
19
|
+
identityAlternativesArr.push(identityFieldList.map((f) => `${f} = $${positionValues.push(record[f]) && ++pos}`).join(' AND '));
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
let selectSql = '';
|
|
23
|
+
if (identityAlternativesArr.length) {
|
|
24
|
+
const identityWhere = identityAlternativesArr.map((v) => `( ${v} )`).join(' OR ');
|
|
25
|
+
selectSql = `SELECT *
|
|
26
|
+
FROM ${source}
|
|
27
|
+
WHERE ${identityWhere}`;
|
|
28
|
+
const result = await queryPg(connectionId, selectSql, positionValues);
|
|
29
|
+
if ((_a = result === null || result === void 0 ? void 0 : result.rows) === null || _a === void 0 ? void 0 : _a[0]) {
|
|
30
|
+
return (_b = result === null || result === void 0 ? void 0 : result.rows) === null || _b === void 0 ? void 0 : _b[0];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
export const insertPg = async ({ connectionId, record, target, source, isThrow, updateLevel, }) => {
|
|
35
|
+
const { recordSchema, pk = [], serials = [], uc = [] } = await getTableSchemaPg(connectionId, target);
|
|
36
|
+
// Cleaning the record: deleting properties not included in the set of fields, with the value undefined and auto-incrementing fields
|
|
37
|
+
const recordWoSerials = omitBy(record, (fieldValue, fieldName) => !recordSchema[fieldName] || fieldValue === undefined || serials.includes(fieldName));
|
|
38
|
+
// We form all possible sets of fields, which we then use to search for an added (or already existing) record
|
|
39
|
+
// Normalize (sort) sets
|
|
40
|
+
let identities = [pk, ...serials.map((f) => [f]), ...Object.values(uc)].filter((a) => a.length).map((a) => a.sort());
|
|
41
|
+
// Removing duplicates
|
|
42
|
+
identities = [...(new Set(identities.map((a) => a.join('|'))))].map((s) => s.split('|'));
|
|
43
|
+
source = source || target;
|
|
44
|
+
if (!updateLevel) {
|
|
45
|
+
updateLevel = EUpdateLevel.NEVER_UPDATE;
|
|
46
|
+
}
|
|
47
|
+
let foundRow;
|
|
48
|
+
try {
|
|
49
|
+
if (updateLevel !== EUpdateLevel.UPDATE_ALWAYS) {
|
|
50
|
+
// First, let's look for a suitable entry in the database if there are enough identification fields to search.
|
|
51
|
+
// Most often, there are no identification fields among the inserted fields and are expected
|
|
52
|
+
// appearance of an auto-incrementing identifier after insertion
|
|
53
|
+
foundRow = await selectByAnyIdentity(connectionId, identities, record, source);
|
|
54
|
+
if (foundRow && updateLevel === EUpdateLevel.NEVER_UPDATE) {
|
|
55
|
+
return foundRow;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// There is no suitable record in the database, we insert it
|
|
59
|
+
const { values, positionsList, fieldsList, upsertFields } = getFieldsAndValuesPg(recordWoSerials, recordSchema);
|
|
60
|
+
const insertSQL = `INSERT INTO ${target} (${fieldsList})
|
|
61
|
+
VALUES (${positionsList}) ON CONFLICT ${updateLevel === EUpdateLevel.NEVER_UPDATE
|
|
62
|
+
? 'DO NOTHING'
|
|
63
|
+
: `(${pk.join(', ')}) DO UPDATE SET ${upsertFields}`}
|
|
64
|
+
RETURNING *`;
|
|
65
|
+
const result = await queryPg(connectionId, insertSQL, values);
|
|
66
|
+
const { rows = [] } = result || {};
|
|
67
|
+
if (!rows[0] && !identities.length) {
|
|
68
|
+
// Hard case
|
|
69
|
+
logger.error(`The insert into table ${target} was not performed and there is no identification field set to search for an existing record.\nrecord: ${JSON.stringify(record)}`);
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
// The insertion is done. Add auto-incrementing identifiers to the array of identification field sets
|
|
73
|
+
const rowInserted = rows[0];
|
|
74
|
+
const summaryRow = { ...recordWoSerials, ...rowInserted };
|
|
75
|
+
foundRow = await selectByAnyIdentity(connectionId, identities, summaryRow, source);
|
|
76
|
+
if (foundRow) {
|
|
77
|
+
return foundRow;
|
|
78
|
+
}
|
|
79
|
+
// If we could not find a record in the source by identifiers, we return what was returned after insertion.
|
|
80
|
+
return summaryRow;
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
logger.error(err);
|
|
84
|
+
if (isThrow) {
|
|
85
|
+
throw err;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=insert.js.map
|