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.
Files changed (66) hide show
  1. package/README.md +2 -1
  2. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +1 -1
  3. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  4. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +4 -0
  5. package/dist/cjs/index.d.ts +1 -0
  6. package/dist/cjs/index.js +1 -0
  7. package/dist/cjs/operation-node/default-insert-value-node.d.ts +11 -0
  8. package/dist/cjs/operation-node/default-insert-value-node.js +17 -0
  9. package/dist/cjs/operation-node/drop-index-node.d.ts +1 -0
  10. package/dist/cjs/operation-node/drop-schema-node.d.ts +1 -0
  11. package/dist/cjs/operation-node/drop-table-node.d.ts +1 -0
  12. package/dist/cjs/operation-node/drop-view-node.d.ts +1 -0
  13. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  14. package/dist/cjs/operation-node/operation-node-transformer.js +9 -0
  15. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  16. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  17. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  18. package/dist/cjs/operation-node/value-list-node.d.ts +2 -1
  19. package/dist/cjs/parser/complex-expression-parser.d.ts +1 -1
  20. package/dist/cjs/parser/insert-values-parser.js +13 -4
  21. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
  22. package/dist/cjs/query-compiler/default-query-compiler.js +15 -0
  23. package/dist/cjs/schema/drop-index-builder.d.ts +1 -0
  24. package/dist/cjs/schema/drop-index-builder.js +8 -0
  25. package/dist/cjs/schema/drop-schema-builder.d.ts +1 -0
  26. package/dist/cjs/schema/drop-schema-builder.js +8 -0
  27. package/dist/cjs/schema/drop-table-builder.d.ts +1 -0
  28. package/dist/cjs/schema/drop-table-builder.js +8 -0
  29. package/dist/cjs/schema/drop-view-builder.d.ts +1 -0
  30. package/dist/cjs/schema/drop-view-builder.js +8 -0
  31. package/dist/cjs/util/object-utils.d.ts +1 -0
  32. package/dist/cjs/util/object-utils.js +5 -1
  33. package/dist/cjs/util/type-utils.d.ts +1 -1
  34. package/dist/esm/dialect/sqlite/sqlite-adapter.js +1 -1
  35. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  36. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +4 -0
  37. package/dist/esm/index.d.ts +1 -0
  38. package/dist/esm/index.js +1 -0
  39. package/dist/esm/operation-node/default-insert-value-node.d.ts +11 -0
  40. package/dist/esm/operation-node/default-insert-value-node.js +15 -0
  41. package/dist/esm/operation-node/drop-index-node.d.ts +1 -0
  42. package/dist/esm/operation-node/drop-schema-node.d.ts +1 -0
  43. package/dist/esm/operation-node/drop-table-node.d.ts +1 -0
  44. package/dist/esm/operation-node/drop-view-node.d.ts +1 -0
  45. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  46. package/dist/esm/operation-node/operation-node-transformer.js +9 -0
  47. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  48. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  49. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  50. package/dist/esm/operation-node/value-list-node.d.ts +2 -1
  51. package/dist/esm/parser/complex-expression-parser.d.ts +1 -1
  52. package/dist/esm/parser/insert-values-parser.js +14 -5
  53. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
  54. package/dist/esm/query-compiler/default-query-compiler.js +15 -0
  55. package/dist/esm/schema/drop-index-builder.d.ts +1 -0
  56. package/dist/esm/schema/drop-index-builder.js +8 -0
  57. package/dist/esm/schema/drop-schema-builder.d.ts +1 -0
  58. package/dist/esm/schema/drop-schema-builder.js +8 -0
  59. package/dist/esm/schema/drop-table-builder.d.ts +1 -0
  60. package/dist/esm/schema/drop-table-builder.js +8 -0
  61. package/dist/esm/schema/drop-view-builder.d.ts +1 -0
  62. package/dist/esm/schema/drop-view-builder.js +8 -0
  63. package/dist/esm/util/object-utils.d.ts +1 -0
  64. package/dist/esm/util/object-utils.js +3 -0
  65. package/dist/esm/util/type-utils.d.ts +1 -1
  66. package/package.json +1 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  [![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://stand-with-ukraine.pp.ua)
2
2
 
3
- [![Discord](https://img.shields.io/discord/890118421587578920)](https://discord.gg/C9aJ49mCra)
3
+ [![Discord](https://img.shields.io/discord/890118421587578920)](https://discord.gg/xyBJ3GwvAm)
4
4
  [![Tests](https://github.com/koskimas/kysely/actions/workflows/test.yml/badge.svg)](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
 
@@ -6,7 +6,7 @@ class SqliteAdapter {
6
6
  return false;
7
7
  }
8
8
  get supportsReturning() {
9
- return false;
9
+ return true;
10
10
  }
11
11
  async acquireMigrationLock() {
12
12
  // SQLite only has one connection that's reserved by the migration system
@@ -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;
@@ -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
+ });
@@ -7,6 +7,7 @@ export interface DropIndexNode extends OperationNode {
7
7
  readonly name: SchemableIdentifierNode;
8
8
  readonly table?: TableNode;
9
9
  readonly ifExists?: boolean;
10
+ readonly cascade?: boolean;
10
11
  }
11
12
  /**
12
13
  * @internal
@@ -5,6 +5,7 @@ export interface DropSchemaNode extends OperationNode {
5
5
  readonly kind: 'DropSchemaNode';
6
6
  readonly schema: IdentifierNode;
7
7
  readonly ifExists?: boolean;
8
+ readonly cascade?: boolean;
8
9
  }
9
10
  /**
10
11
  * @internal
@@ -5,6 +5,7 @@ export interface DropTableNode extends OperationNode {
5
5
  readonly kind: 'DropTableNode';
6
6
  readonly table: TableNode;
7
7
  readonly ifExists?: boolean;
8
+ readonly cascade?: boolean;
8
9
  }
9
10
  /**
10
11
  * @internal
@@ -6,6 +6,7 @@ export interface DropViewNode extends OperationNode {
6
6
  readonly name: SchemableIdentifierNode;
7
7
  readonly ifExists?: boolean;
8
8
  readonly materialized?: boolean;
9
+ readonly cascade?: boolean;
9
10
  }
10
11
  /**
11
12
  * @internal
@@ -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 = new Array(columns.size).fill(null);
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
- if (rowValues.some(complex_expression_parser_js_1.isComplexExpression)) {
45
- return value_list_node_js_1.ValueListNode.create(rowValues.map((it) => (0, value_parser_js_1.parseValueExpression)(it)));
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>) => AnyRawBuilder;
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>;
@@ -4,7 +4,7 @@ export class SqliteAdapter {
4
4
  return false;
5
5
  }
6
6
  get supportsReturning() {
7
- return false;
7
+ return true;
8
8
  }
9
9
  async acquireMigrationLock() {
10
10
  // SQLite only has one connection that's reserved by the migration system
@@ -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
  }
@@ -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
+ });
@@ -7,6 +7,7 @@ export interface DropIndexNode extends OperationNode {
7
7
  readonly name: SchemableIdentifierNode;
8
8
  readonly table?: TableNode;
9
9
  readonly ifExists?: boolean;
10
+ readonly cascade?: boolean;
10
11
  }
11
12
  /**
12
13
  * @internal
@@ -5,6 +5,7 @@ export interface DropSchemaNode extends OperationNode {
5
5
  readonly kind: 'DropSchemaNode';
6
6
  readonly schema: IdentifierNode;
7
7
  readonly ifExists?: boolean;
8
+ readonly cascade?: boolean;
8
9
  }
9
10
  /**
10
11
  * @internal
@@ -5,6 +5,7 @@ export interface DropTableNode extends OperationNode {
5
5
  readonly kind: 'DropTableNode';
6
6
  readonly table: TableNode;
7
7
  readonly ifExists?: boolean;
8
+ readonly cascade?: boolean;
8
9
  }
9
10
  /**
10
11
  * @internal
@@ -6,6 +6,7 @@ export interface DropViewNode extends OperationNode {
6
6
  readonly name: SchemableIdentifierNode;
7
7
  readonly ifExists?: boolean;
8
8
  readonly materialized?: boolean;
9
+ readonly cascade?: boolean;
9
10
  }
10
11
  /**
11
12
  * @internal
@@ -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 = new Array(columns.size).fill(null);
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
- if (rowValues.some(isComplexExpression)) {
42
- return ValueListNode.create(rowValues.map((it) => parseValueExpression(it)));
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;
@@ -8,6 +8,9 @@ export function isEmpty(obj) {
8
8
  }
9
9
  return false;
10
10
  }
11
+ export function isUndefined(obj) {
12
+ return obj === undefined;
13
+ }
11
14
  export function isString(obj) {
12
15
  return typeof obj === 'string';
13
16
  }
@@ -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>) => AnyRawBuilder;
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>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kysely",
3
- "version": "0.21.3",
3
+ "version": "0.21.6",
4
4
  "description": "Type safe SQL query builder",
5
5
  "repository": {
6
6
  "type": "git",