@memberjunction/generic-database-provider 5.36.0 → 5.37.0
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/queryPagingEngine.d.ts +61 -0
- package/dist/queryPagingEngine.d.ts.map +1 -1
- package/dist/queryPagingEngine.js +231 -0
- package/dist/queryPagingEngine.js.map +1 -1
- package/dist/renderPipeline.d.ts +2 -26
- package/dist/renderPipeline.d.ts.map +1 -1
- package/dist/renderPipeline.js +11 -130
- package/dist/renderPipeline.js.map +1 -1
- package/package.json +13 -13
|
@@ -41,6 +41,67 @@ export declare class QueryPagingEngine {
|
|
|
41
41
|
* @returns DataSQL for paged results and CountSQL for total row count
|
|
42
42
|
*/
|
|
43
43
|
static WrapWithPaging(resolvedSQL: string, startRow: number, maxRows: number, platform: DatabasePlatform): PagingWrappedSQL;
|
|
44
|
+
/**
|
|
45
|
+
* Applies a row cap to the outermost SELECT.
|
|
46
|
+
*
|
|
47
|
+
* `maxRows` is treated as a hard ceiling: the result is guaranteed to
|
|
48
|
+
* return at most `maxRows` rows whenever the SQL shape can be capped
|
|
49
|
+
* without corrupting the query.
|
|
50
|
+
*
|
|
51
|
+
* Strategy:
|
|
52
|
+
* 1. Parse via AST. If the outermost SELECT has no existing cap,
|
|
53
|
+
* inject `TOP N` (SQL Server) or `LIMIT N` (PostgreSQL).
|
|
54
|
+
* 2. If an existing numeric `TOP`/`LIMIT` is present, reduce it to
|
|
55
|
+
* `min(existing, maxRows)`. The tighter cap wins.
|
|
56
|
+
* 3. If the AST recognizes the shape but can't inject (`TOP PERCENT`,
|
|
57
|
+
* non-numeric `TOP`, `UNION`, `WITH TIES`, etc.), wrap with an
|
|
58
|
+
* outer `SELECT TOP N * FROM (…) AS _mj_capped` (or LIMIT on PG).
|
|
59
|
+
* 4. If the parser can't handle the input but the SQL is CTE-headed,
|
|
60
|
+
* append `OFFSET 0 ROWS FETCH NEXT N ROWS ONLY` via {@link buildDataSQL}.
|
|
61
|
+
* 5. Shapes that can't legally appear inside a derived table
|
|
62
|
+
* (`FOR JSON`, `FOR XML`, `OPTION (...)`, `SELECT INTO`,
|
|
63
|
+
* mutations) are returned unchanged — the cap is moot
|
|
64
|
+
* (FOR JSON/XML return one row) or the validator should have
|
|
65
|
+
* rejected them earlier (mutations, SELECT INTO).
|
|
66
|
+
*
|
|
67
|
+
* Non-positive, non-finite, or fractional `maxRows` are sanitized
|
|
68
|
+
* (`<= 0` and non-finite are no-ops; fractional values are floored).
|
|
69
|
+
*/
|
|
70
|
+
static WrapWithMaxRows(resolvedSQL: string, maxRows: number, platform: DatabasePlatform): string;
|
|
71
|
+
/**
|
|
72
|
+
* Wraps `sql` in an outer SELECT that enforces the row cap.
|
|
73
|
+
* Used when the AST recognises the shape but cannot inject the cap
|
|
74
|
+
* cleanly, or when the AST can't parse the input but the SQL is known
|
|
75
|
+
* to be wrap-safe (no FOR JSON/FOR XML/OPTION at top level).
|
|
76
|
+
*/
|
|
77
|
+
private static outerWrap;
|
|
78
|
+
/**
|
|
79
|
+
* Token-aware scan for clauses that cannot legally appear inside a
|
|
80
|
+
* derived table — wrapping such a query would produce invalid SQL.
|
|
81
|
+
*
|
|
82
|
+
* Detects (case-insensitive, outside string literals and quoted
|
|
83
|
+
* identifiers):
|
|
84
|
+
* - `FOR JSON …`
|
|
85
|
+
* - `FOR XML …`
|
|
86
|
+
* - `OPTION (…)`
|
|
87
|
+
*
|
|
88
|
+
* `SELECT INTO` and mutations are handled separately via the AST
|
|
89
|
+
* (`applyMaxRowsViaAST` returns `pass-through` for those).
|
|
90
|
+
*/
|
|
91
|
+
private static containsUnwrappableClause;
|
|
92
|
+
/**
|
|
93
|
+
* AST-based row-cap injection.
|
|
94
|
+
* `capped` — `sql` contains the input with TOP/LIMIT injected
|
|
95
|
+
* or reduced to `min(existing, cap)`.
|
|
96
|
+
* `wrap` — AST recognized the shape but the cap can't be
|
|
97
|
+
* safely injected inline (`TOP PERCENT`, non-numeric
|
|
98
|
+
* `TOP`/`LIMIT`); caller should outer-wrap.
|
|
99
|
+
* `pass-through` — shape can't be capped at all without corrupting
|
|
100
|
+
* the query (SELECT INTO, mutation).
|
|
101
|
+
* `unparseable` — parser could not handle the input; caller may
|
|
102
|
+
* attempt a CTE-fallback or outer wrap.
|
|
103
|
+
*/
|
|
104
|
+
private static applyMaxRowsViaAST;
|
|
44
105
|
/**
|
|
45
106
|
* Determines whether the given params indicate paging should be applied.
|
|
46
107
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryPagingEngine.d.ts","sourceRoot":"","sources":["../src/queryPagingEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE5F;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,iBAAiB;IAE1B;;;;;;;;OAQG;IACH,MAAM,CAAC,cAAc,CACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,gBAAgB,GAC3B,gBAAgB;IAUnB;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO;IAQrF,OAAO,CAAC,MAAM,CAAC,YAAY;IAyB3B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAoBrC,OAAO,CAAC,MAAM,CAAC,aAAa;IAO5B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA8BlC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAajC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAsBpC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAQnC;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CACjB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,UAAU,GAAG,MAA+B,GACtD;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAW5D;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE;IAOxE;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAe3B,OAAO,CAAC,MAAM,CAAC,UAAU;CAG5B"}
|
|
1
|
+
{"version":3,"file":"queryPagingEngine.d.ts","sourceRoot":"","sources":["../src/queryPagingEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE5F;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,iBAAiB;IAE1B;;;;;;;;OAQG;IACH,MAAM,CAAC,cAAc,CACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,gBAAgB,GAC3B,gBAAgB;IAUnB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,MAAM,CAAC,eAAe,CAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,gBAAgB,GAC3B,MAAM;IAsCT;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAOxB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAwDxC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAiFjC;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO;IAQrF,OAAO,CAAC,MAAM,CAAC,YAAY;IAyB3B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAoBrC,OAAO,CAAC,MAAM,CAAC,aAAa;IAO5B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA8BlC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAajC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAsBpC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAQnC;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CACjB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,UAAU,GAAG,MAA+B,GACtD;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAW5D;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE;IAOxE;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAe3B,OAAO,CAAC,MAAM,CAAC,UAAU;CAG5B"}
|
|
@@ -34,6 +34,237 @@ export class QueryPagingEngine {
|
|
|
34
34
|
const countSQL = QueryPagingEngine.buildCountSQL(cleanedSQL, dialect);
|
|
35
35
|
return { DataSQL: dataSQL, CountSQL: countSQL, Offset: startRow, PageSize: maxRows };
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Applies a row cap to the outermost SELECT.
|
|
39
|
+
*
|
|
40
|
+
* `maxRows` is treated as a hard ceiling: the result is guaranteed to
|
|
41
|
+
* return at most `maxRows` rows whenever the SQL shape can be capped
|
|
42
|
+
* without corrupting the query.
|
|
43
|
+
*
|
|
44
|
+
* Strategy:
|
|
45
|
+
* 1. Parse via AST. If the outermost SELECT has no existing cap,
|
|
46
|
+
* inject `TOP N` (SQL Server) or `LIMIT N` (PostgreSQL).
|
|
47
|
+
* 2. If an existing numeric `TOP`/`LIMIT` is present, reduce it to
|
|
48
|
+
* `min(existing, maxRows)`. The tighter cap wins.
|
|
49
|
+
* 3. If the AST recognizes the shape but can't inject (`TOP PERCENT`,
|
|
50
|
+
* non-numeric `TOP`, `UNION`, `WITH TIES`, etc.), wrap with an
|
|
51
|
+
* outer `SELECT TOP N * FROM (…) AS _mj_capped` (or LIMIT on PG).
|
|
52
|
+
* 4. If the parser can't handle the input but the SQL is CTE-headed,
|
|
53
|
+
* append `OFFSET 0 ROWS FETCH NEXT N ROWS ONLY` via {@link buildDataSQL}.
|
|
54
|
+
* 5. Shapes that can't legally appear inside a derived table
|
|
55
|
+
* (`FOR JSON`, `FOR XML`, `OPTION (...)`, `SELECT INTO`,
|
|
56
|
+
* mutations) are returned unchanged — the cap is moot
|
|
57
|
+
* (FOR JSON/XML return one row) or the validator should have
|
|
58
|
+
* rejected them earlier (mutations, SELECT INTO).
|
|
59
|
+
*
|
|
60
|
+
* Non-positive, non-finite, or fractional `maxRows` are sanitized
|
|
61
|
+
* (`<= 0` and non-finite are no-ops; fractional values are floored).
|
|
62
|
+
*/
|
|
63
|
+
static WrapWithMaxRows(resolvedSQL, maxRows, platform) {
|
|
64
|
+
const cleanedSQL = resolvedSQL.trimEnd().replace(/;\s*$/, '');
|
|
65
|
+
if (!Number.isFinite(maxRows) || maxRows <= 0)
|
|
66
|
+
return cleanedSQL;
|
|
67
|
+
if (cleanedSQL.trim().length === 0)
|
|
68
|
+
return cleanedSQL;
|
|
69
|
+
const cap = Math.floor(maxRows);
|
|
70
|
+
const dialect = QueryPagingEngine.getDialect(platform);
|
|
71
|
+
const astResult = QueryPagingEngine.applyMaxRowsViaAST(cleanedSQL, cap, dialect);
|
|
72
|
+
if (astResult.outcome === 'capped')
|
|
73
|
+
return astResult.sql;
|
|
74
|
+
if (astResult.outcome === 'pass-through')
|
|
75
|
+
return cleanedSQL;
|
|
76
|
+
// Both `wrap` and `unparseable` outcomes may try the outer-wrap path.
|
|
77
|
+
// First, check for clauses that cannot legally appear inside a derived
|
|
78
|
+
// table — wrapping such queries would produce invalid SQL.
|
|
79
|
+
const unwrappable = QueryPagingEngine.containsUnwrappableClause(cleanedSQL);
|
|
80
|
+
if (astResult.outcome === 'wrap') {
|
|
81
|
+
if (unwrappable)
|
|
82
|
+
return cleanedSQL;
|
|
83
|
+
return QueryPagingEngine.outerWrap(cleanedSQL, cap, dialect);
|
|
84
|
+
}
|
|
85
|
+
// unparseable — try the CTE-fallback path first.
|
|
86
|
+
const isCTE = SQLParser.ExtractCTEs(cleanedSQL, dialect) !== null;
|
|
87
|
+
if (isCTE) {
|
|
88
|
+
try {
|
|
89
|
+
return QueryPagingEngine.buildDataSQL(cleanedSQL, 0, cap, dialect);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return cleanedSQL;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (unwrappable)
|
|
96
|
+
return cleanedSQL;
|
|
97
|
+
return QueryPagingEngine.outerWrap(cleanedSQL, cap, dialect);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Wraps `sql` in an outer SELECT that enforces the row cap.
|
|
101
|
+
* Used when the AST recognises the shape but cannot inject the cap
|
|
102
|
+
* cleanly, or when the AST can't parse the input but the SQL is known
|
|
103
|
+
* to be wrap-safe (no FOR JSON/FOR XML/OPTION at top level).
|
|
104
|
+
*/
|
|
105
|
+
static outerWrap(sql, cap, dialect) {
|
|
106
|
+
if (dialect.PlatformKey === 'sqlserver') {
|
|
107
|
+
return `SELECT TOP ${cap} * FROM (\n${sql}\n) AS _mj_capped`;
|
|
108
|
+
}
|
|
109
|
+
return `SELECT * FROM (\n${sql}\n) AS _mj_capped LIMIT ${cap}`;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Token-aware scan for clauses that cannot legally appear inside a
|
|
113
|
+
* derived table — wrapping such a query would produce invalid SQL.
|
|
114
|
+
*
|
|
115
|
+
* Detects (case-insensitive, outside string literals and quoted
|
|
116
|
+
* identifiers):
|
|
117
|
+
* - `FOR JSON …`
|
|
118
|
+
* - `FOR XML …`
|
|
119
|
+
* - `OPTION (…)`
|
|
120
|
+
*
|
|
121
|
+
* `SELECT INTO` and mutations are handled separately via the AST
|
|
122
|
+
* (`applyMaxRowsViaAST` returns `pass-through` for those).
|
|
123
|
+
*/
|
|
124
|
+
static containsUnwrappableClause(sql) {
|
|
125
|
+
const len = sql.length;
|
|
126
|
+
let i = 0;
|
|
127
|
+
const isWordChar = (ch) => (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') ||
|
|
128
|
+
(ch >= '0' && ch <= '9') || ch === '_';
|
|
129
|
+
const isWS = (ch) => ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r';
|
|
130
|
+
const matchWord = (start, word) => {
|
|
131
|
+
if (start + word.length > len)
|
|
132
|
+
return false;
|
|
133
|
+
if (sql.substring(start, start + word.length).toUpperCase() !== word)
|
|
134
|
+
return false;
|
|
135
|
+
const after = start + word.length;
|
|
136
|
+
return after === len || !isWordChar(sql[after]);
|
|
137
|
+
};
|
|
138
|
+
while (i < len) {
|
|
139
|
+
const c = sql[i];
|
|
140
|
+
// Skip string literals and quoted identifiers (single quote,
|
|
141
|
+
// bracket, double quote — all support doubled-delimiter escapes).
|
|
142
|
+
if (c === "'" || c === '[' || c === '"') {
|
|
143
|
+
const close = c === '[' ? ']' : c;
|
|
144
|
+
i++;
|
|
145
|
+
while (i < len) {
|
|
146
|
+
if (sql[i] === close) {
|
|
147
|
+
if (sql[i + 1] === close) {
|
|
148
|
+
i += 2;
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
i++;
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
i++;
|
|
155
|
+
}
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
const prevIsWord = i > 0 && isWordChar(sql[i - 1]);
|
|
159
|
+
if (!prevIsWord) {
|
|
160
|
+
if (matchWord(i, 'FOR')) {
|
|
161
|
+
let j = i + 3;
|
|
162
|
+
while (j < len && isWS(sql[j]))
|
|
163
|
+
j++;
|
|
164
|
+
if (matchWord(j, 'JSON') || matchWord(j, 'XML'))
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
if (matchWord(i, 'OPTION')) {
|
|
168
|
+
let j = i + 6;
|
|
169
|
+
while (j < len && isWS(sql[j]))
|
|
170
|
+
j++;
|
|
171
|
+
if (j < len && sql[j] === '(')
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
i++;
|
|
176
|
+
}
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* AST-based row-cap injection.
|
|
181
|
+
* `capped` — `sql` contains the input with TOP/LIMIT injected
|
|
182
|
+
* or reduced to `min(existing, cap)`.
|
|
183
|
+
* `wrap` — AST recognized the shape but the cap can't be
|
|
184
|
+
* safely injected inline (`TOP PERCENT`, non-numeric
|
|
185
|
+
* `TOP`/`LIMIT`); caller should outer-wrap.
|
|
186
|
+
* `pass-through` — shape can't be capped at all without corrupting
|
|
187
|
+
* the query (SELECT INTO, mutation).
|
|
188
|
+
* `unparseable` — parser could not handle the input; caller may
|
|
189
|
+
* attempt a CTE-fallback or outer wrap.
|
|
190
|
+
*/
|
|
191
|
+
static applyMaxRowsViaAST(sql, cap, dialect) {
|
|
192
|
+
const ast = SQLParser.ParseSQL(sql, dialect);
|
|
193
|
+
if (!ast)
|
|
194
|
+
return { outcome: 'unparseable' };
|
|
195
|
+
const rootNode = Array.isArray(ast) ? ast[0] : ast;
|
|
196
|
+
if (!rootNode)
|
|
197
|
+
return { outcome: 'unparseable' };
|
|
198
|
+
const root = rootNode;
|
|
199
|
+
if (root.type !== 'select')
|
|
200
|
+
return { outcome: 'pass-through' };
|
|
201
|
+
const into = root.into;
|
|
202
|
+
if (into && into.position)
|
|
203
|
+
return { outcome: 'pass-through' };
|
|
204
|
+
if (root.set_op)
|
|
205
|
+
return { outcome: 'unparseable' };
|
|
206
|
+
// Existing TOP — reduce to min(existing, cap). PERCENT and non-numeric
|
|
207
|
+
// values (e.g. TOP (@n)) can't be reasoned about as row counts; let
|
|
208
|
+
// the caller outer-wrap them.
|
|
209
|
+
const existingTop = root.top;
|
|
210
|
+
if (existingTop != null) {
|
|
211
|
+
if (existingTop.percent)
|
|
212
|
+
return { outcome: 'wrap' };
|
|
213
|
+
const existingValue = typeof existingTop.value === 'number'
|
|
214
|
+
? existingTop.value
|
|
215
|
+
: Number(existingTop.value);
|
|
216
|
+
if (!Number.isFinite(existingValue))
|
|
217
|
+
return { outcome: 'wrap' };
|
|
218
|
+
if (existingValue <= cap)
|
|
219
|
+
return { outcome: 'capped', sql };
|
|
220
|
+
root.top = { value: cap, percent: null };
|
|
221
|
+
try {
|
|
222
|
+
return { outcome: 'capped', sql: SQLParser.SqlifyAST(ast, dialect) };
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
return { outcome: 'unparseable' };
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Existing LIMIT — reduce the LIMIT value (preserves OFFSET).
|
|
229
|
+
// node-sql-parser shape for SQL Server / PostgreSQL:
|
|
230
|
+
// `LIMIT N` → value=[{value:N}], seperator=''
|
|
231
|
+
// `LIMIT N OFFSET M` → value=[{value:N},{value:M}], seperator='offset'
|
|
232
|
+
// The LIMIT value is always at index 0 for these dialects.
|
|
233
|
+
const existingLimit = root.limit;
|
|
234
|
+
if (existingLimit != null && Array.isArray(existingLimit.value) && existingLimit.value.length > 0) {
|
|
235
|
+
const limitNode = existingLimit.value[0];
|
|
236
|
+
const existingValue = typeof limitNode.value === 'number'
|
|
237
|
+
? limitNode.value
|
|
238
|
+
: Number(limitNode.value);
|
|
239
|
+
if (!Number.isFinite(existingValue))
|
|
240
|
+
return { outcome: 'wrap' };
|
|
241
|
+
if (existingValue <= cap)
|
|
242
|
+
return { outcome: 'capped', sql };
|
|
243
|
+
existingLimit.value[0] = { type: 'number', value: cap };
|
|
244
|
+
try {
|
|
245
|
+
return { outcome: 'capped', sql: SQLParser.SqlifyAST(ast, dialect) };
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
return { outcome: 'unparseable' };
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// No existing cap — inject one.
|
|
252
|
+
if (dialect.PlatformKey === 'sqlserver') {
|
|
253
|
+
root.top = { value: cap, percent: null };
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
root.limit = {
|
|
257
|
+
seperator: '',
|
|
258
|
+
value: [{ type: 'number', value: cap }],
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
try {
|
|
262
|
+
return { outcome: 'capped', sql: SQLParser.SqlifyAST(ast, dialect) };
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
return { outcome: 'unparseable' };
|
|
266
|
+
}
|
|
267
|
+
}
|
|
37
268
|
/**
|
|
38
269
|
* Determines whether the given params indicate paging should be applied.
|
|
39
270
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryPagingEngine.js","sourceRoot":"","sources":["../src/queryPagingEngine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"queryPagingEngine.js","sourceRoot":"","sources":["../src/queryPagingEngine.ts"],"names":[],"mappings":"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"}
|
package/dist/renderPipeline.d.ts
CHANGED
|
@@ -55,12 +55,12 @@ export interface RenderContext {
|
|
|
55
55
|
* directly to processQueryTemplate for parameter validation. When omitted,
|
|
56
56
|
* a synthetic QueryTemplateInput is built from OriginalSQL + ParameterDefinitions. */
|
|
57
57
|
QueryInfo?: QueryTemplateInput;
|
|
58
|
-
/** Paging parameters (omit to skip paging) */
|
|
58
|
+
/** Paging parameters (omit to skip paging). Mutually exclusive with {@link MaxRows}. */
|
|
59
59
|
Paging?: {
|
|
60
60
|
StartRow: number;
|
|
61
61
|
MaxRows: number;
|
|
62
62
|
};
|
|
63
|
-
/** MaxRows safety limit
|
|
63
|
+
/** MaxRows safety limit. Mutually exclusive with {@link Paging}. */
|
|
64
64
|
MaxRows?: number;
|
|
65
65
|
}
|
|
66
66
|
/**
|
|
@@ -122,29 +122,5 @@ export declare class RenderPipeline {
|
|
|
122
122
|
static HasCompositionTokens(sql: string): boolean;
|
|
123
123
|
private static runComposition;
|
|
124
124
|
private static runTemplates;
|
|
125
|
-
/**
|
|
126
|
-
* Injects a row-cap (`TOP N` for SQL Server, `LIMIT N` for Postgres) onto
|
|
127
|
-
* the outermost SELECT of `sql`.
|
|
128
|
-
*
|
|
129
|
-
* Uses an AST-based rewrite so CTE queries (`WITH … SELECT …`), nested
|
|
130
|
-
* subqueries, comments, and casing are all handled correctly. The cap is
|
|
131
|
-
* applied to the outermost projection only, leaving any inner `TOP N` /
|
|
132
|
-
* `LIMIT N` clauses inside CTE definitions or subqueries untouched.
|
|
133
|
-
*
|
|
134
|
-
* For shapes the parser can't represent at the top level
|
|
135
|
-
* (UNION/INTERSECT/EXCEPT, vendor-specific T-SQL the parser rejects, sqlify
|
|
136
|
-
* round-trip failures), falls back to wrapping the original SQL in
|
|
137
|
-
* `SELECT TOP N * FROM (<original>) AS _capped` — always safe because the
|
|
138
|
-
* inner SQL is treated as opaque.
|
|
139
|
-
*/
|
|
140
|
-
private static applyMaxRows;
|
|
141
|
-
private static applyMaxRowsViaAst;
|
|
142
|
-
private static applyMaxRowsViaSubqueryWrap;
|
|
143
|
-
private static getDialect;
|
|
144
|
-
/**
|
|
145
|
-
* Strips SQL comments (single-line -- and block comments) from a SQL string.
|
|
146
|
-
* Preserves single-quoted string literals to avoid stripping inside them.
|
|
147
|
-
*/
|
|
148
|
-
private static stripSQLComments;
|
|
149
125
|
}
|
|
150
126
|
//# sourceMappingURL=renderPipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderPipeline.d.ts","sourceRoot":"","sources":["../src/renderPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG3G,OAAO,EAA0B,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC5G,OAAO,EAAqB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAA2B,KAAK,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAMnG;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,eAAe,EAAE,OAAO,CAAC;IACzB,iDAAiD;IACjD,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IACxB,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,CAAC;IACzB,sEAAsE;IACtE,sBAAsB,EAAE,qBAAqB,EAAE,CAAC;IAChD,0EAA0E;IAC1E,cAAc,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,+BAA+B;IAC/B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,+DAA+D;IAC/D,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC5C,sDAAsD;IACtD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACrC,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;2FAEuF;IACvF,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,
|
|
1
|
+
{"version":3,"file":"renderPipeline.d.ts","sourceRoot":"","sources":["../src/renderPipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/renderPipeline.js
CHANGED
|
@@ -33,6 +33,13 @@ export class RenderPipeline {
|
|
|
33
33
|
* @returns Final SQL, applied parameters, composition metadata, and diagnostic trace
|
|
34
34
|
*/
|
|
35
35
|
static Run(sql, ctx) {
|
|
36
|
+
const hasMaxRows = ctx.MaxRows != null && ctx.MaxRows > 0;
|
|
37
|
+
const hasPaging = ctx.Paging != null && QueryPagingEngine.ShouldPage(ctx.Paging.StartRow, ctx.Paging.MaxRows);
|
|
38
|
+
if (hasMaxRows && hasPaging) {
|
|
39
|
+
throw new Error('RenderPipeline.Run: ctx.MaxRows and ctx.Paging are mutually exclusive. ' +
|
|
40
|
+
'Use Paging for pagination (StartRow + MaxRows) or MaxRows alone for a safety cap. ' +
|
|
41
|
+
`Got MaxRows=${ctx.MaxRows} and Paging=${JSON.stringify(ctx.Paging)}.`);
|
|
42
|
+
}
|
|
36
43
|
let currentSQL = sql;
|
|
37
44
|
let appliedParameters = {};
|
|
38
45
|
// ── Step 1: Composition ──────────────────────────────────────
|
|
@@ -46,20 +53,20 @@ export class RenderPipeline {
|
|
|
46
53
|
// Nunjucks. Strip them after composition (which correctly ignores
|
|
47
54
|
// comment-embedded tokens) and before Nunjucks processes the SQL.
|
|
48
55
|
// Comments are still visible in Trace.AfterComposition for debugging.
|
|
49
|
-
currentSQL =
|
|
56
|
+
currentSQL = SQLParser.StripComments(currentSQL, GetDialect(ctx.Platform));
|
|
50
57
|
// ── Step 2: Nunjucks template evaluation ─────────────────────
|
|
51
58
|
const templateResult = RenderPipeline.runTemplates(currentSQL, sql, ctx, compositionResult);
|
|
52
59
|
currentSQL = templateResult.processedSQL;
|
|
53
60
|
appliedParameters = templateResult.appliedParameters;
|
|
54
61
|
const afterTemplates = currentSQL;
|
|
55
62
|
// ── Step 3: MaxRows safety limit (if specified) ──────────────
|
|
56
|
-
if (
|
|
57
|
-
currentSQL =
|
|
63
|
+
if (hasMaxRows) {
|
|
64
|
+
currentSQL = QueryPagingEngine.WrapWithMaxRows(currentSQL, ctx.MaxRows, ctx.Platform);
|
|
58
65
|
}
|
|
59
66
|
// ── Step 4: Paging (if requested) ────────────────────────────
|
|
60
67
|
let pagingResult = null;
|
|
61
68
|
let afterPaging = null;
|
|
62
|
-
if (
|
|
69
|
+
if (hasPaging) {
|
|
63
70
|
pagingResult = QueryPagingEngine.WrapWithPaging(currentSQL, ctx.Paging.StartRow, ctx.Paging.MaxRows, ctx.Platform);
|
|
64
71
|
currentSQL = pagingResult.DataSQL;
|
|
65
72
|
afterPaging = currentSQL;
|
|
@@ -134,132 +141,6 @@ export class RenderPipeline {
|
|
|
134
141
|
appliedParameters: (result.appliedParameters || {}),
|
|
135
142
|
};
|
|
136
143
|
}
|
|
137
|
-
/**
|
|
138
|
-
* Injects a row-cap (`TOP N` for SQL Server, `LIMIT N` for Postgres) onto
|
|
139
|
-
* the outermost SELECT of `sql`.
|
|
140
|
-
*
|
|
141
|
-
* Uses an AST-based rewrite so CTE queries (`WITH … SELECT …`), nested
|
|
142
|
-
* subqueries, comments, and casing are all handled correctly. The cap is
|
|
143
|
-
* applied to the outermost projection only, leaving any inner `TOP N` /
|
|
144
|
-
* `LIMIT N` clauses inside CTE definitions or subqueries untouched.
|
|
145
|
-
*
|
|
146
|
-
* For shapes the parser can't represent at the top level
|
|
147
|
-
* (UNION/INTERSECT/EXCEPT, vendor-specific T-SQL the parser rejects, sqlify
|
|
148
|
-
* round-trip failures), falls back to wrapping the original SQL in
|
|
149
|
-
* `SELECT TOP N * FROM (<original>) AS _capped` — always safe because the
|
|
150
|
-
* inner SQL is treated as opaque.
|
|
151
|
-
*/
|
|
152
|
-
static applyMaxRows(sql, maxRows, platform) {
|
|
153
|
-
const dialect = RenderPipeline.getDialect(platform);
|
|
154
|
-
const fromAst = RenderPipeline.applyMaxRowsViaAst(sql, maxRows, dialect);
|
|
155
|
-
if (fromAst !== null)
|
|
156
|
-
return fromAst;
|
|
157
|
-
return RenderPipeline.applyMaxRowsViaSubqueryWrap(sql, maxRows, dialect);
|
|
158
|
-
}
|
|
159
|
-
static applyMaxRowsViaAst(sql, maxRows, dialect) {
|
|
160
|
-
const ast = SQLParser.ParseSQL(sql, dialect);
|
|
161
|
-
if (!ast)
|
|
162
|
-
return null;
|
|
163
|
-
const root = Array.isArray(ast) ? ast[0] : ast;
|
|
164
|
-
if (!root)
|
|
165
|
-
return null;
|
|
166
|
-
// Non-SELECT (INSERT/UPDATE/DELETE/MERGE): row caps don't apply — leave alone.
|
|
167
|
-
// Discriminating on `type` narrows `root` to node-sql-parser's `Select` shape.
|
|
168
|
-
if (root.type !== 'select')
|
|
169
|
-
return sql;
|
|
170
|
-
// `top` is a SQL Server-specific field on the Select node that node-sql-parser's
|
|
171
|
-
// published .d.ts omits. Widen the narrowed type via intersection so we can
|
|
172
|
-
// read/write it without an `as unknown` escape hatch.
|
|
173
|
-
const selectNode = root;
|
|
174
|
-
// UNION/INTERSECT/EXCEPT: outer SELECT has set_op + _next branches. Injecting
|
|
175
|
-
// `top` here only caps the first branch, so defer to the subquery wrap.
|
|
176
|
-
if (selectNode.set_op)
|
|
177
|
-
return null;
|
|
178
|
-
// Idempotency: an explicit outer TOP/LIMIT wins over MaxRows.
|
|
179
|
-
// node-sql-parser distinguishes "no LIMIT" by an empty `limit.value` array
|
|
180
|
-
// on Postgres (the wrapper object is always present), while SQL Server uses
|
|
181
|
-
// `top === null`. Check both shapes so we don't double-inject.
|
|
182
|
-
if (selectNode.top != null)
|
|
183
|
-
return sql;
|
|
184
|
-
if (selectNode.limit != null && selectNode.limit.value.length > 0)
|
|
185
|
-
return sql;
|
|
186
|
-
const limitClause = dialect.LimitClause(maxRows);
|
|
187
|
-
if (limitClause.prefix) {
|
|
188
|
-
// SQL Server: { value, percent } matches node-sql-parser's parsed shape
|
|
189
|
-
selectNode.top = { value: maxRows, percent: null };
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
// PostgreSQL: { seperator, value[] } — note the parser's spelling of "seperator"
|
|
193
|
-
selectNode.limit = { seperator: '', value: [{ type: 'number', value: maxRows }] };
|
|
194
|
-
}
|
|
195
|
-
try {
|
|
196
|
-
return SQLParser.SqlifyAST(ast, dialect);
|
|
197
|
-
}
|
|
198
|
-
catch {
|
|
199
|
-
return null;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
static applyMaxRowsViaSubqueryWrap(sql, maxRows, dialect) {
|
|
203
|
-
const trimmed = sql.trim().replace(/;\s*$/, '');
|
|
204
|
-
const limitClause = dialect.LimitClause(maxRows);
|
|
205
|
-
if (limitClause.prefix) {
|
|
206
|
-
// SQL Server: outer projection cap. The optimizer pushes TOP N through trivially.
|
|
207
|
-
return `SELECT ${limitClause.prefix} * FROM (${trimmed}) AS _capped`;
|
|
208
|
-
}
|
|
209
|
-
// PostgreSQL: appending LIMIT N is always legal at the end of a SELECT/CTE.
|
|
210
|
-
return `${trimmed}\n${limitClause.suffix}`;
|
|
211
|
-
}
|
|
212
|
-
static getDialect(platform) {
|
|
213
|
-
return GetDialect(platform);
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Strips SQL comments (single-line -- and block comments) from a SQL string.
|
|
217
|
-
* Preserves single-quoted string literals to avoid stripping inside them.
|
|
218
|
-
*/
|
|
219
|
-
static stripSQLComments(sql) {
|
|
220
|
-
let result = '';
|
|
221
|
-
let i = 0;
|
|
222
|
-
while (i < sql.length) {
|
|
223
|
-
// Single-quoted string literal — preserve as-is
|
|
224
|
-
if (sql[i] === "'") {
|
|
225
|
-
result += sql[i++];
|
|
226
|
-
while (i < sql.length) {
|
|
227
|
-
if (sql[i] === "'" && i + 1 < sql.length && sql[i + 1] === "'") {
|
|
228
|
-
result += "''";
|
|
229
|
-
i += 2;
|
|
230
|
-
}
|
|
231
|
-
else if (sql[i] === "'") {
|
|
232
|
-
result += sql[i++];
|
|
233
|
-
break;
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
result += sql[i++];
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
// Single-line comment: -- to end of line
|
|
241
|
-
else if (sql[i] === '-' && i + 1 < sql.length && sql[i + 1] === '-') {
|
|
242
|
-
while (i < sql.length && sql[i] !== '\n')
|
|
243
|
-
i++;
|
|
244
|
-
}
|
|
245
|
-
// Block comment: /* ... */
|
|
246
|
-
else if (sql[i] === '/' && i + 1 < sql.length && sql[i + 1] === '*') {
|
|
247
|
-
i += 2;
|
|
248
|
-
while (i < sql.length) {
|
|
249
|
-
if (sql[i] === '*' && i + 1 < sql.length && sql[i + 1] === '/') {
|
|
250
|
-
i += 2;
|
|
251
|
-
break;
|
|
252
|
-
}
|
|
253
|
-
i++;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
// Normal character
|
|
257
|
-
else {
|
|
258
|
-
result += sql[i++];
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
return result;
|
|
262
|
-
}
|
|
263
144
|
}
|
|
264
145
|
// ════════════════════════════════════════════════════════════════════
|
|
265
146
|
// Helpers
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderPipeline.js","sourceRoot":"","sources":["../src/renderPipeline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"renderPipeline.js","sourceRoot":"","sources":["../src/renderPipeline.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/generic-database-provider",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.37.0",
|
|
5
5
|
"description": "Shared database provider logic for MemberJunction — intermediate base class between DatabaseProviderBase and platform-specific providers",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -22,18 +22,18 @@
|
|
|
22
22
|
"vitest": "^3.1.1"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@memberjunction/actions": "5.
|
|
26
|
-
"@memberjunction/actions-base": "5.
|
|
27
|
-
"@memberjunction/aiengine": "5.
|
|
28
|
-
"@memberjunction/core": "5.
|
|
29
|
-
"@memberjunction/core-entities": "5.
|
|
30
|
-
"@memberjunction/encryption": "5.
|
|
31
|
-
"@memberjunction/geo-core": "5.
|
|
32
|
-
"@memberjunction/global": "5.
|
|
33
|
-
"@memberjunction/query-processor": "5.
|
|
34
|
-
"@memberjunction/sql-dialect": "5.
|
|
35
|
-
"@memberjunction/sql-parser": "5.
|
|
36
|
-
"@memberjunction/queue": "5.
|
|
25
|
+
"@memberjunction/actions": "5.37.0",
|
|
26
|
+
"@memberjunction/actions-base": "5.37.0",
|
|
27
|
+
"@memberjunction/aiengine": "5.37.0",
|
|
28
|
+
"@memberjunction/core": "5.37.0",
|
|
29
|
+
"@memberjunction/core-entities": "5.37.0",
|
|
30
|
+
"@memberjunction/encryption": "5.37.0",
|
|
31
|
+
"@memberjunction/geo-core": "5.37.0",
|
|
32
|
+
"@memberjunction/global": "5.37.0",
|
|
33
|
+
"@memberjunction/query-processor": "5.37.0",
|
|
34
|
+
"@memberjunction/sql-dialect": "5.37.0",
|
|
35
|
+
"@memberjunction/sql-parser": "5.37.0",
|
|
36
|
+
"@memberjunction/queue": "5.37.0",
|
|
37
37
|
"sql-formatter": "^15.7.0",
|
|
38
38
|
"uuid": "^13.0.0"
|
|
39
39
|
},
|