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.
- package/README.md +115 -31
- package/dist/cjs/{introspection → dialect}/database-introspector.d.ts +0 -0
- package/dist/cjs/{introspection → dialect}/database-introspector.js +0 -0
- package/dist/cjs/dialect/dialect.d.ts +1 -1
- package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +2 -2
- package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -1
- package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +1 -1
- package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +1 -1
- package/dist/cjs/dialect/mysql/mysql-introspector.js +3 -3
- package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +2 -2
- package/dist/cjs/dialect/postgres/postgres-adapter.js +2 -1
- package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +1 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +1 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.js +3 -3
- package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +2 -2
- package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +3 -3
- package/dist/cjs/index.d.ts +7 -4
- package/dist/cjs/index.js +6 -3
- package/dist/cjs/kysely.d.ts +8 -40
- package/dist/cjs/kysely.js +8 -40
- package/dist/cjs/migration/file-migration-provider.d.ts +52 -0
- package/dist/cjs/migration/file-migration-provider.js +52 -0
- package/dist/cjs/migration/migrator.d.ts +234 -0
- package/dist/cjs/migration/migrator.js +417 -0
- package/dist/cjs/operation-node/check-constraint-node.d.ts +1 -1
- package/dist/cjs/operation-node/check-constraint-node.js +2 -3
- package/dist/cjs/operation-node/column-definition-node.d.ts +8 -7
- package/dist/cjs/operation-node/column-definition-node.js +0 -4
- package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/generated-node.d.ts +20 -0
- package/dist/cjs/operation-node/generated-node.js +31 -0
- package/dist/cjs/operation-node/on-conflict-node.d.ts +13 -2
- package/dist/cjs/operation-node/on-conflict-node.js +39 -1
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -2
- package/dist/cjs/operation-node/operation-node-transformer.js +13 -6
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -2
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -1
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/parser/insert-values-parser.d.ts +4 -4
- package/dist/cjs/parser/insert-values-parser.js +2 -3
- package/dist/cjs/parser/reference-parser.d.ts +4 -3
- package/dist/cjs/parser/select-parser.d.ts +10 -4
- package/dist/cjs/parser/update-set-parser.d.ts +2 -1
- package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +2 -2
- package/dist/cjs/query-builder/delete-query-builder.d.ts +0 -3
- package/dist/cjs/query-builder/insert-query-builder.d.ts +78 -94
- package/dist/cjs/query-builder/insert-query-builder.js +145 -15
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +686 -0
- package/dist/cjs/query-builder/on-conflict-builder.js +323 -0
- package/dist/cjs/query-builder/returning-interface.d.ts +0 -3
- package/dist/cjs/query-builder/update-query-builder.d.ts +0 -3
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -2
- package/dist/cjs/query-compiler/default-query-compiler.js +37 -8
- package/dist/cjs/query-creator.d.ts +0 -2
- package/dist/cjs/query-creator.js +0 -2
- package/dist/cjs/schema/alter-table-builder.d.ts +41 -9
- package/dist/cjs/schema/alter-table-builder.js +45 -9
- package/dist/cjs/schema/column-definition-builder.d.ts +40 -8
- package/dist/cjs/schema/column-definition-builder.js +21 -8
- package/dist/cjs/schema/create-index-builder.d.ts +3 -2
- package/dist/cjs/schema/create-index-builder.js +2 -2
- package/dist/cjs/schema/create-table-builder.d.ts +3 -2
- package/dist/cjs/schema/create-table-builder.js +2 -2
- package/dist/cjs/util/column-type.d.ts +165 -0
- package/dist/cjs/util/column-type.js +2 -0
- package/dist/cjs/util/private-symbols.d.ts +5 -0
- package/dist/cjs/util/private-symbols.js +8 -0
- package/dist/cjs/util/type-utils.d.ts +6 -42
- package/dist/esm/{introspection → dialect}/database-introspector.d.ts +0 -0
- package/dist/esm/{introspection → dialect}/database-introspector.js +0 -0
- package/dist/esm/dialect/dialect.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-adapter.d.ts +2 -2
- package/dist/esm/dialect/mysql/mysql-adapter.js +2 -1
- package/dist/esm/dialect/mysql/mysql-dialect.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-introspector.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-introspector.js +1 -1
- package/dist/esm/dialect/postgres/postgres-adapter.d.ts +2 -2
- package/dist/esm/dialect/postgres/postgres-adapter.js +2 -1
- package/dist/esm/dialect/postgres/postgres-dialect.d.ts +1 -1
- package/dist/esm/dialect/postgres/postgres-introspector.d.ts +1 -1
- package/dist/esm/dialect/postgres/postgres-introspector.js +1 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +2 -2
- package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +1 -1
- package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +1 -1
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -1
- package/dist/esm/index.d.ts +7 -4
- package/dist/esm/index.js +6 -3
- package/dist/esm/kysely.d.ts +8 -40
- package/dist/esm/kysely.js +8 -40
- package/dist/esm/migration/file-migration-provider.d.ts +52 -0
- package/dist/esm/migration/file-migration-provider.js +48 -0
- package/dist/esm/migration/migrator.d.ts +234 -0
- package/dist/esm/migration/migrator.js +413 -0
- package/dist/esm/operation-node/check-constraint-node.d.ts +1 -1
- package/dist/esm/operation-node/check-constraint-node.js +2 -3
- package/dist/esm/operation-node/column-definition-node.d.ts +8 -7
- package/dist/esm/operation-node/column-definition-node.js +0 -4
- package/dist/esm/operation-node/data-type-node.d.ts +1 -1
- package/dist/esm/operation-node/generated-node.d.ts +20 -0
- package/dist/esm/operation-node/generated-node.js +28 -0
- package/dist/esm/operation-node/on-conflict-node.d.ts +13 -2
- package/dist/esm/operation-node/on-conflict-node.js +39 -1
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -2
- package/dist/esm/operation-node/operation-node-transformer.js +13 -6
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -2
- package/dist/esm/operation-node/operation-node-visitor.js +1 -1
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/parser/insert-values-parser.d.ts +4 -4
- package/dist/esm/parser/insert-values-parser.js +2 -3
- package/dist/esm/parser/reference-parser.d.ts +4 -3
- package/dist/esm/parser/select-parser.d.ts +10 -4
- package/dist/esm/parser/update-set-parser.d.ts +2 -1
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +2 -2
- package/dist/esm/query-builder/delete-query-builder.d.ts +0 -3
- package/dist/esm/query-builder/insert-query-builder.d.ts +78 -94
- package/dist/esm/query-builder/insert-query-builder.js +145 -15
- package/dist/esm/query-builder/on-conflict-builder.d.ts +686 -0
- package/dist/esm/query-builder/on-conflict-builder.js +317 -0
- package/dist/esm/query-builder/returning-interface.d.ts +0 -3
- package/dist/esm/query-builder/update-query-builder.d.ts +0 -3
- package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -2
- package/dist/esm/query-compiler/default-query-compiler.js +37 -8
- package/dist/esm/query-creator.d.ts +0 -2
- package/dist/esm/query-creator.js +0 -2
- package/dist/esm/schema/alter-table-builder.d.ts +41 -9
- package/dist/esm/schema/alter-table-builder.js +45 -9
- package/dist/esm/schema/column-definition-builder.d.ts +40 -8
- package/dist/esm/schema/column-definition-builder.js +21 -8
- package/dist/esm/schema/create-index-builder.d.ts +3 -2
- package/dist/esm/schema/create-index-builder.js +2 -2
- package/dist/esm/schema/create-table-builder.d.ts +3 -2
- package/dist/esm/schema/create-table-builder.js +2 -2
- package/dist/esm/util/column-type.d.ts +165 -0
- package/dist/esm/util/column-type.js +1 -0
- package/dist/esm/util/private-symbols.d.ts +5 -0
- package/dist/esm/util/private-symbols.js +5 -0
- package/dist/esm/util/type-utils.d.ts +6 -42
- package/package.json +1 -1
- package/dist/cjs/migration/migration.d.ts +0 -66
- package/dist/cjs/migration/migration.js +0 -187
- package/dist/cjs/operation-node/generated-always-as-node.d.ts +0 -16
- package/dist/cjs/operation-node/generated-always-as-node.js +0 -25
- package/dist/cjs/parser/on-conflict-parser.d.ts +0 -10
- package/dist/cjs/parser/on-conflict-parser.js +0 -35
- package/dist/cjs/util/generated-placeholder.d.ts +0 -3
- package/dist/cjs/util/generated-placeholder.js +0 -11
- package/dist/esm/migration/migration.d.ts +0 -66
- package/dist/esm/migration/migration.js +0 -183
- package/dist/esm/operation-node/generated-always-as-node.d.ts +0 -16
- package/dist/esm/operation-node/generated-always-as-node.js +0 -22
- package/dist/esm/parser/on-conflict-parser.d.ts +0 -10
- package/dist/esm/parser/on-conflict-parser.js +0 -30
- package/dist/esm/util/generated-placeholder.d.ts +0 -3
- package/dist/esm/util/generated-placeholder.js +0 -7
|
@@ -96,7 +96,7 @@ class OperationNodeTransformer {
|
|
|
96
96
|
UnionNode: this.transformUnion.bind(this),
|
|
97
97
|
CreateViewNode: this.transformCreateView.bind(this),
|
|
98
98
|
DropViewNode: this.transformDropView.bind(this),
|
|
99
|
-
|
|
99
|
+
GeneratedNode: this.transformGenerated.bind(this),
|
|
100
100
|
DefaultValueNode: this.transformDefaultValue.bind(this),
|
|
101
101
|
OnNode: this.transformOn.bind(this),
|
|
102
102
|
ValuesNode: this.transformValues.bind(this),
|
|
@@ -284,10 +284,11 @@ class OperationNodeTransformer {
|
|
|
284
284
|
primaryKey: node.primaryKey,
|
|
285
285
|
autoIncrement: node.autoIncrement,
|
|
286
286
|
unique: node.unique,
|
|
287
|
-
|
|
287
|
+
notNull: node.notNull,
|
|
288
|
+
unsigned: node.unsigned,
|
|
288
289
|
defaultTo: this.transformNode(node.defaultTo),
|
|
289
290
|
check: this.transformNode(node.check),
|
|
290
|
-
|
|
291
|
+
generated: this.transformNode(node.generated),
|
|
291
292
|
};
|
|
292
293
|
}
|
|
293
294
|
transformAddColumn(node) {
|
|
@@ -363,7 +364,10 @@ class OperationNodeTransformer {
|
|
|
363
364
|
kind: 'OnConflictNode',
|
|
364
365
|
columns: this.transformNodeList(node.columns),
|
|
365
366
|
constraint: this.transformNode(node.constraint),
|
|
367
|
+
indexExpression: this.transformNode(node.indexExpression),
|
|
368
|
+
indexWhere: this.transformNode(node.indexWhere),
|
|
366
369
|
updates: this.transformNodeList(node.updates),
|
|
370
|
+
updateWhere: this.transformNode(node.updateWhere),
|
|
367
371
|
doNothing: node.doNothing,
|
|
368
372
|
};
|
|
369
373
|
}
|
|
@@ -562,11 +566,14 @@ class OperationNodeTransformer {
|
|
|
562
566
|
materialized: node.materialized,
|
|
563
567
|
};
|
|
564
568
|
}
|
|
565
|
-
|
|
569
|
+
transformGenerated(node) {
|
|
566
570
|
return {
|
|
567
|
-
kind: '
|
|
568
|
-
|
|
571
|
+
kind: 'GeneratedNode',
|
|
572
|
+
byDefault: node.byDefault,
|
|
573
|
+
always: node.always,
|
|
574
|
+
identity: node.identity,
|
|
569
575
|
stored: node.stored,
|
|
576
|
+
expression: this.transformNode(node.expression),
|
|
570
577
|
};
|
|
571
578
|
}
|
|
572
579
|
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 {
|
|
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
|
|
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;
|
|
@@ -70,7 +70,7 @@ class OperationNodeVisitor {
|
|
|
70
70
|
UnionNode: this.visitUnion.bind(this),
|
|
71
71
|
CreateViewNode: this.visitCreateView.bind(this),
|
|
72
72
|
DropViewNode: this.visitDropView.bind(this),
|
|
73
|
-
|
|
73
|
+
GeneratedNode: this.visitGenerated.bind(this),
|
|
74
74
|
DefaultValueNode: this.visitDefaultValue.bind(this),
|
|
75
75
|
OnNode: this.visitOn.bind(this),
|
|
76
76
|
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' | '
|
|
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
|
|
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 {};
|
|
@@ -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) &&
|
|
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
|
|
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,
|
|
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
|
|
16
|
-
declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string
|
|
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,
|
|
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 &
|
|
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
|
|
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
|
|
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 `
|
|
16
|
-
* `
|
|
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
|
* })
|
|
@@ -3,18 +3,18 @@ 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 {
|
|
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
18
|
export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
|
|
19
19
|
#private;
|
|
20
20
|
constructor(props: InsertQueryBuilderProps);
|
|
@@ -23,13 +23,10 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
23
23
|
*
|
|
24
24
|
* This method takes an object whose keys are column names and values are
|
|
25
25
|
* values to insert. In addition to the column's type, the values can be
|
|
26
|
-
* {@link Kysely.raw | raw} instances
|
|
27
|
-
* {@link Kysely.generated | generated} placeholder.
|
|
26
|
+
* {@link Kysely.raw | raw} instances or select queries.
|
|
28
27
|
*
|
|
29
|
-
* You must provide all
|
|
30
|
-
*
|
|
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.
|
|
28
|
+
* You must provide all fields you haven't explicitly marked as nullable
|
|
29
|
+
* or optional using {@link Generated} or {@link ColumnType}.
|
|
33
30
|
*
|
|
34
31
|
* The return value of an `insert` query is an instance of {@link InsertResult}. The
|
|
35
32
|
* {@link InsertResult.insertId | insertId} field holds the auto incremented primary
|
|
@@ -48,7 +45,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
48
45
|
* const id = await db
|
|
49
46
|
* .insertInto('person')
|
|
50
47
|
* .values({
|
|
51
|
-
* id: db.generated,
|
|
52
48
|
* first_name: 'Jennifer',
|
|
53
49
|
* last_name: 'Aniston'
|
|
54
50
|
* })
|
|
@@ -70,11 +66,9 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
70
66
|
* await db
|
|
71
67
|
* .insertInto('person')
|
|
72
68
|
* .values([{
|
|
73
|
-
* id: db.generated,
|
|
74
69
|
* first_name: 'Jennifer',
|
|
75
70
|
* last_name: 'Aniston'
|
|
76
71
|
* }, {
|
|
77
|
-
* id: db.generated,
|
|
78
72
|
* first_name: 'Arnold',
|
|
79
73
|
* last_name: 'Schwarzenegger',
|
|
80
74
|
* }])
|
|
@@ -95,7 +89,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
95
89
|
* const row = await db
|
|
96
90
|
* .insertInto('person')
|
|
97
91
|
* .values({
|
|
98
|
-
* id: db.generated,
|
|
99
92
|
* first_name: 'Jennifer',
|
|
100
93
|
* last_name: 'Aniston'
|
|
101
94
|
* })
|
|
@@ -118,7 +111,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
118
111
|
* const result = await db
|
|
119
112
|
* .insertInto('person')
|
|
120
113
|
* .values({
|
|
121
|
-
* id: db.generated,
|
|
122
114
|
* first_name: 'Jennifer',
|
|
123
115
|
* last_name: db.raw('? || ?', ['Ani', 'ston']),
|
|
124
116
|
* age: db.selectFrom('person').select(raw('avg(age)')),
|
|
@@ -144,7 +136,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
144
136
|
* .select(['id', 'first_name', 'gender'])
|
|
145
137
|
* .limit(1)
|
|
146
138
|
* ).insertInto('pet').values({
|
|
147
|
-
* id: db.generated,
|
|
148
139
|
* owner_id: (eb) => eb.selectFrom('jennifer').select('id'),
|
|
149
140
|
* name: (eb) => eb.selectFrom('jennifer').select('first_name'),
|
|
150
141
|
* species: 'cat',
|
|
@@ -196,21 +187,32 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
196
187
|
*/
|
|
197
188
|
expression(expression: ComplexExpression<DB, TB>): InsertQueryBuilder<DB, TB, O>;
|
|
198
189
|
/**
|
|
199
|
-
*
|
|
200
|
-
* argument conflicts with the current rows in the database. The
|
|
201
|
-
* default behavior without this method call is to throw an error.
|
|
190
|
+
* Changes an `insert into` query to an `insert ignore into` query.
|
|
202
191
|
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
* and
|
|
192
|
+
* If you use the ignore modifier, ignorable errors that occur while executing the
|
|
193
|
+
* insert statement are ignored. For example, without ignore, a row that duplicates
|
|
194
|
+
* an existing unique index or primary key value in the table causes a duplicate-key
|
|
195
|
+
* error and the statement is aborted. With ignore, the row is discarded and no error
|
|
196
|
+
* occurs.
|
|
207
197
|
*
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
* similar results.
|
|
198
|
+
* This is only supported on some dialects like MySQL. On most dialects you should
|
|
199
|
+
* use the {@link onConflict} method.
|
|
211
200
|
*
|
|
212
|
-
*
|
|
213
|
-
*
|
|
201
|
+
* ### Examples
|
|
202
|
+
*
|
|
203
|
+
* ```ts
|
|
204
|
+
* await db.insertInto('person')
|
|
205
|
+
* .ignore()
|
|
206
|
+
* .values(values)
|
|
207
|
+
* .execute()
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
ignore(): InsertQueryBuilder<DB, TB, O>;
|
|
211
|
+
/**
|
|
212
|
+
* Adds an `on conflict` clause to the query.
|
|
213
|
+
*
|
|
214
|
+
* `on conflict` is only supported by some dialects like PostgreSQL and SQLite. On MySQL
|
|
215
|
+
* you can use {@link ignore} and {@link onDuplicateKeyUpdate} to achieve similar results.
|
|
214
216
|
*
|
|
215
217
|
* ### Examples
|
|
216
218
|
*
|
|
@@ -218,11 +220,13 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
218
220
|
* await db
|
|
219
221
|
* .insertInto('pet')
|
|
220
222
|
* .values({
|
|
221
|
-
* id: db.generated,
|
|
222
223
|
* name: 'Catto',
|
|
223
224
|
* species: 'cat',
|
|
224
225
|
* })
|
|
225
|
-
* .
|
|
226
|
+
* .onConflict((oc) => oc
|
|
227
|
+
* .column('name')
|
|
228
|
+
* .doUpdateSet({ species: 'hamster' })
|
|
229
|
+
* )
|
|
226
230
|
* .execute()
|
|
227
231
|
* ```
|
|
228
232
|
*
|
|
@@ -231,22 +235,24 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
231
235
|
* ```sql
|
|
232
236
|
* insert into "pet" ("name", "species")
|
|
233
237
|
* values ($1, $2)
|
|
234
|
-
* on conflict ("name")
|
|
238
|
+
* on conflict ("name")
|
|
239
|
+
* do update set "species" = $3
|
|
235
240
|
* ```
|
|
236
241
|
*
|
|
237
|
-
* You can provide the name of the constraint instead of a column name
|
|
242
|
+
* You can provide the name of the constraint instead of a column name:
|
|
238
243
|
*
|
|
239
244
|
* ```ts
|
|
240
245
|
* await db
|
|
241
246
|
* .insertInto('pet')
|
|
242
247
|
* .values({
|
|
243
|
-
* id: db.generated,
|
|
244
248
|
* name: 'Catto',
|
|
245
249
|
* species: 'cat',
|
|
246
250
|
* })
|
|
247
|
-
* .
|
|
248
|
-
* constraint
|
|
249
|
-
*
|
|
251
|
+
* .onConflict((oc) => oc
|
|
252
|
+
* .constraint('pet_name_key')
|
|
253
|
+
* .doUpdateSet({ species: 'hamster' })
|
|
254
|
+
* )
|
|
255
|
+
* .execute()
|
|
250
256
|
* .execute()
|
|
251
257
|
* ```
|
|
252
258
|
*
|
|
@@ -256,66 +262,49 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
256
262
|
* insert into "pet" ("name", "species")
|
|
257
263
|
* values ($1, $2)
|
|
258
264
|
* on conflict on constraint "pet_name_key"
|
|
259
|
-
* do
|
|
265
|
+
* do update set "species" = $3
|
|
260
266
|
* ```
|
|
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
267
|
*
|
|
268
|
-
*
|
|
269
|
-
*
|
|
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
|
|
268
|
+
* You can also specify an expression as the conflict target in case
|
|
269
|
+
* the unique index is an expression index:
|
|
278
270
|
*
|
|
279
271
|
* ```ts
|
|
280
|
-
* await db
|
|
281
|
-
* .
|
|
282
|
-
* .values(
|
|
272
|
+
* await db
|
|
273
|
+
* .insertInto('pet')
|
|
274
|
+
* .values({
|
|
275
|
+
* name: 'Catto',
|
|
276
|
+
* species: 'cat',
|
|
277
|
+
* })
|
|
278
|
+
* .onConflict((oc) => oc
|
|
279
|
+
* .expression(db.raw('lower(name)'))
|
|
280
|
+
* .doUpdateSet({ species: 'hamster' })
|
|
281
|
+
* )
|
|
283
282
|
* .execute()
|
|
284
283
|
* ```
|
|
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
284
|
*
|
|
302
|
-
* The
|
|
303
|
-
* like PostgreSQL and SQLite. On MySQL you should use the {@link onDuplicateKeyUpdate}
|
|
304
|
-
* method instead.
|
|
285
|
+
* The generated SQL (PostgreSQL):
|
|
305
286
|
*
|
|
306
|
-
*
|
|
287
|
+
* ```sql
|
|
288
|
+
* insert into "pet" ("name", "species")
|
|
289
|
+
* values ($1, $2)
|
|
290
|
+
* on conflict (lower(name))
|
|
291
|
+
* do update set "species" = $3
|
|
292
|
+
* ```
|
|
307
293
|
*
|
|
308
|
-
*
|
|
294
|
+
* You can add a filter for the update statement like this:
|
|
309
295
|
*
|
|
310
296
|
* ```ts
|
|
311
297
|
* await db
|
|
312
298
|
* .insertInto('pet')
|
|
313
299
|
* .values({
|
|
314
|
-
* id: db.generated,
|
|
315
300
|
* name: 'Catto',
|
|
316
301
|
* species: 'cat',
|
|
317
302
|
* })
|
|
318
|
-
* .
|
|
303
|
+
* .onConflict((oc) => oc
|
|
304
|
+
* .column('name')
|
|
305
|
+
* .doUpdateSet({ species: 'hamster' })
|
|
306
|
+
* .where('excluded.name', '!=', 'Catto'')
|
|
307
|
+
* )
|
|
319
308
|
* .execute()
|
|
320
309
|
* ```
|
|
321
310
|
*
|
|
@@ -324,22 +313,23 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
324
313
|
* ```sql
|
|
325
314
|
* insert into "pet" ("name", "species")
|
|
326
315
|
* values ($1, $2)
|
|
327
|
-
* on conflict ("name")
|
|
316
|
+
* on conflict ("name")
|
|
317
|
+
* do update set "species" = $3
|
|
318
|
+
* where "excluded"."name" != $4
|
|
328
319
|
* ```
|
|
329
320
|
*
|
|
330
|
-
* You can
|
|
321
|
+
* You can create an `on conflict do nothing` clauses like this:
|
|
331
322
|
*
|
|
332
323
|
* ```ts
|
|
333
324
|
* await db
|
|
334
325
|
* .insertInto('pet')
|
|
335
326
|
* .values({
|
|
336
|
-
* id: db.generated,
|
|
337
327
|
* name: 'Catto',
|
|
338
328
|
* species: 'cat',
|
|
339
329
|
* })
|
|
340
|
-
* .
|
|
341
|
-
*
|
|
342
|
-
*
|
|
330
|
+
* .onConflict((oc) => oc
|
|
331
|
+
* .column('name')
|
|
332
|
+
* .doNothing()
|
|
343
333
|
* )
|
|
344
334
|
* .execute()
|
|
345
335
|
* ```
|
|
@@ -349,13 +339,10 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
349
339
|
* ```sql
|
|
350
340
|
* insert into "pet" ("name", "species")
|
|
351
341
|
* values ($1, $2)
|
|
352
|
-
* on conflict
|
|
353
|
-
* do update set "species" = $3
|
|
342
|
+
* on conflict ("name") do nothing
|
|
354
343
|
* ```
|
|
355
344
|
*/
|
|
356
|
-
|
|
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>;
|
|
345
|
+
onConflict(callback: (builder: OnConflictBuilder<DB, TB>) => OnConflictDoNothingBuilder<DB, TB> | OnConflictUpdateBuilder<DB, TB>): InsertQueryBuilder<DB, TB, O>;
|
|
359
346
|
/**
|
|
360
347
|
* Adds `on duplicate key update` to the query.
|
|
361
348
|
*
|
|
@@ -363,7 +350,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
363
350
|
* a duplicate value in a unique index or primary key, an update of the old row occurs.
|
|
364
351
|
*
|
|
365
352
|
* This is only implemented by some dialects like MySQL. On most dialects you should
|
|
366
|
-
* use {@link
|
|
353
|
+
* use {@link onConflict} instead.
|
|
367
354
|
*
|
|
368
355
|
* ### Examples
|
|
369
356
|
*
|
|
@@ -395,7 +382,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
395
382
|
* const { id } = await db
|
|
396
383
|
* .insertInto('person')
|
|
397
384
|
* .values({
|
|
398
|
-
* id: db.generated,
|
|
399
385
|
* first_name: 'Jennifer',
|
|
400
386
|
* last_name: 'Aniston'
|
|
401
387
|
* })
|
|
@@ -409,7 +395,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
409
395
|
* const { id, first_name } = await db
|
|
410
396
|
* .insertInto('person')
|
|
411
397
|
* .values({
|
|
412
|
-
* id: db.generated,
|
|
413
398
|
* first_name: 'Jennifer',
|
|
414
399
|
* last_name: 'Aniston'
|
|
415
400
|
* })
|
|
@@ -425,7 +410,6 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
425
410
|
* const { id, full_name, first_pet_id } = await db
|
|
426
411
|
* .insertInto('person')
|
|
427
412
|
* .values({
|
|
428
|
-
* id: db.generated,
|
|
429
413
|
* first_name: 'Jennifer',
|
|
430
414
|
* last_name: 'Aniston'
|
|
431
415
|
* })
|
|
@@ -456,9 +440,9 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
456
440
|
* .selectAll()
|
|
457
441
|
* .call((qb) => {
|
|
458
442
|
* if (something) {
|
|
459
|
-
* return qb.
|
|
443
|
+
* return qb.onConflict((oc) => oc.column('something').doNothing())
|
|
460
444
|
* } else {
|
|
461
|
-
* return qb.
|
|
445
|
+
* return qb.onConflict((oc) => oc.column('something_else').doNothing())
|
|
462
446
|
* }
|
|
463
447
|
* })
|
|
464
448
|
* .execute()
|