vona-module-a-orm 5.1.29 → 5.1.31
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/.metadata/index.d.ts.map +1 -1
- package/dist/index.js +142 -43
- package/dist/index.js.map +1 -1
- package/dist/lib/bean.model/bean.model_view.d.ts.map +1 -1
- package/dist/service/columns_.d.ts.map +1 -1
- package/dist/service/databaseDialectBase_.d.ts +24 -3
- package/dist/service/databaseDialectBase_.d.ts.map +1 -1
- package/dist/service/transactionFiber_.d.ts +2 -0
- package/dist/service/transactionFiber_.d.ts.map +1 -1
- package/dist/service/transaction_.d.ts.map +1 -1
- package/dist/types/columns.d.ts +1 -0
- package/dist/types/columns.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/.metadata/index.ts +34 -39
- package/src/lib/bean.model/bean.model_view.ts +10 -6
- package/src/service/columns_.ts +1 -2
- package/src/service/databaseDialectBase_.ts +140 -33
- package/src/service/transactionFiber_.ts +8 -2
- package/src/service/transaction_.ts +5 -8
- package/src/types/columns.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/.metadata/index.ts"],"names":[],"mappings":"AACA,uBAAuB;AACvB,cAAc,kCAAkC,CAAC;AACjD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,sBAAsB,CAAC;AAC9B,OAAO,QAAQ,sBAAsB,CAAC;IAElC,UAAiB,gBAAgB;QAC/B,mBAAmB,EAAE,4BAA4B,CAAC;KACnD;CAGJ;AACD,OAAO,QAAQ,mBAAmB,CAAC;IAE3B,UAAiB,oBAAoB;KAGpC;IAEC,UAAiB,oBAAoB;QACnC,IAAI,aAAa,IAAI,6BAA6B,CAAC;QACnD,IAAI,UAAU,IAAI,mBAAmB,CAAC;QACtC,IAAI,aAAa,IAAI,4BAA4B,CAAC;KACnD;CACV;AACD,qBAAqB;AACrB,kBAAkB;AAClB,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AAEtC,OAAO,MAAM,CAAC;AACd,OAAO,QAAQ,MAAM,CAAC;CAGrB;AACD,OAAO,QAAQ,mBAAmB,CAAC;IAE3B,UAAiB,YAAY;KAG5B;CACR;AACD,gBAAgB;AAChB,kBAAkB;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,MAAM,CAAC;AACd,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAiB,iBAAiB;QAChC,UAAU,EAAE,YAAY,CAAC;QACzB,OAAO,EAAE,SAAS,CAAC;KACpB;CACF;AACD,gBAAgB;AAChB,qBAAqB;AACrB,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0CAA0C,CAAC;AACzD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6CAA6C,CAAC;AAC5D,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAE3C,OAAO,oBAAoB,CAAC;AAC5B,OAAO,QAAQ,oBAAoB,CAAC;IAEhC,UAAiB,cAAc;QAC7B,gBAAgB,EAAE,KAAK,CAAC;KACzB;CAGJ;AACD,OAAO,QAAQ,mBAAmB,CAAC;IAE3B,UAAiB,eAAe;KAG/B;IAEC,UAAiB,eAAe;QAC9B,IAAI,aAAa,IAAI,wBAAwB,CAAC;QAC9C,IAAI,UAAU,IAAI,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/.metadata/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -142,8 +142,7 @@ let ServiceColumns = class ServiceColumns extends BeanBase {
|
|
|
142
142
|
let columns = this.serviceColumnsCache.getColumnsCache(tableName);
|
|
143
143
|
if (!columns) {
|
|
144
144
|
const dialect = this.db.dialect;
|
|
145
|
-
const
|
|
146
|
-
const map = await connection(tableName).columnInfo();
|
|
145
|
+
const map = await dialect.fetchColumns(this.db.connection, tableName);
|
|
147
146
|
columns = {};
|
|
148
147
|
for (const name in map) {
|
|
149
148
|
columns[name] = dialect.coerceColumn(map[name]);
|
|
@@ -361,14 +360,18 @@ let ServiceTransactionFiber = class ServiceTransactionFiber extends BeanBase {
|
|
|
361
360
|
}
|
|
362
361
|
async doCommit() {
|
|
363
362
|
await this._connection.commit();
|
|
364
|
-
await this._transactionConsistency.commitsDone();
|
|
365
363
|
this._connection = undefined;
|
|
366
364
|
}
|
|
367
365
|
async doRollback() {
|
|
368
366
|
await this._connection.rollback();
|
|
369
|
-
await this._transactionConsistency.compensatesDone();
|
|
370
367
|
this._connection = undefined;
|
|
371
368
|
}
|
|
369
|
+
async commitsDone() {
|
|
370
|
+
await this._transactionConsistency.commitsDone();
|
|
371
|
+
}
|
|
372
|
+
async compensatesDone() {
|
|
373
|
+
await this._transactionConsistency.compensatesDone();
|
|
374
|
+
}
|
|
372
375
|
};
|
|
373
376
|
ServiceTransactionFiber = __decorate([Service(), BeanInfo({
|
|
374
377
|
module: "a-orm"
|
|
@@ -529,20 +532,17 @@ let ServiceTransaction = class ServiceTransaction extends BeanBase {
|
|
|
529
532
|
if (fiber) {
|
|
530
533
|
await fiber.doRollback();
|
|
531
534
|
this.transactionState.remove(this._db);
|
|
535
|
+
await fiber.compensatesDone();
|
|
532
536
|
}
|
|
533
537
|
throw err;
|
|
534
538
|
}
|
|
535
|
-
|
|
536
|
-
|
|
539
|
+
if (fiber) {
|
|
540
|
+
try {
|
|
537
541
|
await fiber.doCommit();
|
|
542
|
+
} finally {
|
|
538
543
|
this.transactionState.remove(this._db);
|
|
539
544
|
}
|
|
540
|
-
|
|
541
|
-
if (fiber) {
|
|
542
|
-
await fiber.doRollback();
|
|
543
|
-
this.transactionState.remove(this._db);
|
|
544
|
-
}
|
|
545
|
-
throw err;
|
|
545
|
+
await fiber.commitsDone();
|
|
546
546
|
}
|
|
547
547
|
return res;
|
|
548
548
|
}
|
|
@@ -1621,22 +1621,26 @@ class BeanModelView extends BeanModelKnex {
|
|
|
1621
1621
|
}
|
|
1622
1622
|
async createTable(tableName, callback) {
|
|
1623
1623
|
await this.schema.createTable(tableName, callback);
|
|
1624
|
+
this.db.columns.columnsClear(tableName);
|
|
1624
1625
|
}
|
|
1625
1626
|
async dropTable(tableName) {
|
|
1626
1627
|
await this.schema.dropTable(tableName);
|
|
1628
|
+
this.db.columns.columnsClear(tableName);
|
|
1627
1629
|
}
|
|
1628
1630
|
async alterTable(tableName, callback, alterViewAuto) {
|
|
1629
1631
|
if (!alterViewAuto) {
|
|
1630
1632
|
// alter table
|
|
1631
|
-
return await this.schema.alterTable(tableName, table => {
|
|
1632
|
-
return callback(table);
|
|
1633
|
-
});
|
|
1634
|
-
}
|
|
1635
|
-
await this._viewDependentsAll_handle(tableName, async () => {
|
|
1636
1633
|
await this.schema.alterTable(tableName, table => {
|
|
1637
1634
|
return callback(table);
|
|
1638
1635
|
});
|
|
1639
|
-
}
|
|
1636
|
+
} else {
|
|
1637
|
+
await this._viewDependentsAll_handle(tableName, async () => {
|
|
1638
|
+
await this.schema.alterTable(tableName, table => {
|
|
1639
|
+
return callback(table);
|
|
1640
|
+
});
|
|
1641
|
+
});
|
|
1642
|
+
}
|
|
1643
|
+
this.db.columns.columnsClear(tableName);
|
|
1640
1644
|
}
|
|
1641
1645
|
async viewDependents(viewName) {
|
|
1642
1646
|
// builder
|
|
@@ -2152,10 +2156,11 @@ ServiceCacheQuery = __decorate([Service(), BeanInfo({
|
|
|
2152
2156
|
})], ServiceCacheQuery);
|
|
2153
2157
|
|
|
2154
2158
|
const BOOLEAN_COLUMN_TYPES = ['bit', 'bool', 'boolean'];
|
|
2155
|
-
const
|
|
2156
|
-
const
|
|
2157
|
-
const
|
|
2158
|
-
const
|
|
2159
|
+
const INTEGER_COLUMN_TYPES = ['tinyint', 'smallint', 'mediumint', 'int', 'integer'];
|
|
2160
|
+
const FLOAT_COLUMN_TYPES = ['float', 'double'];
|
|
2161
|
+
const GENERATED_DEFAULT_PATTERN = /^(?:current_timestamp\b(?:\s*\(\s*\d*\s*\))?|current_date\b|current_time\b(?:\s*\(\s*\d*\s*\))?|now\s*\(\s*\)|nextval\s*\()/i;
|
|
2162
|
+
const NUMBER_LITERAL_PATTERN = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i;
|
|
2163
|
+
const QUOTED_LITERAL_PATTERN = /^'((?:''|[^'])*)'$/;
|
|
2159
2164
|
let ServiceDatabaseDialectBase = class ServiceDatabaseDialectBase extends BeanBase {
|
|
2160
2165
|
constructor(...args) {
|
|
2161
2166
|
super(...args);
|
|
@@ -2187,6 +2192,9 @@ let ServiceDatabaseDialectBase = class ServiceDatabaseDialectBase extends BeanBa
|
|
|
2187
2192
|
async select(_builder, datas, _fn) {
|
|
2188
2193
|
return datas;
|
|
2189
2194
|
}
|
|
2195
|
+
async fetchColumns(connection, tableName) {
|
|
2196
|
+
return await connection(tableName).columnInfo();
|
|
2197
|
+
}
|
|
2190
2198
|
query(_result) {
|
|
2191
2199
|
throw new Error('Not Implemented');
|
|
2192
2200
|
}
|
|
@@ -2197,9 +2205,27 @@ let ServiceDatabaseDialectBase = class ServiceDatabaseDialectBase extends BeanBa
|
|
|
2197
2205
|
const result = {
|
|
2198
2206
|
type: column.type
|
|
2199
2207
|
};
|
|
2200
|
-
|
|
2208
|
+
const columnType = column.columnType;
|
|
2209
|
+
if (columnType) result.columnType = columnType;
|
|
2210
|
+
result.default = this._coerceColumnValue(result, column.defaultValue);
|
|
2201
2211
|
return result;
|
|
2202
2212
|
}
|
|
2213
|
+
_isMysqlBooleanColumn(column) {
|
|
2214
|
+
return column.columnType?.trim().toLowerCase() === 'tinyint(1)';
|
|
2215
|
+
}
|
|
2216
|
+
async selectAsMysql(_builder, datas, fn) {
|
|
2217
|
+
const columns = await fn();
|
|
2218
|
+
for (const data of datas) {
|
|
2219
|
+
for (const columnName in columns) {
|
|
2220
|
+
const column = columns[columnName];
|
|
2221
|
+
if (Object.prototype.hasOwnProperty.call(data, columnName) && this._isMysqlBooleanColumn(column)) {
|
|
2222
|
+
const value = data[columnName];
|
|
2223
|
+
if (!isNil(value)) data[columnName] = safeBoolean(value);
|
|
2224
|
+
}
|
|
2225
|
+
}
|
|
2226
|
+
}
|
|
2227
|
+
return datas;
|
|
2228
|
+
}
|
|
2203
2229
|
async selectAsSqlite3(_builder, datas, fn) {
|
|
2204
2230
|
const columns = await fn();
|
|
2205
2231
|
// data
|
|
@@ -2208,7 +2234,9 @@ let ServiceDatabaseDialectBase = class ServiceDatabaseDialectBase extends BeanBa
|
|
|
2208
2234
|
const column = columns[columnName];
|
|
2209
2235
|
if (Object.prototype.hasOwnProperty.call(data, columnName)) {
|
|
2210
2236
|
const value = data[columnName];
|
|
2211
|
-
if (column.type
|
|
2237
|
+
if (BOOLEAN_COLUMN_TYPES.includes(column.type) && !isNil(value)) {
|
|
2238
|
+
data[columnName] = safeBoolean(value);
|
|
2239
|
+
} else if (column.type === 'json' && !isNil(value) && typeof value === 'string') {
|
|
2212
2240
|
data[columnName] = JSON.parse(value);
|
|
2213
2241
|
} else if (column.type === 'datetime' && !isNil(value)) {
|
|
2214
2242
|
data[columnName] = new Date(value);
|
|
@@ -2247,30 +2275,101 @@ let ServiceDatabaseDialectBase = class ServiceDatabaseDialectBase extends BeanBa
|
|
|
2247
2275
|
const items = await builder;
|
|
2248
2276
|
return [items.map(item => item.id), builder];
|
|
2249
2277
|
}
|
|
2250
|
-
_coerceColumnValue(
|
|
2278
|
+
_coerceColumnValue(column, value) {
|
|
2251
2279
|
if (isNil(value)) return undefined;
|
|
2252
|
-
if (
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
if (this.
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
if (
|
|
2261
|
-
|
|
2280
|
+
if (typeof value !== 'string') {
|
|
2281
|
+
return this._isBooleanColumn(column) ? safeBoolean(value) : value;
|
|
2282
|
+
}
|
|
2283
|
+
const literal = this._coerceColumnLiteral(value);
|
|
2284
|
+
if (literal === undefined) return undefined;
|
|
2285
|
+
if (this._isBooleanColumn(column)) return safeBoolean(literal.value);
|
|
2286
|
+
if (literal.kind === 'boolean') return literal.value;
|
|
2287
|
+
const type = this._columnTypeName(column.type);
|
|
2288
|
+
if (literal.kind === 'string') return literal.value;
|
|
2289
|
+
if (INTEGER_COLUMN_TYPES.includes(type)) return this._safeInteger(literal.value);
|
|
2290
|
+
if (FLOAT_COLUMN_TYPES.includes(type)) return this._safeNumber(literal.value);
|
|
2291
|
+
return literal.value;
|
|
2292
|
+
}
|
|
2293
|
+
_isBooleanColumn(column) {
|
|
2294
|
+
return this._isMysqlBooleanColumn(column) || BOOLEAN_COLUMN_TYPES.includes(this._columnTypeName(column.type));
|
|
2295
|
+
}
|
|
2296
|
+
_columnTypeName(type) {
|
|
2297
|
+
return type.trim().toLowerCase().match(/^\w+/)?.[0] ?? '';
|
|
2298
|
+
}
|
|
2299
|
+
_coerceColumnLiteral(value) {
|
|
2300
|
+
const literal = this._unwrapColumnDefault(value);
|
|
2301
|
+
if (literal === '') return undefined;
|
|
2302
|
+
const literalLower = literal.toLowerCase();
|
|
2303
|
+
if (literalLower === 'null' || GENERATED_DEFAULT_PATTERN.test(literal)) return undefined;
|
|
2304
|
+
const quoted = literal.match(QUOTED_LITERAL_PATTERN);
|
|
2305
|
+
if (quoted) return {
|
|
2306
|
+
kind: 'string',
|
|
2307
|
+
value: quoted[1].replaceAll("''", "'")
|
|
2308
|
+
};
|
|
2309
|
+
if (literalLower === 'true' || literalLower === 't') return {
|
|
2310
|
+
kind: 'boolean',
|
|
2311
|
+
value: true
|
|
2312
|
+
};
|
|
2313
|
+
if (literalLower === 'false' || literalLower === 'f') return {
|
|
2314
|
+
kind: 'boolean',
|
|
2315
|
+
value: false
|
|
2316
|
+
};
|
|
2317
|
+
if (NUMBER_LITERAL_PATTERN.test(literal)) return {
|
|
2318
|
+
kind: 'number',
|
|
2319
|
+
value: literal
|
|
2320
|
+
};
|
|
2321
|
+
if (this._isExpressionColumnDefault(literal)) return undefined;
|
|
2322
|
+
return {
|
|
2323
|
+
kind: 'string',
|
|
2324
|
+
value: literal
|
|
2325
|
+
};
|
|
2326
|
+
}
|
|
2327
|
+
_unwrapColumnDefault(value) {
|
|
2328
|
+
let literal = value.trim();
|
|
2329
|
+
while (literal.startsWith('(') && literal.endsWith(')')) {
|
|
2330
|
+
const inner = literal.slice(1, -1).trim();
|
|
2331
|
+
if (!inner || !this._isColumnDefaultBalanced(inner)) break;
|
|
2332
|
+
literal = inner;
|
|
2333
|
+
}
|
|
2334
|
+
const castIndex = literal.indexOf('::');
|
|
2335
|
+
if (castIndex > 0 && this._isScalarColumnDefault(literal.slice(0, castIndex).trim())) {
|
|
2336
|
+
literal = literal.slice(0, castIndex).trim();
|
|
2337
|
+
}
|
|
2338
|
+
return literal;
|
|
2339
|
+
}
|
|
2340
|
+
_isScalarColumnDefault(value) {
|
|
2341
|
+
return value.toLowerCase() === 'null' || QUOTED_LITERAL_PATTERN.test(value) || value.toLowerCase() === 'true' || value.toLowerCase() === 'false' || NUMBER_LITERAL_PATTERN.test(value);
|
|
2342
|
+
}
|
|
2343
|
+
_isColumnDefaultBalanced(value) {
|
|
2344
|
+
let depth = 0;
|
|
2345
|
+
let quoted = false;
|
|
2346
|
+
for (let index = 0; index < value.length; index++) {
|
|
2347
|
+
const char = value[index];
|
|
2348
|
+
if (char === "'") {
|
|
2349
|
+
if (quoted && value[index + 1] === "'") {
|
|
2350
|
+
index++;
|
|
2351
|
+
} else {
|
|
2352
|
+
quoted = !quoted;
|
|
2353
|
+
}
|
|
2354
|
+
} else if (!quoted && char === '(') {
|
|
2355
|
+
depth++;
|
|
2356
|
+
} else if (!quoted && char === ')') {
|
|
2357
|
+
if (depth === 0) return false;
|
|
2358
|
+
depth--;
|
|
2359
|
+
}
|
|
2262
2360
|
}
|
|
2263
|
-
|
|
2264
|
-
if (value.indexOf('NULL::') === 0) return undefined;
|
|
2265
|
-
return value;
|
|
2361
|
+
return !quoted && depth === 0;
|
|
2266
2362
|
}
|
|
2267
|
-
|
|
2268
|
-
|
|
2363
|
+
_isExpressionColumnDefault(value) {
|
|
2364
|
+
return /[()*/+\-\s]/.test(value);
|
|
2365
|
+
}
|
|
2366
|
+
_safeInteger(value) {
|
|
2269
2367
|
const num = Number(value);
|
|
2270
|
-
return Number.
|
|
2368
|
+
return Number.isSafeInteger(num) ? num : value;
|
|
2271
2369
|
}
|
|
2272
|
-
|
|
2273
|
-
|
|
2370
|
+
_safeNumber(value) {
|
|
2371
|
+
const num = Number(value);
|
|
2372
|
+
return Number.isFinite(num) ? num : undefined;
|
|
2274
2373
|
}
|
|
2275
2374
|
};
|
|
2276
2375
|
ServiceDatabaseDialectBase = __decorate([Service(), Virtual(), BeanInfo({
|