kysely 0.12.1 → 0.14.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 +34 -10
  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/postgres/postgres-adapter.d.ts +2 -2
  10. package/dist/cjs/dialect/postgres/postgres-adapter.js +2 -1
  11. package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +1 -1
  12. package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +1 -1
  13. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +2 -2
  14. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +1 -1
  15. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +1 -1
  16. package/dist/cjs/index.d.ts +5 -3
  17. package/dist/cjs/index.js +4 -2
  18. package/dist/cjs/kysely.d.ts +152 -1
  19. package/dist/cjs/kysely.js +37 -0
  20. package/dist/cjs/migration/migration.d.ts +154 -11
  21. package/dist/cjs/migration/migration.js +256 -135
  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 +8 -7
  25. package/dist/cjs/operation-node/column-definition-node.js +0 -4
  26. package/dist/cjs/operation-node/common-table-expression-name-node.d.ts +15 -0
  27. package/dist/cjs/operation-node/common-table-expression-name-node.js +23 -0
  28. package/dist/cjs/operation-node/common-table-expression-node.d.ts +3 -3
  29. package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
  30. package/dist/cjs/operation-node/generated-node.d.ts +20 -0
  31. package/dist/cjs/operation-node/generated-node.js +31 -0
  32. package/dist/cjs/operation-node/on-conflict-node.d.ts +13 -2
  33. package/dist/cjs/operation-node/on-conflict-node.js +39 -1
  34. package/dist/cjs/operation-node/operation-node-transformer.d.ts +4 -2
  35. package/dist/cjs/operation-node/operation-node-transformer.js +22 -6
  36. package/dist/cjs/operation-node/operation-node-visitor.d.ts +4 -2
  37. package/dist/cjs/operation-node/operation-node-visitor.js +2 -1
  38. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/with-node.d.ts +3 -1
  40. package/dist/cjs/operation-node/with-node.js +2 -1
  41. package/dist/cjs/parser/reference-parser.d.ts +2 -2
  42. package/dist/cjs/parser/select-parser.d.ts +2 -2
  43. package/dist/cjs/parser/with-parser.d.ts +32 -5
  44. package/dist/cjs/parser/with-parser.js +13 -2
  45. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +2 -2
  46. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +8 -0
  47. package/dist/cjs/query-builder/insert-query-builder.d.ts +76 -75
  48. package/dist/cjs/query-builder/insert-query-builder.js +150 -15
  49. package/dist/cjs/query-builder/on-conflict-builder.d.ts +686 -0
  50. package/dist/cjs/query-builder/on-conflict-builder.js +323 -0
  51. package/dist/cjs/query-compiler/default-query-compiler.d.ts +4 -2
  52. package/dist/cjs/query-compiler/default-query-compiler.js +48 -8
  53. package/dist/cjs/query-creator.d.ts +27 -3
  54. package/dist/cjs/query-creator.js +33 -1
  55. package/dist/cjs/query-executor/default-query-executor.d.ts +19 -0
  56. package/dist/cjs/query-executor/noop-query-executor.d.ts +19 -0
  57. package/dist/cjs/raw-builder/raw-builder.js +1 -1
  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/type-utils.d.ts +11 -7
  67. package/dist/esm/{introspection → dialect}/database-introspector.d.ts +0 -0
  68. package/dist/esm/{introspection → dialect}/database-introspector.js +0 -0
  69. package/dist/esm/dialect/dialect.d.ts +1 -1
  70. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +2 -2
  71. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -1
  72. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +1 -1
  73. package/dist/esm/dialect/mysql/mysql-introspector.d.ts +1 -1
  74. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +2 -2
  75. package/dist/esm/dialect/postgres/postgres-adapter.js +2 -1
  76. package/dist/esm/dialect/postgres/postgres-dialect.d.ts +1 -1
  77. package/dist/esm/dialect/postgres/postgres-introspector.d.ts +1 -1
  78. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +2 -2
  79. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +1 -1
  80. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +1 -1
  81. package/dist/esm/index.d.ts +5 -3
  82. package/dist/esm/index.js +4 -2
  83. package/dist/esm/kysely.d.ts +152 -1
  84. package/dist/esm/kysely.js +37 -0
  85. package/dist/esm/migration/migration.d.ts +154 -11
  86. package/dist/esm/migration/migration.js +255 -134
  87. package/dist/esm/operation-node/check-constraint-node.d.ts +1 -1
  88. package/dist/esm/operation-node/check-constraint-node.js +2 -3
  89. package/dist/esm/operation-node/column-definition-node.d.ts +8 -7
  90. package/dist/esm/operation-node/column-definition-node.js +0 -4
  91. package/dist/esm/operation-node/common-table-expression-name-node.d.ts +15 -0
  92. package/dist/esm/operation-node/common-table-expression-name-node.js +20 -0
  93. package/dist/esm/operation-node/common-table-expression-node.d.ts +3 -3
  94. package/dist/esm/operation-node/data-type-node.d.ts +1 -1
  95. package/dist/esm/operation-node/generated-node.d.ts +20 -0
  96. package/dist/esm/operation-node/generated-node.js +28 -0
  97. package/dist/esm/operation-node/on-conflict-node.d.ts +13 -2
  98. package/dist/esm/operation-node/on-conflict-node.js +39 -1
  99. package/dist/esm/operation-node/operation-node-transformer.d.ts +4 -2
  100. package/dist/esm/operation-node/operation-node-transformer.js +22 -6
  101. package/dist/esm/operation-node/operation-node-visitor.d.ts +4 -2
  102. package/dist/esm/operation-node/operation-node-visitor.js +2 -1
  103. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  104. package/dist/esm/operation-node/with-node.d.ts +3 -1
  105. package/dist/esm/operation-node/with-node.js +2 -1
  106. package/dist/esm/parser/reference-parser.d.ts +2 -2
  107. package/dist/esm/parser/select-parser.d.ts +2 -2
  108. package/dist/esm/parser/with-parser.d.ts +32 -5
  109. package/dist/esm/parser/with-parser.js +13 -2
  110. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +2 -2
  111. package/dist/esm/plugin/with-schema/with-schema-transformer.js +8 -0
  112. package/dist/esm/query-builder/insert-query-builder.d.ts +76 -75
  113. package/dist/esm/query-builder/insert-query-builder.js +150 -15
  114. package/dist/esm/query-builder/on-conflict-builder.d.ts +686 -0
  115. package/dist/esm/query-builder/on-conflict-builder.js +317 -0
  116. package/dist/esm/query-compiler/default-query-compiler.d.ts +4 -2
  117. package/dist/esm/query-compiler/default-query-compiler.js +48 -8
  118. package/dist/esm/query-creator.d.ts +27 -3
  119. package/dist/esm/query-creator.js +33 -1
  120. package/dist/esm/query-executor/default-query-executor.d.ts +19 -0
  121. package/dist/esm/query-executor/noop-query-executor.d.ts +19 -0
  122. package/dist/esm/raw-builder/raw-builder.js +1 -1
  123. package/dist/esm/schema/alter-table-builder.d.ts +41 -9
  124. package/dist/esm/schema/alter-table-builder.js +45 -9
  125. package/dist/esm/schema/column-definition-builder.d.ts +40 -8
  126. package/dist/esm/schema/column-definition-builder.js +21 -8
  127. package/dist/esm/schema/create-index-builder.d.ts +3 -2
  128. package/dist/esm/schema/create-index-builder.js +2 -2
  129. package/dist/esm/schema/create-table-builder.d.ts +3 -2
  130. package/dist/esm/schema/create-table-builder.js +2 -2
  131. package/dist/esm/util/type-utils.d.ts +11 -7
  132. package/package.json +2 -2
  133. package/dist/cjs/operation-node/generated-always-as-node.d.ts +0 -16
  134. package/dist/cjs/operation-node/generated-always-as-node.js +0 -25
  135. package/dist/cjs/parser/on-conflict-parser.d.ts +0 -10
  136. package/dist/cjs/parser/on-conflict-parser.js +0 -35
  137. package/dist/esm/operation-node/generated-always-as-node.d.ts +0 -16
  138. package/dist/esm/operation-node/generated-always-as-node.js +0 -22
  139. package/dist/esm/parser/on-conflict-parser.d.ts +0 -10
  140. package/dist/esm/parser/on-conflict-parser.js +0 -30
@@ -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
  });
@@ -44,6 +44,7 @@ import { ReferencesNode } from './references-node.js';
44
44
  import { CheckConstraintNode } from './check-constraint-node.js';
45
45
  import { WithNode } from './with-node.js';
46
46
  import { CommonTableExpressionNode } from './common-table-expression-node.js';
47
+ import { CommonTableExpressionNameNode } from './common-table-expression-name-node.js';
47
48
  import { HavingNode } from './having-node.js';
48
49
  import { CreateSchemaNode } from './create-schema-node.js';
49
50
  import { DropSchemaNode } from './drop-schema-node.js';
@@ -60,7 +61,7 @@ import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
60
61
  import { UnionNode } from './union-node.js';
61
62
  import { CreateViewNode } from './create-view-node.js';
62
63
  import { DropViewNode } from './drop-view-node.js';
63
- import { GeneratedAlwaysAsNode } from './generated-always-as-node.js';
64
+ import { GeneratedNode } from './generated-node.js';
64
65
  import { DefaultValueNode } from './default-value-node.js';
65
66
  import { OnNode } from './on-node.js';
66
67
  import { ValuesNode } from './values-node.js';
@@ -142,6 +143,7 @@ export declare class OperationNodeTransformer {
142
143
  protected transformCheckConstraint(node: CheckConstraintNode): CheckConstraintNode;
143
144
  protected transformWith(node: WithNode): WithNode;
144
145
  protected transformCommonTableExpression(node: CommonTableExpressionNode): CommonTableExpressionNode;
146
+ protected transformCommonTableExpressionName(node: CommonTableExpressionNameNode): CommonTableExpressionNameNode;
145
147
  protected transformHaving(node: HavingNode): HavingNode;
146
148
  protected transformCreateSchema(node: CreateSchemaNode): CreateSchemaNode;
147
149
  protected transformDropSchema(node: DropSchemaNode): DropSchemaNode;
@@ -154,7 +156,7 @@ export declare class OperationNodeTransformer {
154
156
  protected transformDropConstraint(node: DropConstraintNode): DropConstraintNode;
155
157
  protected transformCreateView(node: CreateViewNode): CreateViewNode;
156
158
  protected transformDropView(node: DropViewNode): DropViewNode;
157
- protected transformGeneratedAlwaysAs(node: GeneratedAlwaysAsNode): GeneratedAlwaysAsNode;
159
+ protected transformGenerated(node: GeneratedNode): GeneratedNode;
158
160
  protected transformDefaultValue(node: DefaultValueNode): DefaultValueNode;
159
161
  protected transformOn(node: OnNode): OnNode;
160
162
  protected transformDataType(node: DataTypeNode): DataTypeNode;
@@ -78,6 +78,7 @@ export class OperationNodeTransformer {
78
78
  CheckConstraintNode: this.transformCheckConstraint.bind(this),
79
79
  WithNode: this.transformWith.bind(this),
80
80
  CommonTableExpressionNode: this.transformCommonTableExpression.bind(this),
81
+ CommonTableExpressionNameNode: this.transformCommonTableExpressionName.bind(this),
81
82
  HavingNode: this.transformHaving.bind(this),
82
83
  CreateSchemaNode: this.transformCreateSchema.bind(this),
83
84
  DropSchemaNode: this.transformDropSchema.bind(this),
@@ -92,7 +93,7 @@ export class OperationNodeTransformer {
92
93
  UnionNode: this.transformUnion.bind(this),
93
94
  CreateViewNode: this.transformCreateView.bind(this),
94
95
  DropViewNode: this.transformDropView.bind(this),
95
- GeneratedAlwaysAsNode: this.transformGeneratedAlwaysAs.bind(this),
96
+ GeneratedNode: this.transformGenerated.bind(this),
96
97
  DefaultValueNode: this.transformDefaultValue.bind(this),
97
98
  OnNode: this.transformOn.bind(this),
98
99
  ValuesNode: this.transformValues.bind(this),
@@ -280,10 +281,11 @@ export class OperationNodeTransformer {
280
281
  primaryKey: node.primaryKey,
281
282
  autoIncrement: node.autoIncrement,
282
283
  unique: node.unique,
283
- nullable: node.nullable,
284
+ notNull: node.notNull,
285
+ unsigned: node.unsigned,
284
286
  defaultTo: this.transformNode(node.defaultTo),
285
287
  check: this.transformNode(node.check),
286
- generatedAlwaysAs: this.transformNode(node.generatedAlwaysAs),
288
+ generated: this.transformNode(node.generated),
287
289
  };
288
290
  }
289
291
  transformAddColumn(node) {
@@ -359,7 +361,10 @@ export class OperationNodeTransformer {
359
361
  kind: 'OnConflictNode',
360
362
  columns: this.transformNodeList(node.columns),
361
363
  constraint: this.transformNode(node.constraint),
364
+ indexExpression: this.transformNode(node.indexExpression),
365
+ indexWhere: this.transformNode(node.indexWhere),
362
366
  updates: this.transformNodeList(node.updates),
367
+ updateWhere: this.transformNode(node.updateWhere),
363
368
  doNothing: node.doNothing,
364
369
  };
365
370
  }
@@ -444,6 +449,7 @@ export class OperationNodeTransformer {
444
449
  return {
445
450
  kind: 'WithNode',
446
451
  expressions: this.transformNodeList(node.expressions),
452
+ recursive: node.recursive,
447
453
  };
448
454
  }
449
455
  transformCommonTableExpression(node) {
@@ -453,6 +459,13 @@ export class OperationNodeTransformer {
453
459
  expression: this.transformNode(node.expression),
454
460
  };
455
461
  }
462
+ transformCommonTableExpressionName(node) {
463
+ return {
464
+ kind: 'CommonTableExpressionNameNode',
465
+ table: this.transformNode(node.table),
466
+ columns: this.transformNodeList(node.columns),
467
+ };
468
+ }
456
469
  transformHaving(node) {
457
470
  return {
458
471
  kind: 'HavingNode',
@@ -550,11 +563,14 @@ export class OperationNodeTransformer {
550
563
  materialized: node.materialized,
551
564
  };
552
565
  }
553
- transformGeneratedAlwaysAs(node) {
566
+ transformGenerated(node) {
554
567
  return {
555
- kind: 'GeneratedAlwaysAsNode',
556
- expression: this.transformNode(node.expression),
568
+ kind: 'GeneratedNode',
569
+ byDefault: node.byDefault,
570
+ always: node.always,
571
+ identity: node.identity,
557
572
  stored: node.stored,
573
+ expression: this.transformNode(node.expression),
558
574
  };
559
575
  }
560
576
  transformDefaultValue(node) {
@@ -44,6 +44,7 @@ import { ReferencesNode } from './references-node.js';
44
44
  import { CheckConstraintNode } from './check-constraint-node.js';
45
45
  import { WithNode } from './with-node.js';
46
46
  import { CommonTableExpressionNode } from './common-table-expression-node.js';
47
+ import { CommonTableExpressionNameNode } from './common-table-expression-name-node.js';
47
48
  import { HavingNode } from './having-node.js';
48
49
  import { CreateSchemaNode } from './create-schema-node.js';
49
50
  import { DropSchemaNode } from './drop-schema-node.js';
@@ -60,7 +61,7 @@ import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
60
61
  import { UnionNode } from './union-node.js';
61
62
  import { CreateViewNode } from './create-view-node.js';
62
63
  import { DropViewNode } from './drop-view-node.js';
63
- import { GeneratedAlwaysAsNode } from './generated-always-as-node.js';
64
+ import { GeneratedNode } from './generated-node.js';
64
65
  import { DefaultValueNode } from './default-value-node.js';
65
66
  import { OnNode } from './on-node.js';
66
67
  import { ValuesNode } from './values-node.js';
@@ -110,6 +111,7 @@ export declare abstract class OperationNodeVisitor {
110
111
  protected abstract visitCheckConstraint(node: CheckConstraintNode): void;
111
112
  protected abstract visitWith(node: WithNode): void;
112
113
  protected abstract visitCommonTableExpression(node: CommonTableExpressionNode): void;
114
+ protected abstract visitCommonTableExpressionName(node: CommonTableExpressionNameNode): void;
113
115
  protected abstract visitHaving(node: HavingNode): void;
114
116
  protected abstract visitCreateSchema(node: CreateSchemaNode): void;
115
117
  protected abstract visitDropSchema(node: DropSchemaNode): void;
@@ -130,7 +132,7 @@ export declare abstract class OperationNodeVisitor {
130
132
  protected abstract visitOperator(node: OperatorNode): void;
131
133
  protected abstract visitCreateView(node: CreateViewNode): void;
132
134
  protected abstract visitDropView(node: DropViewNode): void;
133
- protected abstract visitGeneratedAlwaysAs(node: GeneratedAlwaysAsNode): void;
135
+ protected abstract visitGenerated(node: GeneratedNode): void;
134
136
  protected abstract visitDefaultValue(node: DefaultValueNode): void;
135
137
  protected abstract visitOn(node: OnNode): void;
136
138
  protected abstract visitValues(node: ValuesNode): void;
@@ -52,6 +52,7 @@ export class OperationNodeVisitor {
52
52
  CheckConstraintNode: this.visitCheckConstraint.bind(this),
53
53
  WithNode: this.visitWith.bind(this),
54
54
  CommonTableExpressionNode: this.visitCommonTableExpression.bind(this),
55
+ CommonTableExpressionNameNode: this.visitCommonTableExpressionName.bind(this),
55
56
  HavingNode: this.visitHaving.bind(this),
56
57
  CreateSchemaNode: this.visitCreateSchema.bind(this),
57
58
  DropSchemaNode: this.visitDropSchema.bind(this),
@@ -66,7 +67,7 @@ export class OperationNodeVisitor {
66
67
  UnionNode: this.visitUnion.bind(this),
67
68
  CreateViewNode: this.visitCreateView.bind(this),
68
69
  DropViewNode: this.visitDropView.bind(this),
69
- GeneratedAlwaysAsNode: this.visitGeneratedAlwaysAs.bind(this),
70
+ GeneratedNode: this.visitGenerated.bind(this),
70
71
  DefaultValueNode: this.visitDefaultValue.bind(this),
71
72
  OnNode: this.visitOn.bind(this),
72
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';
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,14 +1,16 @@
1
1
  import { OperationNode } from './operation-node.js';
2
2
  import { CommonTableExpressionNode } from './common-table-expression-node.js';
3
+ export declare type WithNodeParams = Omit<WithNode, 'kind' | 'expressions'>;
3
4
  export interface WithNode extends OperationNode {
4
5
  readonly kind: 'WithNode';
5
6
  readonly expressions: ReadonlyArray<CommonTableExpressionNode>;
7
+ readonly recursive?: boolean;
6
8
  }
7
9
  /**
8
10
  * @internal
9
11
  */
10
12
  export declare const WithNode: Readonly<{
11
13
  is(node: OperationNode): node is WithNode;
12
- create(expression: CommonTableExpressionNode): WithNode;
14
+ create(expression: CommonTableExpressionNode, params?: WithNodeParams | undefined): WithNode;
13
15
  cloneWithExpression(withNode: WithNode, expression: CommonTableExpressionNode): WithNode;
14
16
  }>;
@@ -6,10 +6,11 @@ export const WithNode = freeze({
6
6
  is(node) {
7
7
  return node.kind === 'WithNode';
8
8
  },
9
- create(expression) {
9
+ create(expression, params) {
10
10
  return freeze({
11
11
  kind: 'WithNode',
12
12
  expressions: freeze([expression]),
13
+ ...params,
13
14
  });
14
15
  },
15
16
  cloneWithExpression(withNode, expression) {
@@ -3,7 +3,7 @@ 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';
@@ -13,7 +13,7 @@ export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReferen
13
13
  export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
14
14
  export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
15
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
+ 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
17
  export declare function parseReferenceExpressionOrList(ctx: ParseContext, arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
18
18
  export declare function parseReferenceExpression(ctx: ParseContext, exp: ReferenceExpression<any, any>): ReferenceExpressionNode;
19
19
  export declare function parseStringReference(ref: string): ColumnNode | ReferenceNode;
@@ -1,7 +1,7 @@
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, RowType, 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';
@@ -22,7 +22,7 @@ export declare type Selection<DB, TB extends keyof DB, SE> = {
22
22
  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
23
  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
24
  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;
25
+ 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;
26
26
  export declare function parseSelectExpressionOrList(ctx: ParseContext, selection: SelectExpressionOrList<any, any>): SelectionNode[];
27
27
  export declare function parseSelectAll(table?: string | string[]): SelectionNode[];
28
28
  export {};
@@ -5,10 +5,37 @@ import { InsertQueryBuilder } from '../query-builder/insert-query-builder.js';
5
5
  import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
6
6
  import { QueryCreator } from '../query-creator.js';
7
7
  import { RawBuilder } from '../raw-builder/raw-builder.js';
8
- import { AnyRawBuilder } from '../util/type-utils.js';
9
8
  import { ParseContext } from './parse-context.js';
10
- export declare type CommonTableExpression<DB> = (creator: QueryCreator<DB>) => SelectQueryBuilder<DB, any, any> | InsertQueryBuilder<DB, any, any> | UpdateQueryBuilder<DB, any, any> | DeleteQueryBuilder<DB, any, any> | AnyRawBuilder;
11
- export declare type QueryCreatorWithCommonTableExpression<DB, N extends string, E extends CommonTableExpression<DB>> = QueryCreator<DB & Record<N, ExtractRowTypeFromCommonTableExpression<E>>>;
12
- declare type ExtractRowTypeFromCommonTableExpression<E> = E extends (creator: QueryCreator<any>) => infer Q ? Q extends SelectQueryBuilder<any, any, infer QO> ? QO : Q extends InsertQueryBuilder<any, any, infer QO> ? QO : Q extends UpdateQueryBuilder<any, any, infer QO> ? QO : Q extends DeleteQueryBuilder<any, any, infer QO> ? QO : Q extends RawBuilder<infer RO> ? RO : never : never;
13
- export declare function parseCommonTableExpression(ctx: ParseContext, name: string, expression: CommonTableExpression<any>): CommonTableExpressionNode;
9
+ export declare type CommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB>) => CommonTableExpressionOutput<DB, CN>;
10
+ export declare type RecursiveCommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpressionName<CN>>>) => CommonTableExpressionOutput<DB, CN>;
11
+ export declare type QueryCreatorWithCommonTableExpression<DB, CN extends string, CTE> = QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpression<CTE>>>;
12
+ declare type CommonTableExpressionOutput<DB, CN extends string> = SelectQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | InsertQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | UpdateQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | DeleteQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | RawBuilder<ExtractRowFromCommonTableExpressionName<CN>>;
13
+ /**
14
+ * Given a common CommonTableExpression CTE extracts the row type from it.
15
+ *
16
+ * For example a CTE `(db) => db.selectFrom('person').select(['id', 'first_name'])`
17
+ * would result in `Pick<Person, 'id' | 'first_name'>`.
18
+ */
19
+ declare type ExtractRowFromCommonTableExpression<CTE> = CTE extends (creator: QueryCreator<any>) => infer Q ? Q extends SelectQueryBuilder<any, any, infer QO> ? QO : Q extends InsertQueryBuilder<any, any, infer QO> ? QO : Q extends UpdateQueryBuilder<any, any, infer QO> ? QO : Q extends DeleteQueryBuilder<any, any, infer QO> ? QO : Q extends RawBuilder<infer RO> ? RO : never : never;
20
+ /**
21
+ * Extracts 'person' from a string like 'person(id, first_name)'.
22
+ */
23
+ declare type ExtractTableFromCommonTableExpressionName<CN extends string> = CN extends `${infer TB}(${string})` ? TB : CN;
24
+ /**
25
+ * Parses a string like 'person(id, first_name)' into a type:
26
+ *
27
+ * {
28
+ * id: any,
29
+ * first_name: any
30
+ * }
31
+ *
32
+ */
33
+ declare type ExtractRowFromCommonTableExpressionName<CN extends string> = CN extends `${string}(${infer CL})` ? {
34
+ [C in ExtractColumnNamesFromColumnList<CL>]: any;
35
+ } : Record<string, any>;
36
+ /**
37
+ * Parses a string like 'id, first_name' into a type 'id' | 'first_name'
38
+ */
39
+ declare type ExtractColumnNamesFromColumnList<R extends string> = R extends `${infer C}, ${infer RS}` ? C | ExtractColumnNamesFromColumnList<RS> : R;
40
+ export declare function parseCommonTableExpression(ctx: ParseContext, name: string, expression: CommonTableExpression<any, any>): CommonTableExpressionNode;
14
41
  export {};
@@ -1,6 +1,17 @@
1
- import { IdentifierNode } from '../operation-node/identifier-node.js';
2
1
  import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
2
+ import { CommonTableExpressionNameNode } from '../operation-node/common-table-expression-name-node.js';
3
3
  export function parseCommonTableExpression(ctx, name, expression) {
4
4
  const builder = expression(ctx.createQueryCreator());
5
- return CommonTableExpressionNode.create(IdentifierNode.create(name), builder.toOperationNode());
5
+ return CommonTableExpressionNode.create(parseCommonTableExpressionName(name), builder.toOperationNode());
6
+ }
7
+ function parseCommonTableExpressionName(name) {
8
+ if (name.includes('(')) {
9
+ const parts = name.split(/[\(\)]/);
10
+ const table = parts[0];
11
+ const columns = parts[1].split(',').map((it) => it.trim());
12
+ return CommonTableExpressionNameNode.create(table, columns);
13
+ }
14
+ else {
15
+ return CommonTableExpressionNameNode.create(name);
16
+ }
6
17
  }
@@ -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
  */
@@ -79,6 +79,9 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
79
79
  if ('joins' in node && node.joins) {
80
80
  this.#collectTablesFromJoins(node.joins, tables);
81
81
  }
82
+ if ('with' in node && node.with) {
83
+ this.#removeCommonTableExpressionTables(node.with, tables);
84
+ }
82
85
  return tables;
83
86
  }
84
87
  #collectTablesFromTableExpressionNodes(nodes, tables) {
@@ -101,4 +104,9 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
101
104
  tables.add(table.table.identifier);
102
105
  }
103
106
  }
107
+ #removeCommonTableExpressionTables(node, tables) {
108
+ for (const expr of node.expressions) {
109
+ tables.delete(expr.name.table.table.identifier);
110
+ }
111
+ }
104
112
  }