kysely 0.13.0 → 0.15.1

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 (140) hide show
  1. package/README.md +92 -32
  2. package/dist/cjs/{introspection → dialect}/database-introspector.d.ts +0 -0
  3. package/dist/cjs/{introspection → dialect}/database-introspector.js +0 -0
  4. package/dist/cjs/dialect/dialect.d.ts +1 -1
  5. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +1 -1
  6. package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +1 -1
  7. package/dist/cjs/dialect/mysql/mysql-introspector.js +3 -3
  8. package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +1 -1
  9. package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +1 -1
  10. package/dist/cjs/dialect/postgres/postgres-introspector.js +3 -3
  11. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +1 -1
  12. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +1 -1
  13. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +3 -3
  14. package/dist/cjs/index.d.ts +6 -3
  15. package/dist/cjs/index.js +6 -3
  16. package/dist/cjs/kysely.d.ts +8 -40
  17. package/dist/cjs/kysely.js +8 -40
  18. package/dist/cjs/migration/file-migration-provider.d.ts +52 -0
  19. package/dist/cjs/migration/file-migration-provider.js +52 -0
  20. package/dist/{esm/migration/migration.d.ts → cjs/migration/migrator.d.ts} +159 -134
  21. package/dist/cjs/migration/{migration.js → migrator.js} +166 -57
  22. package/dist/cjs/operation-node/check-constraint-node.d.ts +1 -1
  23. package/dist/cjs/operation-node/check-constraint-node.js +2 -3
  24. package/dist/cjs/operation-node/column-definition-node.d.ts +2 -2
  25. package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
  26. package/dist/cjs/operation-node/generated-node.d.ts +20 -0
  27. package/dist/cjs/operation-node/generated-node.js +31 -0
  28. package/dist/cjs/operation-node/on-conflict-node.d.ts +13 -2
  29. package/dist/cjs/operation-node/on-conflict-node.js +39 -1
  30. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -2
  31. package/dist/cjs/operation-node/operation-node-transformer.js +11 -5
  32. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -2
  33. package/dist/cjs/operation-node/operation-node-visitor.js +1 -1
  34. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  35. package/dist/cjs/parser/insert-values-parser.d.ts +4 -4
  36. package/dist/cjs/parser/insert-values-parser.js +2 -3
  37. package/dist/cjs/parser/reference-parser.d.ts +4 -3
  38. package/dist/cjs/parser/select-parser.d.ts +10 -4
  39. package/dist/cjs/parser/update-set-parser.d.ts +2 -1
  40. package/dist/cjs/query-builder/delete-query-builder.d.ts +2 -4
  41. package/dist/cjs/query-builder/insert-query-builder.d.ts +80 -95
  42. package/dist/cjs/query-builder/insert-query-builder.js +145 -15
  43. package/dist/cjs/query-builder/on-conflict-builder.d.ts +686 -0
  44. package/dist/cjs/query-builder/on-conflict-builder.js +323 -0
  45. package/dist/cjs/query-builder/returning-interface.d.ts +2 -4
  46. package/dist/cjs/query-builder/select-query-builder.d.ts +1 -1
  47. package/dist/cjs/query-builder/update-query-builder.d.ts +2 -4
  48. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -2
  49. package/dist/cjs/query-compiler/default-query-compiler.js +33 -7
  50. package/dist/cjs/query-creator.d.ts +0 -2
  51. package/dist/cjs/query-creator.js +0 -2
  52. package/dist/cjs/schema/alter-table-builder.d.ts +29 -9
  53. package/dist/cjs/schema/alter-table-builder.js +33 -9
  54. package/dist/cjs/schema/column-definition-builder.d.ts +28 -8
  55. package/dist/cjs/schema/column-definition-builder.js +17 -7
  56. package/dist/cjs/schema/create-index-builder.d.ts +3 -2
  57. package/dist/cjs/schema/create-index-builder.js +2 -2
  58. package/dist/cjs/schema/create-table-builder.d.ts +3 -2
  59. package/dist/cjs/schema/create-table-builder.js +2 -2
  60. package/dist/cjs/util/column-type.d.ts +165 -0
  61. package/dist/cjs/util/column-type.js +2 -0
  62. package/dist/cjs/util/private-symbols.d.ts +5 -0
  63. package/dist/cjs/util/private-symbols.js +8 -0
  64. package/dist/cjs/util/type-utils.d.ts +6 -42
  65. package/dist/esm/{introspection → dialect}/database-introspector.d.ts +0 -0
  66. package/dist/esm/{introspection → dialect}/database-introspector.js +0 -0
  67. package/dist/esm/dialect/dialect.d.ts +1 -1
  68. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +1 -1
  69. package/dist/esm/dialect/mysql/mysql-introspector.d.ts +1 -1
  70. package/dist/esm/dialect/mysql/mysql-introspector.js +1 -1
  71. package/dist/esm/dialect/postgres/postgres-dialect.d.ts +1 -1
  72. package/dist/esm/dialect/postgres/postgres-introspector.d.ts +1 -1
  73. package/dist/esm/dialect/postgres/postgres-introspector.js +1 -1
  74. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +1 -1
  75. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +1 -1
  76. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -1
  77. package/dist/esm/index.d.ts +6 -3
  78. package/dist/esm/index.js +6 -3
  79. package/dist/esm/kysely.d.ts +8 -40
  80. package/dist/esm/kysely.js +8 -40
  81. package/dist/esm/migration/file-migration-provider.d.ts +52 -0
  82. package/dist/esm/migration/file-migration-provider.js +48 -0
  83. package/dist/{cjs/migration/migration.d.ts → esm/migration/migrator.d.ts} +159 -134
  84. package/dist/esm/migration/{migration.js → migrator.js} +165 -56
  85. package/dist/esm/operation-node/check-constraint-node.d.ts +1 -1
  86. package/dist/esm/operation-node/check-constraint-node.js +2 -3
  87. package/dist/esm/operation-node/column-definition-node.d.ts +2 -2
  88. package/dist/esm/operation-node/data-type-node.d.ts +1 -1
  89. package/dist/esm/operation-node/generated-node.d.ts +20 -0
  90. package/dist/esm/operation-node/generated-node.js +28 -0
  91. package/dist/esm/operation-node/on-conflict-node.d.ts +13 -2
  92. package/dist/esm/operation-node/on-conflict-node.js +39 -1
  93. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -2
  94. package/dist/esm/operation-node/operation-node-transformer.js +11 -5
  95. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -2
  96. package/dist/esm/operation-node/operation-node-visitor.js +1 -1
  97. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  98. package/dist/esm/parser/insert-values-parser.d.ts +4 -4
  99. package/dist/esm/parser/insert-values-parser.js +2 -3
  100. package/dist/esm/parser/reference-parser.d.ts +4 -3
  101. package/dist/esm/parser/select-parser.d.ts +10 -4
  102. package/dist/esm/parser/update-set-parser.d.ts +2 -1
  103. package/dist/esm/query-builder/delete-query-builder.d.ts +2 -4
  104. package/dist/esm/query-builder/insert-query-builder.d.ts +80 -95
  105. package/dist/esm/query-builder/insert-query-builder.js +145 -15
  106. package/dist/esm/query-builder/on-conflict-builder.d.ts +686 -0
  107. package/dist/esm/query-builder/on-conflict-builder.js +317 -0
  108. package/dist/esm/query-builder/returning-interface.d.ts +2 -4
  109. package/dist/esm/query-builder/select-query-builder.d.ts +1 -1
  110. package/dist/esm/query-builder/update-query-builder.d.ts +2 -4
  111. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -2
  112. package/dist/esm/query-compiler/default-query-compiler.js +33 -7
  113. package/dist/esm/query-creator.d.ts +0 -2
  114. package/dist/esm/query-creator.js +0 -2
  115. package/dist/esm/schema/alter-table-builder.d.ts +29 -9
  116. package/dist/esm/schema/alter-table-builder.js +33 -9
  117. package/dist/esm/schema/column-definition-builder.d.ts +28 -8
  118. package/dist/esm/schema/column-definition-builder.js +17 -7
  119. package/dist/esm/schema/create-index-builder.d.ts +3 -2
  120. package/dist/esm/schema/create-index-builder.js +2 -2
  121. package/dist/esm/schema/create-table-builder.d.ts +3 -2
  122. package/dist/esm/schema/create-table-builder.js +2 -2
  123. package/dist/esm/util/column-type.d.ts +165 -0
  124. package/dist/esm/util/column-type.js +1 -0
  125. package/dist/esm/util/private-symbols.d.ts +5 -0
  126. package/dist/esm/util/private-symbols.js +5 -0
  127. package/dist/esm/util/type-utils.d.ts +6 -42
  128. package/package.json +1 -1
  129. package/dist/cjs/operation-node/generated-always-as-node.d.ts +0 -16
  130. package/dist/cjs/operation-node/generated-always-as-node.js +0 -25
  131. package/dist/cjs/parser/on-conflict-parser.d.ts +0 -10
  132. package/dist/cjs/parser/on-conflict-parser.js +0 -35
  133. package/dist/cjs/util/generated-placeholder.d.ts +0 -3
  134. package/dist/cjs/util/generated-placeholder.js +0 -11
  135. package/dist/esm/operation-node/generated-always-as-node.d.ts +0 -16
  136. package/dist/esm/operation-node/generated-always-as-node.js +0 -22
  137. package/dist/esm/parser/on-conflict-parser.d.ts +0 -10
  138. package/dist/esm/parser/on-conflict-parser.js +0 -30
  139. package/dist/esm/util/generated-placeholder.d.ts +0 -3
  140. package/dist/esm/util/generated-placeholder.js +0 -7
@@ -11,5 +11,5 @@ export interface CheckConstraintNode extends OperationNode {
11
11
  */
12
12
  export declare const CheckConstraintNode: Readonly<{
13
13
  is(node: OperationNode): node is CheckConstraintNode;
14
- create(expressionSql: string, constraintName?: string | undefined): CheckConstraintNode;
14
+ create(expression: RawNode, constraintName?: string | undefined): CheckConstraintNode;
15
15
  }>;
@@ -1,5 +1,4 @@
1
1
  import { freeze } from '../util/object-utils.js';
2
- import { RawNode } from './raw-node.js';
3
2
  import { IdentifierNode } from './identifier-node.js';
4
3
  /**
5
4
  * @internal
@@ -8,10 +7,10 @@ export const CheckConstraintNode = freeze({
8
7
  is(node) {
9
8
  return node.kind === 'CheckConstraintNode';
10
9
  },
11
- create(expressionSql, constraintName) {
10
+ create(expression, constraintName) {
12
11
  return freeze({
13
12
  kind: 'CheckConstraintNode',
14
- expression: RawNode.createWithSql(expressionSql),
13
+ expression,
15
14
  name: constraintName ? IdentifierNode.create(constraintName) : undefined,
16
15
  });
17
16
  },
@@ -2,7 +2,7 @@ import { CheckConstraintNode } from './check-constraint-node.js';
2
2
  import { ColumnNode } from './column-node.js';
3
3
  import { DataTypeNode } from './data-type-node.js';
4
4
  import { DefaultValueNode } from './default-value-node.js';
5
- import { GeneratedAlwaysAsNode } from './generated-always-as-node.js';
5
+ import { GeneratedNode } from './generated-node.js';
6
6
  import { OperationNode } from './operation-node.js';
7
7
  import { RawNode } from './raw-node.js';
8
8
  import { ReferencesNode } from './references-node.js';
@@ -19,7 +19,7 @@ export interface ColumnDefinitionNode extends OperationNode {
19
19
  readonly notNull?: boolean;
20
20
  readonly defaultTo?: DefaultValueNode;
21
21
  readonly check?: CheckConstraintNode;
22
- readonly generatedAlwaysAs?: GeneratedAlwaysAsNode;
22
+ readonly generated?: GeneratedNode;
23
23
  readonly unsigned?: boolean;
24
24
  }
25
25
  /**
@@ -1,5 +1,5 @@
1
1
  import { OperationNode } from './operation-node.js';
2
- export declare type ColumnDataType = 'varchar' | `varchar(${number})` | 'text' | 'integer' | 'int2' | 'int4' | 'int8' | 'bigint' | 'boolean' | 'real' | 'double precision' | 'float4' | 'float8' | 'decimal' | `decimal(${number}, ${number})` | 'numeric' | `numeric(${number}, ${number})` | 'binary' | 'date' | 'datetime' | 'time' | 'timetz' | 'timestamp' | 'timestamptz' | 'serial' | 'bigserial' | 'uuid' | 'json' | 'jsonb';
2
+ export declare type ColumnDataType = 'varchar' | `varchar(${number})` | 'text' | 'integer' | 'int2' | 'int4' | 'int8' | 'bigint' | 'boolean' | 'real' | 'double precision' | 'float4' | 'float8' | 'decimal' | `decimal(${number}, ${number})` | 'numeric' | `numeric(${number}, ${number})` | 'binary' | 'date' | 'datetime' | 'time' | 'timetz' | 'timestamp' | 'timestamptz' | 'serial' | 'bigserial' | 'uuid' | 'json' | 'jsonb' | 'blob';
3
3
  export declare type DataTypeParams = Omit<DataTypeNode, 'kind' | 'dataType'>;
4
4
  export interface DataTypeNode extends OperationNode {
5
5
  readonly kind: 'DataTypeNode';
@@ -0,0 +1,20 @@
1
+ import { OperationNode } from './operation-node.js';
2
+ import { RawNode } from './raw-node.js';
3
+ export declare type GeneratedNodeParams = Omit<GeneratedNode, 'kind' | 'expression'>;
4
+ export interface GeneratedNode extends OperationNode {
5
+ readonly kind: 'GeneratedNode';
6
+ readonly byDefault?: boolean;
7
+ readonly always?: boolean;
8
+ readonly identity?: boolean;
9
+ readonly stored?: boolean;
10
+ readonly expression?: RawNode;
11
+ }
12
+ /**
13
+ * @internal
14
+ */
15
+ export declare const GeneratedNode: Readonly<{
16
+ is(node: OperationNode): node is GeneratedNode;
17
+ create(params: GeneratedNodeParams): GeneratedNode;
18
+ createWithExpression(expression: RawNode): GeneratedNode;
19
+ cloneWith(node: GeneratedNode, params: GeneratedNodeParams): GeneratedNode;
20
+ }>;
@@ -0,0 +1,28 @@
1
+ import { freeze } from '../util/object-utils.js';
2
+ /**
3
+ * @internal
4
+ */
5
+ export const GeneratedNode = freeze({
6
+ is(node) {
7
+ return node.kind === 'GeneratedNode';
8
+ },
9
+ create(params) {
10
+ return freeze({
11
+ kind: 'GeneratedNode',
12
+ ...params,
13
+ });
14
+ },
15
+ createWithExpression(expression) {
16
+ return freeze({
17
+ kind: 'GeneratedNode',
18
+ always: true,
19
+ expression,
20
+ });
21
+ },
22
+ cloneWith(node, params) {
23
+ return freeze({
24
+ ...node,
25
+ ...params,
26
+ });
27
+ },
28
+ });
@@ -1,13 +1,19 @@
1
1
  import { ColumnNode } from './column-node.js';
2
2
  import { ColumnUpdateNode } from './column-update-node.js';
3
3
  import { IdentifierNode } from './identifier-node.js';
4
+ import { FilterExpressionNode } from './operation-node-utils.js';
4
5
  import { OperationNode } from './operation-node.js';
5
- export declare type OnConflictNodeProps = Omit<OnConflictNode, 'kind'>;
6
+ import { RawNode } from './raw-node.js';
7
+ import { WhereNode } from './where-node.js';
8
+ export declare type OnConflictNodeProps = Omit<OnConflictNode, 'kind' | 'indexWhere' | 'updateWhere'>;
6
9
  export interface OnConflictNode extends OperationNode {
7
10
  readonly kind: 'OnConflictNode';
8
11
  readonly columns?: ReadonlyArray<ColumnNode>;
9
12
  readonly constraint?: IdentifierNode;
13
+ readonly indexExpression?: RawNode;
14
+ readonly indexWhere?: WhereNode;
10
15
  readonly updates?: ReadonlyArray<ColumnUpdateNode>;
16
+ readonly updateWhere?: WhereNode;
11
17
  readonly doNothing?: boolean;
12
18
  }
13
19
  /**
@@ -15,5 +21,10 @@ export interface OnConflictNode extends OperationNode {
15
21
  */
16
22
  export declare const OnConflictNode: Readonly<{
17
23
  is(node: OperationNode): node is OnConflictNode;
18
- create(props: OnConflictNodeProps): OnConflictNode;
24
+ create(): OnConflictNode;
25
+ cloneWith(node: OnConflictNode, props: OnConflictNodeProps): OnConflictNode;
26
+ cloneWithIndexWhere(node: OnConflictNode, filter: FilterExpressionNode): OnConflictNode;
27
+ cloneWithIndexOrWhere(node: OnConflictNode, filter: FilterExpressionNode): OnConflictNode;
28
+ cloneWithUpdateWhere(node: OnConflictNode, filter: FilterExpressionNode): OnConflictNode;
29
+ cloneWithUpdateOrWhere(node: OnConflictNode, filter: FilterExpressionNode): OnConflictNode;
19
30
  }>;
@@ -1,4 +1,5 @@
1
1
  import { freeze } from '../util/object-utils.js';
2
+ import { WhereNode } from './where-node.js';
2
3
  /**
3
4
  * @internal
4
5
  */
@@ -6,10 +7,47 @@ export const OnConflictNode = freeze({
6
7
  is(node) {
7
8
  return node.kind === 'OnConflictNode';
8
9
  },
9
- create(props) {
10
+ create() {
10
11
  return freeze({
11
12
  kind: 'OnConflictNode',
13
+ });
14
+ },
15
+ cloneWith(node, props) {
16
+ return freeze({
17
+ ...node,
12
18
  ...props,
13
19
  });
14
20
  },
21
+ cloneWithIndexWhere(node, filter) {
22
+ return freeze({
23
+ ...node,
24
+ indexWhere: node.indexWhere
25
+ ? WhereNode.cloneWithFilter(node.indexWhere, 'And', filter)
26
+ : WhereNode.create(filter),
27
+ });
28
+ },
29
+ cloneWithIndexOrWhere(node, filter) {
30
+ return freeze({
31
+ ...node,
32
+ indexWhere: node.indexWhere
33
+ ? WhereNode.cloneWithFilter(node.indexWhere, 'Or', filter)
34
+ : WhereNode.create(filter),
35
+ });
36
+ },
37
+ cloneWithUpdateWhere(node, filter) {
38
+ return freeze({
39
+ ...node,
40
+ updateWhere: node.updateWhere
41
+ ? WhereNode.cloneWithFilter(node.updateWhere, 'And', filter)
42
+ : WhereNode.create(filter),
43
+ });
44
+ },
45
+ cloneWithUpdateOrWhere(node, filter) {
46
+ return freeze({
47
+ ...node,
48
+ updateWhere: node.updateWhere
49
+ ? WhereNode.cloneWithFilter(node.updateWhere, 'Or', filter)
50
+ : WhereNode.create(filter),
51
+ });
52
+ },
15
53
  });
@@ -61,7 +61,7 @@ import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
61
61
  import { UnionNode } from './union-node.js';
62
62
  import { CreateViewNode } from './create-view-node.js';
63
63
  import { DropViewNode } from './drop-view-node.js';
64
- import { GeneratedAlwaysAsNode } from './generated-always-as-node.js';
64
+ import { GeneratedNode } from './generated-node.js';
65
65
  import { DefaultValueNode } from './default-value-node.js';
66
66
  import { OnNode } from './on-node.js';
67
67
  import { ValuesNode } from './values-node.js';
@@ -156,7 +156,7 @@ export declare class OperationNodeTransformer {
156
156
  protected transformDropConstraint(node: DropConstraintNode): DropConstraintNode;
157
157
  protected transformCreateView(node: CreateViewNode): CreateViewNode;
158
158
  protected transformDropView(node: DropViewNode): DropViewNode;
159
- protected transformGeneratedAlwaysAs(node: GeneratedAlwaysAsNode): GeneratedAlwaysAsNode;
159
+ protected transformGenerated(node: GeneratedNode): GeneratedNode;
160
160
  protected transformDefaultValue(node: DefaultValueNode): DefaultValueNode;
161
161
  protected transformOn(node: OnNode): OnNode;
162
162
  protected transformDataType(node: DataTypeNode): DataTypeNode;
@@ -93,7 +93,7 @@ export class OperationNodeTransformer {
93
93
  UnionNode: this.transformUnion.bind(this),
94
94
  CreateViewNode: this.transformCreateView.bind(this),
95
95
  DropViewNode: this.transformDropView.bind(this),
96
- GeneratedAlwaysAsNode: this.transformGeneratedAlwaysAs.bind(this),
96
+ GeneratedNode: this.transformGenerated.bind(this),
97
97
  DefaultValueNode: this.transformDefaultValue.bind(this),
98
98
  OnNode: this.transformOn.bind(this),
99
99
  ValuesNode: this.transformValues.bind(this),
@@ -285,7 +285,7 @@ export class OperationNodeTransformer {
285
285
  unsigned: node.unsigned,
286
286
  defaultTo: this.transformNode(node.defaultTo),
287
287
  check: this.transformNode(node.check),
288
- generatedAlwaysAs: this.transformNode(node.generatedAlwaysAs),
288
+ generated: this.transformNode(node.generated),
289
289
  };
290
290
  }
291
291
  transformAddColumn(node) {
@@ -361,7 +361,10 @@ export class OperationNodeTransformer {
361
361
  kind: 'OnConflictNode',
362
362
  columns: this.transformNodeList(node.columns),
363
363
  constraint: this.transformNode(node.constraint),
364
+ indexExpression: this.transformNode(node.indexExpression),
365
+ indexWhere: this.transformNode(node.indexWhere),
364
366
  updates: this.transformNodeList(node.updates),
367
+ updateWhere: this.transformNode(node.updateWhere),
365
368
  doNothing: node.doNothing,
366
369
  };
367
370
  }
@@ -560,11 +563,14 @@ export class OperationNodeTransformer {
560
563
  materialized: node.materialized,
561
564
  };
562
565
  }
563
- transformGeneratedAlwaysAs(node) {
566
+ transformGenerated(node) {
564
567
  return {
565
- kind: 'GeneratedAlwaysAsNode',
566
- expression: this.transformNode(node.expression),
568
+ kind: 'GeneratedNode',
569
+ byDefault: node.byDefault,
570
+ always: node.always,
571
+ identity: node.identity,
567
572
  stored: node.stored,
573
+ expression: this.transformNode(node.expression),
568
574
  };
569
575
  }
570
576
  transformDefaultValue(node) {
@@ -61,7 +61,7 @@ import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
61
61
  import { UnionNode } from './union-node.js';
62
62
  import { CreateViewNode } from './create-view-node.js';
63
63
  import { DropViewNode } from './drop-view-node.js';
64
- import { GeneratedAlwaysAsNode } from './generated-always-as-node.js';
64
+ import { GeneratedNode } from './generated-node.js';
65
65
  import { DefaultValueNode } from './default-value-node.js';
66
66
  import { OnNode } from './on-node.js';
67
67
  import { ValuesNode } from './values-node.js';
@@ -132,7 +132,7 @@ export declare abstract class OperationNodeVisitor {
132
132
  protected abstract visitOperator(node: OperatorNode): void;
133
133
  protected abstract visitCreateView(node: CreateViewNode): void;
134
134
  protected abstract visitDropView(node: DropViewNode): void;
135
- protected abstract visitGeneratedAlwaysAs(node: GeneratedAlwaysAsNode): void;
135
+ protected abstract visitGenerated(node: GeneratedNode): void;
136
136
  protected abstract visitDefaultValue(node: DefaultValueNode): void;
137
137
  protected abstract visitOn(node: OnNode): void;
138
138
  protected abstract visitValues(node: ValuesNode): void;
@@ -67,7 +67,7 @@ export class OperationNodeVisitor {
67
67
  UnionNode: this.visitUnion.bind(this),
68
68
  CreateViewNode: this.visitCreateView.bind(this),
69
69
  DropViewNode: this.visitDropView.bind(this),
70
- GeneratedAlwaysAsNode: this.visitGeneratedAlwaysAs.bind(this),
70
+ GeneratedNode: this.visitGenerated.bind(this),
71
71
  DefaultValueNode: this.visitDefaultValue.bind(this),
72
72
  OnNode: this.visitOn.bind(this),
73
73
  ValuesNode: this.visitValues.bind(this),
@@ -1,4 +1,4 @@
1
- export declare type OperationNodeKind = 'IdentifierNode' | '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' | 'GeneratedAlwaysAsNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode';
1
+ export declare type OperationNodeKind = 'IdentifierNode' | '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';
2
2
  export interface OperationNode {
3
3
  readonly kind: OperationNodeKind;
4
4
  }
@@ -1,12 +1,12 @@
1
1
  import { ColumnNode } from '../operation-node/column-node.js';
2
- import { GeneratedPlaceholder } from '../util/type-utils.js';
3
2
  import { ParseContext } from './parse-context.js';
4
3
  import { ValueExpression } from './value-parser.js';
5
4
  import { ValuesNode } from '../operation-node/values-node.js';
5
+ import { NonNullableInsertKeys, NullableInsertKeys, InsertType } from '../util/column-type.js';
6
6
  export declare type InsertObject<DB, TB extends keyof DB> = {
7
- [C in keyof DB[TB]]: InsertValueExpression<DB, TB, DB[TB][C]>;
7
+ [C in NonNullableInsertKeys<DB[TB]>]: ValueExpression<DB, TB, InsertType<DB[TB][C]>>;
8
+ } & {
9
+ [C in NullableInsertKeys<DB[TB]>]?: ValueExpression<DB, TB, InsertType<DB[TB][C]>>;
8
10
  };
9
11
  export declare type InsertObjectOrList<DB, TB extends keyof DB> = InsertObject<DB, TB> | ReadonlyArray<InsertObject<DB, TB>>;
10
- declare type InsertValueExpression<DB, TB extends keyof DB, T> = ValueExpression<DB, TB, T> | GeneratedPlaceholder;
11
12
  export declare function parseInsertObjectOrList(ctx: ParseContext, args: InsertObjectOrList<any, any>): [ReadonlyArray<ColumnNode>, ValuesNode];
12
- export {};
@@ -1,7 +1,6 @@
1
1
  import { ColumnNode } from '../operation-node/column-node.js';
2
2
  import { PrimitiveValueListNode } from '../operation-node/primitive-value-list-node.js';
3
3
  import { ValueListNode } from '../operation-node/value-list-node.js';
4
- import { isGeneratedPlaceholder } from '../util/generated-placeholder.js';
5
4
  import { freeze, isPrimitive } from '../util/object-utils.js';
6
5
  import { parseValueExpression } from './value-parser.js';
7
6
  import { ValuesNode } from '../operation-node/values-node.js';
@@ -20,7 +19,7 @@ function parseColumnNamesAndIndexes(rows) {
20
19
  for (const row of rows) {
21
20
  const cols = Object.keys(row);
22
21
  for (const col of cols) {
23
- if (!columns.has(col) && !isGeneratedPlaceholder(row[col])) {
22
+ if (!columns.has(col) && row[col] !== undefined) {
24
23
  columns.set(col, columns.size);
25
24
  }
26
25
  }
@@ -33,7 +32,7 @@ function parseRowValues(ctx, row, columns) {
33
32
  for (const col of rowColumns) {
34
33
  const columnIdx = columns.get(col);
35
34
  const value = row[col];
36
- if (columnIdx !== undefined && !isGeneratedPlaceholder(value)) {
35
+ if (columnIdx !== undefined) {
37
36
  rowValues[columnIdx] = value;
38
37
  }
39
38
  }
@@ -3,17 +3,18 @@ import { ColumnNode } from '../operation-node/column-node.js';
3
3
  import { ReferenceExpressionNode } from '../operation-node/operation-node-utils.js';
4
4
  import { ReferenceNode } from '../operation-node/reference-node.js';
5
5
  import { PrimitiveValue } from '../util/object-utils.js';
6
- import { AnyColumn, AnyColumnWithTable, RowType, ValueType } from '../util/type-utils.js';
6
+ import { AnyColumn, AnyColumnWithTable, ExtractColumnType, ValueType } from '../util/type-utils.js';
7
7
  import { RawBuilder } from '../raw-builder/raw-builder.js';
8
8
  import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
9
9
  import { ParseContext } from './parse-context.js';
10
10
  import { ComplexExpression } from './complex-expression-parser.js';
11
11
  import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
12
+ import { SelectType } from '../util/column-type.js';
12
13
  export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | DynamicReferenceBuilder<any> | ComplexExpression<DB, TB>;
13
14
  export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
14
15
  export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
15
- export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? ExtractTypeFromStringReference<DB, TB, RE> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => SelectQueryBuilder<any, any, infer O> ? ValueType<O> : PrimitiveValue;
16
- declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string, R = RowType<DB, TB>> = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends keyof R ? R[RE] : PrimitiveValue;
16
+ export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? SelectType<ExtractTypeFromStringReference<DB, TB, RE>> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => SelectQueryBuilder<any, any, infer O> ? ValueType<O> : PrimitiveValue;
17
+ declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string> = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, RE> : PrimitiveValue;
17
18
  export declare function parseReferenceExpressionOrList(ctx: ParseContext, arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
18
19
  export declare function parseReferenceExpression(ctx: ParseContext, exp: ReferenceExpression<any, any>): ReferenceExpressionNode;
19
20
  export declare function parseStringReference(ref: string): ColumnNode | ReferenceNode;
@@ -1,10 +1,11 @@
1
1
  import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
2
2
  import { AliasedQueryBuilder, SelectQueryBuilder } from '../query-builder/select-query-builder.js';
3
3
  import { SelectionNode } from '../operation-node/selection-node.js';
4
- import { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, RowType, ValueType } from '../util/type-utils.js';
4
+ import { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, ExtractColumnType, ValueType } from '../util/type-utils.js';
5
5
  import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
6
6
  import { ParseContext } from './parse-context.js';
7
7
  import { AliasedComplexExpression } from './complex-expression-parser.js';
8
+ import { Selectable, SelectType } from '../util/column-type.js';
8
9
  export declare type SelectExpression<DB, TB extends keyof DB> = AnyAliasedColumnWithTable<DB, TB> | AnyAliasedColumn<DB, TB> | AnyColumnWithTable<DB, TB> | AnyColumn<DB, TB> | DynamicReferenceBuilder<any> | AliasedComplexExpression<DB, TB>;
9
10
  export declare type SelectExpressionOrList<DB, TB extends keyof DB> = SelectExpression<DB, TB> | ReadonlyArray<SelectExpression<DB, TB>>;
10
11
  /**
@@ -15,14 +16,19 @@ export declare type QueryBuilderWithSelection<DB, TB extends keyof DB, O, SE> =
15
16
  /**
16
17
  * `selectAll` output query builder type.
17
18
  */
18
- export declare type SelectAllQueryBuilder<DB, TB extends keyof DB, O, S extends keyof DB> = SelectQueryBuilder<DB, TB, O & RowType<DB, S>>;
19
+ export declare type SelectAllQueryBuilder<DB, TB extends keyof DB, O, S extends keyof DB> = SelectQueryBuilder<DB, TB, O & AllSelection<DB, S>>;
19
20
  export declare type Selection<DB, TB extends keyof DB, SE> = {
20
- [A in ExtractAliasFromSelectExpression<SE>]: ExtractTypeFromSelectExpression<DB, TB, SE, A>;
21
+ [A in ExtractAliasFromSelectExpression<SE>]: SelectType<ExtractTypeFromSelectExpression<DB, TB, SE, A>>;
21
22
  };
22
23
  declare type ExtractAliasFromSelectExpression<SE> = SE extends string ? ExtractAliasFromStringSelectExpression<SE> : SE extends AliasedRawBuilder<any, infer RA> ? RA : SE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : SE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : SE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : SE extends DynamicReferenceBuilder<infer RA> ? ExtractAliasFromStringSelectExpression<RA> : never;
23
24
  declare type ExtractAliasFromStringSelectExpression<SE extends string> = SE extends `${string}.${string}.${string} as ${infer A}` ? A : SE extends `${string}.${string} as ${infer A}` ? A : SE extends `${string} as ${infer A}` ? A : SE extends `${string}.${string}.${infer C}` ? C : SE extends `${string}.${infer C}` ? C : SE;
24
25
  declare type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, SE, A extends keyof any> = SE extends string ? ExtractTypeFromStringSelectExpression<DB, TB, SE, A> : SE extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : SE extends (qb: any) => AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : SE extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends DynamicReferenceBuilder<infer RA> ? A extends ExtractAliasFromStringSelectExpression<RA> ? ExtractTypeFromStringSelectExpression<DB, TB, RA, A> | undefined : never : never;
25
- declare type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, SE extends string, A extends keyof any, R = RowType<DB, TB>> = SE extends `${infer SC}.${infer T}.${infer C} as ${infer RA}` ? RA extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C} as ${infer RA}` ? RA extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends `${infer C} as ${infer RA}` ? RA extends A ? C extends keyof R ? R[C] : never : never : SE extends `${infer SC}.${infer T}.${infer C}` ? C extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C}` ? C extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends A ? SE extends keyof R ? R[SE] : never : never;
26
+ declare type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, SE extends string, A extends keyof any> = SE extends `${infer SC}.${infer T}.${infer C} as ${infer RA}` ? RA extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C} as ${infer RA}` ? RA extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends `${infer C} as ${infer RA}` ? RA extends A ? C extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, C> : never : never : SE extends `${infer SC}.${infer T}.${infer C}` ? C extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C}` ? C extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends A ? SE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, SE> : never : never;
27
+ declare type AllSelection<DB, TB extends keyof DB> = Selectable<{
28
+ [C in AnyColumn<DB, TB>]: {
29
+ [T in TB]: C extends keyof DB[T] ? DB[T][C] : never;
30
+ }[TB];
31
+ }>;
26
32
  export declare function parseSelectExpressionOrList(ctx: ParseContext, selection: SelectExpressionOrList<any, any>): SelectionNode[];
27
33
  export declare function parseSelectAll(table?: string | string[]): SelectionNode[];
28
34
  export {};
@@ -1,7 +1,8 @@
1
1
  import { ColumnUpdateNode } from '../operation-node/column-update-node.js';
2
+ import { UpdateKeys, UpdateType } from '../util/column-type.js';
2
3
  import { ParseContext } from './parse-context.js';
3
4
  import { ValueExpression } from './value-parser.js';
4
5
  export declare type MutationObject<DB, TB extends keyof DB> = {
5
- [C in keyof DB[TB]]?: ValueExpression<DB, TB, DB[TB][C]>;
6
+ [C in UpdateKeys<DB[TB]>]?: ValueExpression<DB, TB, UpdateType<DB[TB][C]>>;
6
7
  };
7
8
  export declare function parseUpdateObject(ctx: ParseContext, row: MutationObject<any, any>): ReadonlyArray<ColumnUpdateNode>;
@@ -17,6 +17,7 @@ import { JoinInterface } from './join-interface.js';
17
17
  import { ReturningInterface } from './returning-interface.js';
18
18
  import { NoResultErrorConstructor } from './no-result-error.js';
19
19
  import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
20
+ import { Selectable } from '../util/column-type.js';
20
21
  export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, JoinInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
21
22
  #private;
22
23
  constructor(props: DeleteQueryBuilderProps);
@@ -539,7 +540,6 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
539
540
  * const { id } = await db
540
541
  * .insertInto('person')
541
542
  * .values({
542
- * id: db.generated,
543
543
  * first_name: 'Jennifer',
544
544
  * last_name: 'Aniston'
545
545
  * })
@@ -553,7 +553,6 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
553
553
  * const { id, first_name } = await db
554
554
  * .insertInto('person')
555
555
  * .values({
556
- * id: db.generated,
557
556
  * first_name: 'Jennifer',
558
557
  * last_name: 'Aniston'
559
558
  * })
@@ -569,7 +568,6 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
569
568
  * const { id, full_name, first_pet_id } = await db
570
569
  * .insertInto('person')
571
570
  * .values({
572
- * id: db.generated,
573
571
  * first_name: 'Jennifer',
574
572
  * last_name: 'Aniston'
575
573
  * })
@@ -587,7 +585,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
587
585
  * Adds a `returning *` to an insert/update/delete query on databases
588
586
  * that support `returning` such as PostgreSQL.
589
587
  */
590
- returningAll(): DeleteQueryBuilder<DB, TB, DB[TB]>;
588
+ returningAll(): DeleteQueryBuilder<DB, TB, Selectable<DB[TB]>>;
591
589
  /**
592
590
  * Simply calls the given function passing `this` as the only argument.
593
591
  *