@quereus/quereus 0.6.2 → 0.6.4

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.
Files changed (89) hide show
  1. package/README.md +1 -1
  2. package/dist/src/index.d.ts +4 -6
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/index.js +2 -4
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/runtime/emit/schema-declarative.js +1 -1
  7. package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
  8. package/dist/src/schema/schema-hasher.d.ts +3 -3
  9. package/dist/src/schema/schema-hasher.d.ts.map +1 -1
  10. package/dist/src/schema/schema-hasher.js +9 -27
  11. package/dist/src/schema/schema-hasher.js.map +1 -1
  12. package/dist/src/util/hash.d.ts +19 -0
  13. package/dist/src/util/hash.d.ts.map +1 -0
  14. package/dist/src/util/hash.js +76 -0
  15. package/dist/src/util/hash.js.map +1 -0
  16. package/dist/src/util/plugin-helper.d.ts +45 -0
  17. package/dist/src/util/plugin-helper.d.ts.map +1 -0
  18. package/dist/src/util/plugin-helper.js +85 -0
  19. package/dist/src/util/plugin-helper.js.map +1 -0
  20. package/package.json +4 -2
  21. package/src/index.ts +10 -16
  22. package/src/planner/building/delete.ts +214 -214
  23. package/src/planner/building/insert.ts +428 -428
  24. package/src/planner/building/update.ts +319 -319
  25. package/src/runtime/emit/schema-declarative.ts +1 -1
  26. package/src/schema/schema-hasher.ts +9 -27
  27. package/src/util/ast-stringify.ts +864 -864
  28. package/src/util/hash.ts +90 -0
  29. package/src/util/plugin-helper.ts +110 -0
  30. package/src/vtab/memory/table.ts +256 -256
  31. package/src/vtab/table.ts +162 -162
  32. package/dist/src/config/loader.d.ts +0 -41
  33. package/dist/src/config/loader.d.ts.map +0 -1
  34. package/dist/src/config/loader.js +0 -102
  35. package/dist/src/config/loader.js.map +0 -1
  36. package/dist/src/planner/nodes/physical-access-nodes.d.ts +0 -83
  37. package/dist/src/planner/nodes/physical-access-nodes.d.ts.map +0 -1
  38. package/dist/src/planner/nodes/physical-access-nodes.js +0 -226
  39. package/dist/src/planner/nodes/physical-access-nodes.js.map +0 -1
  40. package/dist/src/planner/nodes/scan.d.ts +0 -27
  41. package/dist/src/planner/nodes/scan.d.ts.map +0 -1
  42. package/dist/src/planner/nodes/scan.js +0 -78
  43. package/dist/src/planner/nodes/scan.js.map +0 -1
  44. package/dist/src/planner/nodes/update-executor-node.d.ts +0 -24
  45. package/dist/src/planner/nodes/update-executor-node.d.ts.map +0 -1
  46. package/dist/src/planner/nodes/update-executor-node.js +0 -57
  47. package/dist/src/planner/nodes/update-executor-node.js.map +0 -1
  48. package/dist/src/planner/physical-utils.d.ts +0 -36
  49. package/dist/src/planner/physical-utils.d.ts.map +0 -1
  50. package/dist/src/planner/physical-utils.js +0 -122
  51. package/dist/src/planner/physical-utils.js.map +0 -1
  52. package/dist/src/planner/rules/physical/rule-filter-optimization.d.ts +0 -11
  53. package/dist/src/planner/rules/physical/rule-filter-optimization.d.ts.map +0 -1
  54. package/dist/src/planner/rules/physical/rule-filter-optimization.js +0 -49
  55. package/dist/src/planner/rules/physical/rule-filter-optimization.js.map +0 -1
  56. package/dist/src/planner/rules/physical/rule-mark-physical.d.ts +0 -11
  57. package/dist/src/planner/rules/physical/rule-mark-physical.d.ts.map +0 -1
  58. package/dist/src/planner/rules/physical/rule-mark-physical.js +0 -29
  59. package/dist/src/planner/rules/physical/rule-mark-physical.js.map +0 -1
  60. package/dist/src/planner/rules/physical/rule-project-optimization.d.ts +0 -11
  61. package/dist/src/planner/rules/physical/rule-project-optimization.d.ts.map +0 -1
  62. package/dist/src/planner/rules/physical/rule-project-optimization.js +0 -44
  63. package/dist/src/planner/rules/physical/rule-project-optimization.js.map +0 -1
  64. package/dist/src/planner/rules/physical/rule-sort-optimization.d.ts +0 -11
  65. package/dist/src/planner/rules/physical/rule-sort-optimization.d.ts.map +0 -1
  66. package/dist/src/planner/rules/physical/rule-sort-optimization.js +0 -53
  67. package/dist/src/planner/rules/physical/rule-sort-optimization.js.map +0 -1
  68. package/dist/src/planner/rules/rewrite/rule-constant-folding.d.ts +0 -11
  69. package/dist/src/planner/rules/rewrite/rule-constant-folding.d.ts.map +0 -1
  70. package/dist/src/planner/rules/rewrite/rule-constant-folding.js +0 -59
  71. package/dist/src/planner/rules/rewrite/rule-constant-folding.js.map +0 -1
  72. package/dist/src/planner/util/deferred-constraint.d.ts +0 -14
  73. package/dist/src/planner/util/deferred-constraint.d.ts.map +0 -1
  74. package/dist/src/planner/util/deferred-constraint.js +0 -85
  75. package/dist/src/planner/util/deferred-constraint.js.map +0 -1
  76. package/dist/src/runtime/emit/table-reference.d.ts +0 -5
  77. package/dist/src/runtime/emit/table-reference.d.ts.map +0 -1
  78. package/dist/src/runtime/emit/table-reference.js +0 -67
  79. package/dist/src/runtime/emit/table-reference.js.map +0 -1
  80. package/dist/src/runtime/emit/update-executor.d.ts +0 -5
  81. package/dist/src/runtime/emit/update-executor.d.ts.map +0 -1
  82. package/dist/src/runtime/emit/update-executor.js +0 -54
  83. package/dist/src/runtime/emit/update-executor.js.map +0 -1
  84. package/dist/src/util/plugin-loader.d.ts +0 -52
  85. package/dist/src/util/plugin-loader.d.ts.map +0 -1
  86. package/dist/src/util/plugin-loader.js +0 -307
  87. package/dist/src/util/plugin-loader.js.map +0 -1
  88. package/src/config/loader.ts +0 -140
  89. package/src/util/plugin-loader.ts +0 -387
package/src/vtab/table.ts CHANGED
@@ -1,162 +1,162 @@
1
- import type { AnyVirtualTableModule, SchemaChangeInfo } from './module.js';
2
- import type { Database } from '../core/database.js';
3
- import type { TableSchema } from '../schema/table.js';
4
- import type { MaybePromise, Row } from '../common/types.js';
5
- import type { IndexSchema } from '../schema/table.js';
6
- import type { FilterInfo } from './filter-info.js';
7
- import type { RowOp } from '../common/types.js';
8
- import type { ConflictResolution } from '../common/constants.js';
9
- import type { VirtualTableConnection } from './connection.js';
10
- import type { PlanNode } from '../planner/nodes/plan-node.js';
11
-
12
- /**
13
- * Base class representing a virtual table instance.
14
- * Module implementations should subclass this to provide specific table behavior.
15
- */
16
- export abstract class VirtualTable {
17
- public readonly module: AnyVirtualTableModule;
18
- public readonly db: Database;
19
- public readonly tableName: string;
20
- public readonly schemaName: string;
21
- public errorMessage?: string;
22
- public tableSchema?: TableSchema;
23
-
24
- constructor(db: Database, module: AnyVirtualTableModule, schemaName: string, tableName: string) {
25
- this.db = db;
26
- this.module = module;
27
- this.schemaName = schemaName;
28
- this.tableName = tableName;
29
- }
30
-
31
- /**
32
- * Sets an error message for the VTable
33
- * @param message The error message string
34
- */
35
- protected setErrorMessage(message: string | undefined): void {
36
- this.errorMessage = message;
37
- }
38
-
39
- /**
40
- * Disconnects from this virtual table connection instance
41
- * Called when the database connection closes or the statement is finalized
42
- * @throws QuereusError on failure
43
- */
44
- abstract disconnect(): Promise<void>;
45
-
46
- /**
47
- * (Optional) Opens a direct data stream for this virtual table based on filter criteria.
48
- * This is an alternative to the cursor-based open/filter/next model.
49
- * @param filterInfo Information from getBestAccessPlan and query parameters.
50
- * @returns An AsyncIterable yielding Row tuples.
51
- * @throws QuereusError on failure
52
- */
53
- query?(filterInfo: FilterInfo): AsyncIterable<Row>;
54
-
55
- /**
56
- * Executes a pushed-down plan subtree.
57
- * Called when the module indicated support via supports() method.
58
- *
59
- * @param db The database connection
60
- * @param plan The plan node to execute
61
- * @param ctx Optional context from supports() assessment
62
- * @returns Async iterable of rows resulting from the plan execution
63
- */
64
- executePlan?(
65
- db: Database,
66
- plan: PlanNode,
67
- ctx?: unknown
68
- ): AsyncIterable<Row>;
69
-
70
- /**
71
- * Performs an INSERT, UPDATE, or DELETE operation
72
- * @param operation The operation to perform (insert, update, delete)
73
- * @param values For INSERT/UPDATE, the values to insert/update. For DELETE, undefined
74
- * @param oldKeyValues For UPDATE/DELETE, the old key values of the row to modify. Undefined for INSERT
75
- * @param onConflict Conflict resolution mode (defaults to ABORT if unspecified)
76
- * @returns new row for INSERT/UPDATE, undefined for DELETE
77
- * @throws QuereusError or ConstraintError on failure
78
- */
79
- abstract update(
80
- operation: RowOp,
81
- values: Row | undefined,
82
- oldKeyValues?: Row,
83
- onConflict?: ConflictResolution
84
- ): Promise<Row | undefined>;
85
-
86
- /**
87
- * (Optional) Creates a new connection for transaction support.
88
- * If implemented, this enables proper transaction isolation for this table.
89
- * @returns A new VirtualTableConnection instance
90
- */
91
- createConnection?(): MaybePromise<VirtualTableConnection>;
92
-
93
- /**
94
- * (Optional) Gets the current connection for this table instance.
95
- * Used when the table maintains a single connection internally.
96
- * @returns The current VirtualTableConnection instance, if any
97
- */
98
- getConnection?(): VirtualTableConnection | undefined;
99
-
100
- /**
101
- * Begins a transaction on this virtual table
102
- */
103
- begin?(): Promise<void>;
104
-
105
- /**
106
- * Syncs changes within the virtual table transaction
107
- */
108
- sync?(): Promise<void>;
109
-
110
- /**
111
- * Commits the virtual table transaction
112
- */
113
- commit?(): Promise<void>;
114
-
115
- /**
116
- * Rolls back the virtual table transaction
117
- */
118
- rollback?(): Promise<void>;
119
-
120
- /**
121
- * Renames the virtual table
122
- * @param newName The new name for the table
123
- */
124
- rename?(newName: string): Promise<void>;
125
-
126
- /**
127
- * Begins a savepoint
128
- * @param savepointIndex The savepoint identifier
129
- */
130
- savepoint?(savepointIndex: number): Promise<void>;
131
-
132
- /**
133
- * Releases a savepoint
134
- * @param savepointIndex The savepoint identifier
135
- */
136
- release?(savepointIndex: number): Promise<void>;
137
-
138
- /**
139
- * Rolls back to a savepoint
140
- * @param savepointIndex The savepoint identifier
141
- */
142
- rollbackTo?(savepointIndex: number): Promise<void>;
143
-
144
- /**
145
- * Modifies the schema of this virtual table
146
- * @param changeInfo Object describing the schema modification
147
- * @throws QuereusError or ConstraintError on failure
148
- */
149
- alterSchema?(changeInfo: SchemaChangeInfo): Promise<void>;
150
-
151
- /**
152
- * Creates a secondary index on the virtual table
153
- * @param indexInfo The index definition
154
- */
155
- createIndex?(indexInfo: IndexSchema): Promise<void>;
156
-
157
- /**
158
- * Drops a secondary index from the virtual table
159
- * @param indexName The name of the index to drop
160
- */
161
- dropIndex?(indexName: string): Promise<void>;
162
- }
1
+ import type { AnyVirtualTableModule, SchemaChangeInfo } from './module.js';
2
+ import type { Database } from '../core/database.js';
3
+ import type { TableSchema } from '../schema/table.js';
4
+ import type { MaybePromise, Row } from '../common/types.js';
5
+ import type { IndexSchema } from '../schema/table.js';
6
+ import type { FilterInfo } from './filter-info.js';
7
+ import type { RowOp } from '../common/types.js';
8
+ import type { ConflictResolution } from '../common/constants.js';
9
+ import type { VirtualTableConnection } from './connection.js';
10
+ import type { PlanNode } from '../planner/nodes/plan-node.js';
11
+
12
+ /**
13
+ * Base class representing a virtual table instance.
14
+ * Module implementations should subclass this to provide specific table behavior.
15
+ */
16
+ export abstract class VirtualTable {
17
+ public readonly module: AnyVirtualTableModule;
18
+ public readonly db: Database;
19
+ public readonly tableName: string;
20
+ public readonly schemaName: string;
21
+ public errorMessage?: string;
22
+ public tableSchema?: TableSchema;
23
+
24
+ constructor(db: Database, module: AnyVirtualTableModule, schemaName: string, tableName: string) {
25
+ this.db = db;
26
+ this.module = module;
27
+ this.schemaName = schemaName;
28
+ this.tableName = tableName;
29
+ }
30
+
31
+ /**
32
+ * Sets an error message for the VTable
33
+ * @param message The error message string
34
+ */
35
+ protected setErrorMessage(message: string | undefined): void {
36
+ this.errorMessage = message;
37
+ }
38
+
39
+ /**
40
+ * Disconnects from this virtual table connection instance
41
+ * Called when the database connection closes or the statement is finalized
42
+ * @throws QuereusError on failure
43
+ */
44
+ abstract disconnect(): Promise<void>;
45
+
46
+ /**
47
+ * (Optional) Opens a direct data stream for this virtual table based on filter criteria.
48
+ * This is an alternative to the cursor-based open/filter/next model.
49
+ * @param filterInfo Information from getBestAccessPlan and query parameters.
50
+ * @returns An AsyncIterable yielding Row tuples.
51
+ * @throws QuereusError on failure
52
+ */
53
+ query?(filterInfo: FilterInfo): AsyncIterable<Row>;
54
+
55
+ /**
56
+ * Executes a pushed-down plan subtree.
57
+ * Called when the module indicated support via supports() method.
58
+ *
59
+ * @param db The database connection
60
+ * @param plan The plan node to execute
61
+ * @param ctx Optional context from supports() assessment
62
+ * @returns Async iterable of rows resulting from the plan execution
63
+ */
64
+ executePlan?(
65
+ db: Database,
66
+ plan: PlanNode,
67
+ ctx?: unknown
68
+ ): AsyncIterable<Row>;
69
+
70
+ /**
71
+ * Performs an INSERT, UPDATE, or DELETE operation
72
+ * @param operation The operation to perform (insert, update, delete)
73
+ * @param values For INSERT/UPDATE, the values to insert/update. For DELETE, undefined
74
+ * @param oldKeyValues For UPDATE/DELETE, the old key values of the row to modify. Undefined for INSERT
75
+ * @param onConflict Conflict resolution mode (defaults to ABORT if unspecified)
76
+ * @returns new row for INSERT/UPDATE, undefined for DELETE
77
+ * @throws QuereusError or ConstraintError on failure
78
+ */
79
+ abstract update(
80
+ operation: RowOp,
81
+ values: Row | undefined,
82
+ oldKeyValues?: Row,
83
+ onConflict?: ConflictResolution
84
+ ): Promise<Row | undefined>;
85
+
86
+ /**
87
+ * (Optional) Creates a new connection for transaction support.
88
+ * If implemented, this enables proper transaction isolation for this table.
89
+ * @returns A new VirtualTableConnection instance
90
+ */
91
+ createConnection?(): MaybePromise<VirtualTableConnection>;
92
+
93
+ /**
94
+ * (Optional) Gets the current connection for this table instance.
95
+ * Used when the table maintains a single connection internally.
96
+ * @returns The current VirtualTableConnection instance, if any
97
+ */
98
+ getConnection?(): VirtualTableConnection | undefined;
99
+
100
+ /**
101
+ * Begins a transaction on this virtual table
102
+ */
103
+ begin?(): Promise<void>;
104
+
105
+ /**
106
+ * Syncs changes within the virtual table transaction
107
+ */
108
+ sync?(): Promise<void>;
109
+
110
+ /**
111
+ * Commits the virtual table transaction
112
+ */
113
+ commit?(): Promise<void>;
114
+
115
+ /**
116
+ * Rolls back the virtual table transaction
117
+ */
118
+ rollback?(): Promise<void>;
119
+
120
+ /**
121
+ * Renames the virtual table
122
+ * @param newName The new name for the table
123
+ */
124
+ rename?(newName: string): Promise<void>;
125
+
126
+ /**
127
+ * Begins a savepoint
128
+ * @param savepointIndex The savepoint identifier
129
+ */
130
+ savepoint?(savepointIndex: number): Promise<void>;
131
+
132
+ /**
133
+ * Releases a savepoint
134
+ * @param savepointIndex The savepoint identifier
135
+ */
136
+ release?(savepointIndex: number): Promise<void>;
137
+
138
+ /**
139
+ * Rolls back to a savepoint
140
+ * @param savepointIndex The savepoint identifier
141
+ */
142
+ rollbackTo?(savepointIndex: number): Promise<void>;
143
+
144
+ /**
145
+ * Modifies the schema of this virtual table
146
+ * @param changeInfo Object describing the schema modification
147
+ * @throws QuereusError or ConstraintError on failure
148
+ */
149
+ alterSchema?(changeInfo: SchemaChangeInfo): Promise<void>;
150
+
151
+ /**
152
+ * Creates a secondary index on the virtual table
153
+ * @param indexInfo The index definition
154
+ */
155
+ createIndex?(indexInfo: IndexSchema): Promise<void>;
156
+
157
+ /**
158
+ * Drops a secondary index from the virtual table
159
+ * @param indexName The name of the index to drop
160
+ */
161
+ dropIndex?(indexName: string): Promise<void>;
162
+ }
@@ -1,41 +0,0 @@
1
- /**
2
- * Configuration loader for Quoomb
3
- * Handles loading, parsing, and interpolating quoomb.config.json files
4
- */
5
- import type { Database } from '../core/database.js';
6
- /**
7
- * Plugin configuration from config file
8
- */
9
- export interface PluginConfig {
10
- source: string;
11
- config?: Record<string, any>;
12
- }
13
- /**
14
- * Quoomb configuration file format
15
- */
16
- export interface QuoombConfig {
17
- $schema?: string;
18
- plugins?: PluginConfig[];
19
- autoload?: boolean;
20
- }
21
- /**
22
- * Interpolate environment variables in a value
23
- * Supports ${VAR_NAME} and ${VAR_NAME:-default} syntax
24
- */
25
- export declare function interpolateEnvVars(value: any, env?: Record<string, string>): any;
26
- /**
27
- * Interpolate environment variables in a config object
28
- */
29
- export declare function interpolateConfigEnvVars(config: QuoombConfig, env?: Record<string, string>): QuoombConfig;
30
- /**
31
- * Load plugins from a config object
32
- */
33
- export declare function loadPluginsFromConfig(db: Database, config: QuoombConfig, options?: {
34
- allowCdn?: boolean;
35
- env?: 'auto' | 'browser' | 'node';
36
- }): Promise<void>;
37
- /**
38
- * Validate a config object
39
- */
40
- export declare function validateConfig(config: any): config is QuoombConfig;
41
- //# sourceMappingURL=loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAIpD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,GAAG,CAkBpF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY,CAazG;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;CAAE,GAClE,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,YAAY,CA2BlE"}
@@ -1,102 +0,0 @@
1
- /**
2
- * Configuration loader for Quoomb
3
- * Handles loading, parsing, and interpolating quoomb.config.json files
4
- */
5
- import { loadPlugin } from '../util/plugin-loader.js';
6
- /**
7
- * Interpolate environment variables in a value
8
- * Supports ${VAR_NAME} and ${VAR_NAME:-default} syntax
9
- */
10
- export function interpolateEnvVars(value, env = {}) {
11
- if (typeof value === 'string') {
12
- return value.replace(/\$\{([^}]+)\}/g, (match, varSpec) => {
13
- const [varName, defaultValue] = varSpec.split(':-');
14
- return env[varName.trim()] ?? defaultValue ?? match;
15
- });
16
- }
17
- if (typeof value === 'object' && value !== null) {
18
- if (Array.isArray(value)) {
19
- return value.map(v => interpolateEnvVars(v, env));
20
- }
21
- const result = {};
22
- for (const [key, val] of Object.entries(value)) {
23
- result[key] = interpolateEnvVars(val, env);
24
- }
25
- return result;
26
- }
27
- return value;
28
- }
29
- /**
30
- * Interpolate environment variables in a config object
31
- */
32
- export function interpolateConfigEnvVars(config, env) {
33
- let envVars = {};
34
- if (env) {
35
- envVars = env;
36
- }
37
- else if (typeof process !== 'undefined' && process.env) {
38
- // Filter out undefined values from process.env
39
- envVars = Object.fromEntries(Object.entries(process.env).filter(([, v]) => v !== undefined));
40
- }
41
- return interpolateEnvVars(config, envVars);
42
- }
43
- /**
44
- * Load plugins from a config object
45
- */
46
- export async function loadPluginsFromConfig(db, config, options) {
47
- if (!config.plugins || config.plugins.length === 0) {
48
- return;
49
- }
50
- for (const pluginConfig of config.plugins) {
51
- try {
52
- const configObj = pluginConfig.config ?? {};
53
- // Convert config values to SqlValue type
54
- const sqlConfig = {};
55
- for (const [key, value] of Object.entries(configObj)) {
56
- if (value === null || value === undefined) {
57
- sqlConfig[key] = null;
58
- }
59
- else if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
60
- sqlConfig[key] = value;
61
- }
62
- else {
63
- // For complex types, convert to JSON string
64
- sqlConfig[key] = JSON.stringify(value);
65
- }
66
- }
67
- await loadPlugin(pluginConfig.source, db, sqlConfig, options);
68
- }
69
- catch (error) {
70
- console.warn(`Warning: Failed to load plugin from ${pluginConfig.source}: ${error instanceof Error ? error.message : 'Unknown error'}`);
71
- }
72
- }
73
- }
74
- /**
75
- * Validate a config object
76
- */
77
- export function validateConfig(config) {
78
- if (typeof config !== 'object' || config === null) {
79
- return false;
80
- }
81
- if (config.plugins !== undefined) {
82
- if (!Array.isArray(config.plugins)) {
83
- return false;
84
- }
85
- for (const plugin of config.plugins) {
86
- if (typeof plugin !== 'object' || plugin === null) {
87
- return false;
88
- }
89
- if (typeof plugin.source !== 'string') {
90
- return false;
91
- }
92
- if (plugin.config !== undefined && typeof plugin.config !== 'object') {
93
- return false;
94
- }
95
- }
96
- }
97
- if (config.autoload !== undefined && typeof config.autoload !== 'boolean') {
98
- return false;
99
- }
100
- return true;
101
- }
102
- //# sourceMappingURL=loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/config/loader.ts"],"names":[],"mappings":"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"}
@@ -1,83 +0,0 @@
1
- /**
2
- * Physical table access nodes for seek and range scan operations
3
- * These replace logical TableScanNode during optimization
4
- */
5
- import { PlanNodeType } from './plan-node-type.js';
6
- import { PlanNode, type UnaryRelationalNode, type PhysicalProperties, type Attribute } from './plan-node.js';
7
- import { TableReferenceNode } from './reference.js';
8
- import type { RelationType } from '../../common/datatype.js';
9
- import type { Scope } from '../scopes/scope.js';
10
- import type { FilterInfo } from '../../vtab/filter-info.js';
11
- import type { ScalarPlanNode } from './plan-node.js';
12
- /**
13
- * Base class for physical table access operations
14
- * Provides common functionality for sequential scan, index scan, and index seek
15
- */
16
- export declare abstract class PhysicalTableAccessNode extends PlanNode implements UnaryRelationalNode {
17
- readonly source: TableReferenceNode;
18
- readonly filterInfo: FilterInfo;
19
- private attributesCache;
20
- private outputType;
21
- constructor(scope: Scope, source: TableReferenceNode, filterInfo: FilterInfo, estimatedCostOverride?: number);
22
- getAttributes(): Attribute[];
23
- getType(): RelationType;
24
- getChildren(): readonly PlanNode[];
25
- getRelations(): readonly [TableReferenceNode];
26
- withChildren(newChildren: readonly PlanNode[]): PlanNode;
27
- getLogicalAttributes(): Record<string, unknown>;
28
- }
29
- /**
30
- * Sequential scan - reads entire table without using indexes
31
- * Used when no suitable index exists or for small tables
32
- */
33
- export declare class SeqScanNode extends PhysicalTableAccessNode {
34
- readonly nodeType = PlanNodeType.SeqScan;
35
- computePhysical(): Partial<PhysicalProperties>;
36
- toString(): string;
37
- withChildren(newChildren: readonly PlanNode[]): PlanNode;
38
- }
39
- /**
40
- * Index scan - uses an index to read table data in order
41
- * Provides ordering and can handle range queries efficiently
42
- */
43
- export declare class IndexScanNode extends PhysicalTableAccessNode {
44
- readonly indexName: string;
45
- readonly providesOrdering?: {
46
- column: number;
47
- desc: boolean;
48
- }[] | undefined;
49
- readonly nodeType = PlanNodeType.IndexScan;
50
- constructor(scope: Scope, source: TableReferenceNode, filterInfo: FilterInfo, indexName: string, providesOrdering?: {
51
- column: number;
52
- desc: boolean;
53
- }[] | undefined, estimatedCostOverride?: number);
54
- computePhysical(): Partial<PhysicalProperties>;
55
- toString(): string;
56
- getLogicalAttributes(): Record<string, unknown>;
57
- withChildren(newChildren: readonly PlanNode[]): PlanNode;
58
- }
59
- /**
60
- * Index seek - point lookup or tight range using an index
61
- * Very efficient for equality constraints and small ranges
62
- */
63
- export declare class IndexSeekNode extends PhysicalTableAccessNode {
64
- readonly indexName: string;
65
- readonly seekKeys: ScalarPlanNode[];
66
- readonly isRange: boolean;
67
- readonly providesOrdering?: {
68
- column: number;
69
- desc: boolean;
70
- }[] | undefined;
71
- readonly nodeType = PlanNodeType.IndexSeek;
72
- constructor(scope: Scope, source: TableReferenceNode, filterInfo: FilterInfo, indexName: string, seekKeys: ScalarPlanNode[], isRange?: boolean, providesOrdering?: {
73
- column: number;
74
- desc: boolean;
75
- }[] | undefined, estimatedCostOverride?: number);
76
- computePhysical(): Partial<PhysicalProperties>;
77
- toString(): string;
78
- getLogicalAttributes(): Record<string, unknown>;
79
- getSeekKeys(): readonly ScalarPlanNode[];
80
- getChildren(): readonly PlanNode[];
81
- withChildren(newChildren: readonly PlanNode[]): PlanNode;
82
- }
83
- //# sourceMappingURL=physical-access-nodes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"physical-access-nodes.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/physical-access-nodes.ts"],"names":[],"mappings":"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"}