@spinajs/orm-mssql 2.0.480 → 2.0.482
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 +89 -4
- package/lib/cjs/compilers.d.ts.map +1 -1
- package/lib/cjs/compilers.js +6 -6
- package/lib/cjs/compilers.js.map +1 -1
- package/lib/cjs/index.d.ts +12 -7
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +86 -102
- package/lib/cjs/index.js.map +1 -1
- package/lib/mjs/compilers.d.ts.map +1 -1
- package/lib/mjs/compilers.js +7 -7
- package/lib/mjs/compilers.js.map +1 -1
- package/lib/mjs/index.d.ts +12 -7
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +86 -102
- package/lib/mjs/index.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +12 -14
package/lib/mjs/index.d.ts
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
import { QueryContext, OrmDriver, IColumnDescriptor,
|
|
1
|
+
import { QueryContext, OrmDriver, IColumnDescriptor, IDriverOptions, ISupportedFeature, IsolationLevel, ITransactionContext, ITransactionOptions } from '@spinajs/orm';
|
|
2
2
|
import { SqlDriver } from '@spinajs/orm-sql';
|
|
3
3
|
import mssql from 'mssql';
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
export interface IMsSqlTransactionContext extends ITransactionContext {
|
|
5
|
+
transaction: mssql.Transaction;
|
|
6
6
|
request: mssql.Request;
|
|
7
7
|
}
|
|
8
8
|
export declare class MsSqlOrmDriver extends SqlDriver {
|
|
9
9
|
protected _connectionPool: mssql.ConnectionPool;
|
|
10
|
-
|
|
11
|
-
protected TransactionStorage: AsyncLocalStorage<IMsSqlTransactionContext>;
|
|
10
|
+
readonly SupportedIsolationLevels: IsolationLevel[];
|
|
12
11
|
constructor(options: IDriverOptions);
|
|
13
|
-
private getNextExecutionId;
|
|
14
12
|
executeOnDb(stmt: string, params: any[], context: QueryContext): Promise<any>;
|
|
15
13
|
supportedFeatures(): ISupportedFeature;
|
|
16
14
|
ping(): Promise<boolean>;
|
|
@@ -18,6 +16,13 @@ export declare class MsSqlOrmDriver extends SqlDriver {
|
|
|
18
16
|
resolve(): void;
|
|
19
17
|
disconnect(): Promise<OrmDriver>;
|
|
20
18
|
tableInfo(name: string, schema?: string): Promise<IColumnDescriptor[]>;
|
|
21
|
-
|
|
19
|
+
private msSqlCtx;
|
|
20
|
+
protected _begin(options?: ITransactionOptions): Promise<ITransactionContext>;
|
|
21
|
+
protected _commit(ctx: ITransactionContext): Promise<void>;
|
|
22
|
+
protected _rollback(ctx: ITransactionContext): Promise<void>;
|
|
23
|
+
protected _savepoint(ctx: ITransactionContext, name: string): Promise<void>;
|
|
24
|
+
protected _releaseSavepoint(_ctx: ITransactionContext, _name: string): Promise<void>;
|
|
25
|
+
protected _rollbackToSavepoint(ctx: ITransactionContext, name: string): Promise<void>;
|
|
26
|
+
protected _dispose(_ctx: ITransactionContext): Promise<void>;
|
|
22
27
|
}
|
|
23
28
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/mjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkM,YAAY,EAAE,SAAS,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkM,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAA2C,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIhZ,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;IAC/B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;CACxB;AAiBD,qBAEa,cAAe,SAAQ,SAAS;IAC3C,SAAS,CAAC,eAAe,EAAE,KAAK,CAAC,cAAc,CAAe;IAK9D,SAAgB,wBAAwB,EAAE,cAAc,EAAE,CAA6E;gBAE3H,OAAO,EAAE,cAAc;IAItB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC;IA2CnF,iBAAiB,IAAI,iBAAiB;IAUhC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IASxB,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;IAoCnC,OAAO;IAgBD,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;IAQhC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAsCnF,OAAO,CAAC,QAAQ;cAIA,MAAM,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;cASnE,OAAO,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;cAIhD,SAAS,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;cAMlD,UAAU,CAAC,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAIjE,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAK1E,oBAAoB,CAAC,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAI3E,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAGnE"}
|
package/lib/mjs/index.js
CHANGED
|
@@ -10,88 +10,78 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
import { DatetimeValueConverter, DeleteQueryCompiler, ModelDehydrator, TableAliasCompiler, OnDuplicateQueryCompiler, OrderByQueryCompiler, TableQueryCompiler, ColumnQueryCompiler, InsertQueryCompiler, QueryContext, TableExistsCompiler, LimitQueryCompiler } from '@spinajs/orm';
|
|
11
11
|
/* eslint-disable security/detect-object-injection */
|
|
12
12
|
import { Injectable, NewInstance } from '@spinajs/di';
|
|
13
|
-
import { LogLevel } from '@spinajs/log-common';
|
|
14
13
|
import { SqlDriver } from '@spinajs/orm-sql';
|
|
15
14
|
import mssql from 'mssql';
|
|
16
15
|
import { MsSqlTableExistsCompiler, MsSqlLimitCompiler, MsSqlOrderByCompiler, MsSqlTableQueryCompiler, MsSqlColumnQueryCompiler, MsSqlInsertQueryCompiler, MsSqlDeleteQueryCompiler, MsSqlTableAliasCompiler, MsSqlOnDuplicateQueryCompiler } from './compilers.js';
|
|
17
16
|
import { MssqlModelDehydrator } from './dehydrator.js';
|
|
18
17
|
import { MsSqlDatetimeValueConverter } from './converters.js';
|
|
19
|
-
|
|
18
|
+
const MSSQL_ISOLATION_LEVELS = {
|
|
19
|
+
'READ UNCOMMITTED': mssql.ISOLATION_LEVEL.READ_UNCOMMITTED,
|
|
20
|
+
'READ COMMITTED': mssql.ISOLATION_LEVEL.READ_COMMITTED,
|
|
21
|
+
'REPEATABLE READ': mssql.ISOLATION_LEVEL.REPEATABLE_READ,
|
|
22
|
+
SERIALIZABLE: mssql.ISOLATION_LEVEL.SERIALIZABLE,
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* MSSQL quotes identifiers with brackets and escapes an embedded `]` by doubling it — the
|
|
26
|
+
* shared `orm-sql` helper emits backticks, which SQL Server does not understand.
|
|
27
|
+
*/
|
|
28
|
+
function msSqlEscapeIdentifier(name) {
|
|
29
|
+
return '[' + String(name).replace(/]/g, ']]') + ']';
|
|
30
|
+
}
|
|
20
31
|
let MsSqlOrmDriver = class MsSqlOrmDriver extends SqlDriver {
|
|
21
32
|
constructor(options) {
|
|
22
33
|
super(Object.assign({ AliasSeparator: '#' }, options));
|
|
23
34
|
this._connectionPool = null;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
this._executionId = (this._executionId + 1) % Number.MAX_SAFE_INTEGER;
|
|
29
|
-
return this._executionId;
|
|
35
|
+
// `_executionId` went with the per-driver query timing master centralised, and
|
|
36
|
+
// `TransactionStorage` moved up to OrmDriver so ambient-connection propagation is part of
|
|
37
|
+
// the contract rather than each driver's own business.
|
|
38
|
+
this.SupportedIsolationLevels = ['READ UNCOMMITTED', 'READ COMMITTED', 'REPEATABLE READ', 'SERIALIZABLE'];
|
|
30
39
|
}
|
|
31
40
|
async executeOnDb(stmt, params, context) {
|
|
32
|
-
const tName = `query-${this.getNextExecutionId()}`;
|
|
33
41
|
let finalQuery = stmt.replaceAll('`', '');
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const tDiff = this.Log.timeEnd(`query-${tName}`);
|
|
52
|
-
void this.Log.write({
|
|
53
|
-
Level: LogLevel.Trace,
|
|
54
|
-
Variables: {
|
|
55
|
-
error: undefined,
|
|
56
|
-
message: `Executed: ${finalQuery}, bindings: ${params ? params.join(',') : 'none'}`,
|
|
57
|
-
logger: this.Log.Name,
|
|
58
|
-
level: 'TRACE',
|
|
59
|
-
duration: tDiff,
|
|
60
|
-
},
|
|
61
|
-
});
|
|
62
|
-
switch (context) {
|
|
63
|
-
case QueryContext.Update:
|
|
64
|
-
case QueryContext.Delete:
|
|
65
|
-
return {
|
|
66
|
-
RowsAffected: result.rowsAffected[0],
|
|
67
|
-
};
|
|
68
|
-
case QueryContext.Insert:
|
|
69
|
-
return {
|
|
70
|
-
RowsAffected: result.rowsAffected[0],
|
|
71
|
-
LastInsertId: result.recordset[0].ID,
|
|
72
|
-
};
|
|
73
|
-
default:
|
|
74
|
-
return result.recordset;
|
|
75
|
-
}
|
|
42
|
+
// Check if we're inside a transaction context and use that request.
|
|
43
|
+
// The context comes from the base driver; only this driver's `_begin` populates it, so
|
|
44
|
+
// it must be narrowed from ITransactionContext to read `request`.
|
|
45
|
+
const txContext = this.TransactionStorage.getStore();
|
|
46
|
+
const req = txContext?.request ?? this._connectionPool.request();
|
|
47
|
+
let idx = 0;
|
|
48
|
+
let i = 0;
|
|
49
|
+
// No try/finally here any more: it only ever existed to bracket this driver's own
|
|
50
|
+
// timeStart/timeEnd logging, which master centralised into `Perf.measure('orm.query')`.
|
|
51
|
+
/**
|
|
52
|
+
* Brute force replacement ? for @parameters
|
|
53
|
+
* MSSQL driver requires named parameters in query string
|
|
54
|
+
*/
|
|
55
|
+
while ((idx = finalQuery.indexOf('?')) !== -1) {
|
|
56
|
+
finalQuery = finalQuery.substring(0, idx) + `@p${i}` + finalQuery.substring(idx + 1, finalQuery.length);
|
|
57
|
+
req.input(`p${i}`, params[i]);
|
|
58
|
+
i++;
|
|
76
59
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
60
|
+
const result = await req.query(finalQuery);
|
|
61
|
+
switch (context) {
|
|
62
|
+
case QueryContext.Update:
|
|
63
|
+
case QueryContext.Delete:
|
|
64
|
+
return {
|
|
65
|
+
RowsAffected: result.rowsAffected[0],
|
|
66
|
+
};
|
|
67
|
+
case QueryContext.Insert:
|
|
68
|
+
return {
|
|
69
|
+
RowsAffected: result.rowsAffected[0],
|
|
70
|
+
// SCOPE_IDENTITY() path; MSSQL keeps no RETURNING rows here.
|
|
71
|
+
LastInsertId: result.recordset?.[0]?.ID ?? 0,
|
|
72
|
+
Returning: [],
|
|
73
|
+
};
|
|
74
|
+
default:
|
|
75
|
+
return result.recordset;
|
|
90
76
|
}
|
|
91
77
|
}
|
|
92
78
|
supportedFeatures() {
|
|
93
79
|
return {
|
|
94
80
|
events: true,
|
|
81
|
+
insertReturning: false,
|
|
82
|
+
// SCOPE_IDENTITY() reports the LAST identity generated in the scope, so a multi-row insert
|
|
83
|
+
// cannot be walked forwards from it. MSSQL opts out of the batch key backfill.
|
|
84
|
+
insertIdIsFirstOfBatch: false,
|
|
95
85
|
};
|
|
96
86
|
}
|
|
97
87
|
async ping() {
|
|
@@ -115,9 +105,10 @@ let MsSqlOrmDriver = class MsSqlOrmDriver extends SqlDriver {
|
|
|
115
105
|
cryptoCredentialsDetails: this.Options.Options?.CryptoCredentialsDetails ? this.Options.Options?.CryptoCredentialsDetails : {},
|
|
116
106
|
},
|
|
117
107
|
pool: {
|
|
118
|
-
max: this.
|
|
119
|
-
min:
|
|
120
|
-
idleTimeoutMillis:
|
|
108
|
+
max: this.resolvedPoolOptions().Max,
|
|
109
|
+
min: this.resolvedPoolOptions().Min,
|
|
110
|
+
idleTimeoutMillis: this.resolvedPoolOptions().IdleTimeout,
|
|
111
|
+
acquireTimeoutMillis: this.resolvedPoolOptions().AcquireTimeout,
|
|
121
112
|
},
|
|
122
113
|
}));
|
|
123
114
|
await this.executeOnDb(`USE ${this.Options.Database}`, [], QueryContext.Schema);
|
|
@@ -191,42 +182,35 @@ let MsSqlOrmDriver = class MsSqlOrmDriver extends SqlDriver {
|
|
|
191
182
|
};
|
|
192
183
|
});
|
|
193
184
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
};
|
|
199
|
-
if (!queryOrCallback) {
|
|
200
|
-
return trx;
|
|
201
|
-
}
|
|
185
|
+
msSqlCtx(ctx) {
|
|
186
|
+
return ctx;
|
|
187
|
+
}
|
|
188
|
+
async _begin(options) {
|
|
202
189
|
const transaction = this._connectionPool.transaction();
|
|
203
|
-
await transaction.begin();
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
await transaction.rollback();
|
|
228
|
-
throw err;
|
|
229
|
-
}
|
|
190
|
+
await transaction.begin(options?.isolation ? MSSQL_ISOLATION_LEVELS[options.isolation] : undefined);
|
|
191
|
+
const ctx = { transaction, request: transaction.request(), depth: 0 };
|
|
192
|
+
return ctx;
|
|
193
|
+
}
|
|
194
|
+
async _commit(ctx) {
|
|
195
|
+
await this.msSqlCtx(ctx).transaction.commit();
|
|
196
|
+
}
|
|
197
|
+
async _rollback(ctx) {
|
|
198
|
+
await this.msSqlCtx(ctx).transaction.rollback();
|
|
199
|
+
}
|
|
200
|
+
// savepoint names cannot be bound parameters, so they are inlined with MSSQL's own
|
|
201
|
+
// bracket quoting rather than the backtick dialect the shared SQL layer uses
|
|
202
|
+
async _savepoint(ctx, name) {
|
|
203
|
+
await this.msSqlCtx(ctx).request.query(`SAVE TRANSACTION ${msSqlEscapeIdentifier(name)}`);
|
|
204
|
+
}
|
|
205
|
+
async _releaseSavepoint(_ctx, _name) {
|
|
206
|
+
// MSSQL has no RELEASE SAVEPOINT: a save point simply stops being reachable once the
|
|
207
|
+
// enclosing transaction commits. Nothing to do, but the contract requires the hook.
|
|
208
|
+
}
|
|
209
|
+
async _rollbackToSavepoint(ctx, name) {
|
|
210
|
+
await this.msSqlCtx(ctx).request.query(`ROLLBACK TRANSACTION ${msSqlEscapeIdentifier(name)}`);
|
|
211
|
+
}
|
|
212
|
+
async _dispose(_ctx) {
|
|
213
|
+
// no-op: `mssql` owns the pooling and reclaims the transaction's connection itself
|
|
230
214
|
}
|
|
231
215
|
};
|
|
232
216
|
MsSqlOrmDriver = __decorate([
|
package/lib/mjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,eAAe,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|