af-db-ts 2.0.19 → 2.0.73
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/dist/cjs/__tests__/db/ms/@gen-types/test-table_schema.js +3 -0
- package/dist/cjs/__tests__/db/ms/@gen-types/test-table_schema.js.map +1 -0
- package/dist/cjs/__tests__/db/ms/ddl/column-schema-for-test-table-schema-ms.json +216 -0
- package/dist/cjs/__tests__/db/ms/ms-get-sql.spec.js +190 -0
- package/dist/cjs/__tests__/db/ms/ms-get-sql.spec.js.map +1 -0
- package/dist/cjs/__tests__/db/ms/ms-prepare-sql-value.spec.js +584 -0
- package/dist/cjs/__tests__/db/ms/ms-prepare-sql-value.spec.js.map +1 -0
- package/dist/cjs/__tests__/db/ms/ms-table-schema.spec.js +107 -0
- package/dist/cjs/__tests__/db/ms/ms-table-schema.spec.js.map +1 -0
- package/dist/cjs/__tests__/db/pg/@gen-types/test-hard_case.js +3 -0
- package/dist/cjs/__tests__/db/pg/@gen-types/test-hard_case.js.map +1 -0
- package/dist/cjs/__tests__/db/pg/@gen-types/test-only_one_serial.js +3 -0
- package/dist/cjs/__tests__/db/pg/@gen-types/test-only_one_serial.js.map +1 -0
- package/dist/cjs/__tests__/db/pg/@gen-types/test-only_one_uniq.js +3 -0
- package/dist/cjs/__tests__/db/pg/@gen-types/test-only_one_uniq.js.map +1 -0
- package/dist/cjs/__tests__/db/pg/@gen-types/test-serial_and_uniq.js +3 -0
- package/dist/cjs/__tests__/db/pg/@gen-types/test-serial_and_uniq.js.map +1 -0
- package/dist/cjs/__tests__/db/pg/@gen-types/test-table_schema.js +3 -0
- package/dist/cjs/__tests__/db/pg/@gen-types/test-table_schema.js.map +1 -0
- package/dist/cjs/__tests__/db/pg/ddl/column-schema-for-test-table-schema-pg.json +170 -0
- package/dist/cjs/__tests__/db/pg/gen-table-interfaces-4-test-pg.js +36 -0
- package/dist/cjs/__tests__/db/pg/gen-table-interfaces-4-test-pg.js.map +1 -0
- package/dist/cjs/__tests__/db/pg/pg-get-sql.spec.js +261 -0
- package/dist/cjs/__tests__/db/pg/pg-get-sql.spec.js.map +1 -0
- package/dist/cjs/__tests__/db/pg/pg-insert.spec.js +294 -0
- package/dist/cjs/__tests__/db/pg/pg-insert.spec.js.map +1 -0
- package/dist/cjs/__tests__/db/pg/pg-prepare-sql-value.spec.js +575 -0
- package/dist/cjs/__tests__/db/pg/pg-prepare-sql-value.spec.js.map +1 -0
- package/dist/cjs/__tests__/db/pg/pg-table-schema.spec.js +117 -0
- package/dist/cjs/__tests__/db/pg/pg-table-schema.spec.js.map +1 -0
- package/dist/cjs/src/@types/i-data-types-ms.js +3 -0
- package/dist/cjs/src/@types/i-data-types-ms.js.map +1 -0
- package/dist/cjs/src/@types/i-data-types-pg.js +7 -0
- package/dist/cjs/src/@types/i-data-types-pg.js.map +1 -0
- package/dist/cjs/src/@types/i-pg.js +0 -21
- package/dist/cjs/src/@types/i-pg.js.map +1 -1
- package/dist/cjs/src/common.js +6 -5
- package/dist/cjs/src/common.js.map +1 -1
- package/dist/cjs/src/index.js +75 -54
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/ms/gen-table-interfaces-ms.js +64 -0
- package/dist/cjs/src/ms/gen-table-interfaces-ms.js.map +1 -0
- package/dist/cjs/src/ms/get-sql/insert.js +37 -0
- package/dist/cjs/src/ms/get-sql/insert.js.map +1 -0
- package/dist/cjs/src/ms/get-sql/merge.js +93 -0
- package/dist/cjs/src/ms/get-sql/merge.js.map +1 -0
- package/dist/cjs/src/ms/get-sql/update.js +32 -0
- package/dist/cjs/src/ms/get-sql/update.js.map +1 -0
- package/dist/cjs/src/{mssql → ms}/pool-ms.js +6 -23
- package/dist/cjs/src/ms/pool-ms.js.map +1 -0
- package/dist/cjs/src/ms/prepare-value.js +178 -0
- package/dist/cjs/src/ms/prepare-value.js.map +1 -0
- package/dist/cjs/src/{mssql → ms}/query-ms.js +1 -1
- package/dist/cjs/src/ms/query-ms.js.map +1 -0
- package/dist/cjs/src/ms/table-schema-ms.js +241 -0
- package/dist/cjs/src/ms/table-schema-ms.js.map +1 -0
- package/dist/cjs/src/ms/utils-ms.js +92 -0
- package/dist/cjs/src/ms/utils-ms.js.map +1 -0
- package/dist/cjs/src/ms/wrap-transaction-ms.js +32 -0
- package/dist/cjs/src/ms/wrap-transaction-ms.js.map +1 -0
- package/dist/cjs/src/pg/gen-table-interfaces-pg.js +83 -0
- package/dist/cjs/src/pg/gen-table-interfaces-pg.js.map +1 -0
- package/dist/cjs/src/pg/get-sql/insert.js +38 -0
- package/dist/cjs/src/pg/get-sql/insert.js.map +1 -0
- package/dist/cjs/src/pg/get-sql/merge.js +60 -0
- package/dist/cjs/src/pg/get-sql/merge.js.map +1 -0
- package/dist/cjs/src/pg/get-sql/update.js +32 -0
- package/dist/cjs/src/pg/get-sql/update.js.map +1 -0
- package/dist/cjs/src/pg/{insert.js → insert-pg.js} +10 -10
- package/dist/cjs/src/pg/insert-pg.js.map +1 -0
- package/dist/cjs/src/pg/is-table-or-view-exists.js +1 -2
- package/dist/cjs/src/pg/is-table-or-view-exists.js.map +1 -1
- package/dist/cjs/src/pg/{pg-pool.js → pool-pg.js} +6 -7
- package/dist/cjs/src/pg/pool-pg.js.map +1 -0
- package/dist/cjs/src/pg/prepare-value.js +116 -69
- package/dist/cjs/src/pg/prepare-value.js.map +1 -1
- package/dist/cjs/src/pg/query-pg.js +2 -2
- package/dist/cjs/src/pg/query-pg.js.map +1 -1
- package/dist/cjs/src/pg/table-schema-pg.js +183 -0
- package/dist/cjs/src/pg/table-schema-pg.js.map +1 -0
- package/dist/cjs/src/pg/utils-pg.js +99 -0
- package/dist/cjs/src/pg/utils-pg.js.map +1 -0
- package/dist/cjs/src/utils/utils-array.js +152 -0
- package/dist/cjs/src/utils/utils-array.js.map +1 -0
- package/dist/cjs/src/utils/utils-dt.js +121 -0
- package/dist/cjs/src/utils/utils-dt.js.map +1 -0
- package/dist/cjs/src/utils/utils-num.js +127 -0
- package/dist/cjs/src/utils/utils-num.js.map +1 -0
- package/dist/cjs/src/utils/utils.js +66 -0
- package/dist/cjs/src/utils/utils.js.map +1 -0
- package/dist/esm/src/@types/i-data-types-ms.js +2 -0
- package/dist/esm/src/@types/i-data-types-ms.js.map +1 -0
- package/dist/esm/src/@types/i-data-types-pg.js +6 -0
- package/dist/esm/src/@types/i-data-types-pg.js.map +1 -0
- package/dist/esm/src/@types/i-pg.js +1 -20
- package/dist/esm/src/@types/i-pg.js.map +1 -1
- package/dist/esm/src/common.js +3 -2
- package/dist/esm/src/common.js.map +1 -1
- package/dist/esm/src/index.js +24 -15
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/ms/gen-table-interfaces-ms.js +36 -0
- package/dist/esm/src/ms/gen-table-interfaces-ms.js.map +1 -0
- package/dist/esm/src/ms/get-sql/insert.js +33 -0
- package/dist/esm/src/ms/get-sql/insert.js.map +1 -0
- package/dist/esm/src/ms/get-sql/merge.js +89 -0
- package/dist/esm/src/ms/get-sql/merge.js.map +1 -0
- package/dist/esm/src/ms/get-sql/update.js +28 -0
- package/dist/esm/src/ms/get-sql/update.js.map +1 -0
- package/dist/esm/src/{mssql → ms}/pool-ms.js +5 -20
- package/dist/esm/src/ms/pool-ms.js.map +1 -0
- package/dist/esm/src/ms/prepare-value.js +149 -0
- package/dist/esm/src/ms/prepare-value.js.map +1 -0
- package/dist/esm/src/{mssql → ms}/query-ms.js +1 -1
- package/dist/esm/src/ms/query-ms.js.map +1 -0
- package/dist/esm/src/ms/table-schema-ms.js +213 -0
- package/dist/esm/src/ms/table-schema-ms.js.map +1 -0
- package/dist/esm/src/ms/utils-ms.js +65 -0
- package/dist/esm/src/ms/utils-ms.js.map +1 -0
- package/dist/esm/src/ms/wrap-transaction-ms.js +28 -0
- package/dist/esm/src/ms/wrap-transaction-ms.js.map +1 -0
- package/dist/esm/src/pg/gen-table-interfaces-pg.js +55 -0
- package/dist/esm/src/pg/gen-table-interfaces-pg.js.map +1 -0
- package/dist/esm/src/pg/get-sql/insert.js +34 -0
- package/dist/esm/src/pg/get-sql/insert.js.map +1 -0
- package/dist/esm/src/pg/get-sql/merge.js +56 -0
- package/dist/esm/src/pg/get-sql/merge.js.map +1 -0
- package/dist/esm/src/pg/get-sql/update.js +28 -0
- package/dist/esm/src/pg/get-sql/update.js.map +1 -0
- package/dist/esm/src/pg/{insert.js → insert-pg.js} +10 -10
- package/dist/esm/src/pg/insert-pg.js.map +1 -0
- package/dist/esm/src/pg/is-table-or-view-exists.js +1 -2
- package/dist/esm/src/pg/is-table-or-view-exists.js.map +1 -1
- package/dist/esm/src/pg/{pg-pool.js → pool-pg.js} +6 -7
- package/dist/esm/src/pg/pool-pg.js.map +1 -0
- package/dist/esm/src/pg/prepare-value.js +113 -67
- package/dist/esm/src/pg/prepare-value.js.map +1 -1
- package/dist/esm/src/pg/query-pg.js +1 -1
- package/dist/esm/src/pg/query-pg.js.map +1 -1
- package/dist/esm/src/pg/table-schema-pg.js +178 -0
- package/dist/esm/src/pg/table-schema-pg.js.map +1 -0
- package/dist/esm/src/pg/utils-pg.js +93 -0
- package/dist/esm/src/pg/utils-pg.js.map +1 -0
- package/dist/esm/src/utils/utils-array.js +125 -0
- package/dist/esm/src/utils/utils-array.js.map +1 -0
- package/dist/esm/src/utils/utils-dt.js +114 -0
- package/dist/esm/src/utils/utils-dt.js.map +1 -0
- package/dist/esm/src/utils/utils-num.js +117 -0
- package/dist/esm/src/utils/utils-num.js.map +1 -0
- package/dist/esm/src/utils/utils.js +58 -0
- package/dist/esm/src/utils/utils.js.map +1 -0
- package/dist/types/src/@types/i-common.d.ts +35 -3
- package/dist/types/src/@types/i-common.d.ts.map +1 -1
- package/dist/types/src/@types/i-data-types-ms.d.ts +3 -0
- package/dist/types/src/@types/i-data-types-ms.d.ts.map +1 -0
- package/dist/types/src/@types/i-data-types-pg.d.ts +35 -0
- package/dist/types/src/@types/i-data-types-pg.d.ts.map +1 -0
- package/dist/types/src/@types/i-ms.d.ts +26 -126
- package/dist/types/src/@types/i-ms.d.ts.map +1 -1
- package/dist/types/src/@types/i-pg.d.ts +11 -35
- package/dist/types/src/@types/i-pg.d.ts.map +1 -1
- package/dist/types/src/common.d.ts +1 -0
- package/dist/types/src/common.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +28 -16
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/ms/gen-table-interfaces-ms.d.ts +3 -0
- package/dist/types/src/ms/gen-table-interfaces-ms.d.ts.map +1 -0
- package/dist/types/src/ms/get-sql/insert.d.ts +9 -0
- package/dist/types/src/ms/get-sql/insert.d.ts.map +1 -0
- package/dist/types/src/ms/get-sql/merge.d.ts +14 -0
- package/dist/types/src/ms/get-sql/merge.d.ts.map +1 -0
- package/dist/types/src/ms/get-sql/update.d.ts +9 -0
- package/dist/types/src/ms/get-sql/update.d.ts.map +1 -0
- package/dist/types/src/{mssql → ms}/pool-ms.d.ts +0 -8
- package/dist/types/src/ms/pool-ms.d.ts.map +1 -0
- package/dist/types/src/ms/prepare-value.d.ts +12 -0
- package/dist/types/src/ms/prepare-value.d.ts.map +1 -0
- package/dist/types/src/ms/query-ms.d.ts +3 -0
- package/dist/types/src/ms/query-ms.d.ts.map +1 -0
- package/dist/types/src/ms/table-schema-ms.d.ts +9 -0
- package/dist/types/src/ms/table-schema-ms.d.ts.map +1 -0
- package/dist/types/src/ms/utils-ms.d.ts +3 -0
- package/dist/types/src/ms/utils-ms.d.ts.map +1 -0
- package/dist/types/src/ms/wrap-transaction-ms.d.ts +5 -0
- package/dist/types/src/ms/wrap-transaction-ms.d.ts.map +1 -0
- package/dist/types/src/pg/gen-table-interfaces-pg.d.ts +3 -0
- package/dist/types/src/pg/gen-table-interfaces-pg.d.ts.map +1 -0
- package/dist/types/src/pg/get-sql/insert.d.ts +9 -0
- package/dist/types/src/pg/get-sql/insert.d.ts.map +1 -0
- package/dist/types/src/pg/get-sql/merge.d.ts +10 -0
- package/dist/types/src/pg/get-sql/merge.d.ts.map +1 -0
- package/dist/types/src/pg/get-sql/update.d.ts +9 -0
- package/dist/types/src/pg/get-sql/update.d.ts.map +1 -0
- package/dist/types/src/pg/{insert.d.ts → insert-pg.d.ts} +3 -3
- package/dist/types/src/pg/insert-pg.d.ts.map +1 -0
- package/dist/types/src/pg/{pg-pool.d.ts → pool-pg.d.ts} +1 -1
- package/dist/types/src/pg/{pg-pool.d.ts.map → pool-pg.d.ts.map} +1 -1
- package/dist/types/src/pg/prepare-value.d.ts +3 -1
- package/dist/types/src/pg/prepare-value.d.ts.map +1 -1
- package/dist/types/src/pg/query-pg.d.ts +3 -2
- package/dist/types/src/pg/query-pg.d.ts.map +1 -1
- package/dist/types/src/pg/table-schema-pg.d.ts +12 -0
- package/dist/types/src/pg/table-schema-pg.d.ts.map +1 -0
- package/dist/types/src/pg/utils-pg.d.ts +5 -0
- package/dist/types/src/pg/utils-pg.d.ts.map +1 -0
- package/dist/types/src/utils/utils-array.d.ts +5 -0
- package/dist/types/src/utils/utils-array.d.ts.map +1 -0
- package/dist/types/src/utils/utils-dt.d.ts +15 -0
- package/dist/types/src/utils/utils-dt.d.ts.map +1 -0
- package/dist/types/src/utils/utils-num.d.ts +9 -0
- package/dist/types/src/utils/utils-num.d.ts.map +1 -0
- package/dist/types/src/utils/utils.d.ts +18 -0
- package/dist/types/src/utils/utils.d.ts.map +1 -0
- package/package.json +13 -13
- package/src/@types/i-common.ts +42 -4
- package/src/@types/i-data-types-ms.ts +81 -0
- package/src/@types/i-data-types-pg.ts +120 -0
- package/src/@types/i-ms.ts +29 -153
- package/src/@types/i-pg.ts +11 -36
- package/src/common.ts +4 -2
- package/src/index.ts +101 -59
- package/src/ms/gen-table-interfaces-ms.ts +52 -0
- package/src/ms/get-sql/insert.ts +45 -0
- package/src/ms/get-sql/merge.ts +118 -0
- package/src/ms/get-sql/update.ts +46 -0
- package/src/{mssql → ms}/pool-ms.ts +0 -16
- package/src/ms/prepare-value.ts +175 -0
- package/src/{mssql → ms}/query-ms.ts +2 -2
- package/src/ms/table-schema-ms.ts +231 -0
- package/src/ms/utils-ms.ts +72 -0
- package/src/ms/wrap-transaction-ms.ts +27 -0
- package/src/pg/gen-table-interfaces-pg.ts +74 -0
- package/src/pg/get-sql/insert.ts +46 -0
- package/src/pg/get-sql/merge.ts +70 -0
- package/src/pg/get-sql/update.ts +46 -0
- package/src/pg/{insert.ts → insert-pg.ts} +9 -9
- package/src/pg/prepare-value.ts +129 -67
- package/src/pg/query-pg.ts +4 -3
- package/src/pg/table-schema-pg.ts +196 -0
- package/src/pg/utils-pg.ts +97 -0
- package/src/utils/utils-array.ts +133 -0
- package/src/utils/utils-dt.ts +123 -0
- package/src/utils/utils-num.ts +131 -0
- package/src/utils/utils.ts +64 -0
- package/dist/cjs/__tests__/02_getValueForSqlMs.spec.js +0 -50
- package/dist/cjs/__tests__/02_getValueForSqlMs.spec.js.map +0 -1
- package/dist/cjs/src/mssql/get-value-for-sql.js +0 -277
- package/dist/cjs/src/mssql/get-value-for-sql.js.map +0 -1
- package/dist/cjs/src/mssql/pool-ms.js.map +0 -1
- package/dist/cjs/src/mssql/query-ms.js.map +0 -1
- package/dist/cjs/src/mssql/sql.js +0 -427
- package/dist/cjs/src/mssql/sql.js.map +0 -1
- package/dist/cjs/src/mssql/utils.js +0 -36
- package/dist/cjs/src/mssql/utils.js.map +0 -1
- package/dist/cjs/src/pg/get-merge-sql.js +0 -52
- package/dist/cjs/src/pg/get-merge-sql.js.map +0 -1
- package/dist/cjs/src/pg/get-update-sql.js +0 -30
- package/dist/cjs/src/pg/get-update-sql.js.map +0 -1
- package/dist/cjs/src/pg/insert.js.map +0 -1
- package/dist/cjs/src/pg/pg-pool.js.map +0 -1
- package/dist/cjs/src/pg/table-schema.js +0 -179
- package/dist/cjs/src/pg/table-schema.js.map +0 -1
- package/dist/cjs/src/utils.js +0 -17
- package/dist/cjs/src/utils.js.map +0 -1
- package/dist/esm/src/mssql/get-value-for-sql.js +0 -272
- package/dist/esm/src/mssql/get-value-for-sql.js.map +0 -1
- package/dist/esm/src/mssql/pool-ms.js.map +0 -1
- package/dist/esm/src/mssql/query-ms.js.map +0 -1
- package/dist/esm/src/mssql/sql.js +0 -390
- package/dist/esm/src/mssql/sql.js.map +0 -1
- package/dist/esm/src/mssql/utils.js +0 -31
- package/dist/esm/src/mssql/utils.js.map +0 -1
- package/dist/esm/src/pg/get-merge-sql.js +0 -48
- package/dist/esm/src/pg/get-merge-sql.js.map +0 -1
- package/dist/esm/src/pg/get-update-sql.js +0 -26
- package/dist/esm/src/pg/get-update-sql.js.map +0 -1
- package/dist/esm/src/pg/insert.js.map +0 -1
- package/dist/esm/src/pg/pg-pool.js.map +0 -1
- package/dist/esm/src/pg/table-schema.js +0 -174
- package/dist/esm/src/pg/table-schema.js.map +0 -1
- package/dist/esm/src/utils.js +0 -14
- package/dist/esm/src/utils.js.map +0 -1
- package/dist/types/src/mssql/get-value-for-sql.d.ts +0 -11
- package/dist/types/src/mssql/get-value-for-sql.d.ts.map +0 -1
- package/dist/types/src/mssql/pool-ms.d.ts.map +0 -1
- package/dist/types/src/mssql/query-ms.d.ts +0 -3
- package/dist/types/src/mssql/query-ms.d.ts.map +0 -1
- package/dist/types/src/mssql/sql.d.ts +0 -57
- package/dist/types/src/mssql/sql.d.ts.map +0 -1
- package/dist/types/src/mssql/utils.d.ts +0 -10
- package/dist/types/src/mssql/utils.d.ts.map +0 -1
- package/dist/types/src/pg/get-merge-sql.d.ts +0 -9
- package/dist/types/src/pg/get-merge-sql.d.ts.map +0 -1
- package/dist/types/src/pg/get-update-sql.d.ts +0 -3
- package/dist/types/src/pg/get-update-sql.d.ts.map +0 -1
- package/dist/types/src/pg/insert.d.ts.map +0 -1
- package/dist/types/src/pg/table-schema.d.ts +0 -12
- package/dist/types/src/pg/table-schema.d.ts.map +0 -1
- package/dist/types/src/utils.d.ts +0 -9
- package/dist/types/src/utils.d.ts.map +0 -1
- package/src/mssql/get-value-for-sql.ts +0 -325
- package/src/mssql/sql.ts +0 -430
- package/src/mssql/utils.ts +0 -31
- package/src/pg/get-merge-sql.ts +0 -62
- package/src/pg/get-update-sql.ts +0 -32
- package/src/pg/table-schema.ts +0 -189
- package/src/utils.ts +0 -14
- /package/src/pg/{pg-pool.ts → pool-pg.ts} +0 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { TDataTypePg, TArrayTypesPg } from '../@types/i-data-types-pg';
|
|
2
|
+
|
|
3
|
+
export const getJsTypeByTypePg = (dataType?: TDataTypePg, arrayType?: TDataTypePg): string => {
|
|
4
|
+
switch (dataType) {
|
|
5
|
+
case 'boolean':
|
|
6
|
+
return 'boolean';
|
|
7
|
+
case 'bigint':
|
|
8
|
+
return 'string | number';
|
|
9
|
+
case 'integer':
|
|
10
|
+
case 'numeric':
|
|
11
|
+
case 'real':
|
|
12
|
+
case 'smallint':
|
|
13
|
+
return 'number';
|
|
14
|
+
case 'text':
|
|
15
|
+
case 'character':
|
|
16
|
+
case 'varchar':
|
|
17
|
+
case 'uuid':
|
|
18
|
+
return 'string';
|
|
19
|
+
case 'json':
|
|
20
|
+
case 'jsonb':
|
|
21
|
+
return 'any';
|
|
22
|
+
case 'date':
|
|
23
|
+
case 'timestamptz':
|
|
24
|
+
case 'timestamp':
|
|
25
|
+
return 'string | Date | number';
|
|
26
|
+
case 'USER_DEFINED':
|
|
27
|
+
return 'string';
|
|
28
|
+
case 'ARRAY': {
|
|
29
|
+
const jsType = getJsTypeByTypePg(arrayType);
|
|
30
|
+
return `${jsType}[]`;
|
|
31
|
+
}
|
|
32
|
+
default:
|
|
33
|
+
return 'string';
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const udtNames2TypeMap: { [udtName: string]: TDataTypePg } = {
|
|
38
|
+
_bit: 'bit',
|
|
39
|
+
_bool: 'bool',
|
|
40
|
+
_box: 'box',
|
|
41
|
+
_bytea: 'bytea',
|
|
42
|
+
_char: 'char',
|
|
43
|
+
_circle: 'circle',
|
|
44
|
+
_date: 'date',
|
|
45
|
+
_float4: 'real',
|
|
46
|
+
_float8: 'double precision',
|
|
47
|
+
_inet: 'inet',
|
|
48
|
+
_int2: 'smallint',
|
|
49
|
+
_int4: 'int',
|
|
50
|
+
_int8: 'bigint',
|
|
51
|
+
_interval: 'interval',
|
|
52
|
+
_lseg: 'lseg',
|
|
53
|
+
_macaddr: 'macaddr',
|
|
54
|
+
_money: 'money',
|
|
55
|
+
_numeric: 'numeric',
|
|
56
|
+
_path: 'path',
|
|
57
|
+
_point: 'point',
|
|
58
|
+
_polygon: 'polygon',
|
|
59
|
+
_text: 'text',
|
|
60
|
+
_time: 'time',
|
|
61
|
+
_timestamp: 'timestamp',
|
|
62
|
+
_timestamptz: 'timestamptz',
|
|
63
|
+
_timetz: 'timetz',
|
|
64
|
+
_uuid: 'uuid',
|
|
65
|
+
_varchar: 'varchar',
|
|
66
|
+
_xml: 'xml',
|
|
67
|
+
// _oid: 'oid',
|
|
68
|
+
// _abstime: 'abstime',
|
|
69
|
+
// _name: 'name',
|
|
70
|
+
};
|
|
71
|
+
export const getTypeByUdtNamePg = (udtName: TArrayTypesPg): TDataTypePg => {
|
|
72
|
+
const dataType = udtNames2TypeMap[udtName];
|
|
73
|
+
return dataType || 'varchar';
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const typeNormalizationMap: { [pgDataType: string]: TDataTypePg } = {
|
|
77
|
+
bool: 'boolean',
|
|
78
|
+
int2: 'smallint',
|
|
79
|
+
integer: 'int',
|
|
80
|
+
int4: 'int',
|
|
81
|
+
int8: 'bigint',
|
|
82
|
+
serial2: 'smallserial',
|
|
83
|
+
serial4: 'serial',
|
|
84
|
+
serial8: 'bigserial',
|
|
85
|
+
decimal: 'numeric',
|
|
86
|
+
float4: 'real',
|
|
87
|
+
float8: 'double precision',
|
|
88
|
+
character: 'char',
|
|
89
|
+
'character varying': 'varchar',
|
|
90
|
+
'timestamp with time zone': 'timestamptz',
|
|
91
|
+
'timestamp without time zone': 'timestamp',
|
|
92
|
+
'time without time zone': 'time',
|
|
93
|
+
'time with time zone': 'timetz',
|
|
94
|
+
'bit varying': 'varbit',
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const getNormalizedTypePg = (pgDataType: TDataTypePg): TDataTypePg => typeNormalizationMap[pgDataType] || pgDataType;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import * as sql from 'mssql';
|
|
2
|
+
import { getBool } from 'af-tools-ts';
|
|
3
|
+
import { NULL } from '../common';
|
|
4
|
+
import { parseFloatNumber, parseIntNumberS, prepareBigIntNumber } from './utils-num';
|
|
5
|
+
import { TDataTypeMs } from '../@types/i-data-types-ms';
|
|
6
|
+
import { TDataTypePg } from '../@types/i-data-types-pg';
|
|
7
|
+
import { prepareUUID } from './utils';
|
|
8
|
+
|
|
9
|
+
const elementString = (value: any[]): string[] => {
|
|
10
|
+
// noinspection UnnecessaryLocalVariableJS
|
|
11
|
+
const arr: string[] = value.map((v) => {
|
|
12
|
+
if (v === '') {
|
|
13
|
+
return '';
|
|
14
|
+
}
|
|
15
|
+
return v == null ? null : v;
|
|
16
|
+
}).map((v) => (v == null ? NULL : `"${v}"`));
|
|
17
|
+
return arr;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const elementUuid = (
|
|
21
|
+
value: any[],
|
|
22
|
+
toLower: boolean = false,
|
|
23
|
+
): string[] => value.map((v) => prepareUUID(v, toLower, true)).map((v) => (v === NULL ? NULL : `"${v}"`));
|
|
24
|
+
|
|
25
|
+
export const arrayToJsonList = (value: any, arrayType?: TDataTypeMs | TDataTypePg): string | typeof NULL => {
|
|
26
|
+
if (value == null) {
|
|
27
|
+
return NULL;
|
|
28
|
+
}
|
|
29
|
+
if (!Array.isArray(value)) {
|
|
30
|
+
return NULL;
|
|
31
|
+
}
|
|
32
|
+
let arr: any[] = [];
|
|
33
|
+
if (Array.isArray(value) && value.length) {
|
|
34
|
+
switch (arrayType) {
|
|
35
|
+
case 'bool':
|
|
36
|
+
case 'boolean': // VVQ
|
|
37
|
+
arr = value.map((v) => (v == null ? NULL : getBool(v)));
|
|
38
|
+
break;
|
|
39
|
+
case sql.Bit:
|
|
40
|
+
// eslint-disable-next-line no-nested-ternary
|
|
41
|
+
arr = value.map((v) => (v == null ? NULL : (getBool(v) ? 1 : 0)));
|
|
42
|
+
break;
|
|
43
|
+
case 'tinyint':
|
|
44
|
+
case sql.TinyInt:
|
|
45
|
+
arr = value.map((v) => parseIntNumberS(v, 'tinyint'));
|
|
46
|
+
break;
|
|
47
|
+
case 'smallint':
|
|
48
|
+
case sql.SmallInt:
|
|
49
|
+
arr = value.map((v) => parseIntNumberS(v, 'smallint'));
|
|
50
|
+
break;
|
|
51
|
+
case 'bigint':
|
|
52
|
+
case sql.BigInt:
|
|
53
|
+
arr = value.map((v) => prepareBigIntNumber(v));
|
|
54
|
+
break;
|
|
55
|
+
case 'int':
|
|
56
|
+
case 'integer':
|
|
57
|
+
case sql.Int:
|
|
58
|
+
arr = value.map((v) => parseIntNumberS(v, 'int'));
|
|
59
|
+
break;
|
|
60
|
+
case 'number':
|
|
61
|
+
case 'decimal':
|
|
62
|
+
case 'numeric':
|
|
63
|
+
case 'real':
|
|
64
|
+
case 'money':
|
|
65
|
+
case 'smallmoney':
|
|
66
|
+
case 'float':
|
|
67
|
+
case sql.SmallMoney:
|
|
68
|
+
case sql.Money:
|
|
69
|
+
case sql.Float:
|
|
70
|
+
case sql.Numeric:
|
|
71
|
+
case sql.Decimal:
|
|
72
|
+
case sql.Real:
|
|
73
|
+
arr = value.map((v) => parseFloatNumber(v));
|
|
74
|
+
break;
|
|
75
|
+
case 'uid':
|
|
76
|
+
case 'uuid': // VVQ
|
|
77
|
+
arr = elementUuid(value, true);
|
|
78
|
+
break;
|
|
79
|
+
case 'uniqueIdentifier':
|
|
80
|
+
case sql.UniqueIdentifier:
|
|
81
|
+
arr = elementUuid(value, false);
|
|
82
|
+
break;
|
|
83
|
+
|
|
84
|
+
case 'string':
|
|
85
|
+
case 'char':
|
|
86
|
+
case 'nchar':
|
|
87
|
+
case 'text':
|
|
88
|
+
case 'ntext':
|
|
89
|
+
case 'varchar':
|
|
90
|
+
case 'nvarchar':
|
|
91
|
+
case 'xml':
|
|
92
|
+
case sql.Char:
|
|
93
|
+
case sql.NChar:
|
|
94
|
+
case sql.NText:
|
|
95
|
+
case sql.VarChar:
|
|
96
|
+
case sql.NVarChar:
|
|
97
|
+
case sql.Text:
|
|
98
|
+
arr = elementString(value);
|
|
99
|
+
break;
|
|
100
|
+
|
|
101
|
+
case 'date':
|
|
102
|
+
case sql.Date:
|
|
103
|
+
case 'time':
|
|
104
|
+
case sql.Time:
|
|
105
|
+
case 'datetime':
|
|
106
|
+
case sql.DateTime:
|
|
107
|
+
case 'datetime2':
|
|
108
|
+
case sql.DateTime2:
|
|
109
|
+
case 'smalldatetime':
|
|
110
|
+
case sql.SmallDateTime:
|
|
111
|
+
case 'datetimeoffset':
|
|
112
|
+
case sql.DateTimeOffset:
|
|
113
|
+
arr = elementString(value);
|
|
114
|
+
break;
|
|
115
|
+
// 'binary'
|
|
116
|
+
// 'varbinary'
|
|
117
|
+
// 'image'
|
|
118
|
+
// 'udt'
|
|
119
|
+
// 'geography'
|
|
120
|
+
// 'geometry'
|
|
121
|
+
// 'variant'
|
|
122
|
+
// 'array'
|
|
123
|
+
default: {
|
|
124
|
+
try {
|
|
125
|
+
return JSON.stringify(value.map((v) => (v == null ? null : v))).replace(/^\[(.+?)]$/, '$1');
|
|
126
|
+
} catch (err) {
|
|
127
|
+
return NULL;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return arr.join(',');
|
|
133
|
+
};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { DateTime } from 'luxon';
|
|
2
|
+
import { IFieldDefMs } from '../@types/i-ms';
|
|
3
|
+
import { IFieldDefPg } from '../@types/i-pg';
|
|
4
|
+
import { IFieldDef } from '../@types/i-common';
|
|
5
|
+
import { NULL } from '../common';
|
|
6
|
+
import { q } from './utils';
|
|
7
|
+
|
|
8
|
+
export const getTypeOfDateInput = (v: any): 'string' | 'number' | 'date' | 'luxon' | 'moment' | 'any' | 'null' => {
|
|
9
|
+
const type = typeof v;
|
|
10
|
+
if (type === 'string' || type === 'number') {
|
|
11
|
+
return type;
|
|
12
|
+
}
|
|
13
|
+
if (type === 'boolean' || !v) {
|
|
14
|
+
return 'null';
|
|
15
|
+
}
|
|
16
|
+
if (type === 'object') {
|
|
17
|
+
if (Object.prototype.toString.call(v) === '[object Date]') {
|
|
18
|
+
return 'date';
|
|
19
|
+
}
|
|
20
|
+
if (v.isLuxonDateTime) {
|
|
21
|
+
return 'luxon';
|
|
22
|
+
}
|
|
23
|
+
if (v._isAMomentObject) {
|
|
24
|
+
return 'moment';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return 'any';
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const getLuxonDT = (value: any, fieldDef: IFieldDefMs | IFieldDefPg): DateTime | null => {
|
|
31
|
+
const { inputDateFormat, dateTimeOptions } = fieldDef;
|
|
32
|
+
const { fromZone, setZone, correctionMillis = 0 } = dateTimeOptions || {};
|
|
33
|
+
|
|
34
|
+
let v: any;
|
|
35
|
+
let millis: number | null = null;
|
|
36
|
+
const inputType = getTypeOfDateInput(value); // 'number' | 'string' | 'date' | 'luxon' | 'moment' | 'any' | 'null'
|
|
37
|
+
|
|
38
|
+
if (inputType === 'null') {
|
|
39
|
+
millis = null;
|
|
40
|
+
} else if (inputType === 'number' || inputType === 'date') {
|
|
41
|
+
millis = +value;
|
|
42
|
+
} else if (inputType === 'string' || inputType === 'any') {
|
|
43
|
+
v = String(value);
|
|
44
|
+
let dt: DateTime;
|
|
45
|
+
|
|
46
|
+
const zoneOpts = fromZone ? { zone: fromZone } : undefined;
|
|
47
|
+
if (inputDateFormat) {
|
|
48
|
+
dt = DateTime.fromFormat(v, inputDateFormat, zoneOpts);
|
|
49
|
+
} else {
|
|
50
|
+
v = v
|
|
51
|
+
.replace(/^(\d{4}-\d\d-\d\d) (\d)/, '$1T$2')
|
|
52
|
+
.replace(/(\d) +Z/, '$1Z')
|
|
53
|
+
.replace(/(\d) +([+-])/, '$1$2');
|
|
54
|
+
dt = DateTime.fromISO(v, zoneOpts);
|
|
55
|
+
}
|
|
56
|
+
millis = dt.isValid ? dt.toMillis() : null;
|
|
57
|
+
} else if (inputType === 'luxon') {
|
|
58
|
+
millis = value.isValid ? value.toMillis() : null;
|
|
59
|
+
} else if (inputType === 'moment') {
|
|
60
|
+
millis = value.isValid() ? +value : null;
|
|
61
|
+
}
|
|
62
|
+
if (millis == null) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
if (correctionMillis) {
|
|
66
|
+
millis += correctionMillis;
|
|
67
|
+
}
|
|
68
|
+
let ld = DateTime.fromMillis(millis);
|
|
69
|
+
if (setZone) {
|
|
70
|
+
ld = ld.setZone(setZone);
|
|
71
|
+
}
|
|
72
|
+
return ld;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export const dateTimeValue = (value: any, fieldDef: IFieldDef, fn: Function): string | typeof NULL => {
|
|
76
|
+
const luxonDate = getLuxonDT(value, fieldDef);
|
|
77
|
+
if (!luxonDate) {
|
|
78
|
+
return NULL;
|
|
79
|
+
}
|
|
80
|
+
const v = fn(luxonDate);
|
|
81
|
+
return q(v, fieldDef.noQuotes);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export const getDatetimeWithPrecisionAndOffset = (arg: {
|
|
85
|
+
value: any,
|
|
86
|
+
fieldDef: IFieldDef,
|
|
87
|
+
defaultDtPrecision?: number,
|
|
88
|
+
stripTrailingZeros?: boolean,
|
|
89
|
+
}): string | typeof NULL => {
|
|
90
|
+
const { value, fieldDef, defaultDtPrecision = 3, stripTrailingZeros = false } = arg;
|
|
91
|
+
const dt = getLuxonDT(value, fieldDef);
|
|
92
|
+
if (!dt) {
|
|
93
|
+
return NULL;
|
|
94
|
+
}
|
|
95
|
+
const isoZ = dt.toISO({ includeOffset: true }) || ''; // 2000-01-22T14:59:59.123+03:00
|
|
96
|
+
const iso = isoZ.substring(0, 19); // 2000-01-22T14:59:59
|
|
97
|
+
|
|
98
|
+
// Миллисекунды
|
|
99
|
+
let sss = '';
|
|
100
|
+
if (typeof value === 'string') {
|
|
101
|
+
// Если во входных данных строка с миллисекундами, то берем их с той же точностью.
|
|
102
|
+
const re = /\.(\d+)(?=[^.]*$)/;
|
|
103
|
+
const [, fracSeconds = ''] = re.exec(value) || [];
|
|
104
|
+
sss = `${fracSeconds}0000000`.substring(0, 7);
|
|
105
|
+
} else {
|
|
106
|
+
sss = `${isoZ.substring(20, 23)}0000`;
|
|
107
|
+
}
|
|
108
|
+
const dtPrecision = fieldDef.dtPrecision == null ? defaultDtPrecision : fieldDef.dtPrecision;
|
|
109
|
+
let dotMillis = !dtPrecision ? '' : `.${sss}`.substring(0, dtPrecision + 1);
|
|
110
|
+
if (dotMillis && stripTrailingZeros) {
|
|
111
|
+
dotMillis = dotMillis.replace(/([^0])0+$/, '$1');
|
|
112
|
+
if (dotMillis === '.') {
|
|
113
|
+
dotMillis = '';
|
|
114
|
+
} else if (dotMillis.length < 4) {
|
|
115
|
+
dotMillis = (`${dotMillis}000`).substring(0, 4);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const { includeOffset = true } = fieldDef.dateTimeOptions || {};
|
|
119
|
+
const offset = includeOffset ? isoZ.substring(23, isoZ.length) : ''; // +03:00
|
|
120
|
+
|
|
121
|
+
const str = `${iso}${dotMillis}${offset}`;
|
|
122
|
+
return q(str, fieldDef.noQuotes);
|
|
123
|
+
};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { rn } from 'af-tools-ts';
|
|
2
|
+
import { NULL } from '../common';
|
|
3
|
+
|
|
4
|
+
export const parseFloatNumber = (value: any): number | null => {
|
|
5
|
+
if (value == null) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
if (typeof value === 'number') {
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
if (typeof value === 'object') {
|
|
12
|
+
try {
|
|
13
|
+
value = JSON.stringify(value);
|
|
14
|
+
} catch (err) {
|
|
15
|
+
//
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
value = String(value).trim();
|
|
19
|
+
if (!value) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const v: any = parseFloat(value);
|
|
23
|
+
if (Number.isNaN(v)) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return v;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const prepareFloatNumber = (value: any): string | typeof NULL => `${parseFloatNumber(value)}`;
|
|
30
|
+
|
|
31
|
+
export const parseIntNumber = (value: any, min: number, max: number): number | typeof NULL => {
|
|
32
|
+
if (value == null) {
|
|
33
|
+
return NULL;
|
|
34
|
+
}
|
|
35
|
+
let v: any = parseFloatNumber(value);
|
|
36
|
+
if (v == null) {
|
|
37
|
+
return NULL;
|
|
38
|
+
}
|
|
39
|
+
v = Math.round(v);
|
|
40
|
+
if (v < min) {
|
|
41
|
+
v = min;
|
|
42
|
+
}
|
|
43
|
+
if (v > max) {
|
|
44
|
+
v = max;
|
|
45
|
+
}
|
|
46
|
+
return Math.floor(v);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export const parseIntNumberS = (
|
|
50
|
+
value: any,
|
|
51
|
+
type: 'tinyint' |
|
|
52
|
+
'smallint' | '_int2' |
|
|
53
|
+
'int' | 'integer' | '_int4' |
|
|
54
|
+
'bigint' | '_int8',
|
|
55
|
+
): number | typeof NULL => {
|
|
56
|
+
switch (type) {
|
|
57
|
+
case 'tinyint':
|
|
58
|
+
return parseIntNumber(value, 0, 255);
|
|
59
|
+
case 'smallint':
|
|
60
|
+
case '_int2':
|
|
61
|
+
return parseIntNumber(value, -32768, 32767);
|
|
62
|
+
case 'int':
|
|
63
|
+
case 'integer':
|
|
64
|
+
case '_int4':
|
|
65
|
+
return parseIntNumber(value, -2147483648, 2147483647);
|
|
66
|
+
case 'bigint':
|
|
67
|
+
case '_int8':
|
|
68
|
+
return parseIntNumber(value, -2147483648, 2147483647);
|
|
69
|
+
default:
|
|
70
|
+
return parseIntNumber(value, -2147483648, 2147483647);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export const prepareIntNumber = (
|
|
75
|
+
value: any,
|
|
76
|
+
min: number,
|
|
77
|
+
max: number,
|
|
78
|
+
): string | typeof NULL => `${parseIntNumber(value, min, max)}`;
|
|
79
|
+
|
|
80
|
+
export const prepareBigIntNumber = (value: any): string | typeof NULL => {
|
|
81
|
+
if (value == null) {
|
|
82
|
+
return NULL;
|
|
83
|
+
}
|
|
84
|
+
if (typeof value === 'bigint') {
|
|
85
|
+
return `${value}`;
|
|
86
|
+
}
|
|
87
|
+
let bi: BigInt;
|
|
88
|
+
try {
|
|
89
|
+
if (typeof value === 'number') {
|
|
90
|
+
const v = Math.floor(value);
|
|
91
|
+
bi = BigInt(v);
|
|
92
|
+
return `${bi}`;
|
|
93
|
+
}
|
|
94
|
+
if (typeof value === 'string') {
|
|
95
|
+
const v = value.replace(/^\++/, '').split(/[^\d-]/)[0].trim();
|
|
96
|
+
return v ? `${BigInt(v)}` : NULL;
|
|
97
|
+
}
|
|
98
|
+
} catch (err) {
|
|
99
|
+
//
|
|
100
|
+
}
|
|
101
|
+
return NULL;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export const prepareNumeric = (value: any, precision?: number, scale?: number): string | typeof NULL => {
|
|
105
|
+
if (value == null) {
|
|
106
|
+
return NULL;
|
|
107
|
+
}
|
|
108
|
+
if (!precision) {
|
|
109
|
+
if (typeof value === 'bigint') {
|
|
110
|
+
return `${value}`;
|
|
111
|
+
}
|
|
112
|
+
return prepareFloatNumber(value);
|
|
113
|
+
}
|
|
114
|
+
if (typeof value === 'bigint') {
|
|
115
|
+
return `${value}`.substring(0, precision);
|
|
116
|
+
}
|
|
117
|
+
let vn = parseFloatNumber(value);
|
|
118
|
+
if (vn == null) {
|
|
119
|
+
return NULL;
|
|
120
|
+
}
|
|
121
|
+
const maxValue = (10 ** precision - 1) / (10 ** (scale || 0));
|
|
122
|
+
const minValue = -maxValue;
|
|
123
|
+
if (vn > maxValue) {
|
|
124
|
+
return `${maxValue}`;
|
|
125
|
+
}
|
|
126
|
+
if (vn < minValue) {
|
|
127
|
+
return `${minValue}`;
|
|
128
|
+
}
|
|
129
|
+
vn = rn(vn, scale);
|
|
130
|
+
return `${vn}`;
|
|
131
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/* eslint-disable no-restricted-syntax */
|
|
2
|
+
|
|
3
|
+
import { NULL } from '../common';
|
|
4
|
+
|
|
5
|
+
const toSchemaTableCommon = (s: string): string => s.replace(/["[\]]/g, '');
|
|
6
|
+
const toSchemaTableSpec = (s: string, dbType: 'mssql' | 'ms' | 'pg'): string => {
|
|
7
|
+
const [schema, table] = toSchemaTableCommon(s).split('.');
|
|
8
|
+
return dbType === 'pg' ? `"${schema}"."${table}"` : `[${schema}].[${table}]`;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const schemaTable = {
|
|
12
|
+
to: {
|
|
13
|
+
common: toSchemaTableCommon,
|
|
14
|
+
spec: toSchemaTableSpec,
|
|
15
|
+
pg: (s: string): string => toSchemaTableSpec(s, 'pg'),
|
|
16
|
+
ms: (s: string): string => toSchemaTableSpec(s, 'ms'),
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const removePairBrackets = (s: string): string => {
|
|
21
|
+
if (!s) {
|
|
22
|
+
return s;
|
|
23
|
+
}
|
|
24
|
+
s = s.trim().replace(/\s*\(\s*/sg, '(');
|
|
25
|
+
s = s.replace(/\s*\)s*/sg, ')');
|
|
26
|
+
const [, leadB = ''] = /^(\(+)/.exec(s) || [];
|
|
27
|
+
if (!leadB) {
|
|
28
|
+
return s;
|
|
29
|
+
}
|
|
30
|
+
const [, trailB = ''] = /(\)+)$/.exec(s) || [];
|
|
31
|
+
const cnt = Math.min(leadB.length, trailB.length);
|
|
32
|
+
for (let c = 0; c < cnt; c++) {
|
|
33
|
+
s = s.substring(1, s.length - 1);
|
|
34
|
+
}
|
|
35
|
+
return s;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Оборачивает строку в одинарные кавычки, если второй аргумент не true
|
|
40
|
+
*/
|
|
41
|
+
export const q = (val: string, noQuotes?: boolean): string => (noQuotes ? val : `'${val}'`);
|
|
42
|
+
|
|
43
|
+
export const prepareJSON = (value: any): string | typeof NULL => {
|
|
44
|
+
if (value == null) {
|
|
45
|
+
return NULL;
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
value = JSON.stringify(value);
|
|
49
|
+
} catch (err) {
|
|
50
|
+
return NULL;
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export const binToHexString = (value: any): string | null => (value ? `0x${value.toString('hex').toUpperCase()}` : null);
|
|
56
|
+
|
|
57
|
+
export const prepareUUID = (v: any, toLower: boolean = false, noQuotes: boolean = false): string | typeof NULL => {
|
|
58
|
+
if (v && typeof v === 'string' && /^[A-F\d]{8}(-[A-F\d]{4}){4}[A-F\d]{8}/i.test(v)) {
|
|
59
|
+
v = v.substring(0, 36);
|
|
60
|
+
v = toLower ? v.toLowerCase() : v.toUpperCase();
|
|
61
|
+
return q(v, noQuotes);
|
|
62
|
+
}
|
|
63
|
+
return NULL;
|
|
64
|
+
};
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/* eslint-disable max-len */
|
|
3
|
-
/* eslint-disable no-console */
|
|
4
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
// "America/Toronto" -05:00
|
|
6
|
-
// "Europe/Berlin" +01:00
|
|
7
|
-
// "Europe/Moscow" +03:00
|
|
8
|
-
const src_1 = require("../src");
|
|
9
|
-
describe('sql.getValueForSqlMs() should work properly', () => {
|
|
10
|
-
describe('should parse date properly', () => {
|
|
11
|
-
const testArr = [
|
|
12
|
-
['2000-01-22T11:59:59.123', '2000-01-22T11:59:59.123'],
|
|
13
|
-
['2000-01-22T11:59:59.12', '2000-01-22T11:59:59.120'],
|
|
14
|
-
['2000-01-22T11:59:59', '2000-01-22T11:59:59.000'],
|
|
15
|
-
['2000-01-22T11:59', '2000-01-22T11:59:00.000'],
|
|
16
|
-
['2000-01-22 11:59:59.123', '2000-01-22T11:59:59.123'],
|
|
17
|
-
['2000-01-22 11:59:59.12', '2000-01-22T11:59:59.120'],
|
|
18
|
-
['2000-01-22 11:59:59.1', '2000-01-22T11:59:59.100'],
|
|
19
|
-
['2000-01-22 11:59:59', '2000-01-22T11:59:59.000'],
|
|
20
|
-
['2000-01-22 11:59', '2000-01-22T11:59:00.000'],
|
|
21
|
-
['2000-01-22 11:2', '2000-01-22T11:02:00.000'],
|
|
22
|
-
['2000-01-22 2:2', '2000-01-22T02:02:00.000'],
|
|
23
|
-
['2000-1-2 02:02', '2000-01-02T02:02:00.000'],
|
|
24
|
-
['2019-8-9 5:16:14 AM', '2019-08-09T05:16:14.000'],
|
|
25
|
-
['2019-8-9 5:16:14 PM', '2019-08-09T17:16:14.000'],
|
|
26
|
-
];
|
|
27
|
-
testArr.forEach((pair) => {
|
|
28
|
-
test(`- like '${pair[0]}'`, () => {
|
|
29
|
-
const dateStrOut = (0, src_1.getValueForSqlMs)({ value: pair[0], fieldSchema: 'datetime' });
|
|
30
|
-
expect(dateStrOut).toBe(`'${pair[1]}'`);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
describe('should work with timezone properly', () => {
|
|
35
|
-
describe('should parse date properly', () => {
|
|
36
|
-
const testArr = [
|
|
37
|
-
['2000-01-22T11:59:59.123Z', '2000-01-22T14:59:59.123'],
|
|
38
|
-
['2000-01-22T11:59:59.123+0300', '2000-01-22T11:59:59.123'],
|
|
39
|
-
['Thu Aug 08 2019 05:16:14 GMT+0300 (GMT+03:00)', '2019-08-08T05:16:14.000'],
|
|
40
|
-
];
|
|
41
|
-
testArr.forEach((pair) => {
|
|
42
|
-
test(`- like '${pair[0]}'`, () => {
|
|
43
|
-
const dateStrOut = (0, src_1.getValueForSqlMs)({ value: pair[0], fieldSchema: 'datetime' });
|
|
44
|
-
expect(dateStrOut).toBe(`'${pair[1]}'`);
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
//# sourceMappingURL=02_getValueForSqlMs.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"02_getValueForSqlMs.spec.js","sourceRoot":"","sources":["../../../__tests__/02_getValueForSqlMs.spec.ts"],"names":[],"mappings":";AAAA,4BAA4B;AAC5B,+BAA+B;;AAE/B,4BAA4B;AAC5B,4BAA4B;AAC5B,4BAA4B;AAE5B,gCAA0C;AAE1C,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;IAC3D,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,MAAM,OAAO,GAAG;YACd,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;YACtD,CAAC,wBAAwB,EAAE,yBAAyB,CAAC;YACrD,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;YAClD,CAAC,kBAAkB,EAAE,yBAAyB,CAAC;YAC/C,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;YACtD,CAAC,wBAAwB,EAAE,yBAAyB,CAAC;YACrD,CAAC,uBAAuB,EAAE,yBAAyB,CAAC;YACpD,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;YAClD,CAAC,kBAAkB,EAAE,yBAAyB,CAAC;YAC/C,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;YAC9C,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;YAC7C,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;YAC7C,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;YAClD,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;SACnD,CAAC;QACF,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACvB,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE;gBAC/B,MAAM,UAAU,GAAG,IAAA,sBAAgB,EAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;gBACjF,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAClD,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;YAC1C,MAAM,OAAO,GAAG;gBACd,CAAC,0BAA0B,EAAE,yBAAyB,CAAC;gBACvD,CAAC,8BAA8B,EAAE,yBAAyB,CAAC;gBAC3D,CAAC,+CAA+C,EAAE,yBAAyB,CAAC;aAC7E,CAAC;YACF,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACvB,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE;oBAC/B,MAAM,UAAU,GAAG,IAAA,sBAAgB,EAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;oBACjF,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC1C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|