kysely 0.21.3 → 0.21.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.js +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +4 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/operation-node/default-insert-value-node.d.ts +11 -0
- package/dist/cjs/operation-node/default-insert-value-node.js +17 -0
- package/dist/cjs/operation-node/drop-index-node.d.ts +1 -0
- package/dist/cjs/operation-node/drop-schema-node.d.ts +1 -0
- package/dist/cjs/operation-node/drop-table-node.d.ts +1 -0
- package/dist/cjs/operation-node/drop-view-node.d.ts +1 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +9 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/value-list-node.d.ts +2 -1
- package/dist/cjs/parser/complex-expression-parser.d.ts +1 -1
- package/dist/cjs/parser/insert-values-parser.js +13 -4
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +15 -0
- package/dist/cjs/schema/drop-index-builder.d.ts +1 -0
- package/dist/cjs/schema/drop-index-builder.js +8 -0
- package/dist/cjs/schema/drop-schema-builder.d.ts +1 -0
- package/dist/cjs/schema/drop-schema-builder.js +8 -0
- package/dist/cjs/schema/drop-table-builder.d.ts +1 -0
- package/dist/cjs/schema/drop-table-builder.js +8 -0
- package/dist/cjs/schema/drop-view-builder.d.ts +1 -0
- package/dist/cjs/schema/drop-view-builder.js +8 -0
- package/dist/cjs/util/object-utils.d.ts +1 -0
- package/dist/cjs/util/object-utils.js +5 -1
- package/dist/cjs/util/type-utils.d.ts +1 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.js +1 -1
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +4 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/operation-node/default-insert-value-node.d.ts +11 -0
- package/dist/esm/operation-node/default-insert-value-node.js +15 -0
- package/dist/esm/operation-node/drop-index-node.d.ts +1 -0
- package/dist/esm/operation-node/drop-schema-node.d.ts +1 -0
- package/dist/esm/operation-node/drop-table-node.d.ts +1 -0
- package/dist/esm/operation-node/drop-view-node.d.ts +1 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +9 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +1 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/value-list-node.d.ts +2 -1
- package/dist/esm/parser/complex-expression-parser.d.ts +1 -1
- package/dist/esm/parser/insert-values-parser.js +14 -5
- package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/esm/query-compiler/default-query-compiler.js +15 -0
- package/dist/esm/schema/drop-index-builder.d.ts +1 -0
- package/dist/esm/schema/drop-index-builder.js +8 -0
- package/dist/esm/schema/drop-schema-builder.d.ts +1 -0
- package/dist/esm/schema/drop-schema-builder.js +8 -0
- package/dist/esm/schema/drop-table-builder.d.ts +1 -0
- package/dist/esm/schema/drop-table-builder.js +8 -0
- package/dist/esm/schema/drop-view-builder.d.ts +1 -0
- package/dist/esm/schema/drop-view-builder.js +8 -0
- package/dist/esm/util/object-utils.d.ts +1 -0
- package/dist/esm/util/object-utils.js +3 -0
- package/dist/esm/util/type-utils.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[](https://stand-with-ukraine.pp.ua)
|
|
2
2
|
|
|
3
|
-
[](https://discord.gg/
|
|
3
|
+
[](https://discord.gg/xyBJ3GwvAm)
|
|
4
4
|
[](https://github.com/koskimas/kysely)
|
|
5
5
|
|
|
6
6
|
# [Kysely](https://koskimas.github.io/kysely/index.html)
|
|
@@ -69,6 +69,7 @@ for [3rd party dialects](https://koskimas.github.io/kysely/interfaces/Dialect.ht
|
|
|
69
69
|
### 3rd party dialects:
|
|
70
70
|
|
|
71
71
|
- [AWS Data API](https://github.com/serverless-stack/kysely-data-api)
|
|
72
|
+
- [PlanetScale Serverless Driver](https://github.com/depot/kysely-planetscale)
|
|
72
73
|
|
|
73
74
|
# Minimal example
|
|
74
75
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DefaultInsertValueNode } from '../../operation-node/default-insert-value-node.js';
|
|
1
2
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
2
3
|
export declare class SqliteQueryCompiler extends DefaultQueryCompiler {
|
|
3
4
|
protected getCurrentParameterPlaceholder(): string;
|
|
@@ -7,4 +8,5 @@ export declare class SqliteQueryCompiler extends DefaultQueryCompiler {
|
|
|
7
8
|
protected getRightIdentifierWrapper(): string;
|
|
8
9
|
protected getAutoIncrement(): string;
|
|
9
10
|
protected sanitizeIdentifier(identifier: string): string;
|
|
11
|
+
protected visitDefaultInsertValue(_: DefaultInsertValueNode): void;
|
|
10
12
|
}
|
|
@@ -25,5 +25,9 @@ class SqliteQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompil
|
|
|
25
25
|
sanitizeIdentifier(identifier) {
|
|
26
26
|
return identifier.replace(ID_WRAP_REGEX, '""');
|
|
27
27
|
}
|
|
28
|
+
visitDefaultInsertValue(_) {
|
|
29
|
+
// sqlite doesn't support the `default` keyword in inserts.
|
|
30
|
+
this.append('null');
|
|
31
|
+
}
|
|
28
32
|
}
|
|
29
33
|
exports.SqliteQueryCompiler = SqliteQueryCompiler;
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -151,6 +151,7 @@ export * from './operation-node/values-node.js';
|
|
|
151
151
|
export * from './operation-node/where-node.js';
|
|
152
152
|
export * from './operation-node/with-node.js';
|
|
153
153
|
export * from './operation-node/explain-node.js';
|
|
154
|
+
export * from './operation-node/default-insert-value-node.js';
|
|
154
155
|
export * from './util/column-type.js';
|
|
155
156
|
export * from './util/compilable.js';
|
|
156
157
|
export * from './util/explainable.js';
|
package/dist/cjs/index.js
CHANGED
|
@@ -167,6 +167,7 @@ __exportStar(require("./operation-node/values-node.js"), exports);
|
|
|
167
167
|
__exportStar(require("./operation-node/where-node.js"), exports);
|
|
168
168
|
__exportStar(require("./operation-node/with-node.js"), exports);
|
|
169
169
|
__exportStar(require("./operation-node/explain-node.js"), exports);
|
|
170
|
+
__exportStar(require("./operation-node/default-insert-value-node.js"), exports);
|
|
170
171
|
__exportStar(require("./util/column-type.js"), exports);
|
|
171
172
|
__exportStar(require("./util/compilable.js"), exports);
|
|
172
173
|
__exportStar(require("./util/explainable.js"), exports);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { OperationNode } from './operation-node.js';
|
|
2
|
+
export interface DefaultInsertValueNode extends OperationNode {
|
|
3
|
+
readonly kind: 'DefaultInsertValueNode';
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export declare const DefaultInsertValueNode: Readonly<{
|
|
9
|
+
is(node: OperationNode): node is DefaultInsertValueNode;
|
|
10
|
+
create(): DefaultInsertValueNode;
|
|
11
|
+
}>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DefaultInsertValueNode = void 0;
|
|
4
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
exports.DefaultInsertValueNode = (0, object_utils_js_1.freeze)({
|
|
9
|
+
is(node) {
|
|
10
|
+
return node.kind === 'DefaultInsertValueNode';
|
|
11
|
+
},
|
|
12
|
+
create() {
|
|
13
|
+
return (0, object_utils_js_1.freeze)({
|
|
14
|
+
kind: 'DefaultInsertValueNode',
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
});
|
|
@@ -70,6 +70,7 @@ import { CreateTypeNode } from './create-type-node.js';
|
|
|
70
70
|
import { DropTypeNode } from './drop-type-node.js';
|
|
71
71
|
import { ExplainNode } from './explain-node.js';
|
|
72
72
|
import { SchemableIdentifierNode } from './schemable-identifier-node.js';
|
|
73
|
+
import { DefaultInsertValueNode } from './default-insert-value-node.js';
|
|
73
74
|
/**
|
|
74
75
|
* Transforms an operation node tree into another one.
|
|
75
76
|
*
|
|
@@ -176,4 +177,5 @@ export declare class OperationNodeTransformer {
|
|
|
176
177
|
protected transformValue(node: ValueNode): ValueNode;
|
|
177
178
|
protected transformPrimitiveValueList(node: PrimitiveValueListNode): PrimitiveValueListNode;
|
|
178
179
|
protected transformOperator(node: OperatorNode): OperatorNode;
|
|
180
|
+
protected transformDefaultInsertValue(node: DefaultInsertValueNode): DefaultInsertValueNode;
|
|
179
181
|
}
|
|
@@ -106,6 +106,7 @@ class OperationNodeTransformer {
|
|
|
106
106
|
CreateTypeNode: this.transformCreateType.bind(this),
|
|
107
107
|
DropTypeNode: this.transformDropType.bind(this),
|
|
108
108
|
ExplainNode: this.transformExplain.bind(this),
|
|
109
|
+
DefaultInsertValueNode: this.transformDefaultInsertValue.bind(this),
|
|
109
110
|
});
|
|
110
111
|
transformNode(node) {
|
|
111
112
|
if (!node) {
|
|
@@ -318,6 +319,7 @@ class OperationNodeTransformer {
|
|
|
318
319
|
kind: 'DropTableNode',
|
|
319
320
|
table: this.transformNode(node.table),
|
|
320
321
|
ifExists: node.ifExists,
|
|
322
|
+
cascade: node.cascade,
|
|
321
323
|
});
|
|
322
324
|
}
|
|
323
325
|
transformOrderBy(node) {
|
|
@@ -417,6 +419,7 @@ class OperationNodeTransformer {
|
|
|
417
419
|
name: this.transformNode(node.name),
|
|
418
420
|
table: this.transformNode(node.table),
|
|
419
421
|
ifExists: node.ifExists,
|
|
422
|
+
cascade: node.cascade,
|
|
420
423
|
});
|
|
421
424
|
}
|
|
422
425
|
transformPrimaryKeyConstraint(node) {
|
|
@@ -505,6 +508,7 @@ class OperationNodeTransformer {
|
|
|
505
508
|
kind: 'DropSchemaNode',
|
|
506
509
|
schema: this.transformNode(node.schema),
|
|
507
510
|
ifExists: node.ifExists,
|
|
511
|
+
cascade: node.cascade,
|
|
508
512
|
});
|
|
509
513
|
}
|
|
510
514
|
transformAlterTable(node) {
|
|
@@ -585,6 +589,7 @@ class OperationNodeTransformer {
|
|
|
585
589
|
name: this.transformNode(node.name),
|
|
586
590
|
ifExists: node.ifExists,
|
|
587
591
|
materialized: node.materialized,
|
|
592
|
+
cascade: node.cascade,
|
|
588
593
|
});
|
|
589
594
|
}
|
|
590
595
|
transformGenerated(node) {
|
|
@@ -668,5 +673,9 @@ class OperationNodeTransformer {
|
|
|
668
673
|
// An Object.freezed leaf node. No need to clone.
|
|
669
674
|
return node;
|
|
670
675
|
}
|
|
676
|
+
transformDefaultInsertValue(node) {
|
|
677
|
+
// An Object.freezed leaf node. No need to clone.
|
|
678
|
+
return node;
|
|
679
|
+
}
|
|
671
680
|
}
|
|
672
681
|
exports.OperationNodeTransformer = OperationNodeTransformer;
|
|
@@ -70,6 +70,7 @@ import { CreateTypeNode } from './create-type-node.js';
|
|
|
70
70
|
import { DropTypeNode } from './drop-type-node.js';
|
|
71
71
|
import { ExplainNode } from './explain-node.js';
|
|
72
72
|
import { SchemableIdentifierNode } from './schemable-identifier-node.js';
|
|
73
|
+
import { DefaultInsertValueNode } from './default-insert-value-node.js';
|
|
73
74
|
export declare abstract class OperationNodeVisitor {
|
|
74
75
|
#private;
|
|
75
76
|
protected readonly nodeStack: OperationNode[];
|
|
@@ -146,4 +147,5 @@ export declare abstract class OperationNodeVisitor {
|
|
|
146
147
|
protected abstract visitCreateType(node: CreateTypeNode): void;
|
|
147
148
|
protected abstract visitDropType(node: DropTypeNode): void;
|
|
148
149
|
protected abstract visitExplain(node: ExplainNode): void;
|
|
150
|
+
protected abstract visitDefaultInsertValue(node: DefaultInsertValueNode): void;
|
|
149
151
|
}
|
|
@@ -79,6 +79,7 @@ class OperationNodeVisitor {
|
|
|
79
79
|
CreateTypeNode: this.visitCreateType.bind(this),
|
|
80
80
|
DropTypeNode: this.visitDropType.bind(this),
|
|
81
81
|
ExplainNode: this.visitExplain.bind(this),
|
|
82
|
+
DefaultInsertValueNode: this.visitDefaultInsertValue.bind(this),
|
|
82
83
|
});
|
|
83
84
|
visitNode = (node) => {
|
|
84
85
|
this.nodeStack.push(node);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'FilterNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'UnionNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode';
|
|
1
|
+
export declare type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'FilterNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'UnionNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode';
|
|
2
2
|
export interface OperationNode {
|
|
3
3
|
readonly kind: OperationNodeKind;
|
|
4
4
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { DefaultInsertValueNode } from './default-insert-value-node.js';
|
|
1
2
|
import { OperationNode } from './operation-node.js';
|
|
2
3
|
import { RawNode } from './raw-node.js';
|
|
3
4
|
import { ReferenceNode } from './reference-node.js';
|
|
4
5
|
import { SelectQueryNode } from './select-query-node.js';
|
|
5
6
|
import { ValueNode } from './value-node.js';
|
|
6
|
-
export declare type ListNodeItem = ValueNode | ReferenceNode | SelectQueryNode | RawNode;
|
|
7
|
+
export declare type ListNodeItem = ValueNode | ReferenceNode | DefaultInsertValueNode | SelectQueryNode | RawNode;
|
|
7
8
|
export interface ValueListNode extends OperationNode {
|
|
8
9
|
readonly kind: 'ValueListNode';
|
|
9
10
|
readonly values: ReadonlyArray<ListNodeItem>;
|
|
@@ -3,7 +3,7 @@ import { RawNode } from '../operation-node/raw-node.js';
|
|
|
3
3
|
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
4
4
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
5
5
|
import { AliasedQueryBuilderFactory, AliasedRawBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, AnySelectQueryBuilder, SelectQueryBuilderFactory, RawBuilderFactory } from '../util/type-utils.js';
|
|
6
|
-
export declare type ComplexExpression<DB, TB extends keyof DB, V = any> = AnySelectQueryBuilder | SelectQueryBuilderFactory<DB, TB> | RawBuilder<V> | RawBuilderFactory<DB, TB>;
|
|
6
|
+
export declare type ComplexExpression<DB, TB extends keyof DB, V = any> = AnySelectQueryBuilder | SelectQueryBuilderFactory<DB, TB> | RawBuilder<V> | RawBuilderFactory<DB, TB, V>;
|
|
7
7
|
export declare type AliasedComplexExpression<DB, TB extends keyof DB> = AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB> | AnyAliasedRawBuilder | AliasedRawBuilderFactory<DB, TB>;
|
|
8
8
|
export declare function parseComplexExpression(exp: ComplexExpression<any, any>): SelectQueryNode | RawNode;
|
|
9
9
|
export declare function parseAliasedComplexExpression(exp: AliasedComplexExpression<any, any>): AliasNode;
|
|
@@ -8,6 +8,7 @@ const object_utils_js_1 = require("../util/object-utils.js");
|
|
|
8
8
|
const value_parser_js_1 = require("./value-parser.js");
|
|
9
9
|
const values_node_js_1 = require("../operation-node/values-node.js");
|
|
10
10
|
const complex_expression_parser_js_1 = require("./complex-expression-parser.js");
|
|
11
|
+
const default_insert_value_node_js_1 = require("../operation-node/default-insert-value-node.js");
|
|
11
12
|
function parseInsertObjectOrList(args) {
|
|
12
13
|
return parseInsertColumnsAndValues(Array.isArray(args) ? args : [args]);
|
|
13
14
|
}
|
|
@@ -33,16 +34,24 @@ function parseColumnNamesAndIndexes(rows) {
|
|
|
33
34
|
}
|
|
34
35
|
function parseRowValues(row, columns) {
|
|
35
36
|
const rowColumns = Object.keys(row);
|
|
36
|
-
const rowValues =
|
|
37
|
+
const rowValues = Array.from({
|
|
38
|
+
length: columns.size,
|
|
39
|
+
});
|
|
40
|
+
let complexColumn = false;
|
|
37
41
|
for (const col of rowColumns) {
|
|
38
42
|
const columnIdx = columns.get(col);
|
|
39
|
-
const value = row[col];
|
|
40
43
|
if (columnIdx !== undefined) {
|
|
44
|
+
const value = row[col];
|
|
45
|
+
if ((0, complex_expression_parser_js_1.isComplexExpression)(value)) {
|
|
46
|
+
complexColumn = true;
|
|
47
|
+
}
|
|
41
48
|
rowValues[columnIdx] = value;
|
|
42
49
|
}
|
|
43
50
|
}
|
|
44
|
-
|
|
45
|
-
|
|
51
|
+
const columnMissing = rowColumns.length < columns.size;
|
|
52
|
+
if (columnMissing || complexColumn) {
|
|
53
|
+
const defaultValue = default_insert_value_node_js_1.DefaultInsertValueNode.create();
|
|
54
|
+
return value_list_node_js_1.ValueListNode.create(rowValues.map((it) => (0, object_utils_js_1.isUndefined)(it) ? defaultValue : (0, value_parser_js_1.parseValueExpression)(it)));
|
|
46
55
|
}
|
|
47
56
|
return primitive_value_list_node_js_1.PrimitiveValueListNode.create(rowValues);
|
|
48
57
|
}
|
|
@@ -73,6 +73,7 @@ import { CreateTypeNode } from '../operation-node/create-type-node.js';
|
|
|
73
73
|
import { DropTypeNode } from '../operation-node/drop-type-node.js';
|
|
74
74
|
import { ExplainNode } from '../operation-node/explain-node.js';
|
|
75
75
|
import { SchemableIdentifierNode } from '../operation-node/schemable-identifier-node.js';
|
|
76
|
+
import { DefaultInsertValueNode } from '../operation-node/default-insert-value-node.js';
|
|
76
77
|
export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
|
|
77
78
|
#private;
|
|
78
79
|
protected get numParameters(): number;
|
|
@@ -153,6 +154,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
153
154
|
protected visitCreateType(node: CreateTypeNode): void;
|
|
154
155
|
protected visitDropType(node: DropTypeNode): void;
|
|
155
156
|
protected visitExplain(node: ExplainNode): void;
|
|
157
|
+
protected visitDefaultInsertValue(_: DefaultInsertValueNode): void;
|
|
156
158
|
protected append(str: string): void;
|
|
157
159
|
protected appendValue(parameter: unknown): void;
|
|
158
160
|
protected getLeftIdentifierWrapper(): string;
|
|
@@ -414,6 +414,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
414
414
|
this.append('if exists ');
|
|
415
415
|
}
|
|
416
416
|
this.visitNode(node.table);
|
|
417
|
+
if (node.cascade) {
|
|
418
|
+
this.append(' cascade');
|
|
419
|
+
}
|
|
417
420
|
}
|
|
418
421
|
visitDataType(node) {
|
|
419
422
|
this.append(node.dataType);
|
|
@@ -561,6 +564,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
561
564
|
this.append(' on ');
|
|
562
565
|
this.visitNode(node.table);
|
|
563
566
|
}
|
|
567
|
+
if (node.cascade) {
|
|
568
|
+
this.append(' cascade');
|
|
569
|
+
}
|
|
564
570
|
}
|
|
565
571
|
visitCreateSchema(node) {
|
|
566
572
|
this.append('create schema ');
|
|
@@ -575,6 +581,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
575
581
|
this.append('if exists ');
|
|
576
582
|
}
|
|
577
583
|
this.visitNode(node.schema);
|
|
584
|
+
if (node.cascade) {
|
|
585
|
+
this.append(' cascade');
|
|
586
|
+
}
|
|
578
587
|
}
|
|
579
588
|
visitPrimaryKeyConstraint(node) {
|
|
580
589
|
if (node.name) {
|
|
@@ -787,6 +796,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
787
796
|
this.append('if exists ');
|
|
788
797
|
}
|
|
789
798
|
this.visitNode(node.name);
|
|
799
|
+
if (node.cascade) {
|
|
800
|
+
this.append(' cascade');
|
|
801
|
+
}
|
|
790
802
|
}
|
|
791
803
|
visitGenerated(node) {
|
|
792
804
|
this.append('generated ');
|
|
@@ -855,6 +867,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
855
867
|
this.append(this.getRightExplainOptionsWrapper());
|
|
856
868
|
}
|
|
857
869
|
}
|
|
870
|
+
visitDefaultInsertValue(_) {
|
|
871
|
+
this.append('default');
|
|
872
|
+
}
|
|
858
873
|
append(str) {
|
|
859
874
|
this.#sql += str;
|
|
860
875
|
}
|
|
@@ -13,6 +13,7 @@ export declare class DropIndexBuilder implements OperationNodeSource, Compilable
|
|
|
13
13
|
*/
|
|
14
14
|
on(table: string): DropIndexBuilder;
|
|
15
15
|
ifExists(): DropIndexBuilder;
|
|
16
|
+
cascade(): DropIndexBuilder;
|
|
16
17
|
toOperationNode(): DropIndexNode;
|
|
17
18
|
compile(): CompiledQuery;
|
|
18
19
|
execute(): Promise<void>;
|
|
@@ -30,6 +30,14 @@ class DropIndexBuilder {
|
|
|
30
30
|
}),
|
|
31
31
|
});
|
|
32
32
|
}
|
|
33
|
+
cascade() {
|
|
34
|
+
return new DropIndexBuilder({
|
|
35
|
+
...this.#props,
|
|
36
|
+
dropIndexNode: drop_index_node_js_1.DropIndexNode.cloneWith(this.#props.dropIndexNode, {
|
|
37
|
+
cascade: true,
|
|
38
|
+
}),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
33
41
|
toOperationNode() {
|
|
34
42
|
return this.#props.executor.transformQuery(this.#props.dropIndexNode, this.#props.queryId);
|
|
35
43
|
}
|
|
@@ -8,6 +8,7 @@ export declare class DropSchemaBuilder implements OperationNodeSource, Compilabl
|
|
|
8
8
|
#private;
|
|
9
9
|
constructor(props: DropSchemaBuilderProps);
|
|
10
10
|
ifExists(): DropSchemaBuilder;
|
|
11
|
+
cascade(): DropSchemaBuilder;
|
|
11
12
|
toOperationNode(): DropSchemaNode;
|
|
12
13
|
compile(): CompiledQuery;
|
|
13
14
|
execute(): Promise<void>;
|
|
@@ -17,6 +17,14 @@ class DropSchemaBuilder {
|
|
|
17
17
|
}),
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
|
+
cascade() {
|
|
21
|
+
return new DropSchemaBuilder({
|
|
22
|
+
...this.#props,
|
|
23
|
+
dropSchemaNode: drop_schema_node_js_1.DropSchemaNode.cloneWith(this.#props.dropSchemaNode, {
|
|
24
|
+
cascade: true,
|
|
25
|
+
}),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
20
28
|
toOperationNode() {
|
|
21
29
|
return this.#props.executor.transformQuery(this.#props.dropSchemaNode, this.#props.queryId);
|
|
22
30
|
}
|
|
@@ -8,6 +8,7 @@ export declare class DropTableBuilder implements OperationNodeSource, Compilable
|
|
|
8
8
|
#private;
|
|
9
9
|
constructor(props: DropTableBuilderProps);
|
|
10
10
|
ifExists(): DropTableBuilder;
|
|
11
|
+
cascade(): DropTableBuilder;
|
|
11
12
|
toOperationNode(): DropTableNode;
|
|
12
13
|
compile(): CompiledQuery;
|
|
13
14
|
execute(): Promise<void>;
|
|
@@ -17,6 +17,14 @@ class DropTableBuilder {
|
|
|
17
17
|
}),
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
|
+
cascade() {
|
|
21
|
+
return new DropTableBuilder({
|
|
22
|
+
...this.#props,
|
|
23
|
+
dropTableNode: drop_table_node_js_1.DropTableNode.cloneWith(this.#props.dropTableNode, {
|
|
24
|
+
cascade: true,
|
|
25
|
+
}),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
20
28
|
toOperationNode() {
|
|
21
29
|
return this.#props.executor.transformQuery(this.#props.dropTableNode, this.#props.queryId);
|
|
22
30
|
}
|
|
@@ -9,6 +9,7 @@ export declare class DropViewBuilder implements OperationNodeSource, Compilable
|
|
|
9
9
|
constructor(props: DropViewBuilderProps);
|
|
10
10
|
materialized(): DropViewBuilder;
|
|
11
11
|
ifExists(): DropViewBuilder;
|
|
12
|
+
cascade(): DropViewBuilder;
|
|
12
13
|
toOperationNode(): DropViewNode;
|
|
13
14
|
compile(): CompiledQuery;
|
|
14
15
|
execute(): Promise<void>;
|
|
@@ -25,6 +25,14 @@ class DropViewBuilder {
|
|
|
25
25
|
}),
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
|
+
cascade() {
|
|
29
|
+
return new DropViewBuilder({
|
|
30
|
+
...this.#props,
|
|
31
|
+
dropViewNode: drop_view_node_js_1.DropViewNode.cloneWith(this.#props.dropViewNode, {
|
|
32
|
+
cascade: true,
|
|
33
|
+
}),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
28
36
|
toOperationNode() {
|
|
29
37
|
return this.#props.executor.transformQuery(this.#props.dropViewNode, this.#props.queryId);
|
|
30
38
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare function isEmpty(obj: ArrayLike<unknown> | string | object): boolean;
|
|
2
|
+
export declare function isUndefined(obj: unknown): obj is undefined;
|
|
2
3
|
export declare function isString(obj: unknown): obj is string;
|
|
3
4
|
export declare function isNumber(obj: unknown): obj is number;
|
|
4
5
|
export declare function isBoolean(obj: unknown): obj is boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.compare = exports.noop = exports.isReadonlyArray = exports.asReadonlyArray = exports.asArray = exports.freeze = exports.getLast = exports.isObject = exports.isFunction = exports.isBuffer = exports.isBigInt = exports.isDate = exports.isNull = exports.isBoolean = exports.isNumber = exports.isString = exports.isEmpty = void 0;
|
|
3
|
+
exports.compare = exports.noop = exports.isReadonlyArray = exports.asReadonlyArray = exports.asArray = exports.freeze = exports.getLast = exports.isObject = exports.isFunction = exports.isBuffer = exports.isBigInt = exports.isDate = exports.isNull = exports.isBoolean = exports.isNumber = exports.isString = exports.isUndefined = exports.isEmpty = void 0;
|
|
4
4
|
function isEmpty(obj) {
|
|
5
5
|
if (Array.isArray(obj) || isString(obj) || isBuffer(obj)) {
|
|
6
6
|
return obj.length === 0;
|
|
@@ -11,6 +11,10 @@ function isEmpty(obj) {
|
|
|
11
11
|
return false;
|
|
12
12
|
}
|
|
13
13
|
exports.isEmpty = isEmpty;
|
|
14
|
+
function isUndefined(obj) {
|
|
15
|
+
return obj === undefined;
|
|
16
|
+
}
|
|
17
|
+
exports.isUndefined = isUndefined;
|
|
14
18
|
function isString(obj) {
|
|
15
19
|
return typeof obj === 'string';
|
|
16
20
|
}
|
|
@@ -104,7 +104,7 @@ export declare type AnyRawBuilder = RawBuilder<any>;
|
|
|
104
104
|
export declare type AnyAliasedRawBuilder = AliasedRawBuilder<any, any>;
|
|
105
105
|
export declare type SelectQueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnySelectQueryBuilder;
|
|
106
106
|
export declare type AliasedQueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedQueryBuilder;
|
|
107
|
-
export declare type RawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) =>
|
|
107
|
+
export declare type RawBuilderFactory<DB, TB extends keyof DB, O = any> = (qb: ExpressionBuilder<DB, TB>) => RawBuilder<O>;
|
|
108
108
|
export declare type AliasedRawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedRawBuilder;
|
|
109
109
|
export declare type SingleResultType<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : O | undefined;
|
|
110
110
|
export declare type UnknownRow = Record<string, unknown>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DefaultInsertValueNode } from '../../operation-node/default-insert-value-node.js';
|
|
1
2
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
2
3
|
export declare class SqliteQueryCompiler extends DefaultQueryCompiler {
|
|
3
4
|
protected getCurrentParameterPlaceholder(): string;
|
|
@@ -7,4 +8,5 @@ export declare class SqliteQueryCompiler extends DefaultQueryCompiler {
|
|
|
7
8
|
protected getRightIdentifierWrapper(): string;
|
|
8
9
|
protected getAutoIncrement(): string;
|
|
9
10
|
protected sanitizeIdentifier(identifier: string): string;
|
|
11
|
+
protected visitDefaultInsertValue(_: DefaultInsertValueNode): void;
|
|
10
12
|
}
|
|
@@ -23,4 +23,8 @@ export class SqliteQueryCompiler extends DefaultQueryCompiler {
|
|
|
23
23
|
sanitizeIdentifier(identifier) {
|
|
24
24
|
return identifier.replace(ID_WRAP_REGEX, '""');
|
|
25
25
|
}
|
|
26
|
+
visitDefaultInsertValue(_) {
|
|
27
|
+
// sqlite doesn't support the `default` keyword in inserts.
|
|
28
|
+
this.append('null');
|
|
29
|
+
}
|
|
26
30
|
}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -151,6 +151,7 @@ export * from './operation-node/values-node.js';
|
|
|
151
151
|
export * from './operation-node/where-node.js';
|
|
152
152
|
export * from './operation-node/with-node.js';
|
|
153
153
|
export * from './operation-node/explain-node.js';
|
|
154
|
+
export * from './operation-node/default-insert-value-node.js';
|
|
154
155
|
export * from './util/column-type.js';
|
|
155
156
|
export * from './util/compilable.js';
|
|
156
157
|
export * from './util/explainable.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -152,6 +152,7 @@ export * from './operation-node/values-node.js';
|
|
|
152
152
|
export * from './operation-node/where-node.js';
|
|
153
153
|
export * from './operation-node/with-node.js';
|
|
154
154
|
export * from './operation-node/explain-node.js';
|
|
155
|
+
export * from './operation-node/default-insert-value-node.js';
|
|
155
156
|
export * from './util/column-type.js';
|
|
156
157
|
export * from './util/compilable.js';
|
|
157
158
|
export * from './util/explainable.js';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { OperationNode } from './operation-node.js';
|
|
2
|
+
export interface DefaultInsertValueNode extends OperationNode {
|
|
3
|
+
readonly kind: 'DefaultInsertValueNode';
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export declare const DefaultInsertValueNode: Readonly<{
|
|
9
|
+
is(node: OperationNode): node is DefaultInsertValueNode;
|
|
10
|
+
create(): DefaultInsertValueNode;
|
|
11
|
+
}>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="./default-insert-value-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export const DefaultInsertValueNode = freeze({
|
|
7
|
+
is(node) {
|
|
8
|
+
return node.kind === 'DefaultInsertValueNode';
|
|
9
|
+
},
|
|
10
|
+
create() {
|
|
11
|
+
return freeze({
|
|
12
|
+
kind: 'DefaultInsertValueNode',
|
|
13
|
+
});
|
|
14
|
+
},
|
|
15
|
+
});
|
|
@@ -70,6 +70,7 @@ import { CreateTypeNode } from './create-type-node.js';
|
|
|
70
70
|
import { DropTypeNode } from './drop-type-node.js';
|
|
71
71
|
import { ExplainNode } from './explain-node.js';
|
|
72
72
|
import { SchemableIdentifierNode } from './schemable-identifier-node.js';
|
|
73
|
+
import { DefaultInsertValueNode } from './default-insert-value-node.js';
|
|
73
74
|
/**
|
|
74
75
|
* Transforms an operation node tree into another one.
|
|
75
76
|
*
|
|
@@ -176,4 +177,5 @@ export declare class OperationNodeTransformer {
|
|
|
176
177
|
protected transformValue(node: ValueNode): ValueNode;
|
|
177
178
|
protected transformPrimitiveValueList(node: PrimitiveValueListNode): PrimitiveValueListNode;
|
|
178
179
|
protected transformOperator(node: OperatorNode): OperatorNode;
|
|
180
|
+
protected transformDefaultInsertValue(node: DefaultInsertValueNode): DefaultInsertValueNode;
|
|
179
181
|
}
|
|
@@ -104,6 +104,7 @@ export class OperationNodeTransformer {
|
|
|
104
104
|
CreateTypeNode: this.transformCreateType.bind(this),
|
|
105
105
|
DropTypeNode: this.transformDropType.bind(this),
|
|
106
106
|
ExplainNode: this.transformExplain.bind(this),
|
|
107
|
+
DefaultInsertValueNode: this.transformDefaultInsertValue.bind(this),
|
|
107
108
|
});
|
|
108
109
|
transformNode(node) {
|
|
109
110
|
if (!node) {
|
|
@@ -316,6 +317,7 @@ export class OperationNodeTransformer {
|
|
|
316
317
|
kind: 'DropTableNode',
|
|
317
318
|
table: this.transformNode(node.table),
|
|
318
319
|
ifExists: node.ifExists,
|
|
320
|
+
cascade: node.cascade,
|
|
319
321
|
});
|
|
320
322
|
}
|
|
321
323
|
transformOrderBy(node) {
|
|
@@ -415,6 +417,7 @@ export class OperationNodeTransformer {
|
|
|
415
417
|
name: this.transformNode(node.name),
|
|
416
418
|
table: this.transformNode(node.table),
|
|
417
419
|
ifExists: node.ifExists,
|
|
420
|
+
cascade: node.cascade,
|
|
418
421
|
});
|
|
419
422
|
}
|
|
420
423
|
transformPrimaryKeyConstraint(node) {
|
|
@@ -503,6 +506,7 @@ export class OperationNodeTransformer {
|
|
|
503
506
|
kind: 'DropSchemaNode',
|
|
504
507
|
schema: this.transformNode(node.schema),
|
|
505
508
|
ifExists: node.ifExists,
|
|
509
|
+
cascade: node.cascade,
|
|
506
510
|
});
|
|
507
511
|
}
|
|
508
512
|
transformAlterTable(node) {
|
|
@@ -583,6 +587,7 @@ export class OperationNodeTransformer {
|
|
|
583
587
|
name: this.transformNode(node.name),
|
|
584
588
|
ifExists: node.ifExists,
|
|
585
589
|
materialized: node.materialized,
|
|
590
|
+
cascade: node.cascade,
|
|
586
591
|
});
|
|
587
592
|
}
|
|
588
593
|
transformGenerated(node) {
|
|
@@ -666,4 +671,8 @@ export class OperationNodeTransformer {
|
|
|
666
671
|
// An Object.freezed leaf node. No need to clone.
|
|
667
672
|
return node;
|
|
668
673
|
}
|
|
674
|
+
transformDefaultInsertValue(node) {
|
|
675
|
+
// An Object.freezed leaf node. No need to clone.
|
|
676
|
+
return node;
|
|
677
|
+
}
|
|
669
678
|
}
|
|
@@ -70,6 +70,7 @@ import { CreateTypeNode } from './create-type-node.js';
|
|
|
70
70
|
import { DropTypeNode } from './drop-type-node.js';
|
|
71
71
|
import { ExplainNode } from './explain-node.js';
|
|
72
72
|
import { SchemableIdentifierNode } from './schemable-identifier-node.js';
|
|
73
|
+
import { DefaultInsertValueNode } from './default-insert-value-node.js';
|
|
73
74
|
export declare abstract class OperationNodeVisitor {
|
|
74
75
|
#private;
|
|
75
76
|
protected readonly nodeStack: OperationNode[];
|
|
@@ -146,4 +147,5 @@ export declare abstract class OperationNodeVisitor {
|
|
|
146
147
|
protected abstract visitCreateType(node: CreateTypeNode): void;
|
|
147
148
|
protected abstract visitDropType(node: DropTypeNode): void;
|
|
148
149
|
protected abstract visitExplain(node: ExplainNode): void;
|
|
150
|
+
protected abstract visitDefaultInsertValue(node: DefaultInsertValueNode): void;
|
|
149
151
|
}
|
|
@@ -77,6 +77,7 @@ export class OperationNodeVisitor {
|
|
|
77
77
|
CreateTypeNode: this.visitCreateType.bind(this),
|
|
78
78
|
DropTypeNode: this.visitDropType.bind(this),
|
|
79
79
|
ExplainNode: this.visitExplain.bind(this),
|
|
80
|
+
DefaultInsertValueNode: this.visitDefaultInsertValue.bind(this),
|
|
80
81
|
});
|
|
81
82
|
visitNode = (node) => {
|
|
82
83
|
this.nodeStack.push(node);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'FilterNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'UnionNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode';
|
|
1
|
+
export declare type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'FilterNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'UnionNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode';
|
|
2
2
|
export interface OperationNode {
|
|
3
3
|
readonly kind: OperationNodeKind;
|
|
4
4
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { DefaultInsertValueNode } from './default-insert-value-node.js';
|
|
1
2
|
import { OperationNode } from './operation-node.js';
|
|
2
3
|
import { RawNode } from './raw-node.js';
|
|
3
4
|
import { ReferenceNode } from './reference-node.js';
|
|
4
5
|
import { SelectQueryNode } from './select-query-node.js';
|
|
5
6
|
import { ValueNode } from './value-node.js';
|
|
6
|
-
export declare type ListNodeItem = ValueNode | ReferenceNode | SelectQueryNode | RawNode;
|
|
7
|
+
export declare type ListNodeItem = ValueNode | ReferenceNode | DefaultInsertValueNode | SelectQueryNode | RawNode;
|
|
7
8
|
export interface ValueListNode extends OperationNode {
|
|
8
9
|
readonly kind: 'ValueListNode';
|
|
9
10
|
readonly values: ReadonlyArray<ListNodeItem>;
|
|
@@ -3,7 +3,7 @@ import { RawNode } from '../operation-node/raw-node.js';
|
|
|
3
3
|
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
4
4
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
5
5
|
import { AliasedQueryBuilderFactory, AliasedRawBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, AnySelectQueryBuilder, SelectQueryBuilderFactory, RawBuilderFactory } from '../util/type-utils.js';
|
|
6
|
-
export declare type ComplexExpression<DB, TB extends keyof DB, V = any> = AnySelectQueryBuilder | SelectQueryBuilderFactory<DB, TB> | RawBuilder<V> | RawBuilderFactory<DB, TB>;
|
|
6
|
+
export declare type ComplexExpression<DB, TB extends keyof DB, V = any> = AnySelectQueryBuilder | SelectQueryBuilderFactory<DB, TB> | RawBuilder<V> | RawBuilderFactory<DB, TB, V>;
|
|
7
7
|
export declare type AliasedComplexExpression<DB, TB extends keyof DB> = AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB> | AnyAliasedRawBuilder | AliasedRawBuilderFactory<DB, TB>;
|
|
8
8
|
export declare function parseComplexExpression(exp: ComplexExpression<any, any>): SelectQueryNode | RawNode;
|
|
9
9
|
export declare function parseAliasedComplexExpression(exp: AliasedComplexExpression<any, any>): AliasNode;
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
import { ColumnNode } from '../operation-node/column-node.js';
|
|
3
3
|
import { PrimitiveValueListNode } from '../operation-node/primitive-value-list-node.js';
|
|
4
4
|
import { ValueListNode } from '../operation-node/value-list-node.js';
|
|
5
|
-
import { freeze } from '../util/object-utils.js';
|
|
5
|
+
import { freeze, isUndefined } from '../util/object-utils.js';
|
|
6
6
|
import { parseValueExpression } from './value-parser.js';
|
|
7
7
|
import { ValuesNode } from '../operation-node/values-node.js';
|
|
8
8
|
import { isComplexExpression } from './complex-expression-parser.js';
|
|
9
|
+
import { DefaultInsertValueNode } from '../operation-node/default-insert-value-node.js';
|
|
9
10
|
export function parseInsertObjectOrList(args) {
|
|
10
11
|
return parseInsertColumnsAndValues(Array.isArray(args) ? args : [args]);
|
|
11
12
|
}
|
|
@@ -30,16 +31,24 @@ function parseColumnNamesAndIndexes(rows) {
|
|
|
30
31
|
}
|
|
31
32
|
function parseRowValues(row, columns) {
|
|
32
33
|
const rowColumns = Object.keys(row);
|
|
33
|
-
const rowValues =
|
|
34
|
+
const rowValues = Array.from({
|
|
35
|
+
length: columns.size,
|
|
36
|
+
});
|
|
37
|
+
let complexColumn = false;
|
|
34
38
|
for (const col of rowColumns) {
|
|
35
39
|
const columnIdx = columns.get(col);
|
|
36
|
-
const value = row[col];
|
|
37
40
|
if (columnIdx !== undefined) {
|
|
41
|
+
const value = row[col];
|
|
42
|
+
if (isComplexExpression(value)) {
|
|
43
|
+
complexColumn = true;
|
|
44
|
+
}
|
|
38
45
|
rowValues[columnIdx] = value;
|
|
39
46
|
}
|
|
40
47
|
}
|
|
41
|
-
|
|
42
|
-
|
|
48
|
+
const columnMissing = rowColumns.length < columns.size;
|
|
49
|
+
if (columnMissing || complexColumn) {
|
|
50
|
+
const defaultValue = DefaultInsertValueNode.create();
|
|
51
|
+
return ValueListNode.create(rowValues.map((it) => isUndefined(it) ? defaultValue : parseValueExpression(it)));
|
|
43
52
|
}
|
|
44
53
|
return PrimitiveValueListNode.create(rowValues);
|
|
45
54
|
}
|
|
@@ -73,6 +73,7 @@ import { CreateTypeNode } from '../operation-node/create-type-node.js';
|
|
|
73
73
|
import { DropTypeNode } from '../operation-node/drop-type-node.js';
|
|
74
74
|
import { ExplainNode } from '../operation-node/explain-node.js';
|
|
75
75
|
import { SchemableIdentifierNode } from '../operation-node/schemable-identifier-node.js';
|
|
76
|
+
import { DefaultInsertValueNode } from '../operation-node/default-insert-value-node.js';
|
|
76
77
|
export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
|
|
77
78
|
#private;
|
|
78
79
|
protected get numParameters(): number;
|
|
@@ -153,6 +154,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
153
154
|
protected visitCreateType(node: CreateTypeNode): void;
|
|
154
155
|
protected visitDropType(node: DropTypeNode): void;
|
|
155
156
|
protected visitExplain(node: ExplainNode): void;
|
|
157
|
+
protected visitDefaultInsertValue(_: DefaultInsertValueNode): void;
|
|
156
158
|
protected append(str: string): void;
|
|
157
159
|
protected appendValue(parameter: unknown): void;
|
|
158
160
|
protected getLeftIdentifierWrapper(): string;
|
|
@@ -412,6 +412,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
412
412
|
this.append('if exists ');
|
|
413
413
|
}
|
|
414
414
|
this.visitNode(node.table);
|
|
415
|
+
if (node.cascade) {
|
|
416
|
+
this.append(' cascade');
|
|
417
|
+
}
|
|
415
418
|
}
|
|
416
419
|
visitDataType(node) {
|
|
417
420
|
this.append(node.dataType);
|
|
@@ -559,6 +562,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
559
562
|
this.append(' on ');
|
|
560
563
|
this.visitNode(node.table);
|
|
561
564
|
}
|
|
565
|
+
if (node.cascade) {
|
|
566
|
+
this.append(' cascade');
|
|
567
|
+
}
|
|
562
568
|
}
|
|
563
569
|
visitCreateSchema(node) {
|
|
564
570
|
this.append('create schema ');
|
|
@@ -573,6 +579,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
573
579
|
this.append('if exists ');
|
|
574
580
|
}
|
|
575
581
|
this.visitNode(node.schema);
|
|
582
|
+
if (node.cascade) {
|
|
583
|
+
this.append(' cascade');
|
|
584
|
+
}
|
|
576
585
|
}
|
|
577
586
|
visitPrimaryKeyConstraint(node) {
|
|
578
587
|
if (node.name) {
|
|
@@ -785,6 +794,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
785
794
|
this.append('if exists ');
|
|
786
795
|
}
|
|
787
796
|
this.visitNode(node.name);
|
|
797
|
+
if (node.cascade) {
|
|
798
|
+
this.append(' cascade');
|
|
799
|
+
}
|
|
788
800
|
}
|
|
789
801
|
visitGenerated(node) {
|
|
790
802
|
this.append('generated ');
|
|
@@ -853,6 +865,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
853
865
|
this.append(this.getRightExplainOptionsWrapper());
|
|
854
866
|
}
|
|
855
867
|
}
|
|
868
|
+
visitDefaultInsertValue(_) {
|
|
869
|
+
this.append('default');
|
|
870
|
+
}
|
|
856
871
|
append(str) {
|
|
857
872
|
this.#sql += str;
|
|
858
873
|
}
|
|
@@ -13,6 +13,7 @@ export declare class DropIndexBuilder implements OperationNodeSource, Compilable
|
|
|
13
13
|
*/
|
|
14
14
|
on(table: string): DropIndexBuilder;
|
|
15
15
|
ifExists(): DropIndexBuilder;
|
|
16
|
+
cascade(): DropIndexBuilder;
|
|
16
17
|
toOperationNode(): DropIndexNode;
|
|
17
18
|
compile(): CompiledQuery;
|
|
18
19
|
execute(): Promise<void>;
|
|
@@ -28,6 +28,14 @@ export class DropIndexBuilder {
|
|
|
28
28
|
}),
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
|
+
cascade() {
|
|
32
|
+
return new DropIndexBuilder({
|
|
33
|
+
...this.#props,
|
|
34
|
+
dropIndexNode: DropIndexNode.cloneWith(this.#props.dropIndexNode, {
|
|
35
|
+
cascade: true,
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
31
39
|
toOperationNode() {
|
|
32
40
|
return this.#props.executor.transformQuery(this.#props.dropIndexNode, this.#props.queryId);
|
|
33
41
|
}
|
|
@@ -8,6 +8,7 @@ export declare class DropSchemaBuilder implements OperationNodeSource, Compilabl
|
|
|
8
8
|
#private;
|
|
9
9
|
constructor(props: DropSchemaBuilderProps);
|
|
10
10
|
ifExists(): DropSchemaBuilder;
|
|
11
|
+
cascade(): DropSchemaBuilder;
|
|
11
12
|
toOperationNode(): DropSchemaNode;
|
|
12
13
|
compile(): CompiledQuery;
|
|
13
14
|
execute(): Promise<void>;
|
|
@@ -15,6 +15,14 @@ export class DropSchemaBuilder {
|
|
|
15
15
|
}),
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
|
+
cascade() {
|
|
19
|
+
return new DropSchemaBuilder({
|
|
20
|
+
...this.#props,
|
|
21
|
+
dropSchemaNode: DropSchemaNode.cloneWith(this.#props.dropSchemaNode, {
|
|
22
|
+
cascade: true,
|
|
23
|
+
}),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
18
26
|
toOperationNode() {
|
|
19
27
|
return this.#props.executor.transformQuery(this.#props.dropSchemaNode, this.#props.queryId);
|
|
20
28
|
}
|
|
@@ -8,6 +8,7 @@ export declare class DropTableBuilder implements OperationNodeSource, Compilable
|
|
|
8
8
|
#private;
|
|
9
9
|
constructor(props: DropTableBuilderProps);
|
|
10
10
|
ifExists(): DropTableBuilder;
|
|
11
|
+
cascade(): DropTableBuilder;
|
|
11
12
|
toOperationNode(): DropTableNode;
|
|
12
13
|
compile(): CompiledQuery;
|
|
13
14
|
execute(): Promise<void>;
|
|
@@ -15,6 +15,14 @@ export class DropTableBuilder {
|
|
|
15
15
|
}),
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
|
+
cascade() {
|
|
19
|
+
return new DropTableBuilder({
|
|
20
|
+
...this.#props,
|
|
21
|
+
dropTableNode: DropTableNode.cloneWith(this.#props.dropTableNode, {
|
|
22
|
+
cascade: true,
|
|
23
|
+
}),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
18
26
|
toOperationNode() {
|
|
19
27
|
return this.#props.executor.transformQuery(this.#props.dropTableNode, this.#props.queryId);
|
|
20
28
|
}
|
|
@@ -9,6 +9,7 @@ export declare class DropViewBuilder implements OperationNodeSource, Compilable
|
|
|
9
9
|
constructor(props: DropViewBuilderProps);
|
|
10
10
|
materialized(): DropViewBuilder;
|
|
11
11
|
ifExists(): DropViewBuilder;
|
|
12
|
+
cascade(): DropViewBuilder;
|
|
12
13
|
toOperationNode(): DropViewNode;
|
|
13
14
|
compile(): CompiledQuery;
|
|
14
15
|
execute(): Promise<void>;
|
|
@@ -23,6 +23,14 @@ export class DropViewBuilder {
|
|
|
23
23
|
}),
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
|
+
cascade() {
|
|
27
|
+
return new DropViewBuilder({
|
|
28
|
+
...this.#props,
|
|
29
|
+
dropViewNode: DropViewNode.cloneWith(this.#props.dropViewNode, {
|
|
30
|
+
cascade: true,
|
|
31
|
+
}),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
26
34
|
toOperationNode() {
|
|
27
35
|
return this.#props.executor.transformQuery(this.#props.dropViewNode, this.#props.queryId);
|
|
28
36
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare function isEmpty(obj: ArrayLike<unknown> | string | object): boolean;
|
|
2
|
+
export declare function isUndefined(obj: unknown): obj is undefined;
|
|
2
3
|
export declare function isString(obj: unknown): obj is string;
|
|
3
4
|
export declare function isNumber(obj: unknown): obj is number;
|
|
4
5
|
export declare function isBoolean(obj: unknown): obj is boolean;
|
|
@@ -104,7 +104,7 @@ export declare type AnyRawBuilder = RawBuilder<any>;
|
|
|
104
104
|
export declare type AnyAliasedRawBuilder = AliasedRawBuilder<any, any>;
|
|
105
105
|
export declare type SelectQueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnySelectQueryBuilder;
|
|
106
106
|
export declare type AliasedQueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedQueryBuilder;
|
|
107
|
-
export declare type RawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) =>
|
|
107
|
+
export declare type RawBuilderFactory<DB, TB extends keyof DB, O = any> = (qb: ExpressionBuilder<DB, TB>) => RawBuilder<O>;
|
|
108
108
|
export declare type AliasedRawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedRawBuilder;
|
|
109
109
|
export declare type SingleResultType<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : O | undefined;
|
|
110
110
|
export declare type UnknownRow = Record<string, unknown>;
|