@duckcodeailabs/dql-connectors 1.6.17 → 1.6.19
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-executor.d.ts","sourceRoot":"","sources":["../src/query-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"query-executor.d.ts","sourceRoot":"","sources":["../src/query-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAqE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEvH,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAwB;gBAExB,IAAI,CAAC,EAAE,qBAAqB;IAIlC,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIlE,YAAY,CAChB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,YAAY,EAAE,EACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,WAAW,CAAC;IAMjB,iBAAiB,CACrB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,OAAO,EAAE,EACtB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,WAAW,CAAC;IASjB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
|
package/dist/query-executor.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ConnectionPoolManager } from './connection-pool.js';
|
|
2
|
-
import { buildParamValues, normalizeSQLPlaceholders } from './sql-params.js';
|
|
2
|
+
import { buildParamValues, expandArrayParameters, normalizeSQLPlaceholders } from './sql-params.js';
|
|
3
3
|
export class QueryExecutor {
|
|
4
4
|
pool;
|
|
5
5
|
constructor(pool) {
|
|
@@ -9,8 +9,9 @@ export class QueryExecutor {
|
|
|
9
9
|
return this.pool.getConnector(config);
|
|
10
10
|
}
|
|
11
11
|
async executeQuery(sql, params, variables, config) {
|
|
12
|
-
const
|
|
13
|
-
|
|
12
|
+
const expanded = expandArrayParameters(sql, params ?? [], variables ?? {});
|
|
13
|
+
const paramValues = buildParamValues(expanded.params, expanded.variables);
|
|
14
|
+
return this.executePositional(expanded.sql, paramValues, config);
|
|
14
15
|
}
|
|
15
16
|
async executePositional(sql, paramValues, config) {
|
|
16
17
|
const connector = await this.pool.getConnector(config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-executor.js","sourceRoot":"","sources":["../src/query-executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAqB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"query-executor.js","sourceRoot":"","sources":["../src/query-executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,wBAAwB,EAAqB,MAAM,iBAAiB,CAAC;AAEvH,MAAM,OAAO,aAAa;IAChB,IAAI,CAAwB;IAEpC,YAAY,IAA4B;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,qBAAqB,EAAE,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAwB;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,GAAW,EACX,MAAsB,EACtB,SAAkC,EAClC,MAAwB;QAExB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;QAC3E,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,GAAW,EACX,WAAsB,EACtB,MAAwB;QAExB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACnE,OAAO,SAAS,CAAC,OAAO,CACtB,aAAa,EACb,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAChE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAClC,CAAC;CACF"}
|
package/dist/sql-params.d.ts
CHANGED
|
@@ -4,7 +4,20 @@ export type SQLParamSpec = {
|
|
|
4
4
|
position: number;
|
|
5
5
|
literalValue?: unknown;
|
|
6
6
|
};
|
|
7
|
+
export interface ExpandedSQLParams {
|
|
8
|
+
sql: string;
|
|
9
|
+
params: SQLParamSpec[];
|
|
10
|
+
variables: Record<string, unknown>;
|
|
11
|
+
}
|
|
7
12
|
export declare function buildParamValues(params: SQLParamSpec[], variables: Record<string, unknown>): unknown[];
|
|
13
|
+
/**
|
|
14
|
+
* Expand array-valued template variables into ordinary positional placeholders.
|
|
15
|
+
*
|
|
16
|
+
* DQL blocks keep one business parameter such as `${team_set}` so app filters
|
|
17
|
+
* and review metadata stay readable. At execution time, an array value is
|
|
18
|
+
* rewritten from `IN ($1)` to `IN ($1, $2, ...)` with one bind value per item.
|
|
19
|
+
*/
|
|
20
|
+
export declare function expandArrayParameters(sql: string, params: SQLParamSpec[], variables: Record<string, unknown>): ExpandedSQLParams;
|
|
8
21
|
/**
|
|
9
22
|
* Normalize "$N" placeholders emitted by the compiler to the placeholder syntax
|
|
10
23
|
* expected by each driver.
|
package/dist/sql-params.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-params.d.ts","sourceRoot":"","sources":["../src/sql-params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtF,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EAAE,EACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,EAAE,CAaX;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GACjC,MAAM,CAqER"}
|
|
1
|
+
{"version":3,"file":"sql-params.d.ts","sourceRoot":"","sources":["../src/sql-params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtF,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EAAE,EACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,EAAE,CAaX;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,YAAY,EAAE,EACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,iBAAiB,CA2CnB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GACjC,MAAM,CAqER"}
|
package/dist/sql-params.js
CHANGED
|
@@ -13,6 +13,53 @@ export function buildParamValues(params, variables) {
|
|
|
13
13
|
return null;
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Expand array-valued template variables into ordinary positional placeholders.
|
|
18
|
+
*
|
|
19
|
+
* DQL blocks keep one business parameter such as `${team_set}` so app filters
|
|
20
|
+
* and review metadata stay readable. At execution time, an array value is
|
|
21
|
+
* rewritten from `IN ($1)` to `IN ($1, $2, ...)` with one bind value per item.
|
|
22
|
+
*/
|
|
23
|
+
export function expandArrayParameters(sql, params, variables) {
|
|
24
|
+
if (!params || params.length === 0)
|
|
25
|
+
return { sql, params: [], variables };
|
|
26
|
+
const sorted = [...params].sort((a, b) => a.position - b.position);
|
|
27
|
+
const replacements = new Map();
|
|
28
|
+
const expandedParams = [];
|
|
29
|
+
const expandedVariables = { ...(variables ?? {}) };
|
|
30
|
+
let nextPosition = 1;
|
|
31
|
+
for (const param of sorted) {
|
|
32
|
+
const value = Object.prototype.hasOwnProperty.call(expandedVariables, param.name)
|
|
33
|
+
? expandedVariables[param.name]
|
|
34
|
+
: Object.prototype.hasOwnProperty.call(param, 'literalValue')
|
|
35
|
+
? param.literalValue
|
|
36
|
+
: null;
|
|
37
|
+
if (Array.isArray(value)) {
|
|
38
|
+
const values = value.length > 0 ? value : [null];
|
|
39
|
+
const names = [];
|
|
40
|
+
for (let index = 0; index < values.length; index += 1) {
|
|
41
|
+
const name = `${param.name}_${param.position}_${index + 1}`;
|
|
42
|
+
names.push(name);
|
|
43
|
+
expandedVariables[name] = values[index];
|
|
44
|
+
expandedParams.push({ name, position: nextPosition });
|
|
45
|
+
nextPosition += 1;
|
|
46
|
+
}
|
|
47
|
+
replacements.set(param.position, names.map((name) => {
|
|
48
|
+
const spec = expandedParams.find((candidate) => candidate.name === name);
|
|
49
|
+
return `$${spec?.position ?? nextPosition}`;
|
|
50
|
+
}).join(', '));
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
replacements.set(param.position, `$${nextPosition}`);
|
|
54
|
+
expandedParams.push({ ...param, position: nextPosition });
|
|
55
|
+
nextPosition += 1;
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
sql: rewritePositionalPlaceholders(sql, replacements),
|
|
59
|
+
params: expandedParams,
|
|
60
|
+
variables: expandedVariables,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
16
63
|
/**
|
|
17
64
|
* Normalize "$N" placeholders emitted by the compiler to the placeholder syntax
|
|
18
65
|
* expected by each driver.
|
|
@@ -86,4 +133,66 @@ export function normalizeSQLPlaceholders(sql, driver) {
|
|
|
86
133
|
}
|
|
87
134
|
return out;
|
|
88
135
|
}
|
|
136
|
+
function rewritePositionalPlaceholders(sql, replacements) {
|
|
137
|
+
if (!sql || replacements.size === 0)
|
|
138
|
+
return sql;
|
|
139
|
+
let out = '';
|
|
140
|
+
let i = 0;
|
|
141
|
+
let inSingle = false;
|
|
142
|
+
let inDouble = false;
|
|
143
|
+
let inBacktick = false;
|
|
144
|
+
while (i < sql.length) {
|
|
145
|
+
const ch = sql[i];
|
|
146
|
+
if (ch === "'" && !inDouble && !inBacktick) {
|
|
147
|
+
out += ch;
|
|
148
|
+
if (inSingle && sql[i + 1] === "'") {
|
|
149
|
+
out += "'";
|
|
150
|
+
i += 2;
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
inSingle = !inSingle;
|
|
154
|
+
i += 1;
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
if (ch === '"' && !inSingle && !inBacktick) {
|
|
158
|
+
out += ch;
|
|
159
|
+
if (inDouble && sql[i + 1] === '"') {
|
|
160
|
+
out += '"';
|
|
161
|
+
i += 2;
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
inDouble = !inDouble;
|
|
165
|
+
i += 1;
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
if (ch === '`' && !inSingle && !inDouble) {
|
|
169
|
+
out += ch;
|
|
170
|
+
if (inBacktick && sql[i + 1] === '`') {
|
|
171
|
+
out += '`';
|
|
172
|
+
i += 2;
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
inBacktick = !inBacktick;
|
|
176
|
+
i += 1;
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
if (!inSingle && !inDouble && !inBacktick && ch === '$') {
|
|
180
|
+
let j = i + 1;
|
|
181
|
+
if (j < sql.length && sql[j] >= '0' && sql[j] <= '9') {
|
|
182
|
+
while (j < sql.length && sql[j] >= '0' && sql[j] <= '9')
|
|
183
|
+
j += 1;
|
|
184
|
+
const position = Number(sql.slice(i + 1, j));
|
|
185
|
+
const replacement = replacements.get(position);
|
|
186
|
+
if (replacement) {
|
|
187
|
+
out += replacement;
|
|
188
|
+
i = j;
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
out += ch;
|
|
194
|
+
i += 1;
|
|
195
|
+
}
|
|
196
|
+
return out;
|
|
197
|
+
}
|
|
89
198
|
//# sourceMappingURL=sql-params.js.map
|
package/dist/sql-params.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-params.js","sourceRoot":"","sources":["../src/sql-params.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sql-params.js","sourceRoot":"","sources":["../src/sql-params.ts"],"names":[],"mappings":"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"}
|