@quereus/quereus 1.2.0 → 1.3.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/src/planner/analysis/predicate-normalizer.d.ts.map +1 -1
- package/dist/src/planner/analysis/predicate-normalizer.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +2 -2
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.js +2 -2
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/insert.js +2 -2
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/select-window.js +7 -7
- package/dist/src/planner/building/select-window.js.map +1 -1
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +18 -72
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/framework/characteristics.d.ts +2 -0
- package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
- package/dist/src/planner/nodes/add-constraint-node.d.ts +2 -6
- package/dist/src/planner/nodes/add-constraint-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/add-constraint-node.js +2 -14
- package/dist/src/planner/nodes/add-constraint-node.js.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts +2 -6
- package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.js +2 -14
- package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.d.ts +2 -8
- package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.js +4 -70
- package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
- package/dist/src/planner/nodes/create-assertion-node.d.ts +2 -6
- package/dist/src/planner/nodes/create-assertion-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/create-assertion-node.js +2 -14
- package/dist/src/planner/nodes/create-assertion-node.js.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.d.ts +4 -10
- package/dist/src/planner/nodes/declarative-schema.d.ts.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.js +3 -27
- package/dist/src/planner/nodes/declarative-schema.js.map +1 -1
- package/dist/src/planner/nodes/drop-assertion-node.d.ts +2 -6
- package/dist/src/planner/nodes/drop-assertion-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/drop-assertion-node.js +2 -14
- package/dist/src/planner/nodes/drop-assertion-node.js.map +1 -1
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +5 -99
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/join-utils.d.ts +31 -0
- package/dist/src/planner/nodes/join-utils.d.ts.map +1 -0
- package/dist/src/planner/nodes/join-utils.js +86 -0
- package/dist/src/planner/nodes/join-utils.js.map +1 -0
- package/dist/src/planner/nodes/merge-join-node.d.ts +1 -1
- package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.js +4 -70
- package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
- package/dist/src/planner/nodes/sort.d.ts +2 -0
- package/dist/src/planner/nodes/sort.d.ts.map +1 -1
- package/dist/src/planner/nodes/sort.js +5 -4
- package/dist/src/planner/nodes/sort.js.map +1 -1
- package/dist/src/planner/scopes/global.d.ts.map +1 -1
- package/dist/src/planner/scopes/global.js +7 -10
- package/dist/src/planner/scopes/global.js.map +1 -1
- package/dist/src/planner/scopes/registered.d.ts +0 -1
- package/dist/src/planner/scopes/registered.d.ts.map +1 -1
- package/dist/src/planner/scopes/registered.js +0 -7
- package/dist/src/planner/scopes/registered.js.map +1 -1
- package/dist/src/planner/stats/histogram.d.ts.map +1 -1
- package/dist/src/planner/stats/histogram.js +2 -1
- package/dist/src/planner/stats/histogram.js.map +1 -1
- package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/bloom-join.js +4 -12
- package/dist/src/runtime/emit/bloom-join.js.map +1 -1
- package/dist/src/runtime/emit/join-output.d.ts +13 -0
- package/dist/src/runtime/emit/join-output.d.ts.map +1 -0
- package/dist/src/runtime/emit/join-output.js +22 -0
- package/dist/src/runtime/emit/join-output.js.map +1 -0
- package/dist/src/runtime/emit/join.d.ts.map +1 -1
- package/dist/src/runtime/emit/join.js +4 -16
- package/dist/src/runtime/emit/join.js.map +1 -1
- package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/merge-join.js +4 -11
- package/dist/src/runtime/emit/merge-join.js.map +1 -1
- package/dist/src/runtime/emit/window.d.ts.map +1 -1
- package/dist/src/runtime/emit/window.js +43 -82
- package/dist/src/runtime/emit/window.js.map +1 -1
- package/dist/src/vtab/memory/layer/interface.d.ts +1 -1
- package/dist/src/vtab/memory/layer/interface.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +2 -2
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +4 -36
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/plan-filter.d.ts +8 -0
- package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -0
- package/dist/src/vtab/memory/layer/plan-filter.js +46 -0
- package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -0
- package/dist/src/vtab/memory/layer/scan-layer.d.ts +9 -0
- package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -0
- package/dist/src/vtab/memory/layer/{base-cursor.js → scan-layer.js} +35 -77
- package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -0
- package/package.json +3 -3
- package/dist/src/vtab/memory/layer/base-cursor.d.ts +0 -5
- package/dist/src/vtab/memory/layer/base-cursor.d.ts.map +0 -1
- package/dist/src/vtab/memory/layer/base-cursor.js.map +0 -1
- package/dist/src/vtab/memory/layer/transaction-cursor.d.ts +0 -5
- package/dist/src/vtab/memory/layer/transaction-cursor.d.ts.map +0 -1
- package/dist/src/vtab/memory/layer/transaction-cursor.js +0 -247
- package/dist/src/vtab/memory/layer/transaction-cursor.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drop-assertion-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/drop-assertion-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"drop-assertion-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/drop-assertion-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAA2B,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;GAGG;AACH,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IAK3B;IACA;IALA,QAAQ,GAAG,YAAY,CAAC,aAAa,CAAC;IAExD,YACE,KAAY,EACI,IAAY,EACZ,QAAiB;QAEjC,KAAK,CAAC,KAAK,CAAC,CAAC;QAHG,SAAI,GAAJ,IAAI,CAAQ;QACZ,aAAQ,GAAR,QAAQ,CAAS;IAGnC,CAAC;IAEQ,QAAQ;QACf,OAAO,kBAAkB,IAAI,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;IAEQ,oBAAoB;QAC3B,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC;IAEQ,eAAe,CAAC,SAAwC;QAC/D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/join-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC1G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,EAAE,WAAW,EAAE,KAAK,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"join-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/join-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC1G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,EAAE,WAAW,EAAE,KAAK,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAO3F,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvF;;;GAGG;AACH,wBAAgB,6BAA6B,CAC5C,SAAS,EAAE,cAAc,GAAG,SAAS,EACrC,SAAS,EAAE,SAAS,SAAS,EAAE,EAC/B,UAAU,EAAE,SAAS,SAAS,EAAE,GAC9B,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAqCxC;AAED;;;GAGG;AACH,qBAAa,QAAS,SAAQ,QAAS,YAAW,oBAAoB,EAAE,WAAW,EAAE,sBAAsB;aAMzF,IAAI,EAAE,kBAAkB;aACxB,KAAK,EAAE,kBAAkB;aACzB,QAAQ,EAAE,QAAQ;aAClB,SAAS,CAAC,EAAE,cAAc;aAC1B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE;IATjD,QAAQ,CAAC,QAAQ,qBAAqB;IACtC,OAAO,CAAC,eAAe,CAAsB;gBAG5C,KAAK,EAAE,KAAK,EACI,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,QAAQ,EAClB,SAAS,CAAC,EAAE,cAAc,YAAA,EAC1B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,YAAA;IAejD,eAAe,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuBpF,OAAO,CAAC,eAAe;IAIvB,aAAa,IAAI,SAAS,EAAE;IAI5B,OAAO,IAAI,YAAY;IAOvB,WAAW,IAAI,SAAS,QAAQ,EAAE;IAIlC,YAAY,IAAI,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAIjE,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IAuCxD,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAEQ,QAAQ,IAAI,MAAM;IAWlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAejD,WAAW,IAAI,QAAQ;IAIvB,gBAAgB,IAAI,cAAc,GAAG,SAAS;IAI9C,aAAa,IAAI,kBAAkB;IAInC,cAAc,IAAI,kBAAkB;IAIpC,eAAe,IAAI,SAAS,MAAM,EAAE,GAAG,SAAS;IAKvD,aAAa,IAAI,SAAS,cAAc,EAAE;CAG1C"}
|
|
@@ -7,6 +7,7 @@ import { normalizePredicate } from '../analysis/predicate-normalizer.js';
|
|
|
7
7
|
import { combineJoinKeys, analyzeJoinKeyCoverage } from '../util/key-utils.js';
|
|
8
8
|
import { BinaryOpNode } from './scalar.js';
|
|
9
9
|
import { ColumnReferenceNode } from './reference.js';
|
|
10
|
+
import { buildJoinAttributes, buildJoinRelationType, estimateJoinRows } from './join-utils.js';
|
|
10
11
|
/**
|
|
11
12
|
* Extract equi-join column index pairs from a join condition (AND-of-equalities).
|
|
12
13
|
* Returns pairs of {left, right} column indices.
|
|
@@ -91,82 +92,16 @@ export class JoinNode extends PlanNode {
|
|
|
91
92
|
};
|
|
92
93
|
}
|
|
93
94
|
buildAttributes() {
|
|
94
|
-
|
|
95
|
-
// Semi/anti joins produce only left-side attributes
|
|
96
|
-
if (this.joinType === 'semi' || this.joinType === 'anti') {
|
|
97
|
-
return leftAttrs.slice();
|
|
98
|
-
}
|
|
99
|
-
const rightAttrs = this.right.getAttributes();
|
|
100
|
-
// For JOINs, concatenate left and right attributes
|
|
101
|
-
// For OUTER joins, mark attributes from the nullable side as nullable
|
|
102
|
-
const attributes = [];
|
|
103
|
-
// Add left attributes
|
|
104
|
-
for (const attr of leftAttrs) {
|
|
105
|
-
const isNullable = this.joinType === 'right' || this.joinType === 'full';
|
|
106
|
-
attributes.push({
|
|
107
|
-
...attr,
|
|
108
|
-
// For right/full outer joins, left side can be null
|
|
109
|
-
type: isNullable ? { ...attr.type, nullable: true } : attr.type
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
// Add right attributes
|
|
113
|
-
for (const attr of rightAttrs) {
|
|
114
|
-
const isNullable = this.joinType === 'left' || this.joinType === 'full';
|
|
115
|
-
attributes.push({
|
|
116
|
-
...attr,
|
|
117
|
-
// For left/full outer joins, right side can be null
|
|
118
|
-
type: isNullable ? { ...attr.type, nullable: true } : attr.type
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
return attributes;
|
|
95
|
+
return buildJoinAttributes(this.left.getAttributes(), this.right.getAttributes(), this.joinType);
|
|
122
96
|
}
|
|
123
97
|
getAttributes() {
|
|
124
98
|
return this.attributesCache.value;
|
|
125
99
|
}
|
|
126
100
|
getType() {
|
|
127
101
|
const leftType = this.left.getType();
|
|
128
|
-
// Semi/anti joins produce only left-side columns and preserve left keys
|
|
129
|
-
if (this.joinType === 'semi' || this.joinType === 'anti') {
|
|
130
|
-
return {
|
|
131
|
-
typeClass: 'relation',
|
|
132
|
-
columns: leftType.columns,
|
|
133
|
-
isSet: leftType.isSet,
|
|
134
|
-
isReadOnly: leftType.isReadOnly,
|
|
135
|
-
keys: leftType.keys,
|
|
136
|
-
rowConstraints: leftType.rowConstraints
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
102
|
const rightType = this.right.getType();
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
const rightColumns = rightType.columns;
|
|
143
|
-
// For outer joins, mark columns as nullable appropriately
|
|
144
|
-
const combinedColumns = [
|
|
145
|
-
...leftColumns.map(col => {
|
|
146
|
-
const isNullable = this.joinType === 'right' || this.joinType === 'full';
|
|
147
|
-
return isNullable ? { ...col, type: { ...col.type, nullable: true } } : col;
|
|
148
|
-
}),
|
|
149
|
-
...rightColumns.map(col => {
|
|
150
|
-
const isNullable = this.joinType === 'left' || this.joinType === 'full';
|
|
151
|
-
return isNullable ? { ...col, type: { ...col.type, nullable: true } } : col;
|
|
152
|
-
})
|
|
153
|
-
];
|
|
154
|
-
// Join result is a set only if both inputs are sets and it's an inner/cross join
|
|
155
|
-
// Outer joins can introduce duplicates due to null padding
|
|
156
|
-
const isSet = (this.joinType === 'inner' || this.joinType === 'cross') &&
|
|
157
|
-
leftType.isSet && rightType.isSet;
|
|
158
|
-
// Combine keys conservatively
|
|
159
|
-
const combinedKeys = combineJoinKeys(leftType.keys, rightType.keys, this.joinType, leftType.columns.length);
|
|
160
|
-
// Combine row constraints from both sides
|
|
161
|
-
const combinedRowConstraints = [...leftType.rowConstraints, ...rightType.rowConstraints];
|
|
162
|
-
return {
|
|
163
|
-
typeClass: 'relation',
|
|
164
|
-
columns: combinedColumns,
|
|
165
|
-
isSet,
|
|
166
|
-
isReadOnly: leftType.isReadOnly && rightType.isReadOnly,
|
|
167
|
-
keys: combinedKeys,
|
|
168
|
-
rowConstraints: combinedRowConstraints
|
|
169
|
-
};
|
|
103
|
+
const keys = combineJoinKeys(leftType.keys, rightType.keys, this.joinType, leftType.columns.length);
|
|
104
|
+
return buildJoinRelationType(leftType, rightType, this.joinType, keys);
|
|
170
105
|
}
|
|
171
106
|
getChildren() {
|
|
172
107
|
return this.condition ? [this.left, this.right, this.condition] : [this.left, this.right];
|
|
@@ -201,36 +136,7 @@ export class JoinNode extends PlanNode {
|
|
|
201
136
|
return new JoinNode(this.scope, newLeft, newRight, this.joinType, newCondition, this.usingColumns);
|
|
202
137
|
}
|
|
203
138
|
get estimatedRows() {
|
|
204
|
-
|
|
205
|
-
const rightRows = this.right.estimatedRows;
|
|
206
|
-
if (leftRows === undefined || rightRows === undefined) {
|
|
207
|
-
return undefined;
|
|
208
|
-
}
|
|
209
|
-
// Simple heuristics for different join types
|
|
210
|
-
switch (this.joinType) {
|
|
211
|
-
case 'cross':
|
|
212
|
-
return leftRows * rightRows;
|
|
213
|
-
case 'inner':
|
|
214
|
-
// Assume 10% selectivity for inner joins
|
|
215
|
-
return Math.max(1, leftRows * rightRows * 0.1);
|
|
216
|
-
case 'left':
|
|
217
|
-
// Left joins preserve all left rows
|
|
218
|
-
return leftRows;
|
|
219
|
-
case 'right':
|
|
220
|
-
// Right joins preserve all right rows
|
|
221
|
-
return rightRows;
|
|
222
|
-
case 'full':
|
|
223
|
-
// Full outer joins can have at most left + right rows
|
|
224
|
-
return leftRows + rightRows;
|
|
225
|
-
case 'semi':
|
|
226
|
-
// Semi joins produce at most left rows (assume 50% match)
|
|
227
|
-
return Math.max(1, Math.floor(leftRows * 0.5));
|
|
228
|
-
case 'anti':
|
|
229
|
-
// Anti joins produce at most left rows (assume 50% don't match)
|
|
230
|
-
return Math.max(1, Math.floor(leftRows * 0.5));
|
|
231
|
-
default:
|
|
232
|
-
return leftRows * rightRows * 0.1;
|
|
233
|
-
}
|
|
139
|
+
return estimateJoinRows(this.left.estimatedRows, this.right.estimatedRows, this.joinType);
|
|
234
140
|
}
|
|
235
141
|
toString() {
|
|
236
142
|
const joinTypeDisplay = this.joinType.toUpperCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/join-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"join-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/join-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Attribute } from './plan-node.js';
|
|
2
|
+
import type { JoinType } from './join-node.js';
|
|
3
|
+
import type { RelationType, ColRef } from '../../common/datatype.js';
|
|
4
|
+
/**
|
|
5
|
+
* An equi-join pair: left attribute = right attribute.
|
|
6
|
+
* Attribute IDs are stable across plan transformations.
|
|
7
|
+
*/
|
|
8
|
+
export interface EquiJoinPair {
|
|
9
|
+
leftAttrId: number;
|
|
10
|
+
rightAttrId: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Build the output attributes for a join node.
|
|
14
|
+
*
|
|
15
|
+
* If `preserveAttributeIds` is supplied (physical join nodes created from a
|
|
16
|
+
* logical JoinNode) the preserved set is returned directly. Otherwise the
|
|
17
|
+
* attributes are computed from the left/right inputs and the join type.
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildJoinAttributes(leftAttrs: readonly Attribute[], rightAttrs: readonly Attribute[], joinType: JoinType, preserveAttributeIds?: readonly Attribute[]): Attribute[];
|
|
20
|
+
/**
|
|
21
|
+
* Build the `RelationType` for a join result.
|
|
22
|
+
*
|
|
23
|
+
* Semi/anti joins return the left type shape. All other join types combine
|
|
24
|
+
* columns from both sides with appropriate nullable marking.
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildJoinRelationType(leftType: RelationType, rightType: RelationType, joinType: JoinType, keys?: ReadonlyArray<ReadonlyArray<ColRef>>): RelationType;
|
|
27
|
+
/**
|
|
28
|
+
* Estimate the number of output rows for a join given the input cardinalities.
|
|
29
|
+
*/
|
|
30
|
+
export declare function estimateJoinRows(leftRows: number | undefined, rightRows: number | undefined, joinType: JoinType): number | undefined;
|
|
31
|
+
//# sourceMappingURL=join-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"join-utils.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/join-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAClC,SAAS,EAAE,SAAS,SAAS,EAAE,EAC/B,UAAU,EAAE,SAAS,SAAS,EAAE,EAChC,QAAQ,EAAE,QAAQ,EAClB,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE,GACzC,SAAS,EAAE,CAcb;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACpC,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,QAAQ,EAClB,IAAI,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GACzC,YAAY,CAkCd;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,QAAQ,EAAE,QAAQ,GAChB,MAAM,GAAG,SAAS,CAoBpB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the output attributes for a join node.
|
|
3
|
+
*
|
|
4
|
+
* If `preserveAttributeIds` is supplied (physical join nodes created from a
|
|
5
|
+
* logical JoinNode) the preserved set is returned directly. Otherwise the
|
|
6
|
+
* attributes are computed from the left/right inputs and the join type.
|
|
7
|
+
*/
|
|
8
|
+
export function buildJoinAttributes(leftAttrs, rightAttrs, joinType, preserveAttributeIds) {
|
|
9
|
+
if (preserveAttributeIds)
|
|
10
|
+
return preserveAttributeIds.slice();
|
|
11
|
+
if (joinType === 'semi' || joinType === 'anti')
|
|
12
|
+
return leftAttrs.slice();
|
|
13
|
+
const attributes = [];
|
|
14
|
+
for (const attr of leftAttrs) {
|
|
15
|
+
const isNullable = joinType === 'right' || joinType === 'full';
|
|
16
|
+
attributes.push(isNullable ? { ...attr, type: { ...attr.type, nullable: true } } : attr);
|
|
17
|
+
}
|
|
18
|
+
for (const attr of rightAttrs) {
|
|
19
|
+
const isNullable = joinType === 'left' || joinType === 'full';
|
|
20
|
+
attributes.push(isNullable ? { ...attr, type: { ...attr.type, nullable: true } } : attr);
|
|
21
|
+
}
|
|
22
|
+
return attributes;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Build the `RelationType` for a join result.
|
|
26
|
+
*
|
|
27
|
+
* Semi/anti joins return the left type shape. All other join types combine
|
|
28
|
+
* columns from both sides with appropriate nullable marking.
|
|
29
|
+
*/
|
|
30
|
+
export function buildJoinRelationType(leftType, rightType, joinType, keys) {
|
|
31
|
+
if (joinType === 'semi' || joinType === 'anti') {
|
|
32
|
+
return {
|
|
33
|
+
typeClass: 'relation',
|
|
34
|
+
columns: leftType.columns,
|
|
35
|
+
isSet: leftType.isSet,
|
|
36
|
+
isReadOnly: leftType.isReadOnly,
|
|
37
|
+
keys: leftType.keys,
|
|
38
|
+
rowConstraints: leftType.rowConstraints,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const combinedColumns = [
|
|
42
|
+
...leftType.columns.map(col => {
|
|
43
|
+
const isNullable = joinType === 'right' || joinType === 'full';
|
|
44
|
+
return isNullable ? { ...col, type: { ...col.type, nullable: true } } : col;
|
|
45
|
+
}),
|
|
46
|
+
...rightType.columns.map(col => {
|
|
47
|
+
const isNullable = joinType === 'left' || joinType === 'full';
|
|
48
|
+
return isNullable ? { ...col, type: { ...col.type, nullable: true } } : col;
|
|
49
|
+
}),
|
|
50
|
+
];
|
|
51
|
+
const isSet = (joinType === 'inner' || joinType === 'cross') &&
|
|
52
|
+
leftType.isSet && rightType.isSet;
|
|
53
|
+
return {
|
|
54
|
+
typeClass: 'relation',
|
|
55
|
+
columns: combinedColumns,
|
|
56
|
+
isSet,
|
|
57
|
+
isReadOnly: leftType.isReadOnly && rightType.isReadOnly,
|
|
58
|
+
keys: (keys ?? []),
|
|
59
|
+
rowConstraints: [...leftType.rowConstraints, ...rightType.rowConstraints],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Estimate the number of output rows for a join given the input cardinalities.
|
|
64
|
+
*/
|
|
65
|
+
export function estimateJoinRows(leftRows, rightRows, joinType) {
|
|
66
|
+
if (leftRows === undefined || rightRows === undefined)
|
|
67
|
+
return undefined;
|
|
68
|
+
switch (joinType) {
|
|
69
|
+
case 'cross':
|
|
70
|
+
return leftRows * rightRows;
|
|
71
|
+
case 'inner':
|
|
72
|
+
return Math.max(1, leftRows * rightRows * 0.1);
|
|
73
|
+
case 'left':
|
|
74
|
+
return leftRows;
|
|
75
|
+
case 'right':
|
|
76
|
+
return rightRows;
|
|
77
|
+
case 'full':
|
|
78
|
+
return leftRows + rightRows;
|
|
79
|
+
case 'semi':
|
|
80
|
+
case 'anti':
|
|
81
|
+
return Math.max(1, Math.floor(leftRows * 0.5));
|
|
82
|
+
default:
|
|
83
|
+
return leftRows * rightRows * 0.1;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=join-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"join-utils.js","sourceRoot":"","sources":["../../../../src/planner/nodes/join-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import type { RelationType } from '../../common/datatype.js';
|
|
|
4
4
|
import type { Scope } from '../scopes/scope.js';
|
|
5
5
|
import type { JoinCapable, PredicateSourceCapable } from '../framework/characteristics.js';
|
|
6
6
|
import type { JoinType } from './join-node.js';
|
|
7
|
-
import type
|
|
7
|
+
import { type EquiJoinPair } from './join-utils.js';
|
|
8
8
|
/**
|
|
9
9
|
* Physical plan node implementing a merge join.
|
|
10
10
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-join-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/merge-join-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAC9K,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"merge-join-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/merge-join-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAC9K,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAgE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGlH;;;;;;;;;GASG;AACH,qBAAa,aAAc,SAAQ,QAAS,YAAW,oBAAoB,EAAE,WAAW,EAAE,sBAAsB;IAM9G,sCAAsC;aACtB,IAAI,EAAE,kBAAkB;IACxC,uCAAuC;aACvB,KAAK,EAAE,kBAAkB;aACzB,QAAQ,EAAE,QAAQ;IAClC,2DAA2D;aAC3C,SAAS,EAAE,SAAS,YAAY,EAAE;IAClD,qDAAqD;aACrC,iBAAiB,CAAC,EAAE,cAAc;IAClD,wDAAwD;aACxC,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE;IAf5D,SAAkB,QAAQ,0BAA0B;IACpD,OAAO,CAAC,eAAe,CAAsB;gBAG5C,KAAK,EAAE,KAAK;IACZ,sCAAsC;IACtB,IAAI,EAAE,kBAAkB;IACxC,uCAAuC;IACvB,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,QAAQ;IAClC,2DAA2D;IAC3C,SAAS,EAAE,SAAS,YAAY,EAAE;IAClD,qDAAqD;IACrC,iBAAiB,CAAC,EAAE,cAAc,YAAA;IAClD,wDAAwD;IACxC,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE,YAAA;IAW5D,OAAO,CAAC,eAAe;IAOvB,aAAa,IAAI,SAAS,EAAE;IAI5B,OAAO,IAAI,YAAY;IAIvB,eAAe,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA+BpF,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,WAAW,IAAI,SAAS,QAAQ,EAAE;IAMlC,YAAY,IAAI,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAIjE,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IAgCxD,WAAW,IAAI,QAAQ;IACvB,gBAAgB,IAAI,cAAc,GAAG,SAAS;IAC9C,aAAa,IAAI,kBAAkB;IACnC,cAAc,IAAI,kBAAkB;IACpC,eAAe,IAAI,SAAS,MAAM,EAAE,GAAG,SAAS;IAGhD,aAAa,IAAI,SAAS,cAAc,EAAE;IAIjC,QAAQ,IAAI,MAAM;IAKlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAcxD"}
|
|
@@ -4,6 +4,7 @@ import { Cached } from '../../util/cached.js';
|
|
|
4
4
|
import { StatusCode } from '../../common/types.js';
|
|
5
5
|
import { quereusError } from '../../common/errors.js';
|
|
6
6
|
import { mergeJoinCost } from '../cost/index.js';
|
|
7
|
+
import { buildJoinAttributes, buildJoinRelationType, estimateJoinRows } from './join-utils.js';
|
|
7
8
|
import { analyzeJoinKeyCoverage } from '../util/key-utils.js';
|
|
8
9
|
/**
|
|
9
10
|
* Physical plan node implementing a merge join.
|
|
@@ -49,64 +50,13 @@ export class MergeJoinNode extends PlanNode {
|
|
|
49
50
|
this.attributesCache = new Cached(() => this.buildAttributes());
|
|
50
51
|
}
|
|
51
52
|
buildAttributes() {
|
|
52
|
-
|
|
53
|
-
return this.preserveAttributeIds.slice();
|
|
54
|
-
}
|
|
55
|
-
const leftAttrs = this.left.getAttributes();
|
|
56
|
-
// Semi/anti joins produce only left-side attributes
|
|
57
|
-
if (this.joinType === 'semi' || this.joinType === 'anti') {
|
|
58
|
-
return leftAttrs.slice();
|
|
59
|
-
}
|
|
60
|
-
// Combine left + right attributes
|
|
61
|
-
const rightAttrs = this.right.getAttributes();
|
|
62
|
-
const attributes = [];
|
|
63
|
-
for (const attr of leftAttrs) {
|
|
64
|
-
const isNullable = this.joinType === 'right' || this.joinType === 'full';
|
|
65
|
-
attributes.push(isNullable ? { ...attr, type: { ...attr.type, nullable: true } } : attr);
|
|
66
|
-
}
|
|
67
|
-
for (const attr of rightAttrs) {
|
|
68
|
-
const isNullable = this.joinType === 'left' || this.joinType === 'full';
|
|
69
|
-
attributes.push(isNullable ? { ...attr, type: { ...attr.type, nullable: true } } : attr);
|
|
70
|
-
}
|
|
71
|
-
return attributes;
|
|
53
|
+
return buildJoinAttributes(this.left.getAttributes(), this.right.getAttributes(), this.joinType, this.preserveAttributeIds);
|
|
72
54
|
}
|
|
73
55
|
getAttributes() {
|
|
74
56
|
return this.attributesCache.value;
|
|
75
57
|
}
|
|
76
58
|
getType() {
|
|
77
|
-
|
|
78
|
-
// Semi/anti joins produce only left-side columns
|
|
79
|
-
if (this.joinType === 'semi' || this.joinType === 'anti') {
|
|
80
|
-
return {
|
|
81
|
-
typeClass: 'relation',
|
|
82
|
-
columns: leftType.columns,
|
|
83
|
-
isSet: leftType.isSet,
|
|
84
|
-
isReadOnly: leftType.isReadOnly,
|
|
85
|
-
keys: leftType.keys,
|
|
86
|
-
rowConstraints: leftType.rowConstraints
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
const rightType = this.right.getType();
|
|
90
|
-
const combinedColumns = [
|
|
91
|
-
...leftType.columns.map(col => {
|
|
92
|
-
const isNullable = this.joinType === 'right' || this.joinType === 'full';
|
|
93
|
-
return isNullable ? { ...col, type: { ...col.type, nullable: true } } : col;
|
|
94
|
-
}),
|
|
95
|
-
...rightType.columns.map(col => {
|
|
96
|
-
const isNullable = this.joinType === 'left' || this.joinType === 'full';
|
|
97
|
-
return isNullable ? { ...col, type: { ...col.type, nullable: true } } : col;
|
|
98
|
-
})
|
|
99
|
-
];
|
|
100
|
-
const isSet = (this.joinType === 'inner' || this.joinType === 'cross') &&
|
|
101
|
-
leftType.isSet && rightType.isSet;
|
|
102
|
-
return {
|
|
103
|
-
typeClass: 'relation',
|
|
104
|
-
columns: combinedColumns,
|
|
105
|
-
isSet,
|
|
106
|
-
isReadOnly: leftType.isReadOnly && rightType.isReadOnly,
|
|
107
|
-
keys: [],
|
|
108
|
-
rowConstraints: [...leftType.rowConstraints, ...rightType.rowConstraints]
|
|
109
|
-
};
|
|
59
|
+
return buildJoinRelationType(this.left.getType(), this.right.getType(), this.joinType, []);
|
|
110
60
|
}
|
|
111
61
|
computePhysical(childrenPhysical) {
|
|
112
62
|
const leftPhys = childrenPhysical[0];
|
|
@@ -130,23 +80,7 @@ export class MergeJoinNode extends PlanNode {
|
|
|
130
80
|
};
|
|
131
81
|
}
|
|
132
82
|
get estimatedRows() {
|
|
133
|
-
|
|
134
|
-
const rightRows = this.right.estimatedRows;
|
|
135
|
-
if (leftRows === undefined || rightRows === undefined)
|
|
136
|
-
return undefined;
|
|
137
|
-
switch (this.joinType) {
|
|
138
|
-
case 'cross':
|
|
139
|
-
return leftRows * rightRows;
|
|
140
|
-
case 'inner':
|
|
141
|
-
return Math.max(1, leftRows * rightRows * 0.1);
|
|
142
|
-
case 'left':
|
|
143
|
-
return leftRows;
|
|
144
|
-
case 'semi':
|
|
145
|
-
case 'anti':
|
|
146
|
-
return Math.max(1, Math.floor(leftRows * 0.5));
|
|
147
|
-
default:
|
|
148
|
-
return leftRows * rightRows * 0.1;
|
|
149
|
-
}
|
|
83
|
+
return estimateJoinRows(this.left.estimatedRows, this.right.estimatedRows, this.joinType);
|
|
150
84
|
}
|
|
151
85
|
getChildren() {
|
|
152
86
|
const children = [this.left, this.right];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-join-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/merge-join-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAoH,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAG9K,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"merge-join-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/merge-join-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,10 +37,12 @@ export declare class SortNode extends PlanNode implements UnaryRelationalNode, S
|
|
|
37
37
|
getSortKeys(): readonly {
|
|
38
38
|
expression: ScalarPlanNode;
|
|
39
39
|
direction: 'asc' | 'desc';
|
|
40
|
+
nulls?: 'first' | 'last';
|
|
40
41
|
}[];
|
|
41
42
|
withSortKeys(keys: readonly {
|
|
42
43
|
expression: ScalarPlanNode;
|
|
43
44
|
direction: 'asc' | 'desc';
|
|
45
|
+
nulls?: 'first' | 'last';
|
|
44
46
|
}[]): PlanNode;
|
|
45
47
|
}
|
|
46
48
|
//# sourceMappingURL=sort.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/sort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAC7K,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAKhD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,OAAO;IACvB,gCAAgC;IAChC,UAAU,EAAE,cAAc,CAAC;IAC3B,qBAAqB;IACrB,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;IAC1B,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,qBAAa,QAAS,SAAQ,QAAS,YAAW,mBAAmB,EAAE,WAAW;aAKhE,MAAM,EAAE,kBAAkB;aAC1B,QAAQ,EAAE,SAAS,OAAO,EAAE;IAL7C,SAAkB,QAAQ,qBAAqB;gBAG9C,KAAK,EAAE,KAAK,EACI,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5C,qBAAqB,CAAC,EAAE,MAAM;IAW/B,OAAO,IAAI,YAAY;IAKvB,aAAa,IAAI,SAAS,SAAS,EAAE;IAKrC,WAAW,IAAI,SAAS,QAAQ,EAAE;IAKlC,YAAY,IAAI,SAAS,CAAC,kBAAkB,CAAC;IAI7C,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAGtC;IAED,eAAe,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAc3E,QAAQ,IAAI,MAAM;IAOlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAUxD,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IAoCxD,WAAW,IAAI,SAAS;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/sort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAC7K,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAKhD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,OAAO;IACvB,gCAAgC;IAChC,UAAU,EAAE,cAAc,CAAC;IAC3B,qBAAqB;IACrB,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;IAC1B,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,qBAAa,QAAS,SAAQ,QAAS,YAAW,mBAAmB,EAAE,WAAW;aAKhE,MAAM,EAAE,kBAAkB;aAC1B,QAAQ,EAAE,SAAS,OAAO,EAAE;IAL7C,SAAkB,QAAQ,qBAAqB;gBAG9C,KAAK,EAAE,KAAK,EACI,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5C,qBAAqB,CAAC,EAAE,MAAM;IAW/B,OAAO,IAAI,YAAY;IAKvB,aAAa,IAAI,SAAS,SAAS,EAAE;IAKrC,WAAW,IAAI,SAAS,QAAQ,EAAE;IAKlC,YAAY,IAAI,SAAS,CAAC,kBAAkB,CAAC;IAI7C,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAGtC;IAED,eAAe,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAc3E,QAAQ,IAAI,MAAM;IAOlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAUxD,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IAoCxD,WAAW,IAAI,SAAS;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;KAAE,EAAE;IAQ7G,YAAY,CAAC,IAAI,EAAE,SAAS;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;KAAE,EAAE,GAAG,QAAQ;CAqB5H"}
|
|
@@ -95,20 +95,21 @@ export class SortNode extends PlanNode {
|
|
|
95
95
|
getSortKeys() {
|
|
96
96
|
return this.sortKeys.map(key => ({
|
|
97
97
|
expression: key.expression,
|
|
98
|
-
direction: key.direction
|
|
98
|
+
direction: key.direction,
|
|
99
|
+
nulls: key.nulls
|
|
99
100
|
}));
|
|
100
101
|
}
|
|
101
102
|
withSortKeys(keys) {
|
|
102
|
-
// Convert to internal SortKey format with nulls handling
|
|
103
103
|
const newSortKeys = keys.map(key => ({
|
|
104
104
|
expression: key.expression,
|
|
105
105
|
direction: key.direction,
|
|
106
|
-
nulls:
|
|
106
|
+
nulls: key.nulls
|
|
107
107
|
}));
|
|
108
108
|
// Check if anything changed
|
|
109
109
|
const changed = newSortKeys.length !== this.sortKeys.length ||
|
|
110
110
|
newSortKeys.some((key, i) => key.expression !== this.sortKeys[i].expression ||
|
|
111
|
-
key.direction !== this.sortKeys[i].direction
|
|
111
|
+
key.direction !== this.sortKeys[i].direction ||
|
|
112
|
+
key.nulls !== this.sortKeys[i].nulls);
|
|
112
113
|
if (!changed) {
|
|
113
114
|
return this;
|
|
114
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort.js","sourceRoot":"","sources":["../../../../src/planner/nodes/sort.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sort.js","sourceRoot":"","sources":["../../../../src/planner/nodes/sort.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../../../../src/planner/scopes/global.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../../../../src/planner/scopes/global.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAWvC,qBAAa,WAAY,SAAQ,SAAS;aACb,OAAO,EAAE,aAAa;gBAAtB,OAAO,EAAE,aAAa;IAIlD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,UAAU,GAAG,QAAQ,GAAG,OAAO,SAAS,GAAG,SAAS;IA4BtG,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,SAAS,GAAG,SAAS;CAmB1E"}
|
|
@@ -2,6 +2,11 @@ import { BaseScope } from "./base.js";
|
|
|
2
2
|
import { FunctionReferenceNode, TableReferenceNode } from "../nodes/reference.js";
|
|
3
3
|
import { isScalarFunctionSchema } from "../../schema/function.js";
|
|
4
4
|
import { REAL_TYPE } from "../../types/builtin-types.js";
|
|
5
|
+
function getFunctionScalarType(func) {
|
|
6
|
+
return isScalarFunctionSchema(func)
|
|
7
|
+
? func.returnType
|
|
8
|
+
: { typeClass: 'scalar', logicalType: REAL_TYPE, nullable: true, isReadOnly: true };
|
|
9
|
+
}
|
|
5
10
|
export class GlobalScope extends BaseScope {
|
|
6
11
|
manager;
|
|
7
12
|
constructor(manager) {
|
|
@@ -16,11 +21,7 @@ export class GlobalScope extends BaseScope {
|
|
|
16
21
|
if (!func) {
|
|
17
22
|
return undefined;
|
|
18
23
|
}
|
|
19
|
-
|
|
20
|
-
const scalarType = isScalarFunctionSchema(func)
|
|
21
|
-
? func.returnType
|
|
22
|
-
: { typeClass: 'scalar', logicalType: REAL_TYPE, nullable: true, isReadOnly: true };
|
|
23
|
-
return new FunctionReferenceNode(this, func, scalarType);
|
|
24
|
+
return new FunctionReferenceNode(this, func, getFunctionScalarType(func));
|
|
24
25
|
}
|
|
25
26
|
// Table: [schema.]table
|
|
26
27
|
const [first, second] = symbolKey.split('.');
|
|
@@ -43,11 +44,7 @@ export class GlobalScope extends BaseScope {
|
|
|
43
44
|
// Check for zero-argument functions first
|
|
44
45
|
const func = this.manager.findFunction(name, 0);
|
|
45
46
|
if (func) {
|
|
46
|
-
|
|
47
|
-
const scalarType = isScalarFunctionSchema(func)
|
|
48
|
-
? func.returnType
|
|
49
|
-
: { typeClass: 'scalar', logicalType: REAL_TYPE, nullable: true, isReadOnly: true };
|
|
50
|
-
return new FunctionReferenceNode(this, func, scalarType);
|
|
47
|
+
return new FunctionReferenceNode(this, func, getFunctionScalarType(func));
|
|
51
48
|
}
|
|
52
49
|
// Table: [schema.]table
|
|
53
50
|
const table = this.manager.findTable(name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../../../src/planner/scopes/global.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGlF,OAAO,
|
|
1
|
+
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../../../src/planner/scopes/global.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,6 @@ export declare class RegisteredScope implements Scope {
|
|
|
26
26
|
* and returns an appropriate ReferenceNode.
|
|
27
27
|
*/
|
|
28
28
|
registerSymbol(symbolKey: string, getReference: ReferenceCallback): void;
|
|
29
|
-
subscribeFactory(symbolKey: string, factory: ReferenceCallback): void;
|
|
30
29
|
resolveSymbol(symbolKey: string, expression: AST.Expression): PlanNode | typeof Ambiguous | undefined;
|
|
31
30
|
/**
|
|
32
31
|
* Returns all symbols that have been registered in this scope.
|