kysely 0.12.2 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/README.md +115 -31
  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-adapter.d.ts +2 -2
  6. package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -1
  7. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +1 -1
  8. package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +1 -1
  9. package/dist/cjs/dialect/mysql/mysql-introspector.js +3 -3
  10. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +2 -2
  11. package/dist/cjs/dialect/postgres/postgres-adapter.js +2 -1
  12. package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +1 -1
  13. package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +1 -1
  14. package/dist/cjs/dialect/postgres/postgres-introspector.js +3 -3
  15. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +2 -2
  16. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +1 -1
  17. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +1 -1
  18. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +3 -3
  19. package/dist/cjs/index.d.ts +7 -4
  20. package/dist/cjs/index.js +6 -3
  21. package/dist/cjs/kysely.d.ts +8 -40
  22. package/dist/cjs/kysely.js +8 -40
  23. package/dist/cjs/migration/file-migration-provider.d.ts +52 -0
  24. package/dist/cjs/migration/file-migration-provider.js +52 -0
  25. package/dist/cjs/migration/migrator.d.ts +234 -0
  26. package/dist/cjs/migration/migrator.js +417 -0
  27. package/dist/cjs/operation-node/check-constraint-node.d.ts +1 -1
  28. package/dist/cjs/operation-node/check-constraint-node.js +2 -3
  29. package/dist/cjs/operation-node/column-definition-node.d.ts +8 -7
  30. package/dist/cjs/operation-node/column-definition-node.js +0 -4
  31. package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
  32. package/dist/cjs/operation-node/generated-node.d.ts +20 -0
  33. package/dist/cjs/operation-node/generated-node.js +31 -0
  34. package/dist/cjs/operation-node/on-conflict-node.d.ts +13 -2
  35. package/dist/cjs/operation-node/on-conflict-node.js +39 -1
  36. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -2
  37. package/dist/cjs/operation-node/operation-node-transformer.js +13 -6
  38. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -2
  39. package/dist/cjs/operation-node/operation-node-visitor.js +1 -1
  40. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  41. package/dist/cjs/parser/insert-values-parser.d.ts +4 -4
  42. package/dist/cjs/parser/insert-values-parser.js +2 -3
  43. package/dist/cjs/parser/reference-parser.d.ts +4 -3
  44. package/dist/cjs/parser/select-parser.d.ts +10 -4
  45. package/dist/cjs/parser/update-set-parser.d.ts +2 -1
  46. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +2 -2
  47. package/dist/cjs/query-builder/delete-query-builder.d.ts +0 -3
  48. package/dist/cjs/query-builder/insert-query-builder.d.ts +78 -94
  49. package/dist/cjs/query-builder/insert-query-builder.js +145 -15
  50. package/dist/cjs/query-builder/on-conflict-builder.d.ts +686 -0
  51. package/dist/cjs/query-builder/on-conflict-builder.js +323 -0
  52. package/dist/cjs/query-builder/returning-interface.d.ts +0 -3
  53. package/dist/cjs/query-builder/update-query-builder.d.ts +0 -3
  54. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -2
  55. package/dist/cjs/query-compiler/default-query-compiler.js +37 -8
  56. package/dist/cjs/query-creator.d.ts +0 -2
  57. package/dist/cjs/query-creator.js +0 -2
  58. package/dist/cjs/schema/alter-table-builder.d.ts +41 -9
  59. package/dist/cjs/schema/alter-table-builder.js +45 -9
  60. package/dist/cjs/schema/column-definition-builder.d.ts +40 -8
  61. package/dist/cjs/schema/column-definition-builder.js +21 -8
  62. package/dist/cjs/schema/create-index-builder.d.ts +3 -2
  63. package/dist/cjs/schema/create-index-builder.js +2 -2
  64. package/dist/cjs/schema/create-table-builder.d.ts +3 -2
  65. package/dist/cjs/schema/create-table-builder.js +2 -2
  66. package/dist/cjs/util/column-type.d.ts +165 -0
  67. package/dist/cjs/util/column-type.js +2 -0
  68. package/dist/cjs/util/private-symbols.d.ts +5 -0
  69. package/dist/cjs/util/private-symbols.js +8 -0
  70. package/dist/cjs/util/type-utils.d.ts +6 -42
  71. package/dist/esm/{introspection → dialect}/database-introspector.d.ts +0 -0
  72. package/dist/esm/{introspection → dialect}/database-introspector.js +0 -0
  73. package/dist/esm/dialect/dialect.d.ts +1 -1
  74. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +2 -2
  75. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -1
  76. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +1 -1
  77. package/dist/esm/dialect/mysql/mysql-introspector.d.ts +1 -1
  78. package/dist/esm/dialect/mysql/mysql-introspector.js +1 -1
  79. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +2 -2
  80. package/dist/esm/dialect/postgres/postgres-adapter.js +2 -1
  81. package/dist/esm/dialect/postgres/postgres-dialect.d.ts +1 -1
  82. package/dist/esm/dialect/postgres/postgres-introspector.d.ts +1 -1
  83. package/dist/esm/dialect/postgres/postgres-introspector.js +1 -1
  84. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +2 -2
  85. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +1 -1
  86. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +1 -1
  87. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -1
  88. package/dist/esm/index.d.ts +7 -4
  89. package/dist/esm/index.js +6 -3
  90. package/dist/esm/kysely.d.ts +8 -40
  91. package/dist/esm/kysely.js +8 -40
  92. package/dist/esm/migration/file-migration-provider.d.ts +52 -0
  93. package/dist/esm/migration/file-migration-provider.js +48 -0
  94. package/dist/esm/migration/migrator.d.ts +234 -0
  95. package/dist/esm/migration/migrator.js +413 -0
  96. package/dist/esm/operation-node/check-constraint-node.d.ts +1 -1
  97. package/dist/esm/operation-node/check-constraint-node.js +2 -3
  98. package/dist/esm/operation-node/column-definition-node.d.ts +8 -7
  99. package/dist/esm/operation-node/column-definition-node.js +0 -4
  100. package/dist/esm/operation-node/data-type-node.d.ts +1 -1
  101. package/dist/esm/operation-node/generated-node.d.ts +20 -0
  102. package/dist/esm/operation-node/generated-node.js +28 -0
  103. package/dist/esm/operation-node/on-conflict-node.d.ts +13 -2
  104. package/dist/esm/operation-node/on-conflict-node.js +39 -1
  105. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -2
  106. package/dist/esm/operation-node/operation-node-transformer.js +13 -6
  107. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -2
  108. package/dist/esm/operation-node/operation-node-visitor.js +1 -1
  109. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  110. package/dist/esm/parser/insert-values-parser.d.ts +4 -4
  111. package/dist/esm/parser/insert-values-parser.js +2 -3
  112. package/dist/esm/parser/reference-parser.d.ts +4 -3
  113. package/dist/esm/parser/select-parser.d.ts +10 -4
  114. package/dist/esm/parser/update-set-parser.d.ts +2 -1
  115. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +2 -2
  116. package/dist/esm/query-builder/delete-query-builder.d.ts +0 -3
  117. package/dist/esm/query-builder/insert-query-builder.d.ts +78 -94
  118. package/dist/esm/query-builder/insert-query-builder.js +145 -15
  119. package/dist/esm/query-builder/on-conflict-builder.d.ts +686 -0
  120. package/dist/esm/query-builder/on-conflict-builder.js +317 -0
  121. package/dist/esm/query-builder/returning-interface.d.ts +0 -3
  122. package/dist/esm/query-builder/update-query-builder.d.ts +0 -3
  123. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -2
  124. package/dist/esm/query-compiler/default-query-compiler.js +37 -8
  125. package/dist/esm/query-creator.d.ts +0 -2
  126. package/dist/esm/query-creator.js +0 -2
  127. package/dist/esm/schema/alter-table-builder.d.ts +41 -9
  128. package/dist/esm/schema/alter-table-builder.js +45 -9
  129. package/dist/esm/schema/column-definition-builder.d.ts +40 -8
  130. package/dist/esm/schema/column-definition-builder.js +21 -8
  131. package/dist/esm/schema/create-index-builder.d.ts +3 -2
  132. package/dist/esm/schema/create-index-builder.js +2 -2
  133. package/dist/esm/schema/create-table-builder.d.ts +3 -2
  134. package/dist/esm/schema/create-table-builder.js +2 -2
  135. package/dist/esm/util/column-type.d.ts +165 -0
  136. package/dist/esm/util/column-type.js +1 -0
  137. package/dist/esm/util/private-symbols.d.ts +5 -0
  138. package/dist/esm/util/private-symbols.js +5 -0
  139. package/dist/esm/util/type-utils.d.ts +6 -42
  140. package/package.json +1 -1
  141. package/dist/cjs/migration/migration.d.ts +0 -66
  142. package/dist/cjs/migration/migration.js +0 -187
  143. package/dist/cjs/operation-node/generated-always-as-node.d.ts +0 -16
  144. package/dist/cjs/operation-node/generated-always-as-node.js +0 -25
  145. package/dist/cjs/parser/on-conflict-parser.d.ts +0 -10
  146. package/dist/cjs/parser/on-conflict-parser.js +0 -35
  147. package/dist/cjs/util/generated-placeholder.d.ts +0 -3
  148. package/dist/cjs/util/generated-placeholder.js +0 -11
  149. package/dist/esm/migration/migration.d.ts +0 -66
  150. package/dist/esm/migration/migration.js +0 -183
  151. package/dist/esm/operation-node/generated-always-as-node.d.ts +0 -16
  152. package/dist/esm/operation-node/generated-always-as-node.js +0 -22
  153. package/dist/esm/parser/on-conflict-parser.d.ts +0 -10
  154. package/dist/esm/parser/on-conflict-parser.js +0 -30
  155. package/dist/esm/util/generated-placeholder.d.ts +0 -3
  156. package/dist/esm/util/generated-placeholder.js +0 -7
@@ -2,24 +2,25 @@ 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';
9
- export declare type ColumnDefinitionNodeProps = Omit<Partial<ColumnDefinitionNode>, 'kind'>;
9
+ export declare type ColumnDefinitionNodeProps = Omit<Partial<ColumnDefinitionNode>, 'kind' | 'dataType'>;
10
10
  export declare type ColumnDataTypeNode = DataTypeNode | RawNode;
11
11
  export interface ColumnDefinitionNode extends OperationNode {
12
12
  readonly kind: 'ColumnDefinitionNode';
13
13
  readonly column: ColumnNode;
14
14
  readonly dataType: ColumnDataTypeNode;
15
15
  readonly references?: ReferencesNode;
16
- readonly primaryKey: boolean;
17
- readonly autoIncrement: boolean;
18
- readonly unique: boolean;
19
- readonly nullable: boolean;
16
+ readonly primaryKey?: boolean;
17
+ readonly autoIncrement?: boolean;
18
+ readonly unique?: boolean;
19
+ readonly notNull?: boolean;
20
20
  readonly defaultTo?: DefaultValueNode;
21
21
  readonly check?: CheckConstraintNode;
22
- readonly generatedAlwaysAs?: GeneratedAlwaysAsNode;
22
+ readonly generated?: GeneratedNode;
23
+ readonly unsigned?: boolean;
23
24
  }
24
25
  /**
25
26
  * @internal
@@ -12,10 +12,6 @@ export const ColumnDefinitionNode = freeze({
12
12
  kind: 'ColumnDefinitionNode',
13
13
  column: ColumnNode.create(column),
14
14
  dataType,
15
- primaryKey: false,
16
- autoIncrement: false,
17
- unique: false,
18
- nullable: true,
19
15
  });
20
16
  },
21
17
  cloneWith(node, props) {
@@ -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),
@@ -281,10 +281,11 @@ export class OperationNodeTransformer {
281
281
  primaryKey: node.primaryKey,
282
282
  autoIncrement: node.autoIncrement,
283
283
  unique: node.unique,
284
- nullable: node.nullable,
284
+ notNull: node.notNull,
285
+ unsigned: node.unsigned,
285
286
  defaultTo: this.transformNode(node.defaultTo),
286
287
  check: this.transformNode(node.check),
287
- generatedAlwaysAs: this.transformNode(node.generatedAlwaysAs),
288
+ generated: this.transformNode(node.generated),
288
289
  };
289
290
  }
290
291
  transformAddColumn(node) {
@@ -360,7 +361,10 @@ export class OperationNodeTransformer {
360
361
  kind: 'OnConflictNode',
361
362
  columns: this.transformNodeList(node.columns),
362
363
  constraint: this.transformNode(node.constraint),
364
+ indexExpression: this.transformNode(node.indexExpression),
365
+ indexWhere: this.transformNode(node.indexWhere),
363
366
  updates: this.transformNodeList(node.updates),
367
+ updateWhere: this.transformNode(node.updateWhere),
364
368
  doNothing: node.doNothing,
365
369
  };
366
370
  }
@@ -559,11 +563,14 @@ export class OperationNodeTransformer {
559
563
  materialized: node.materialized,
560
564
  };
561
565
  }
562
- transformGeneratedAlwaysAs(node) {
566
+ transformGenerated(node) {
563
567
  return {
564
- kind: 'GeneratedAlwaysAsNode',
565
- expression: this.transformNode(node.expression),
568
+ kind: 'GeneratedNode',
569
+ byDefault: node.byDefault,
570
+ always: node.always,
571
+ identity: node.identity,
566
572
  stored: node.stored,
573
+ expression: this.transformNode(node.expression),
567
574
  };
568
575
  }
569
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>;
@@ -12,8 +12,8 @@ export interface CamelCasePluginOptions {
12
12
  upperCase?: boolean;
13
13
  /**
14
14
  * If true, an underscore is added before each digit when converting
15
- * camelCase to snake_case. For example `foo1Bar => foo_1_bar` and
16
- * `foo_1_bar => foo1Bar`
15
+ * camelCase to snake_case. For example `foo12Bar => foo_12_bar` and
16
+ * `foo_12_bar => foo12Bar`
17
17
  *
18
18
  * Defaults to false.
19
19
  */
@@ -539,7 +539,6 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
539
539
  * const { id } = await db
540
540
  * .insertInto('person')
541
541
  * .values({
542
- * id: db.generated,
543
542
  * first_name: 'Jennifer',
544
543
  * last_name: 'Aniston'
545
544
  * })
@@ -553,7 +552,6 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
553
552
  * const { id, first_name } = await db
554
553
  * .insertInto('person')
555
554
  * .values({
556
- * id: db.generated,
557
555
  * first_name: 'Jennifer',
558
556
  * last_name: 'Aniston'
559
557
  * })
@@ -569,7 +567,6 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
569
567
  * const { id, full_name, first_pet_id } = await db
570
568
  * .insertInto('person')
571
569
  * .values({
572
- * id: db.generated,
573
570
  * first_name: 'Jennifer',
574
571
  * last_name: 'Aniston'
575
572
  * })