@quereus/quereus 0.6.7 → 0.6.12
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 +11 -0
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +13 -1
- package/dist/src/index.js.map +1 -1
- 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/package.json +1 -1
- package/src/index.ts +31 -2
- package/src/planner/building/select-modifiers.ts +45 -0
package/README.md
CHANGED
|
@@ -195,6 +195,17 @@ Quereus works in React Native with two considerations:
|
|
|
195
195
|
* [Plugin System](docs/plugins.md): Complete guide to creating and using plugins for virtual tables, functions, and collations.
|
|
196
196
|
* [TODO List](docs/todo.md): Planned features and improvements
|
|
197
197
|
|
|
198
|
+
### Plugin Development
|
|
199
|
+
|
|
200
|
+
Quereus exports all critical utilities needed for plugin and module development:
|
|
201
|
+
|
|
202
|
+
* **Comparison Functions**: `compareSqlValues`, `compareRows`, `compareTypedValues`, `createTypedComparator` — Match Quereus SQL semantics in custom implementations
|
|
203
|
+
* **Coercion Utilities**: `tryCoerceToNumber`, `coerceForComparison`, `coerceForAggregate` — Handle type coercion correctly
|
|
204
|
+
* **Collation Support**: `registerCollation`, `getCollation`, built-in collations (`BINARY_COLLATION`, `NOCASE_COLLATION`, `RTRIM_COLLATION`)
|
|
205
|
+
* **Type System**: Full access to logical types, validation, and parsing utilities
|
|
206
|
+
|
|
207
|
+
See the [Plugin System documentation](docs/plugins.md#comparison-and-coercion-utilities) for complete API reference and examples.
|
|
208
|
+
|
|
198
209
|
## Key Design Decisions
|
|
199
210
|
|
|
200
211
|
* **Federated / VTab-Centric**: All tables are virtual tables.
|
package/dist/src/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export { ConflictResolution, IndexConstraintOp, VTabConfig, FunctionFlags } from
|
|
|
12
12
|
export { QuereusError, MisuseError, ConstraintError, unwrapError, formatErrorChain, getPrimaryError } from './common/errors.js';
|
|
13
13
|
export type { ErrorInfo } from './common/errors.js';
|
|
14
14
|
export { VirtualTable } from './vtab/table.js';
|
|
15
|
+
export type { UpdateArgs } from './vtab/table.js';
|
|
15
16
|
export type { VirtualTableConnection } from './vtab/connection.js';
|
|
16
17
|
export { MemoryTableModule } from './vtab/memory/module.js';
|
|
17
18
|
export type { IndexInfo, IndexConstraint, IndexConstraintUsage, IndexOrderBy } from './vtab/index-info.js';
|
|
@@ -21,7 +22,7 @@ export type { BaseModuleConfig, SchemaChangeInfo } from './vtab/module.js';
|
|
|
21
22
|
export type { BestAccessPlanRequest, BestAccessPlanResult, ConstraintOp, ColumnMeta, PredicateConstraint, OrderingSpec } from './vtab/best-access-plan.js';
|
|
22
23
|
export { AccessPlanBuilder, validateAccessPlan } from './vtab/best-access-plan.js';
|
|
23
24
|
export type { CollationFunction } from './util/comparison.js';
|
|
24
|
-
export { BINARY_COLLATION, NOCASE_COLLATION, RTRIM_COLLATION, registerCollation, getCollation, resolveCollation } from './util/comparison.js';
|
|
25
|
+
export { BINARY_COLLATION, NOCASE_COLLATION, RTRIM_COLLATION, registerCollation, getCollation, resolveCollation, compareSqlValues, compareSqlValuesFast, compareRows, compareTypedValues, createTypedComparator, compareWithOrderBy, compareWithOrderByFast, createOrderByComparator, createOrderByComparatorFast, SortDirection, NullsOrdering, evaluateIsTrue, isTruthy, getSqlDataTypeName } from './util/comparison.js';
|
|
25
26
|
export type { LogicalType, CollationFunction as TypeCollationFunction } from './types/logical-type.js';
|
|
26
27
|
export { PhysicalType } from './types/logical-type.js';
|
|
27
28
|
export { NULL_TYPE, INTEGER_TYPE, REAL_TYPE, TEXT_TYPE, BLOB_TYPE, BOOLEAN_TYPE, NUMERIC_TYPE, ANY_TYPE } from './types/builtin-types.js';
|
|
@@ -38,6 +39,7 @@ export type { ColumnSchema } from './schema/column.js';
|
|
|
38
39
|
export { isAsyncIterable, getAsyncIterator, asyncIterableToArray } from './runtime/utils.js';
|
|
39
40
|
export { createScalarFunction, createTableValuedFunction, createAggregateFunction } from './func/registration.js';
|
|
40
41
|
export type { ScalarFunc, TableValuedFunc, AggregateReducer, AggregateFinalizer, FunctionSchema } from './schema/function.js';
|
|
42
|
+
export { tryCoerceToNumber, coerceToNumberForArithmetic, coerceForComparison, coerceForAggregate, isNumericValue } from './util/coercion.js';
|
|
41
43
|
export { Latches } from './util/latches.js';
|
|
42
44
|
export { registerPlugin } from './util/plugin-helper.js';
|
|
43
45
|
export type { PluginFunction } from './util/plugin-helper.js';
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5D,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChI,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC3G,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAG3E,YAAY,EACX,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,YAAY,EACZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGnF,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js
CHANGED
|
@@ -16,7 +16,17 @@ export { VirtualTable } from './vtab/table.js';
|
|
|
16
16
|
export { MemoryTableModule } from './vtab/memory/module.js';
|
|
17
17
|
export { IndexScanFlags } from './vtab/index-info.js';
|
|
18
18
|
export { AccessPlanBuilder, validateAccessPlan } from './vtab/best-access-plan.js';
|
|
19
|
-
export {
|
|
19
|
+
export {
|
|
20
|
+
// Collation registration and lookup
|
|
21
|
+
BINARY_COLLATION, NOCASE_COLLATION, RTRIM_COLLATION, registerCollation, getCollation, resolveCollation,
|
|
22
|
+
// Core comparison functions (critical for module implementations)
|
|
23
|
+
compareSqlValues, compareSqlValuesFast, compareRows, compareTypedValues, createTypedComparator,
|
|
24
|
+
// ORDER BY comparison utilities
|
|
25
|
+
compareWithOrderBy, compareWithOrderByFast, createOrderByComparator, createOrderByComparatorFast, SortDirection, NullsOrdering,
|
|
26
|
+
// Truthiness evaluation
|
|
27
|
+
evaluateIsTrue, isTruthy,
|
|
28
|
+
// Type introspection
|
|
29
|
+
getSqlDataTypeName } from './util/comparison.js';
|
|
20
30
|
export { PhysicalType } from './types/logical-type.js';
|
|
21
31
|
export { NULL_TYPE, INTEGER_TYPE, REAL_TYPE, TEXT_TYPE, BLOB_TYPE, BOOLEAN_TYPE, NUMERIC_TYPE, ANY_TYPE } from './types/builtin-types.js';
|
|
22
32
|
export { DATE_TYPE, TIME_TYPE, DATETIME_TYPE, TIMESPAN_TYPE } from './types/temporal-types.js';
|
|
@@ -33,6 +43,8 @@ export { SchemaManager } from './schema/manager.js';
|
|
|
33
43
|
export { isAsyncIterable, getAsyncIterator, asyncIterableToArray } from './runtime/utils.js';
|
|
34
44
|
// Function registration utilities
|
|
35
45
|
export { createScalarFunction, createTableValuedFunction, createAggregateFunction } from './func/registration.js';
|
|
46
|
+
// Coercion utilities (for module implementations)
|
|
47
|
+
export { tryCoerceToNumber, coerceToNumberForArithmetic, coerceForComparison, coerceForAggregate, isNumericValue } from './util/coercion.js';
|
|
36
48
|
// Utility functions
|
|
37
49
|
export { Latches } from './util/latches.js';
|
|
38
50
|
// Plugin helper for static loading (React Native, etc.)
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8BAA8B;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,kCAAkC;AAClC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGhI,oBAAoB;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -18,6 +18,7 @@ export type { ErrorInfo } from './common/errors.js';
|
|
|
18
18
|
|
|
19
19
|
// Virtual Table API
|
|
20
20
|
export { VirtualTable } from './vtab/table.js';
|
|
21
|
+
export type { UpdateArgs } from './vtab/table.js';
|
|
21
22
|
export type { VirtualTableConnection } from './vtab/connection.js';
|
|
22
23
|
export { MemoryTableModule } from './vtab/memory/module.js';
|
|
23
24
|
export type { IndexInfo, IndexConstraint, IndexConstraintUsage, IndexOrderBy } from './vtab/index-info.js';
|
|
@@ -36,15 +37,34 @@ export type {
|
|
|
36
37
|
} from './vtab/best-access-plan.js';
|
|
37
38
|
export { AccessPlanBuilder, validateAccessPlan } from './vtab/best-access-plan.js';
|
|
38
39
|
|
|
39
|
-
// Collation functions
|
|
40
|
+
// Collation and comparison functions
|
|
40
41
|
export type { CollationFunction } from './util/comparison.js';
|
|
41
42
|
export {
|
|
43
|
+
// Collation registration and lookup
|
|
42
44
|
BINARY_COLLATION,
|
|
43
45
|
NOCASE_COLLATION,
|
|
44
46
|
RTRIM_COLLATION,
|
|
45
47
|
registerCollation,
|
|
46
48
|
getCollation,
|
|
47
|
-
resolveCollation
|
|
49
|
+
resolveCollation,
|
|
50
|
+
// Core comparison functions (critical for module implementations)
|
|
51
|
+
compareSqlValues,
|
|
52
|
+
compareSqlValuesFast,
|
|
53
|
+
compareRows,
|
|
54
|
+
compareTypedValues,
|
|
55
|
+
createTypedComparator,
|
|
56
|
+
// ORDER BY comparison utilities
|
|
57
|
+
compareWithOrderBy,
|
|
58
|
+
compareWithOrderByFast,
|
|
59
|
+
createOrderByComparator,
|
|
60
|
+
createOrderByComparatorFast,
|
|
61
|
+
SortDirection,
|
|
62
|
+
NullsOrdering,
|
|
63
|
+
// Truthiness evaluation
|
|
64
|
+
evaluateIsTrue,
|
|
65
|
+
isTruthy,
|
|
66
|
+
// Type introspection
|
|
67
|
+
getSqlDataTypeName
|
|
48
68
|
} from './util/comparison.js';
|
|
49
69
|
|
|
50
70
|
// Type system
|
|
@@ -110,6 +130,15 @@ export type {
|
|
|
110
130
|
FunctionSchema
|
|
111
131
|
} from './schema/function.js';
|
|
112
132
|
|
|
133
|
+
// Coercion utilities (for module implementations)
|
|
134
|
+
export {
|
|
135
|
+
tryCoerceToNumber,
|
|
136
|
+
coerceToNumberForArithmetic,
|
|
137
|
+
coerceForComparison,
|
|
138
|
+
coerceForAggregate,
|
|
139
|
+
isNumericValue
|
|
140
|
+
} from './util/coercion.js';
|
|
141
|
+
|
|
113
142
|
// Utility functions
|
|
114
143
|
export { Latches } from './util/latches.js';
|
|
115
144
|
|
|
@@ -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
|
+
}
|