@memberjunction/sqlserver-dataprovider 6.2.0-edge.5 → 6.2.0-edge.7
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/SQLServerDataProvider.d.ts +38 -13
- package/dist/SQLServerDataProvider.d.ts.map +1 -1
- package/dist/SQLServerDataProvider.js +218 -52
- package/dist/SQLServerDataProvider.js.map +1 -1
- package/dist/SQLServerTransactionGroup.js +1 -1
- package/dist/SQLServerTransactionGroup.js.map +1 -1
- package/dist/statementDescription.d.ts +31 -0
- package/dist/statementDescription.d.ts.map +1 -0
- package/dist/statementDescription.js +46 -0
- package/dist/statementDescription.js.map +1 -0
- package/dist/typedParameters.d.ts +15 -0
- package/dist/typedParameters.d.ts.map +1 -0
- package/dist/typedParameters.js +85 -0
- package/dist/typedParameters.js.map +1 -0
- package/package.json +16 -16
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binding {@link TypedQueryParameter}s on SQL Server: each becomes a named input declared with the
|
|
3
|
+
* driver type its SQL type names, so the statement compares a column with a value of the
|
|
4
|
+
* column's own type (a varchar column with a varchar value, not an nvarchar one).
|
|
5
|
+
*/
|
|
6
|
+
import sql from 'mssql';
|
|
7
|
+
function parseSQLType(sqlType) {
|
|
8
|
+
// Trimmed first so no two whitespace runs in the pattern can compete for the same characters
|
|
9
|
+
// (that overlap made a crafted type string cost quadratic time); arguments are trimmed below.
|
|
10
|
+
const match = /^([A-Za-z][A-Za-z0-9_]*)\s*(?:\(([^)]*)\))?$/.exec(sqlType.trim());
|
|
11
|
+
if (!match)
|
|
12
|
+
return null;
|
|
13
|
+
const args = match[2] === undefined ? [] : match[2].split(',').map(a => a.trim().toLowerCase());
|
|
14
|
+
return { Base: match[1].toLowerCase(), Args: args };
|
|
15
|
+
}
|
|
16
|
+
/** A length argument: `max` is the driver's MAX; otherwise a positive integer. */
|
|
17
|
+
function lengthArg(args) {
|
|
18
|
+
if (args.length === 0)
|
|
19
|
+
return null;
|
|
20
|
+
if (args[0] === 'max')
|
|
21
|
+
return sql.MAX;
|
|
22
|
+
const n = Number(args[0]);
|
|
23
|
+
return Number.isInteger(n) && n > 0 ? n : null;
|
|
24
|
+
}
|
|
25
|
+
function intArg(args, index) {
|
|
26
|
+
const n = Number(args[index]);
|
|
27
|
+
return args[index] !== undefined && Number.isInteger(n) && n >= 0 ? n : undefined;
|
|
28
|
+
}
|
|
29
|
+
/** Character and binary types, sized by their length argument (or the type's default length). */
|
|
30
|
+
function sizedType(parsed) {
|
|
31
|
+
const length = lengthArg(parsed.Args);
|
|
32
|
+
switch (parsed.Base) {
|
|
33
|
+
case 'varchar': return length === null ? sql.VarChar() : sql.VarChar(length);
|
|
34
|
+
case 'nvarchar': return length === null ? sql.NVarChar() : sql.NVarChar(length);
|
|
35
|
+
case 'char': return length === null ? sql.Char() : sql.Char(length);
|
|
36
|
+
case 'nchar': return length === null ? sql.NChar() : sql.NChar(length);
|
|
37
|
+
case 'varbinary': return length === null ? sql.VarBinary() : sql.VarBinary(length);
|
|
38
|
+
default: return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Date, time and numeric types with precision or scale arguments. */
|
|
42
|
+
function scaledType(parsed) {
|
|
43
|
+
const a = parsed.Args;
|
|
44
|
+
switch (parsed.Base) {
|
|
45
|
+
case 'datetime2': return sql.DateTime2(intArg(a, 0));
|
|
46
|
+
case 'datetimeoffset': return sql.DateTimeOffset(intArg(a, 0));
|
|
47
|
+
case 'time': return sql.Time(intArg(a, 0));
|
|
48
|
+
case 'decimal': return sql.Decimal(intArg(a, 0), intArg(a, 1));
|
|
49
|
+
case 'numeric': return sql.Numeric(intArg(a, 0), intArg(a, 1));
|
|
50
|
+
default: return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** Types that take no arguments. */
|
|
54
|
+
const PLAIN_TYPES = {
|
|
55
|
+
int: () => sql.Int(), bigint: () => sql.BigInt(), smallint: () => sql.SmallInt(), tinyint: () => sql.TinyInt(),
|
|
56
|
+
bit: () => sql.Bit(), uniqueidentifier: () => sql.UniqueIdentifier(), date: () => sql.Date(), datetime: () => sql.DateTime(),
|
|
57
|
+
smalldatetime: () => sql.SmallDateTime(), float: () => sql.Float(), real: () => sql.Real(), money: () => sql.Money(),
|
|
58
|
+
smallmoney: () => sql.SmallMoney(),
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* The `mssql` driver type for a SQL Server type name such as `varchar(50)`, `nvarchar(max)`,
|
|
62
|
+
* `datetime2(7)` or `decimal(18,2)`; null for a type this binding does not know.
|
|
63
|
+
*/
|
|
64
|
+
export function MssqlTypeFor(sqlType) {
|
|
65
|
+
const parsed = parseSQLType(sqlType);
|
|
66
|
+
if (!parsed)
|
|
67
|
+
return null;
|
|
68
|
+
const plain = PLAIN_TYPES[parsed.Base];
|
|
69
|
+
return plain ? plain() : sizedType(parsed) ?? scaledType(parsed);
|
|
70
|
+
}
|
|
71
|
+
/** Adds each parameter to `request` as a named input declared with its type. */
|
|
72
|
+
export function BindTypedParameters(request, parameters) {
|
|
73
|
+
for (const p of parameters) {
|
|
74
|
+
const type = MssqlTypeFor(p.SQLType);
|
|
75
|
+
if (!type) {
|
|
76
|
+
throw new Error(`Parameter '${p.Name}' has the SQL type '${p.SQLType}', which the SQL Server binding does not know.`);
|
|
77
|
+
}
|
|
78
|
+
request.input(p.Name, type, driverValue(p.Value));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** The value as the driver takes it; booleans bind as BIT 1 / 0. */
|
|
82
|
+
function driverValue(value) {
|
|
83
|
+
return typeof value === 'boolean' ? (value ? 1 : 0) : value;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=typedParameters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typedParameters.js","sourceRoot":"","sources":["../src/typedParameters.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,GAAG,MAAM,OAAO,CAAC;AASxB,SAAS,YAAY,CAAC,OAAe;IACjC,6FAA6F;IAC7F,8FAA8F;IAC9F,MAAM,KAAK,GAAG,8CAA8C,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAClF,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAChG,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxD,CAAC;AAED,kFAAkF;AAClF,SAAS,SAAS,CAAC,IAAc;IAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,SAAS,MAAM,CAAC,IAAc,EAAE,KAAa;IACzC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtF,CAAC;AAED,iGAAiG;AACjG,SAAS,SAAS,CAAC,MAAqB;IACpC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,SAAS,CAAC,CAAC,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7E,KAAK,UAAU,CAAC,CAAC,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChF,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpE,KAAK,OAAO,CAAC,CAAC,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACvE,KAAK,WAAW,CAAC,CAAC,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnF,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;IACzB,CAAC;AACL,CAAC;AAED,sEAAsE;AACtE,SAAS,UAAU,CAAC,MAAqB;IACrC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;IACtB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,WAAW,CAAC,CAAC,OAAO,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrD,KAAK,gBAAgB,CAAC,CAAC,OAAO,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,KAAK,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,KAAK,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;IACzB,CAAC;AACL,CAAC;AAED,oCAAoC;AACpC,MAAM,WAAW,GAAiD;IAC9D,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE;IAC9G,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE;IAC5H,aAAa,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE;IACpH,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE;CACrC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IACxC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AACrE,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,mBAAmB,CAAC,OAAoB,EAAE,UAA0C;IAChG,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,uBAAuB,CAAC,CAAC,OAAO,gDAAgD,CAAC,CAAC;QAC1H,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,CAAC;AACL,CAAC;AAED,oEAAoE;AACpE,SAAS,WAAW,CAAC,KAA+B;IAChD,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAChE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/sqlserver-dataprovider",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "6.2.0-edge.
|
|
4
|
+
"version": "6.2.0-edge.7",
|
|
5
5
|
"description": "MemberJunction: SQL Server Client Data Provider",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -17,21 +17,21 @@
|
|
|
17
17
|
"@types/mssql": "^9.1.9"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@memberjunction/actions": "6.2.0-edge.
|
|
21
|
-
"@memberjunction/actions-base": "6.2.0-edge.
|
|
22
|
-
"@memberjunction/ai": "6.2.0-edge.
|
|
23
|
-
"@memberjunction/ai-provider-bundle": "6.2.0-edge.
|
|
24
|
-
"@memberjunction/ai-vector-dupe": "6.2.0-edge.
|
|
25
|
-
"@memberjunction/ai-vectordb": "6.2.0-edge.
|
|
26
|
-
"@memberjunction/aiengine": "6.2.0-edge.
|
|
27
|
-
"@memberjunction/core": "6.2.0-edge.
|
|
28
|
-
"@memberjunction/core-entities": "6.2.0-edge.
|
|
29
|
-
"@memberjunction/encryption": "6.2.0-edge.
|
|
30
|
-
"@memberjunction/generic-database-provider": "6.2.0-edge.
|
|
31
|
-
"@memberjunction/sql-dialect": "6.2.0-edge.
|
|
32
|
-
"@memberjunction/global": "6.2.0-edge.
|
|
33
|
-
"@memberjunction/query-processor": "6.2.0-edge.
|
|
34
|
-
"@memberjunction/queue": "6.2.0-edge.
|
|
20
|
+
"@memberjunction/actions": "6.2.0-edge.7",
|
|
21
|
+
"@memberjunction/actions-base": "6.2.0-edge.7",
|
|
22
|
+
"@memberjunction/ai": "6.2.0-edge.7",
|
|
23
|
+
"@memberjunction/ai-provider-bundle": "6.2.0-edge.7",
|
|
24
|
+
"@memberjunction/ai-vector-dupe": "6.2.0-edge.7",
|
|
25
|
+
"@memberjunction/ai-vectordb": "6.2.0-edge.7",
|
|
26
|
+
"@memberjunction/aiengine": "6.2.0-edge.7",
|
|
27
|
+
"@memberjunction/core": "6.2.0-edge.7",
|
|
28
|
+
"@memberjunction/core-entities": "6.2.0-edge.7",
|
|
29
|
+
"@memberjunction/encryption": "6.2.0-edge.7",
|
|
30
|
+
"@memberjunction/generic-database-provider": "6.2.0-edge.7",
|
|
31
|
+
"@memberjunction/sql-dialect": "6.2.0-edge.7",
|
|
32
|
+
"@memberjunction/global": "6.2.0-edge.7",
|
|
33
|
+
"@memberjunction/query-processor": "6.2.0-edge.7",
|
|
34
|
+
"@memberjunction/queue": "6.2.0-edge.7",
|
|
35
35
|
"mssql": "^12.2.0",
|
|
36
36
|
"rxjs": "^7.8.2"
|
|
37
37
|
},
|