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
@@ -4,7 +4,6 @@ exports.parseInsertObjectOrList = void 0;
4
4
  const column_node_js_1 = require("../operation-node/column-node.js");
5
5
  const primitive_value_list_node_js_1 = require("../operation-node/primitive-value-list-node.js");
6
6
  const value_list_node_js_1 = require("../operation-node/value-list-node.js");
7
- const generated_placeholder_js_1 = require("../util/generated-placeholder.js");
8
7
  const object_utils_js_1 = require("../util/object-utils.js");
9
8
  const value_parser_js_1 = require("./value-parser.js");
10
9
  const values_node_js_1 = require("../operation-node/values-node.js");
@@ -24,7 +23,7 @@ function parseColumnNamesAndIndexes(rows) {
24
23
  for (const row of rows) {
25
24
  const cols = Object.keys(row);
26
25
  for (const col of cols) {
27
- if (!columns.has(col) && !(0, generated_placeholder_js_1.isGeneratedPlaceholder)(row[col])) {
26
+ if (!columns.has(col) && row[col] !== undefined) {
28
27
  columns.set(col, columns.size);
29
28
  }
30
29
  }
@@ -37,7 +36,7 @@ function parseRowValues(ctx, row, columns) {
37
36
  for (const col of rowColumns) {
38
37
  const columnIdx = columns.get(col);
39
38
  const value = row[col];
40
- if (columnIdx !== undefined && !(0, generated_placeholder_js_1.isGeneratedPlaceholder)(value)) {
39
+ if (columnIdx !== undefined) {
41
40
  rowValues[columnIdx] = value;
42
41
  }
43
42
  }
@@ -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
  *
@@ -3,18 +3,19 @@ import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
3
  import { SelectExpression } from '../parser/select-parser.js';
4
4
  import { InsertObject } from '../parser/insert-values-parser.js';
5
5
  import { InsertQueryNode } from '../operation-node/insert-query-node.js';
6
- import { AnyColumn, SingleResultType } from '../util/type-utils.js';
6
+ import { SingleResultType } from '../util/type-utils.js';
7
7
  import { MutationObject } from '../parser/update-set-parser.js';
8
8
  import { Compilable } from '../util/compilable.js';
9
9
  import { QueryExecutor } from '../query-executor/query-executor.js';
10
10
  import { QueryId } from '../util/query-id.js';
11
- import { OnConflictConstraintTarget } from '../parser/on-conflict-parser.js';
12
11
  import { ParseContext } from '../parser/parse-context.js';
13
12
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
14
13
  import { ReturningRow } from '../parser/returning-parser.js';
15
14
  import { NoResultErrorConstructor } from './no-result-error.js';
16
15
  import { ComplexExpression } from '../parser/complex-expression-parser.js';
17
16
  import { ReturningInterface } from './returning-interface.js';
17
+ import { OnConflictBuilder, OnConflictDoNothingBuilder, OnConflictUpdateBuilder } from './on-conflict-builder.js';
18
+ import { Selectable } from '../util/column-type.js';
18
19
  export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
19
20
  #private;
20
21
  constructor(props: InsertQueryBuilderProps);
@@ -23,13 +24,10 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
23
24
  *
24
25
  * This method takes an object whose keys are column names and values are
25
26
  * values to insert. In addition to the column's type, the values can be
26
- * {@link Kysely.raw | raw} instances, select queries or the
27
- * {@link Kysely.generated | generated} placeholder.
27
+ * {@link Kysely.raw | raw} instances or select queries.
28
28
  *
29
- * You must provide all values defined by the interface of the table you
30
- * are inserting into. Values that are generated by the database like auto incrementing
31
- * identifiers can be marked with the {@link Kysely.generated} placeholder unless you
32
- * want to insert a specific value instead of the generated default.
29
+ * You must provide all fields you haven't explicitly marked as nullable
30
+ * or optional using {@link Generated} or {@link ColumnType}.
33
31
  *
34
32
  * The return value of an `insert` query is an instance of {@link InsertResult}. The
35
33
  * {@link InsertResult.insertId | insertId} field holds the auto incremented primary
@@ -48,7 +46,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
48
46
  * const id = await db
49
47
  * .insertInto('person')
50
48
  * .values({
51
- * id: db.generated,
52
49
  * first_name: 'Jennifer',
53
50
  * last_name: 'Aniston'
54
51
  * })
@@ -70,11 +67,9 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
70
67
  * await db
71
68
  * .insertInto('person')
72
69
  * .values([{
73
- * id: db.generated,
74
70
  * first_name: 'Jennifer',
75
71
  * last_name: 'Aniston'
76
72
  * }, {
77
- * id: db.generated,
78
73
  * first_name: 'Arnold',
79
74
  * last_name: 'Schwarzenegger',
80
75
  * }])
@@ -95,7 +90,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
95
90
  * const row = await db
96
91
  * .insertInto('person')
97
92
  * .values({
98
- * id: db.generated,
99
93
  * first_name: 'Jennifer',
100
94
  * last_name: 'Aniston'
101
95
  * })
@@ -118,7 +112,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
118
112
  * const result = await db
119
113
  * .insertInto('person')
120
114
  * .values({
121
- * id: db.generated,
122
115
  * first_name: 'Jennifer',
123
116
  * last_name: db.raw('? || ?', ['Ani', 'ston']),
124
117
  * age: db.selectFrom('person').select(raw('avg(age)')),
@@ -144,7 +137,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
144
137
  * .select(['id', 'first_name', 'gender'])
145
138
  * .limit(1)
146
139
  * ).insertInto('pet').values({
147
- * id: db.generated,
148
140
  * owner_id: (eb) => eb.selectFrom('jennifer').select('id'),
149
141
  * name: (eb) => eb.selectFrom('jennifer').select('first_name'),
150
142
  * species: 'cat',
@@ -196,21 +188,32 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
196
188
  */
197
189
  expression(expression: ComplexExpression<DB, TB>): InsertQueryBuilder<DB, TB, O>;
198
190
  /**
199
- * Ignores the insert if the column or constraint given as the first
200
- * argument conflicts with the current rows in the database. The
201
- * default behavior without this method call is to throw an error.
191
+ * Changes an `insert into` query to an `insert ignore into` query.
202
192
  *
203
- * For example if a table has a field `name` that has a unique constraint
204
- * and you try to insert a row with a `name` that already exists in the
205
- * database, calling `onConflictDoNothing('name')` will ignore the conflict
206
- * and do nothing. By default the query would throw.
193
+ * If you use the ignore modifier, ignorable errors that occur while executing the
194
+ * insert statement are ignored. For example, without ignore, a row that duplicates
195
+ * an existing unique index or primary key value in the table causes a duplicate-key
196
+ * error and the statement is aborted. With ignore, the row is discarded and no error
197
+ * occurs.
207
198
  *
208
- * Only some dialects like PostgreSQL and SQLite implement the `on conflict`
209
- * statement. On MySQL you should use the {@link ignore} method to achieve
210
- * similar results.
199
+ * This is only supported on some dialects like MySQL. On most dialects you should
200
+ * use the {@link onConflict} method.
211
201
  *
212
- * Also see the {@link onConflictUpdate} method if you want to perform an
213
- * update in case of a conflict (upsert).
202
+ * ### Examples
203
+ *
204
+ * ```ts
205
+ * await db.insertInto('person')
206
+ * .ignore()
207
+ * .values(values)
208
+ * .execute()
209
+ * ```
210
+ */
211
+ ignore(): InsertQueryBuilder<DB, TB, O>;
212
+ /**
213
+ * Adds an `on conflict` clause to the query.
214
+ *
215
+ * `on conflict` is only supported by some dialects like PostgreSQL and SQLite. On MySQL
216
+ * you can use {@link ignore} and {@link onDuplicateKeyUpdate} to achieve similar results.
214
217
  *
215
218
  * ### Examples
216
219
  *
@@ -218,11 +221,13 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
218
221
  * await db
219
222
  * .insertInto('pet')
220
223
  * .values({
221
- * id: db.generated,
222
224
  * name: 'Catto',
223
225
  * species: 'cat',
224
226
  * })
225
- * .onConflictDoNothing('name')
227
+ * .onConflict((oc) => oc
228
+ * .column('name')
229
+ * .doUpdateSet({ species: 'hamster' })
230
+ * )
226
231
  * .execute()
227
232
  * ```
228
233
  *
@@ -231,22 +236,24 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
231
236
  * ```sql
232
237
  * insert into "pet" ("name", "species")
233
238
  * values ($1, $2)
234
- * on conflict ("name") do nothing
239
+ * on conflict ("name")
240
+ * do update set "species" = $3
235
241
  * ```
236
242
  *
237
- * You can provide the name of the constraint instead of a column name
243
+ * You can provide the name of the constraint instead of a column name:
238
244
  *
239
245
  * ```ts
240
246
  * await db
241
247
  * .insertInto('pet')
242
248
  * .values({
243
- * id: db.generated,
244
249
  * name: 'Catto',
245
250
  * species: 'cat',
246
251
  * })
247
- * .onConflictDoNothing({
248
- * constraint: 'pet_name_key'
249
- * })
252
+ * .onConflict((oc) => oc
253
+ * .constraint('pet_name_key')
254
+ * .doUpdateSet({ species: 'hamster' })
255
+ * )
256
+ * .execute()
250
257
  * .execute()
251
258
  * ```
252
259
  *
@@ -256,66 +263,49 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
256
263
  * insert into "pet" ("name", "species")
257
264
  * values ($1, $2)
258
265
  * on conflict on constraint "pet_name_key"
259
- * do nothing
266
+ * do update set "species" = $3
260
267
  * ```
261
- */
262
- onConflictDoNothing(column: AnyColumn<DB, TB>): InsertQueryBuilder<DB, TB, O>;
263
- onConflictDoNothing(columns: ReadonlyArray<AnyColumn<DB, TB>>): InsertQueryBuilder<DB, TB, O>;
264
- onConflictDoNothing(constraint: OnConflictConstraintTarget): InsertQueryBuilder<DB, TB, O>;
265
- /**
266
- * Changes an `insert into` query to an `insert ignore into` query.
267
268
  *
268
- * If you use the ignore modifier, ignorable errors that occur while executing the
269
- * insert statement are ignored. For example, without ignore, a row that duplicates
270
- * an existing unique index or primary key value in the table causes a duplicate-key
271
- * error and the statement is aborted. With ignore, the row is discarded and no error
272
- * occurs.
273
- *
274
- * This is only supported on some dialects like MySQL. On most dialects you should
275
- * use the {@link onConflictDoNothing} method.
276
- *
277
- * ### Examples
269
+ * You can also specify an expression as the conflict target in case
270
+ * the unique index is an expression index:
278
271
  *
279
272
  * ```ts
280
- * await db.insertInto('person')
281
- * .ignore()
282
- * .values(values)
273
+ * await db
274
+ * .insertInto('pet')
275
+ * .values({
276
+ * name: 'Catto',
277
+ * species: 'cat',
278
+ * })
279
+ * .onConflict((oc) => oc
280
+ * .expression(db.raw('lower(name)'))
281
+ * .doUpdateSet({ species: 'hamster' })
282
+ * )
283
283
  * .execute()
284
284
  * ```
285
- */
286
- ignore(): InsertQueryBuilder<DB, TB, O>;
287
- /**
288
- * Ignores an insert if the column or constraint given as the first
289
- * argument conflicts with the current rows in the database and
290
- * performs an update on the conflicting row instead. This method
291
- * can be used to implement an upsert operation.
292
- *
293
- * For example if a table has a field `name` that has a unique constraint
294
- * and you try to insert a row with a `name` that already exists in the
295
- * database, calling `onConfictUpdate('name', { species: 'hamster' })`
296
- * will set the conflicting row's `species` field to value `'hamster'`.
297
- * By default the query would throw.
298
- *
299
- * The second argument (updates) can be anything the {@link UpdateQueryBuilder.set | set}
300
- * method accepts.
301
285
  *
302
- * The `on conflict do update` statement is only implemented by some dialects
303
- * like PostgreSQL and SQLite. On MySQL you should use the {@link onDuplicateKeyUpdate}
304
- * method instead.
286
+ * The generated SQL (PostgreSQL):
305
287
  *
306
- * Also see the {@link onConflictDoNothing} method.
288
+ * ```sql
289
+ * insert into "pet" ("name", "species")
290
+ * values ($1, $2)
291
+ * on conflict (lower(name))
292
+ * do update set "species" = $3
293
+ * ```
307
294
  *
308
- * ### Examples
295
+ * You can add a filter for the update statement like this:
309
296
  *
310
297
  * ```ts
311
298
  * await db
312
299
  * .insertInto('pet')
313
300
  * .values({
314
- * id: db.generated,
315
301
  * name: 'Catto',
316
302
  * species: 'cat',
317
303
  * })
318
- * .onConflictUpdate('name', { species: 'hamster' })
304
+ * .onConflict((oc) => oc
305
+ * .column('name')
306
+ * .doUpdateSet({ species: 'hamster' })
307
+ * .where('excluded.name', '!=', 'Catto'')
308
+ * )
319
309
  * .execute()
320
310
  * ```
321
311
  *
@@ -324,22 +314,23 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
324
314
  * ```sql
325
315
  * insert into "pet" ("name", "species")
326
316
  * values ($1, $2)
327
- * on conflict ("name") do update set "species" = $3
317
+ * on conflict ("name")
318
+ * do update set "species" = $3
319
+ * where "excluded"."name" != $4
328
320
  * ```
329
321
  *
330
- * You can provied the name of the constraint instead of a column name
322
+ * You can create an `on conflict do nothing` clauses like this:
331
323
  *
332
324
  * ```ts
333
325
  * await db
334
326
  * .insertInto('pet')
335
327
  * .values({
336
- * id: db.generated,
337
328
  * name: 'Catto',
338
329
  * species: 'cat',
339
330
  * })
340
- * .onConflictUpdate(
341
- * { constraint: 'pet_name_key' },
342
- * { species: 'hamster' }
331
+ * .onConflict((oc) => oc
332
+ * .column('name')
333
+ * .doNothing()
343
334
  * )
344
335
  * .execute()
345
336
  * ```
@@ -349,13 +340,10 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
349
340
  * ```sql
350
341
  * insert into "pet" ("name", "species")
351
342
  * values ($1, $2)
352
- * on conflict on constraint "pet_name_key"
353
- * do update set "species" = $3
343
+ * on conflict ("name") do nothing
354
344
  * ```
355
345
  */
356
- onConflictUpdate(column: AnyColumn<DB, TB>, updates: MutationObject<DB, TB>): InsertQueryBuilder<DB, TB, O>;
357
- onConflictUpdate(columns: ReadonlyArray<AnyColumn<DB, TB>>, updates: MutationObject<DB, TB>): InsertQueryBuilder<DB, TB, O>;
358
- onConflictUpdate(constraint: OnConflictConstraintTarget, updates: MutationObject<DB, TB>): InsertQueryBuilder<DB, TB, O>;
346
+ onConflict(callback: (builder: OnConflictBuilder<DB, TB>) => OnConflictDoNothingBuilder<DB, TB> | OnConflictUpdateBuilder<DB, TB>): InsertQueryBuilder<DB, TB, O>;
359
347
  /**
360
348
  * Adds `on duplicate key update` to the query.
361
349
  *
@@ -363,7 +351,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
363
351
  * a duplicate value in a unique index or primary key, an update of the old row occurs.
364
352
  *
365
353
  * This is only implemented by some dialects like MySQL. On most dialects you should
366
- * use {@link onConflictUpdate} instead.
354
+ * use {@link onConflict} instead.
367
355
  *
368
356
  * ### Examples
369
357
  *
@@ -395,7 +383,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
395
383
  * const { id } = await db
396
384
  * .insertInto('person')
397
385
  * .values({
398
- * id: db.generated,
399
386
  * first_name: 'Jennifer',
400
387
  * last_name: 'Aniston'
401
388
  * })
@@ -409,7 +396,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
409
396
  * const { id, first_name } = await db
410
397
  * .insertInto('person')
411
398
  * .values({
412
- * id: db.generated,
413
399
  * first_name: 'Jennifer',
414
400
  * last_name: 'Aniston'
415
401
  * })
@@ -425,7 +411,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
425
411
  * const { id, full_name, first_pet_id } = await db
426
412
  * .insertInto('person')
427
413
  * .values({
428
- * id: db.generated,
429
414
  * first_name: 'Jennifer',
430
415
  * last_name: 'Aniston'
431
416
  * })
@@ -443,7 +428,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
443
428
  * Adds a `returning *` to an insert/update/delete query on databases
444
429
  * that support `returning` such as PostgreSQL.
445
430
  */
446
- returningAll(): InsertQueryBuilder<DB, TB, DB[TB]>;
431
+ returningAll(): InsertQueryBuilder<DB, TB, Selectable<DB[TB]>>;
447
432
  /**
448
433
  * Simply calls the given function passing `this` as the only argument.
449
434
  *
@@ -456,9 +441,9 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
456
441
  * .selectAll()
457
442
  * .call((qb) => {
458
443
  * if (something) {
459
- * return qb.onConflictDoNothing('something')
444
+ * return qb.onConflict((oc) => oc.column('something').doNothing())
460
445
  * } else {
461
- * return qb.onConflictDoNothing('something_else')
446
+ * return qb.onConflict((oc) => oc.column('something_else').doNothing())
462
447
  * }
463
448
  * })
464
449
  * .execute()