@quereus/quereus 4.22.0 → 4.24.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/core/database-cardinality-feedback.d.ts +133 -20
- package/dist/src/core/database-cardinality-feedback.d.ts.map +1 -1
- package/dist/src/core/database-cardinality-feedback.js +312 -39
- package/dist/src/core/database-cardinality-feedback.js.map +1 -1
- package/dist/src/core/database.d.ts +1 -0
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +14 -6
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/statement.d.ts +6 -1
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +11 -2
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/func/builtins/cardinality-feedback.d.ts +6 -0
- package/dist/src/func/builtins/cardinality-feedback.d.ts.map +1 -1
- package/dist/src/func/builtins/cardinality-feedback.js +55 -3
- package/dist/src/func/builtins/cardinality-feedback.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +3 -1
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/index.d.ts.map +1 -1
- package/dist/src/func/builtins/index.js +2 -1
- package/dist/src/func/builtins/index.js.map +1 -1
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/planner/cost/index.d.ts +27 -19
- package/dist/src/planner/cost/index.d.ts.map +1 -1
- package/dist/src/planner/cost/index.js +30 -21
- package/dist/src/planner/cost/index.js.map +1 -1
- package/dist/src/planner/framework/trace.js +2 -2
- package/dist/src/planner/framework/trace.js.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.d.ts +2 -1
- package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.js +1 -0
- package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +5 -10
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts +2 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.js +1 -0
- package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +16 -3
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js +3 -0
- package/dist/src/planner/nodes/plan-node.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts +3 -3
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +16 -12
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts +2 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.js +1 -0
- package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts +14 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +52 -20
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/optimizer-tuning.d.ts +42 -9
- package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
- package/dist/src/planner/optimizer-tuning.js +9 -4
- package/dist/src/planner/optimizer-tuning.js.map +1 -1
- package/dist/src/planner/rules/access/rule-key-set-seek.d.ts +9 -0
- package/dist/src/planner/rules/access/rule-key-set-seek.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-key-set-seek.js +18 -12
- package/dist/src/planner/rules/access/rule-key-set-seek.js.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js +7 -8
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js +1 -1
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js +7 -0
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js.map +1 -1
- package/dist/src/planner/rules/join/index-nested-loop.d.ts +6 -2
- package/dist/src/planner/rules/join/index-nested-loop.d.ts.map +1 -1
- package/dist/src/planner/rules/join/index-nested-loop.js +20 -14
- package/dist/src/planner/rules/join/index-nested-loop.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +5 -0
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts +6 -4
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +10 -7
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.js +108 -53
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +15 -6
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +9 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.d.ts +2 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js +6 -5
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.d.ts +4 -3
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +4 -3
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.d.ts +4 -3
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js +5 -4
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +4 -3
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
- package/dist/src/planner/stats/catalog-stats.d.ts +8 -8
- package/dist/src/planner/stats/catalog-stats.d.ts.map +1 -1
- package/dist/src/planner/stats/catalog-stats.js +10 -10
- package/dist/src/planner/stats/catalog-stats.js.map +1 -1
- package/dist/src/planner/stats/table-cardinality.d.ts +119 -30
- package/dist/src/planner/stats/table-cardinality.d.ts.map +1 -1
- package/dist/src/planner/stats/table-cardinality.js +137 -29
- package/dist/src/planner/stats/table-cardinality.js.map +1 -1
- package/dist/src/planner/util/relative-rows.d.ts +29 -0
- package/dist/src/planner/util/relative-rows.d.ts.map +1 -0
- package/dist/src/planner/util/relative-rows.js +67 -0
- package/dist/src/planner/util/relative-rows.js.map +1 -0
- package/dist/src/planner/util/row-estimates.d.ts +23 -0
- package/dist/src/planner/util/row-estimates.d.ts.map +1 -1
- package/dist/src/planner/util/row-estimates.js +29 -0
- package/dist/src/planner/util/row-estimates.js.map +1 -1
- package/dist/src/runtime/cardinality-observations.d.ts +62 -7
- package/dist/src/runtime/cardinality-observations.d.ts.map +1 -1
- package/dist/src/runtime/cardinality-observations.js +74 -8
- package/dist/src/runtime/cardinality-observations.js.map +1 -1
- package/dist/src/runtime/emit/scan.d.ts +1 -1
- package/dist/src/runtime/emit/scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/scan.js +78 -10
- package/dist/src/runtime/emit/scan.js.map +1 -1
- package/dist/src/schema/manager.d.ts +5 -5
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +9 -5
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/vtab/cost-profile.d.ts +61 -0
- package/dist/src/vtab/cost-profile.d.ts.map +1 -0
- package/dist/src/vtab/cost-profile.js +52 -0
- package/dist/src/vtab/cost-profile.js.map +1 -0
- package/dist/src/vtab/filter-info.d.ts +16 -0
- package/dist/src/vtab/filter-info.d.ts.map +1 -1
- package/dist/src/vtab/filter-info.js +29 -0
- package/dist/src/vtab/filter-info.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +5 -3
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/module.d.ts +53 -9
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Reads real statistics from TableSchema.statistics (populated by ANALYZE or VTab)
|
|
5
5
|
* and falls back to NaiveStatsProvider heuristics when unavailable. Table row
|
|
6
|
-
* counts additionally consult the observed row-count overlay
|
|
7
|
-
* `plannedRowCount`); column statistics never do.
|
|
6
|
+
* counts additionally consult the table's module and the observed row-count overlay
|
|
7
|
+
* (see `plannedRowCount`); column statistics never do.
|
|
8
8
|
*/
|
|
9
9
|
import { NaiveStatsProvider } from './index.js';
|
|
10
10
|
import { createLogger } from '../../common/logger.js';
|
|
@@ -28,22 +28,22 @@ const lowerBound = (value) => ({ kind: 'lowerBound', value });
|
|
|
28
28
|
* Falls back to a NaiveStatsProvider when real statistics are not available.
|
|
29
29
|
*/
|
|
30
30
|
export class CatalogStatsProvider {
|
|
31
|
-
|
|
31
|
+
sources;
|
|
32
32
|
fallback;
|
|
33
33
|
/**
|
|
34
|
-
* @param
|
|
35
|
-
*
|
|
36
|
-
*
|
|
34
|
+
* @param sources The owning database's row-count sources. Must be the same object
|
|
35
|
+
* `TableReferenceNode` reads through its `SchemaManager`, or scan cardinality and
|
|
36
|
+
* selectivity denominators disagree.
|
|
37
37
|
*/
|
|
38
|
-
constructor(fallback,
|
|
39
|
-
this.
|
|
38
|
+
constructor(fallback, sources) {
|
|
39
|
+
this.sources = sources;
|
|
40
40
|
this.fallback = fallback ?? new NaiveStatsProvider();
|
|
41
41
|
}
|
|
42
42
|
tableRows(table) {
|
|
43
|
-
const rows = plannedRowCount(table, this.
|
|
43
|
+
const rows = plannedRowCount(table, this.sources);
|
|
44
44
|
if (rows === undefined)
|
|
45
45
|
return this.fallback.tableRows(table);
|
|
46
|
-
log('Table %s: rowCount=%d (source: observed or catalog)', table.name, rows);
|
|
46
|
+
log('Table %s: rowCount=%d (source: module, observed or catalog)', table.name, rows);
|
|
47
47
|
return rows;
|
|
48
48
|
}
|
|
49
49
|
selectivity(table, predicate, resolve) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-stats.js","sourceRoot":"","sources":["../../../../src/planner/stats/catalog-stats.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"catalog-stats.js","sourceRoot":"","sources":["../../../../src/planner/stats/catalog-stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The base-table row-count seam.
|
|
3
3
|
*
|
|
4
|
-
* Every planner reading of a base table's size goes through {@link plannedRowCount}
|
|
5
|
-
*
|
|
6
|
-
* `
|
|
7
|
-
*
|
|
4
|
+
* Every planner reading of a base table's size goes through {@link plannedRowCount},
|
|
5
|
+
* which ranks four sources (docs/progressive-optimizer.md §3.3): an exact count the
|
|
6
|
+
* table's module maintains (`VirtualTableModule.getRowCount`), the count observed
|
|
7
|
+
* during execution (the per-database overlay, see `core/database-cardinality-feedback.ts`),
|
|
8
|
+
* an approximate module count, the catalog's count — else `undefined`.
|
|
9
|
+
* `TableReferenceNode` (every scan's base cardinality, and the
|
|
8
10
|
* `BestAccessPlanRequest.estimatedRows` hint) and `CatalogStatsProvider.tableRows`
|
|
9
|
-
* (selectivity denominators, MV sizing) both call it
|
|
10
|
-
* stats-provider estimate cannot
|
|
11
|
+
* (selectivity denominators, MV sizing) both call it with the database's one
|
|
12
|
+
* {@link RowCountSources}, so scan cardinality and the stats-provider estimate cannot
|
|
13
|
+
* drift apart within one plan.
|
|
14
|
+
*
|
|
15
|
+
* The same sources carry the overlay's observed rows per key of an equality seek,
|
|
16
|
+
* read through {@link plannedRowsPerKey} by `IndexSeekNode` (what the seek advertises)
|
|
17
|
+
* and the index-nested-loop candidate (what one seek costs). That reader overrides only
|
|
18
|
+
* the engine's own consumers of a module's `rows` estimate; the module's cost, its
|
|
19
|
+
* `rows` and its access-path choice stay in the module's currency
|
|
20
|
+
* (docs/optimizer-costing.md § Where a module's own SELECTIVITY fits).
|
|
11
21
|
*
|
|
12
22
|
* There are exactly two spellings: `undefined` means "nobody knows" and a number —
|
|
13
23
|
* including a real 0 — means "measured". `undefined` must stay `undefined` here:
|
|
@@ -15,24 +25,33 @@
|
|
|
15
25
|
* folding a default in would change every un-analyzed table's cardinality.
|
|
16
26
|
*
|
|
17
27
|
* NOTE: the catalog `rowCount` is a snapshot from the last `ANALYZE` — rows written
|
|
18
|
-
* afterwards are invisible until the next one (or until a complete scan is observed)
|
|
28
|
+
* afterwards are invisible until the next one (or until a complete scan is observed),
|
|
29
|
+
* unless the module reports its own count.
|
|
19
30
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* `
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* wrong.
|
|
31
|
+
* A real 0 (analyzed or observed empty table) is relayed as 0 everywhere a row count is
|
|
32
|
+
* reported. Sites that turn a count into a COST floor a measured 0 at one row instead
|
|
33
|
+
* (`costedRows` in `planner/util/row-estimates.ts`; the store's request sizing floors
|
|
34
|
+
* its own): a zero goes stale on the first insert, and a table priced at nothing would
|
|
35
|
+
* trade its primary-key seeks for scans (docs/optimizer-costing.md § Base-table row
|
|
36
|
+
* estimates).
|
|
27
37
|
*/
|
|
28
38
|
import type { TableSchema } from '../../schema/table.js';
|
|
39
|
+
import type { Database } from '../../core/database.js';
|
|
40
|
+
import type { ModuleRowCount } from '../../vtab/module.js';
|
|
41
|
+
/** What execution has shown of one table's size: an exact count, a floor, or both. */
|
|
42
|
+
export interface ObservedRowCount {
|
|
43
|
+
/** Exact row count from the latest complete read; absent when the table is known only from below. */
|
|
44
|
+
readonly rows?: number;
|
|
45
|
+
/** The table holds at least this many rows, proven by a read of part of it. */
|
|
46
|
+
readonly atLeast?: number;
|
|
47
|
+
}
|
|
29
48
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
49
|
+
* Table sizes observed during execution. Answers only for the `TableSchema` object the
|
|
50
|
+
* observation was made against, so any schema swap (`ANALYZE`, `ALTER`, drop and
|
|
51
|
+
* re-create) silences an entry.
|
|
33
52
|
*/
|
|
34
53
|
export interface ObservedRowCounts {
|
|
35
|
-
observedRows(table: TableSchema):
|
|
54
|
+
observedRows(table: TableSchema): ObservedRowCount | undefined;
|
|
36
55
|
}
|
|
37
56
|
/**
|
|
38
57
|
* The catalog's row count — `TableSchema.statistics`, populated by `ANALYZE` or VTab
|
|
@@ -45,18 +64,88 @@ export interface ObservedRowCounts {
|
|
|
45
64
|
*/
|
|
46
65
|
export declare function catalogRowCount(table: TableSchema): number | undefined;
|
|
47
66
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
|
|
67
|
+
* Rows per key observed during execution for equality seeks through non-unique indexes,
|
|
68
|
+
* per table and equality column set (docs/progressive-optimizer.md §3.1). Same validity
|
|
69
|
+
* rule as {@link ObservedRowCounts}: an entry answers only for the `TableSchema` object it
|
|
70
|
+
* was observed against.
|
|
71
|
+
*/
|
|
72
|
+
export interface ObservedKeyCardinalities {
|
|
73
|
+
/**
|
|
74
|
+
* The running mean of rows one key of `columns` matched on `table`, or undefined when
|
|
75
|
+
* nothing is held for that set. `columns` are sorted, de-duplicated base-column indexes
|
|
76
|
+
* — the spelling `equalitySeekKeyColumns` (`vtab/filter-info.ts`) produces.
|
|
77
|
+
*/
|
|
78
|
+
observedRowsPerKey(table: TableSchema, columns: readonly number[]): number | undefined;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Everything {@link plannedRowCount} and {@link plannedRowsPerKey} rank besides the
|
|
82
|
+
* catalog. One per `Database` ({@link databaseRowCountSources}), shared by every planner
|
|
83
|
+
* reader.
|
|
84
|
+
*/
|
|
85
|
+
export interface RowCountSources extends ObservedRowCounts, ObservedKeyCardinalities {
|
|
86
|
+
/** The table's module's own count — {@link reportedRowCount}. */
|
|
87
|
+
reportedRows(table: TableSchema): ModuleRowCount | undefined;
|
|
88
|
+
}
|
|
89
|
+
/** What {@link plannedRowCount} ranks: the overlay's counts and the module's, not the overlay's rows per key. */
|
|
90
|
+
export type RankedRowCountSources = Pick<RowCountSources, 'observedRows' | 'reportedRows'>;
|
|
91
|
+
/** The database's row-count sources: its observed overlay, and its tables' modules. */
|
|
92
|
+
export declare function databaseRowCountSources(db: Database, observed: ObservedRowCounts & ObservedKeyCardinalities): RowCountSources;
|
|
93
|
+
/** True when `table`'s registered module implements `VirtualTableModule.getRowCount`, whether or not it answers now. */
|
|
94
|
+
export declare function moduleReportsRowCount(db: Database, table: TableSchema): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Asks `table`'s registered module for its count (`VirtualTableModule.getRowCount`).
|
|
97
|
+
* A hint, so a module without the hook, a throw, or a malformed answer (`rows` not a
|
|
98
|
+
* non-negative integer) is `undefined` — a failed hint must never fail planning.
|
|
99
|
+
*/
|
|
100
|
+
export declare function reportedRowCount(db: Database, table: TableSchema): ModuleRowCount | undefined;
|
|
101
|
+
/**
|
|
102
|
+
* The base-table row count the planner uses, first answer wins:
|
|
103
|
+
*
|
|
104
|
+
* 1. an exact module count — maintained on every write, so it is the truth now and any
|
|
105
|
+
* snapshot below is older;
|
|
106
|
+
* 2. the overlay's observed count — an entry only answers for the exact `TableSchema`
|
|
107
|
+
* it was observed under and any `ANALYZE` swaps that object, so it is newer than the
|
|
108
|
+
* catalog numbers on the schema it names;
|
|
109
|
+
* 3. an approximate module count — below a measurement this session made, because an
|
|
110
|
+
* estimate can be off by more than the overlay's shift factor and only a complete
|
|
111
|
+
* scan can correct it; above the catalog, because it describes the table now;
|
|
112
|
+
* 4. the catalog (`ANALYZE`) count;
|
|
113
|
+
* 5. `undefined` (unknown).
|
|
114
|
+
*
|
|
115
|
+
* The overlay's floor then raises whatever answered from 2–4, and answers alone when
|
|
116
|
+
* nothing did (it was recorded only above the default). It never raises an exact module
|
|
117
|
+
* count: that is current, and a floor describes committed state at some earlier moment,
|
|
118
|
+
* so it cannot legitimately exceed it.
|
|
119
|
+
*
|
|
120
|
+
* The module is asked first so an exactly-sized table never touches the overlay, whose
|
|
121
|
+
* reads refresh its recency. Only the row count is overridden; column statistics are
|
|
122
|
+
* untouched.
|
|
123
|
+
*
|
|
124
|
+
* The result also becomes `BestAccessPlanRequest.estimatedRows`, so a module that reports
|
|
125
|
+
* its count prices its access path against the same number the rest of the plan uses —
|
|
126
|
+
* one size per plan.
|
|
127
|
+
*/
|
|
128
|
+
export declare function plannedRowCount(table: TableSchema, sources: RankedRowCountSources | undefined): number | undefined;
|
|
129
|
+
/**
|
|
130
|
+
* The rows per key the planner prices a single-key equality seek on `columns` at, or
|
|
131
|
+
* `undefined` to leave the module's own estimate standing (docs/progressive-optimizer.md
|
|
132
|
+
* §3.3):
|
|
133
|
+
*
|
|
134
|
+
* 1. when the catalog's statistics cover the column set — `table.statistics` with a
|
|
135
|
+
* positive `rowCount` and a `columnStats` entry for every column — the catalog wins and
|
|
136
|
+
* nothing is overridden: the module's statistics-backed estimate is the engine's own
|
|
137
|
+
* `estimateLeaf` arithmetic over the same numbers, and the count rule (newest exact
|
|
138
|
+
* wins) does not transfer to a mean sampled under some bindings and not others.
|
|
139
|
+
* Coverage is all-or-nothing, the rule both shipped modules apply before mixing a
|
|
140
|
+
* measured factor with a shape constant;
|
|
141
|
+
* 2. otherwise the overlay's mean for the set, rounded and floored at one row — the
|
|
142
|
+
* module's `Math.max(1, …)` floor, so a key that matched nothing so far does not price a
|
|
143
|
+
* seek at nothing;
|
|
144
|
+
* 3. otherwise `undefined`.
|
|
53
145
|
*
|
|
54
|
-
* NOTE:
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
* observed size instead of its live one; one size per plan weighed over the fresher
|
|
58
|
-
* live count. Revisit when a module's live size reaches the planner
|
|
59
|
-
* (`feat-planner-asks-the-backend-how-big-a-table-is`) — it should outrank the overlay.
|
|
146
|
+
* NOTE: catalog-wins is a first rule, not a measured one; an `ANALYZE` snapshot can be
|
|
147
|
+
* older than the mean. Reconsider only against a measured case where the stale catalog
|
|
148
|
+
* loses a plan the mean would have won.
|
|
60
149
|
*/
|
|
61
|
-
export declare function
|
|
150
|
+
export declare function plannedRowsPerKey(table: TableSchema, columns: readonly number[], sources: RowCountSources | undefined): number | undefined;
|
|
62
151
|
//# sourceMappingURL=table-cardinality.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-cardinality.d.ts","sourceRoot":"","sources":["../../../../src/planner/stats/table-cardinality.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"table-cardinality.d.ts","sourceRoot":"","sources":["../../../../src/planner/stats/table-cardinality.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,sFAAsF;AACtF,MAAM,WAAW,gBAAgB;IAChC,qGAAqG;IACrG,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IACjC,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,gBAAgB,GAAG,SAAS,CAAC;CAC/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAEtE;AAED;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACxC;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;CACvF;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAgB,SAAQ,iBAAiB,EAAE,wBAAwB;IACnF,iEAAiE;IACjE,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS,CAAC;CAC7D;AAED,iHAAiH;AACjH,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,eAAe,EAAE,cAAc,GAAG,cAAc,CAAC,CAAC;AAE3F,uFAAuF;AACvF,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,GAAG,wBAAwB,GAAG,eAAe,CAM7H;AAED,wHAAwH;AACxH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAE/E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS,CAgB7F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,qBAAqB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAKlH;AAOD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,eAAe,GAAG,SAAS,GAClC,MAAM,GAAG,SAAS,CAIpB"}
|
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The base-table row-count seam.
|
|
3
3
|
*
|
|
4
|
-
* Every planner reading of a base table's size goes through {@link plannedRowCount}
|
|
5
|
-
*
|
|
6
|
-
* `
|
|
7
|
-
*
|
|
4
|
+
* Every planner reading of a base table's size goes through {@link plannedRowCount},
|
|
5
|
+
* which ranks four sources (docs/progressive-optimizer.md §3.3): an exact count the
|
|
6
|
+
* table's module maintains (`VirtualTableModule.getRowCount`), the count observed
|
|
7
|
+
* during execution (the per-database overlay, see `core/database-cardinality-feedback.ts`),
|
|
8
|
+
* an approximate module count, the catalog's count — else `undefined`.
|
|
9
|
+
* `TableReferenceNode` (every scan's base cardinality, and the
|
|
8
10
|
* `BestAccessPlanRequest.estimatedRows` hint) and `CatalogStatsProvider.tableRows`
|
|
9
|
-
* (selectivity denominators, MV sizing) both call it
|
|
10
|
-
* stats-provider estimate cannot
|
|
11
|
+
* (selectivity denominators, MV sizing) both call it with the database's one
|
|
12
|
+
* {@link RowCountSources}, so scan cardinality and the stats-provider estimate cannot
|
|
13
|
+
* drift apart within one plan.
|
|
14
|
+
*
|
|
15
|
+
* The same sources carry the overlay's observed rows per key of an equality seek,
|
|
16
|
+
* read through {@link plannedRowsPerKey} by `IndexSeekNode` (what the seek advertises)
|
|
17
|
+
* and the index-nested-loop candidate (what one seek costs). That reader overrides only
|
|
18
|
+
* the engine's own consumers of a module's `rows` estimate; the module's cost, its
|
|
19
|
+
* `rows` and its access-path choice stay in the module's currency
|
|
20
|
+
* (docs/optimizer-costing.md § Where a module's own SELECTIVITY fits).
|
|
11
21
|
*
|
|
12
22
|
* There are exactly two spellings: `undefined` means "nobody knows" and a number —
|
|
13
23
|
* including a real 0 — means "measured". `undefined` must stay `undefined` here:
|
|
@@ -15,16 +25,18 @@
|
|
|
15
25
|
* folding a default in would change every un-analyzed table's cardinality.
|
|
16
26
|
*
|
|
17
27
|
* NOTE: the catalog `rowCount` is a snapshot from the last `ANALYZE` — rows written
|
|
18
|
-
* afterwards are invisible until the next one (or until a complete scan is observed)
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
28
|
+
* afterwards are invisible until the next one (or until a complete scan is observed),
|
|
29
|
+
* unless the module reports its own count.
|
|
30
|
+
*
|
|
31
|
+
* A real 0 (analyzed or observed empty table) is relayed as 0 everywhere a row count is
|
|
32
|
+
* reported. Sites that turn a count into a COST floor a measured 0 at one row instead
|
|
33
|
+
* (`costedRows` in `planner/util/row-estimates.ts`; the store's request sizing floors
|
|
34
|
+
* its own): a zero goes stale on the first insert, and a table priced at nothing would
|
|
35
|
+
* trade its primary-key seeks for scans (docs/optimizer-costing.md § Base-table row
|
|
36
|
+
* estimates).
|
|
27
37
|
*/
|
|
38
|
+
import { createLogger } from '../../common/logger.js';
|
|
39
|
+
const debugLog = createLogger('optimizer:stats:row-count').extend('debug');
|
|
28
40
|
/**
|
|
29
41
|
* The catalog's row count — `TableSchema.statistics`, populated by `ANALYZE` or VTab
|
|
30
42
|
* reporting.
|
|
@@ -37,21 +49,117 @@
|
|
|
37
49
|
export function catalogRowCount(table) {
|
|
38
50
|
return table.statistics?.rowCount;
|
|
39
51
|
}
|
|
52
|
+
/** The database's row-count sources: its observed overlay, and its tables' modules. */
|
|
53
|
+
export function databaseRowCountSources(db, observed) {
|
|
54
|
+
return {
|
|
55
|
+
observedRows: table => observed.observedRows(table),
|
|
56
|
+
observedRowsPerKey: (table, columns) => observed.observedRowsPerKey(table, columns),
|
|
57
|
+
reportedRows: table => reportedRowCount(db, table),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** True when `table`'s registered module implements `VirtualTableModule.getRowCount`, whether or not it answers now. */
|
|
61
|
+
export function moduleReportsRowCount(db, table) {
|
|
62
|
+
return db.schemaManager.getModule(table.vtabModuleName)?.module.getRowCount !== undefined;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Asks `table`'s registered module for its count (`VirtualTableModule.getRowCount`).
|
|
66
|
+
* A hint, so a module without the hook, a throw, or a malformed answer (`rows` not a
|
|
67
|
+
* non-negative integer) is `undefined` — a failed hint must never fail planning.
|
|
68
|
+
*/
|
|
69
|
+
export function reportedRowCount(db, table) {
|
|
70
|
+
const module = db.schemaManager.getModule(table.vtabModuleName)?.module;
|
|
71
|
+
if (!module?.getRowCount)
|
|
72
|
+
return undefined;
|
|
73
|
+
let answer;
|
|
74
|
+
try {
|
|
75
|
+
answer = module.getRowCount(db, table);
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
debugLog('Ignored row count for %s.%s: module %s threw %O', table.schemaName, table.name, table.vtabModuleName, e);
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
if (answer === undefined)
|
|
82
|
+
return undefined;
|
|
83
|
+
if (!Number.isInteger(answer.rows) || answer.rows < 0) {
|
|
84
|
+
debugLog('Ignored row count for %s.%s: module %s answered %o', table.schemaName, table.name, table.vtabModuleName, answer);
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
return answer;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* The base-table row count the planner uses, first answer wins:
|
|
91
|
+
*
|
|
92
|
+
* 1. an exact module count — maintained on every write, so it is the truth now and any
|
|
93
|
+
* snapshot below is older;
|
|
94
|
+
* 2. the overlay's observed count — an entry only answers for the exact `TableSchema`
|
|
95
|
+
* it was observed under and any `ANALYZE` swaps that object, so it is newer than the
|
|
96
|
+
* catalog numbers on the schema it names;
|
|
97
|
+
* 3. an approximate module count — below a measurement this session made, because an
|
|
98
|
+
* estimate can be off by more than the overlay's shift factor and only a complete
|
|
99
|
+
* scan can correct it; above the catalog, because it describes the table now;
|
|
100
|
+
* 4. the catalog (`ANALYZE`) count;
|
|
101
|
+
* 5. `undefined` (unknown).
|
|
102
|
+
*
|
|
103
|
+
* The overlay's floor then raises whatever answered from 2–4, and answers alone when
|
|
104
|
+
* nothing did (it was recorded only above the default). It never raises an exact module
|
|
105
|
+
* count: that is current, and a floor describes committed state at some earlier moment,
|
|
106
|
+
* so it cannot legitimately exceed it.
|
|
107
|
+
*
|
|
108
|
+
* The module is asked first so an exactly-sized table never touches the overlay, whose
|
|
109
|
+
* reads refresh its recency. Only the row count is overridden; column statistics are
|
|
110
|
+
* untouched.
|
|
111
|
+
*
|
|
112
|
+
* The result also becomes `BestAccessPlanRequest.estimatedRows`, so a module that reports
|
|
113
|
+
* its count prices its access path against the same number the rest of the plan uses —
|
|
114
|
+
* one size per plan.
|
|
115
|
+
*/
|
|
116
|
+
export function plannedRowCount(table, sources) {
|
|
117
|
+
const reported = sources?.reportedRows(table);
|
|
118
|
+
if (reported?.exact)
|
|
119
|
+
return reported.rows;
|
|
120
|
+
const observed = sources?.observedRows(table);
|
|
121
|
+
return raiseToFloor(observed?.rows ?? reported?.rows ?? catalogRowCount(table), observed?.atLeast);
|
|
122
|
+
}
|
|
123
|
+
function raiseToFloor(rows, floor) {
|
|
124
|
+
if (floor === undefined)
|
|
125
|
+
return rows;
|
|
126
|
+
return rows === undefined ? floor : Math.max(rows, floor);
|
|
127
|
+
}
|
|
40
128
|
/**
|
|
41
|
-
* The
|
|
42
|
-
* `undefined`
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* and
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
129
|
+
* The rows per key the planner prices a single-key equality seek on `columns` at, or
|
|
130
|
+
* `undefined` to leave the module's own estimate standing (docs/progressive-optimizer.md
|
|
131
|
+
* §3.3):
|
|
132
|
+
*
|
|
133
|
+
* 1. when the catalog's statistics cover the column set — `table.statistics` with a
|
|
134
|
+
* positive `rowCount` and a `columnStats` entry for every column — the catalog wins and
|
|
135
|
+
* nothing is overridden: the module's statistics-backed estimate is the engine's own
|
|
136
|
+
* `estimateLeaf` arithmetic over the same numbers, and the count rule (newest exact
|
|
137
|
+
* wins) does not transfer to a mean sampled under some bindings and not others.
|
|
138
|
+
* Coverage is all-or-nothing, the rule both shipped modules apply before mixing a
|
|
139
|
+
* measured factor with a shape constant;
|
|
140
|
+
* 2. otherwise the overlay's mean for the set, rounded and floored at one row — the
|
|
141
|
+
* module's `Math.max(1, …)` floor, so a key that matched nothing so far does not price a
|
|
142
|
+
* seek at nothing;
|
|
143
|
+
* 3. otherwise `undefined`.
|
|
144
|
+
*
|
|
145
|
+
* NOTE: catalog-wins is a first rule, not a measured one; an `ANALYZE` snapshot can be
|
|
146
|
+
* older than the mean. Reconsider only against a measured case where the stale catalog
|
|
147
|
+
* loses a plan the mean would have won.
|
|
53
148
|
*/
|
|
54
|
-
export function
|
|
55
|
-
|
|
149
|
+
export function plannedRowsPerKey(table, columns, sources) {
|
|
150
|
+
if (sources === undefined || catalogCoversColumns(table, columns))
|
|
151
|
+
return undefined;
|
|
152
|
+
const mean = sources.observedRowsPerKey(table, columns);
|
|
153
|
+
return mean === undefined ? undefined : Math.max(1, Math.round(mean));
|
|
154
|
+
}
|
|
155
|
+
/** True when the catalog holds a usable row count and column statistics for every column in `columns`. */
|
|
156
|
+
function catalogCoversColumns(table, columns) {
|
|
157
|
+
const stats = table.statistics;
|
|
158
|
+
if (!stats || stats.rowCount <= 0)
|
|
159
|
+
return false;
|
|
160
|
+
return columns.every(i => {
|
|
161
|
+
const name = table.columns[i]?.name;
|
|
162
|
+
return name !== undefined && stats.columnStats.has(name.toLowerCase());
|
|
163
|
+
});
|
|
56
164
|
}
|
|
57
165
|
//# sourceMappingURL=table-cardinality.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-cardinality.js","sourceRoot":"","sources":["../../../../src/planner/stats/table-cardinality.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"table-cardinality.js","sourceRoot":"","sources":["../../../../src/planner/stats/table-cardinality.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A join side's row count for RELATIVE comparison — defined even where nobody
|
|
3
|
+
* measured anything.
|
|
4
|
+
*
|
|
5
|
+
* A never-analyzed table's scan reports `undefined` (see `row-estimates.ts`), and
|
|
6
|
+
* that blank propagates: a Filter over it, a join over that, an aggregate over the
|
|
7
|
+
* join all read `undefined` too, so a consumer that defaults the blank side flat
|
|
8
|
+
* forgets that a filter has already narrowed it. This walker instead starts the
|
|
9
|
+
* unknown LEAF at the shared no-statistics default and carries that figure up
|
|
10
|
+
* through each operator with the operator's own shared formula, so a filtered
|
|
11
|
+
* side of an unknown table compares smaller than the unfiltered table beside it.
|
|
12
|
+
*
|
|
13
|
+
* The figure is relative, not an estimate the plan records: only join selection
|
|
14
|
+
* reads it, to compare candidates against each other. Everywhere else an unknown
|
|
15
|
+
* stays `undefined`, so the gates that deliberately refuse on unknown keep
|
|
16
|
+
* refusing.
|
|
17
|
+
*
|
|
18
|
+
* Lives apart from `row-estimates.ts` because it dispatches on node classes, and
|
|
19
|
+
* those node modules import `row-estimates.ts`.
|
|
20
|
+
*/
|
|
21
|
+
import type { RelationalPlanNode } from '../nodes/plan-node.js';
|
|
22
|
+
/**
|
|
23
|
+
* Rows `side` is priced at in a relative comparison: its physical estimate when
|
|
24
|
+
* known, else `unknownLeafRows` at each unknown leaf carried up through the
|
|
25
|
+
* side's operators. Floored at one row through `costedRows`, so a measured (or
|
|
26
|
+
* relayed) 0 prices the way every cost site prices it.
|
|
27
|
+
*/
|
|
28
|
+
export declare function relativeRows(side: RelationalPlanNode, unknownLeafRows: number): number;
|
|
29
|
+
//# sourceMappingURL=relative-rows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relative-rows.d.ts","sourceRoot":"","sources":["../../../../src/planner/util/relative-rows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAWhE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAEtF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A join side's row count for RELATIVE comparison — defined even where nobody
|
|
3
|
+
* measured anything.
|
|
4
|
+
*
|
|
5
|
+
* A never-analyzed table's scan reports `undefined` (see `row-estimates.ts`), and
|
|
6
|
+
* that blank propagates: a Filter over it, a join over that, an aggregate over the
|
|
7
|
+
* join all read `undefined` too, so a consumer that defaults the blank side flat
|
|
8
|
+
* forgets that a filter has already narrowed it. This walker instead starts the
|
|
9
|
+
* unknown LEAF at the shared no-statistics default and carries that figure up
|
|
10
|
+
* through each operator with the operator's own shared formula, so a filtered
|
|
11
|
+
* side of an unknown table compares smaller than the unfiltered table beside it.
|
|
12
|
+
*
|
|
13
|
+
* The figure is relative, not an estimate the plan records: only join selection
|
|
14
|
+
* reads it, to compare candidates against each other. Everywhere else an unknown
|
|
15
|
+
* stays `undefined`, so the gates that deliberately refuse on unknown keep
|
|
16
|
+
* refusing.
|
|
17
|
+
*
|
|
18
|
+
* Lives apart from `row-estimates.ts` because it dispatches on node classes, and
|
|
19
|
+
* those node modules import `row-estimates.ts`.
|
|
20
|
+
*/
|
|
21
|
+
import { DEFAULT_FILTER_SELECTIVITY, FilterNode } from '../nodes/filter.js';
|
|
22
|
+
import { JoinNode } from '../nodes/join-node.js';
|
|
23
|
+
import { BloomJoinNode } from '../nodes/bloom-join-node.js';
|
|
24
|
+
import { MergeJoinNode } from '../nodes/merge-join-node.js';
|
|
25
|
+
import { AggregateNode } from '../nodes/aggregate-node.js';
|
|
26
|
+
import { HashAggregateNode } from '../nodes/hash-aggregate.js';
|
|
27
|
+
import { StreamAggregateNode } from '../nodes/stream-aggregate.js';
|
|
28
|
+
import { joinPhysicalRows } from '../nodes/join-utils.js';
|
|
29
|
+
import { costedRows, filterRowsFrom, physicalSourceRows } from './row-estimates.js';
|
|
30
|
+
/**
|
|
31
|
+
* Rows `side` is priced at in a relative comparison: its physical estimate when
|
|
32
|
+
* known, else `unknownLeafRows` at each unknown leaf carried up through the
|
|
33
|
+
* side's operators. Floored at one row through `costedRows`, so a measured (or
|
|
34
|
+
* relayed) 0 prices the way every cost site prices it.
|
|
35
|
+
*/
|
|
36
|
+
export function relativeRows(side, unknownLeafRows) {
|
|
37
|
+
return costedRows(relayedRows(side, unknownLeafRows), unknownLeafRows);
|
|
38
|
+
}
|
|
39
|
+
// NOTE: recursive, unlike the iterative `PlanNode.physical` fold — it descends only
|
|
40
|
+
// through nodes with no known count, so depth is bounded by a side's unknown chain,
|
|
41
|
+
// far below the ~30,000 frames that overflow (test/planner/plan-node-traversal.spec.ts).
|
|
42
|
+
// If deep generated plans ever reach join selection with unknown leaves, convert to
|
|
43
|
+
// a worklist walk (`PlanNode.computePostOrder`).
|
|
44
|
+
function relayedRows(node, unknownLeafRows) {
|
|
45
|
+
const known = physicalSourceRows(node.physical, node);
|
|
46
|
+
if (known !== undefined)
|
|
47
|
+
return known;
|
|
48
|
+
if (node instanceof FilterNode) {
|
|
49
|
+
return filterRowsFrom(relayedRows(node.source, unknownLeafRows), node.selectivity ?? DEFAULT_FILTER_SELECTIVITY) ?? unknownLeafRows;
|
|
50
|
+
}
|
|
51
|
+
// Key coverage (`analyzeJoinKeyCoverage`) is not re-derived: the heuristic
|
|
52
|
+
// alone is close enough for a figure that is only ever compared.
|
|
53
|
+
if (node instanceof JoinNode || node instanceof BloomJoinNode || node instanceof MergeJoinNode) {
|
|
54
|
+
return joinPhysicalRows(node.joinType, undefined, relayedRows(node.left, unknownLeafRows), relayedRows(node.right, unknownLeafRows)) ?? unknownLeafRows;
|
|
55
|
+
}
|
|
56
|
+
if (node instanceof AggregateNode || node instanceof HashAggregateNode || node instanceof StreamAggregateNode) {
|
|
57
|
+
return node.rowsFrom(relayedRows(node.source, unknownLeafRows)) ?? unknownLeafRows;
|
|
58
|
+
}
|
|
59
|
+
// Any other single-relation node (Alias, Project, Sort, Cache, Distinct,
|
|
60
|
+
// LimitOffset, …) at most passes its source's rows through: an upper bound,
|
|
61
|
+
// which is all a relative comparison needs.
|
|
62
|
+
const relations = node.getRelations();
|
|
63
|
+
if (relations.length === 1)
|
|
64
|
+
return relayedRows(relations[0], unknownLeafRows);
|
|
65
|
+
return unknownLeafRows;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=relative-rows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relative-rows.js","sourceRoot":"","sources":["../../../../src/planner/util/relative-rows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEpF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAwB,EAAE,eAAuB;IAC7E,OAAO,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,eAAe,CAAC,CAAC;AACxE,CAAC;AAED,oFAAoF;AACpF,oFAAoF;AACpF,yFAAyF;AACzF,oFAAoF;AACpF,iDAAiD;AACjD,SAAS,WAAW,CAAC,IAAwB,EAAE,eAAuB;IACrE,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACtD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAEtC,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,cAAc,CACpB,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,EACzC,IAAI,CAAC,WAAW,IAAI,0BAA0B,CAC9C,IAAI,eAAe,CAAC;IACtB,CAAC;IACD,2EAA2E;IAC3E,iEAAiE;IACjE,IAAI,IAAI,YAAY,QAAQ,IAAI,IAAI,YAAY,aAAa,IAAI,IAAI,YAAY,aAAa,EAAE,CAAC;QAChG,OAAO,gBAAgB,CACtB,IAAI,CAAC,QAAQ,EACb,SAAS,EACT,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EACvC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,CACxC,IAAI,eAAe,CAAC;IACtB,CAAC;IACD,IAAI,IAAI,YAAY,aAAa,IAAI,IAAI,YAAY,iBAAiB,IAAI,IAAI,YAAY,mBAAmB,EAAE,CAAC;QAC/G,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,IAAI,eAAe,CAAC;IACpF,CAAC;IACD,yEAAyE;IACzE,4EAA4E;IAC5E,4CAA4C;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IACtC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;IAC9E,OAAO,eAAe,CAAC;AACxB,CAAC"}
|