@quereus/quereus 0.6.6 → 0.6.9
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/src/planner/building/select-modifiers.d.ts.map +1 -1
- package/dist/src/planner/building/select-modifiers.js +36 -0
- package/dist/src/planner/building/select-modifiers.js.map +1 -1
- package/dist/src/util/mutation-statement.js +5 -0
- package/dist/src/util/mutation-statement.js.map +1 -1
- package/package.json +1 -1
- package/src/planner/building/select-modifiers.ts +45 -0
- package/src/util/mutation-statement.ts +6 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-modifiers.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-modifiers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAMxE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAK1D;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,UAAU,EAAE,EACzB,WAAW,EAAE,KAAK,EAClB,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,aAAa,EAAE,eAAe,EAC9B,oBAAoB,GAAE,OAAc,GAClC;IACF,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,EAAE,eAAe,CAAC;IAC9B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;CAC1B,
|
|
1
|
+
{"version":3,"file":"select-modifiers.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-modifiers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAMxE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAK1D;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,UAAU,EAAE,EACzB,WAAW,EAAE,KAAK,EAClB,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,aAAa,EAAE,eAAe,EAC9B,oBAAoB,GAAE,OAAc,GAClC;IACF,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,EAAE,eAAe,CAAC;IAC9B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;CAC1B,CA4CA;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,WAAW,EAAE,KAAK,GAChB,kBAAkB,CAKpB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,aAAa,EAAE,eAAe,EAC9B,gBAAgB,EAAE,OAAO,EACzB,eAAe,CAAC,EAAE,eAAe,GAC/B,kBAAkB,CAqBpB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,aAAa,EAAE,eAAe,EAC9B,eAAe,CAAC,EAAE,eAAe,GAC/B,kBAAkB,CAepB"}
|
|
@@ -15,6 +15,11 @@ export function buildFinalProjections(input, projections, selectScope, stmt, sel
|
|
|
15
15
|
if (projections.length === 0) {
|
|
16
16
|
return { output: input, finalContext: selectContext, preAggregateSort: false };
|
|
17
17
|
}
|
|
18
|
+
// Skip ProjectNode entirely for identity projections (SELECT * equivalent)
|
|
19
|
+
// This avoids unnecessary per-row overhead when all columns pass through unchanged
|
|
20
|
+
if (isIdentityProjection(projections, input)) {
|
|
21
|
+
return { output: input, finalContext: selectContext, preAggregateSort: false };
|
|
22
|
+
}
|
|
18
23
|
// Check if ORDER BY should be applied before projection (using input scope only)
|
|
19
24
|
const needsPreProjectionSort = shouldApplyOrderByBeforeProjection(stmt, projections);
|
|
20
25
|
let preAggregateSort = false;
|
|
@@ -127,4 +132,35 @@ function createProjectionOutputScope(projectionNode) {
|
|
|
127
132
|
});
|
|
128
133
|
return projectionOutputScope;
|
|
129
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* Detects if projections form an identity transformation over the source.
|
|
137
|
+
* An identity projection is one where all projections are simple column references
|
|
138
|
+
* that reference source attributes in order with no name changes.
|
|
139
|
+
* This allows skipping the ProjectNode entirely for SELECT * queries.
|
|
140
|
+
*/
|
|
141
|
+
function isIdentityProjection(projections, source) {
|
|
142
|
+
const sourceAttrs = source.getAttributes();
|
|
143
|
+
// Must have same number of projections as source attributes
|
|
144
|
+
if (projections.length !== sourceAttrs.length) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
for (let i = 0; i < projections.length; i++) {
|
|
148
|
+
const proj = projections[i];
|
|
149
|
+
const sourceAttr = sourceAttrs[i];
|
|
150
|
+
// Must be a column reference
|
|
151
|
+
if (!CapabilityDetectors.isColumnReference(proj.node)) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
const colRef = proj.node;
|
|
155
|
+
// Must reference the corresponding source attribute (preserves order)
|
|
156
|
+
if (colRef.attributeId !== sourceAttr.id) {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
// Alias must not change the name (undefined alias is fine)
|
|
160
|
+
if (proj.alias && proj.alias.toLowerCase() !== sourceAttr.name.toLowerCase()) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
130
166
|
//# sourceMappingURL=select-modifiers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-modifiers.js","sourceRoot":"","sources":["../../../../src/planner/building/select-modifiers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"select-modifiers.js","sourceRoot":"","sources":["../../../../src/planner/building/select-modifiers.ts"],"names":[],"mappings":"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"}
|
|
@@ -78,6 +78,11 @@ function buildWhereClause(pkDef, keyValues, tableSchema) {
|
|
|
78
78
|
left: { type: 'column', name: tableSchema.columns[pkCol.index].name },
|
|
79
79
|
right: sqlValueToLiteralExpr(keyValues[idx])
|
|
80
80
|
}));
|
|
81
|
+
if (conditions.length === 0) {
|
|
82
|
+
// Table has no primary key - return a tautology (WHERE 1)
|
|
83
|
+
// Note: UPDATE/DELETE without row identification will affect all rows
|
|
84
|
+
return { type: 'literal', value: 1 };
|
|
85
|
+
}
|
|
81
86
|
if (conditions.length === 1) {
|
|
82
87
|
return conditions[0];
|
|
83
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-statement.js","sourceRoot":"","sources":["../../../src/util/mutation-statement.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mutation-statement.js","sourceRoot":"","sources":["../../../src/util/mutation-statement.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -33,6 +33,12 @@ export function buildFinalProjections(
|
|
|
33
33
|
return { output: input, finalContext: selectContext, preAggregateSort: false };
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
// Skip ProjectNode entirely for identity projections (SELECT * equivalent)
|
|
37
|
+
// This avoids unnecessary per-row overhead when all columns pass through unchanged
|
|
38
|
+
if (isIdentityProjection(projections, input)) {
|
|
39
|
+
return { output: input, finalContext: selectContext, preAggregateSort: false };
|
|
40
|
+
}
|
|
41
|
+
|
|
36
42
|
// Check if ORDER BY should be applied before projection (using input scope only)
|
|
37
43
|
const needsPreProjectionSort = shouldApplyOrderByBeforeProjection(stmt, projections);
|
|
38
44
|
let preAggregateSort = false;
|
|
@@ -183,3 +189,42 @@ function createProjectionOutputScope(projectionNode: RelationalPlanNode): Regist
|
|
|
183
189
|
|
|
184
190
|
return projectionOutputScope;
|
|
185
191
|
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Detects if projections form an identity transformation over the source.
|
|
195
|
+
* An identity projection is one where all projections are simple column references
|
|
196
|
+
* that reference source attributes in order with no name changes.
|
|
197
|
+
* This allows skipping the ProjectNode entirely for SELECT * queries.
|
|
198
|
+
*/
|
|
199
|
+
function isIdentityProjection(projections: Projection[], source: RelationalPlanNode): boolean {
|
|
200
|
+
const sourceAttrs = source.getAttributes();
|
|
201
|
+
|
|
202
|
+
// Must have same number of projections as source attributes
|
|
203
|
+
if (projections.length !== sourceAttrs.length) {
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
for (let i = 0; i < projections.length; i++) {
|
|
208
|
+
const proj = projections[i];
|
|
209
|
+
const sourceAttr = sourceAttrs[i];
|
|
210
|
+
|
|
211
|
+
// Must be a column reference
|
|
212
|
+
if (!CapabilityDetectors.isColumnReference(proj.node)) {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const colRef = proj.node;
|
|
217
|
+
|
|
218
|
+
// Must reference the corresponding source attribute (preserves order)
|
|
219
|
+
if (colRef.attributeId !== sourceAttr.id) {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Alias must not change the name (undefined alias is fine)
|
|
224
|
+
if (proj.alias && proj.alias.toLowerCase() !== sourceAttr.name.toLowerCase()) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
@@ -114,6 +114,12 @@ function buildWhereClause(
|
|
|
114
114
|
right: sqlValueToLiteralExpr(keyValues[idx])
|
|
115
115
|
}));
|
|
116
116
|
|
|
117
|
+
if (conditions.length === 0) {
|
|
118
|
+
// Table has no primary key - return a tautology (WHERE 1)
|
|
119
|
+
// Note: UPDATE/DELETE without row identification will affect all rows
|
|
120
|
+
return { type: 'literal', value: 1 };
|
|
121
|
+
}
|
|
122
|
+
|
|
117
123
|
if (conditions.length === 1) {
|
|
118
124
|
return conditions[0];
|
|
119
125
|
}
|