kysely 0.27.3 → 0.27.4
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/CONTRIBUTING.md +1 -1
- package/README.md +7 -7
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +2 -1
- package/dist/cjs/dialect/dialect-adapter-base.js +4 -1
- package/dist/cjs/dialect/dialect-adapter.d.ts +5 -0
- package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +1 -5
- package/dist/cjs/dialect/mssql/mssql-adapter.js +2 -4
- package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +46 -26
- package/dist/cjs/dialect/mssql/mssql-driver.d.ts +1 -0
- package/dist/cjs/dialect/mssql/mssql-driver.js +95 -36
- package/dist/cjs/dialect/postgres/postgres-introspector.js +1 -1
- package/dist/cjs/driver/database-connection.d.ts +3 -1
- package/dist/cjs/dynamic/dynamic-reference-builder.js +2 -2
- package/dist/cjs/dynamic/dynamic.d.ts +1 -1
- package/dist/cjs/dynamic/dynamic.js +1 -1
- package/dist/cjs/expression/expression-builder.d.ts +2 -2
- package/dist/cjs/expression/expression-builder.js +2 -3
- package/dist/cjs/expression/expression.js +2 -3
- package/dist/cjs/helpers/mssql.js +3 -4
- package/dist/cjs/helpers/mysql.d.ts +3 -3
- package/dist/cjs/helpers/mysql.js +6 -7
- package/dist/cjs/helpers/postgres.d.ts +4 -4
- package/dist/cjs/helpers/postgres.js +7 -8
- package/dist/cjs/helpers/sqlite.js +3 -4
- package/dist/cjs/index.d.ts +28 -21
- package/dist/cjs/index.js +28 -21
- package/dist/cjs/kysely.d.ts +1 -1
- package/dist/cjs/kysely.js +3 -3
- package/dist/cjs/operation-node/alter-column-node.d.ts +1 -1
- package/dist/cjs/operation-node/case-node.d.ts +1 -1
- package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
- package/dist/cjs/operation-node/data-type-node.d.ts +2 -2
- package/dist/cjs/operation-node/data-type-node.js +5 -3
- package/dist/cjs/operation-node/delete-query-node.d.ts +2 -0
- package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -4
- package/dist/cjs/operation-node/having-node.d.ts +1 -1
- package/dist/cjs/operation-node/insert-query-node.d.ts +2 -0
- package/dist/cjs/operation-node/merge-query-node.d.ts +2 -0
- package/dist/cjs/operation-node/on-node.d.ts +1 -1
- package/dist/cjs/operation-node/operation-node-source.js +1 -2
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +12 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/operator-node.d.ts +3 -3
- package/dist/cjs/operation-node/operator-node.js +8 -6
- package/dist/cjs/operation-node/output-node.d.ts +13 -0
- package/dist/cjs/operation-node/output-node.js +26 -0
- package/dist/cjs/operation-node/query-node.d.ts +11 -6
- package/dist/cjs/operation-node/query-node.js +9 -0
- package/dist/cjs/operation-node/select-query-node.d.ts +1 -0
- package/dist/cjs/operation-node/select-query-node.js +6 -0
- package/dist/cjs/operation-node/update-query-node.d.ts +2 -0
- package/dist/cjs/operation-node/where-node.d.ts +1 -1
- package/dist/cjs/parser/binary-operation-parser.js +5 -6
- package/dist/cjs/parser/data-type-parser.js +1 -2
- package/dist/cjs/parser/default-value-parser.js +1 -2
- package/dist/cjs/parser/expression-parser.js +3 -4
- package/dist/cjs/parser/fetch-parser.js +1 -2
- package/dist/cjs/parser/group-by-parser.js +1 -2
- package/dist/cjs/parser/identifier-parser.js +1 -2
- package/dist/cjs/parser/insert-values-parser.js +1 -2
- package/dist/cjs/parser/join-parser.js +1 -2
- package/dist/cjs/parser/merge-parser.js +2 -3
- package/dist/cjs/parser/on-commit-action-parse.js +1 -2
- package/dist/cjs/parser/on-modify-action-parser.js +1 -2
- package/dist/cjs/parser/order-by-parser.js +3 -4
- package/dist/cjs/parser/parse-utils.js +4 -5
- package/dist/cjs/parser/partition-by-parser.js +1 -2
- package/dist/cjs/parser/reference-parser.js +8 -9
- package/dist/cjs/parser/returning-parser.d.ts +4 -3
- package/dist/cjs/parser/select-parser.js +2 -3
- package/dist/cjs/parser/set-operation-parser.js +1 -2
- package/dist/cjs/parser/table-parser.js +4 -5
- package/dist/cjs/parser/top-parser.js +1 -2
- package/dist/cjs/parser/unary-operation-parser.js +3 -4
- package/dist/cjs/parser/update-set-parser.js +2 -3
- package/dist/cjs/parser/value-parser.js +4 -5
- package/dist/cjs/parser/with-parser.js +1 -2
- package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +2 -2
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +2 -2
- package/dist/cjs/plugin/camel-case/camel-case.js +2 -3
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
- package/dist/cjs/query-builder/delete-query-builder.d.ts +89 -5
- package/dist/cjs/query-builder/delete-query-builder.js +19 -5
- package/dist/cjs/query-builder/function-module.d.ts +5 -5
- package/dist/cjs/query-builder/function-module.js +1 -2
- package/dist/cjs/query-builder/insert-query-builder.d.ts +95 -10
- package/dist/cjs/query-builder/insert-query-builder.js +25 -10
- package/dist/cjs/query-builder/merge-query-builder.d.ts +167 -3
- package/dist/cjs/query-builder/merge-query-builder.js +30 -1
- package/dist/cjs/query-builder/no-result-error.js +2 -2
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +2 -2
- package/dist/cjs/query-builder/output-interface.d.ts +95 -0
- package/dist/cjs/query-builder/output-interface.js +2 -0
- package/dist/cjs/query-builder/returning-interface.d.ts +2 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +76 -11
- package/dist/cjs/query-builder/select-query-builder.js +7 -2
- package/dist/cjs/query-builder/update-query-builder.d.ts +95 -10
- package/dist/cjs/query-builder/update-query-builder.js +21 -7
- package/dist/cjs/query-builder/update-result.d.ts +9 -0
- package/dist/cjs/query-builder/update-result.js +9 -0
- package/dist/cjs/query-builder/where-interface.d.ts +1 -1
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +25 -1
- package/dist/cjs/query-creator.d.ts +56 -3
- package/dist/cjs/query-creator.js +54 -1
- package/dist/cjs/raw-builder/raw-builder.js +1 -2
- package/dist/cjs/raw-builder/sql.d.ts +5 -5
- package/dist/cjs/schema/alter-column-builder.js +3 -0
- package/dist/cjs/schema/alter-table-add-index-builder.d.ts +1 -1
- package/dist/cjs/schema/alter-table-add-index-builder.js +1 -1
- package/dist/cjs/schema/alter-table-builder.js +1 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +5 -0
- package/dist/cjs/schema/column-definition-builder.js +7 -0
- package/dist/cjs/util/assert.js +2 -3
- package/dist/cjs/util/compilable.js +1 -2
- package/dist/cjs/util/json-object-args.js +1 -2
- package/dist/cjs/util/log-once.js +1 -2
- package/dist/cjs/util/object-utils.js +38 -26
- package/dist/cjs/util/performance-now.js +1 -2
- package/dist/cjs/util/prevent-await.js +1 -2
- package/dist/cjs/util/query-id.js +1 -2
- package/dist/cjs/util/random-string.js +1 -2
- package/dist/cjs/util/require-all-props.js +1 -2
- package/dist/cjs/util/stack-trace-utils.js +1 -2
- package/dist/esm/dialect/dialect-adapter-base.d.ts +2 -1
- package/dist/esm/dialect/dialect-adapter-base.js +4 -1
- package/dist/esm/dialect/dialect-adapter.d.ts +5 -0
- package/dist/esm/dialect/mssql/mssql-adapter.d.ts +1 -5
- package/dist/esm/dialect/mssql/mssql-adapter.js +2 -4
- package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +46 -26
- package/dist/esm/dialect/mssql/mssql-driver.d.ts +1 -0
- package/dist/esm/dialect/mssql/mssql-driver.js +95 -36
- package/dist/esm/dialect/postgres/postgres-introspector.js +1 -1
- package/dist/esm/driver/database-connection.d.ts +3 -1
- package/dist/esm/dynamic/dynamic.d.ts +1 -1
- package/dist/esm/dynamic/dynamic.js +1 -1
- package/dist/esm/expression/expression-builder.d.ts +2 -2
- package/dist/esm/helpers/mysql.d.ts +3 -3
- package/dist/esm/helpers/mysql.js +3 -3
- package/dist/esm/helpers/postgres.d.ts +4 -4
- package/dist/esm/helpers/postgres.js +4 -4
- package/dist/esm/index.d.ts +28 -21
- package/dist/esm/index.js +28 -21
- package/dist/esm/kysely.d.ts +1 -1
- package/dist/esm/kysely.js +1 -1
- package/dist/esm/operation-node/alter-column-node.d.ts +1 -1
- package/dist/esm/operation-node/case-node.d.ts +1 -1
- package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
- package/dist/esm/operation-node/data-type-node.d.ts +2 -2
- package/dist/esm/operation-node/data-type-node.js +3 -1
- package/dist/esm/operation-node/delete-query-node.d.ts +2 -0
- package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -4
- package/dist/esm/operation-node/having-node.d.ts +1 -1
- package/dist/esm/operation-node/insert-query-node.d.ts +2 -0
- package/dist/esm/operation-node/merge-query-node.d.ts +2 -0
- package/dist/esm/operation-node/on-node.d.ts +1 -1
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +12 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +1 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/operator-node.d.ts +3 -3
- package/dist/esm/operation-node/operator-node.js +2 -0
- package/dist/esm/operation-node/output-node.d.ts +13 -0
- package/dist/esm/operation-node/output-node.js +24 -0
- package/dist/esm/operation-node/query-node.d.ts +11 -6
- package/dist/esm/operation-node/query-node.js +9 -0
- package/dist/esm/operation-node/select-query-node.d.ts +1 -0
- package/dist/esm/operation-node/select-query-node.js +6 -0
- package/dist/esm/operation-node/update-query-node.d.ts +2 -0
- package/dist/esm/operation-node/where-node.d.ts +1 -1
- package/dist/esm/parser/returning-parser.d.ts +4 -3
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +2 -2
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +2 -2
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
- package/dist/esm/query-builder/delete-query-builder.d.ts +89 -5
- package/dist/esm/query-builder/delete-query-builder.js +19 -5
- package/dist/esm/query-builder/function-module.d.ts +5 -5
- package/dist/esm/query-builder/insert-query-builder.d.ts +95 -10
- package/dist/esm/query-builder/insert-query-builder.js +25 -10
- package/dist/esm/query-builder/merge-query-builder.d.ts +167 -3
- package/dist/esm/query-builder/merge-query-builder.js +30 -1
- package/dist/esm/query-builder/on-conflict-builder.d.ts +2 -2
- package/dist/esm/query-builder/output-interface.d.ts +95 -0
- package/dist/esm/query-builder/output-interface.js +2 -0
- package/dist/esm/query-builder/returning-interface.d.ts +2 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +76 -11
- package/dist/esm/query-builder/select-query-builder.js +6 -0
- package/dist/esm/query-builder/update-query-builder.d.ts +95 -10
- package/dist/esm/query-builder/update-query-builder.js +21 -7
- package/dist/esm/query-builder/update-result.d.ts +9 -0
- package/dist/esm/query-builder/update-result.js +9 -0
- package/dist/esm/query-builder/where-interface.d.ts +1 -1
- package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/esm/query-compiler/default-query-compiler.js +25 -1
- package/dist/esm/query-creator.d.ts +56 -3
- package/dist/esm/query-creator.js +54 -1
- package/dist/esm/raw-builder/sql.d.ts +5 -5
- package/dist/esm/schema/alter-column-builder.js +3 -0
- package/dist/esm/schema/alter-table-add-index-builder.d.ts +1 -1
- package/dist/esm/schema/alter-table-add-index-builder.js +1 -1
- package/dist/esm/schema/alter-table-builder.js +1 -2
- package/dist/esm/schema/column-definition-builder.d.ts +5 -0
- package/dist/esm/schema/column-definition-builder.js +7 -0
- package/dist/esm/util/object-utils.js +18 -5
- package/package.json +7 -6
|
@@ -3,7 +3,7 @@ import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
|
3
3
|
import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
|
|
4
4
|
import { TableExpression, From, FromTables } from '../parser/table-parser.js';
|
|
5
5
|
import { SelectExpression, SelectCallback } from '../parser/select-parser.js';
|
|
6
|
-
import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
|
|
6
|
+
import { ReturningAllRow, ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
|
|
7
7
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
8
8
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
9
9
|
import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
|
|
@@ -17,7 +17,6 @@ import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
|
17
17
|
import { WhereInterface } from './where-interface.js';
|
|
18
18
|
import { ReturningInterface } from './returning-interface.js';
|
|
19
19
|
import { NoResultErrorConstructor } from './no-result-error.js';
|
|
20
|
-
import { Selectable } from '../util/column-type.js';
|
|
21
20
|
import { Explainable, ExplainFormat } from '../util/explainable.js';
|
|
22
21
|
import { AliasedExpression, Expression } from '../expression/expression.js';
|
|
23
22
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
@@ -25,7 +24,8 @@ import { KyselyTypeError } from '../util/type-error.js';
|
|
|
25
24
|
import { Streamable } from '../util/streamable.js';
|
|
26
25
|
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
27
26
|
import { ValueExpression } from '../parser/value-parser.js';
|
|
28
|
-
|
|
27
|
+
import { OutputCallback, OutputExpression, OutputInterface, OutputPrefix, SelectExpressionFromOutputCallback, SelectExpressionFromOutputExpression } from './output-interface.js';
|
|
28
|
+
export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OutputInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
|
|
29
29
|
#private;
|
|
30
30
|
constructor(props: UpdateQueryBuilderProps);
|
|
31
31
|
/**
|
|
@@ -290,7 +290,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
290
290
|
* .selectFrom('person')
|
|
291
291
|
* .selectAll()
|
|
292
292
|
* .where(
|
|
293
|
-
* sql
|
|
293
|
+
* sql<string>`coalesce(first_name, last_name)`,
|
|
294
294
|
* 'like',
|
|
295
295
|
* '%' + name + '%',
|
|
296
296
|
* )
|
|
@@ -695,7 +695,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
695
695
|
* .set('first_name', 'Foo')
|
|
696
696
|
* // As always, both arguments can be arbitrary expressions or
|
|
697
697
|
* // callbacks that give you access to an expression builder:
|
|
698
|
-
* .set(sql
|
|
698
|
+
* .set(sql<string>`address['postalCode']`, (eb) => eb.val('61710))
|
|
699
699
|
* .where('id', '=', '1')
|
|
700
700
|
* .executeTakeFirst()
|
|
701
701
|
* ```
|
|
@@ -736,7 +736,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
736
736
|
* first_name: selectFrom('person').select('first_name').limit(1),
|
|
737
737
|
* middle_name: ref('first_name'),
|
|
738
738
|
* age: eb('age', '+', 1),
|
|
739
|
-
* last_name: sql
|
|
739
|
+
* last_name: sql<string>`${'Ani'} || ${'ston'}`,
|
|
740
740
|
* }))
|
|
741
741
|
* .where('id', '=', 1)
|
|
742
742
|
* .executeTakeFirst()
|
|
@@ -822,8 +822,93 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
822
822
|
/**
|
|
823
823
|
* Adds a `returning *` to an insert/update/delete query on databases
|
|
824
824
|
* that support `returning` such as PostgreSQL.
|
|
825
|
+
*
|
|
826
|
+
* Also see the {@link returning} method.
|
|
827
|
+
*/
|
|
828
|
+
returningAll<T extends TB>(tables: ReadonlyArray<T>): UpdateQueryBuilder<DB, UT, TB, ReturningAllRow<DB, T, O>>;
|
|
829
|
+
returningAll<T extends TB>(table: T): UpdateQueryBuilder<DB, UT, TB, ReturningAllRow<DB, T, O>>;
|
|
830
|
+
returningAll(): UpdateQueryBuilder<DB, UT, TB, ReturningAllRow<DB, TB, O>>;
|
|
831
|
+
/**
|
|
832
|
+
* Allows you to return data from modified rows.
|
|
833
|
+
*
|
|
834
|
+
* On supported databases like MS SQL Server (MSSQL), this method can be chained
|
|
835
|
+
* to `insert`, `update`, `delete` and `merge` queries to return data.
|
|
836
|
+
*
|
|
837
|
+
* Also see the {@link outputAll} method.
|
|
838
|
+
*
|
|
839
|
+
* ### Examples
|
|
840
|
+
*
|
|
841
|
+
* Return one column:
|
|
842
|
+
*
|
|
843
|
+
* ```ts
|
|
844
|
+
* const { id } = await db
|
|
845
|
+
* .insertInto('person')
|
|
846
|
+
* .output('inserted.id')
|
|
847
|
+
* .values({
|
|
848
|
+
* first_name: 'Jennifer',
|
|
849
|
+
* last_name: 'Aniston'
|
|
850
|
+
* })
|
|
851
|
+
* .executeTakeFirst()
|
|
852
|
+
* ```
|
|
853
|
+
*
|
|
854
|
+
* Return multiple columns:
|
|
855
|
+
*
|
|
856
|
+
* ```ts
|
|
857
|
+
* const { id, first_name } = await db
|
|
858
|
+
* .updateTable('person')
|
|
859
|
+
* .set({ first_name: 'John', last_name: 'Doe' })
|
|
860
|
+
* .output([
|
|
861
|
+
* 'deleted.first_name as old_first_name',
|
|
862
|
+
* 'deleted.last_name as old_last_name',
|
|
863
|
+
* 'inserted.first_name as new_first_name',
|
|
864
|
+
* 'inserted.last_name as new_last_name',
|
|
865
|
+
* ])
|
|
866
|
+
* .where('created_at', '<', new Date())
|
|
867
|
+
* .executeTakeFirst()
|
|
868
|
+
* ```
|
|
869
|
+
*
|
|
870
|
+
* Return arbitrary expressions:
|
|
871
|
+
*
|
|
872
|
+
* ```ts
|
|
873
|
+
* import { sql } from 'kysely'
|
|
874
|
+
*
|
|
875
|
+
* const { id, full_name } = await db
|
|
876
|
+
* .deleteFrom('person')
|
|
877
|
+
* .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')
|
|
878
|
+
* .where('created_at', '<', new Date())
|
|
879
|
+
* .executeTakeFirst()
|
|
880
|
+
* ```
|
|
881
|
+
*
|
|
882
|
+
* Return the action performed on the row:
|
|
883
|
+
*
|
|
884
|
+
* ```ts
|
|
885
|
+
* await db
|
|
886
|
+
* .mergeInto('person')
|
|
887
|
+
* .using('pet', 'pet.owner_id', 'person.id')
|
|
888
|
+
* .whenMatched()
|
|
889
|
+
* .thenDelete()
|
|
890
|
+
* .whenNotMatched()
|
|
891
|
+
* .thenInsertValues({
|
|
892
|
+
* first_name: 'John',
|
|
893
|
+
* last_name: 'Doe',
|
|
894
|
+
* gender: 'male'
|
|
895
|
+
* })
|
|
896
|
+
* .output([
|
|
897
|
+
* 'inserted.id as inserted_id',
|
|
898
|
+
* 'deleted.id as deleted_id',
|
|
899
|
+
* ])
|
|
900
|
+
* ```
|
|
901
|
+
*/
|
|
902
|
+
output<OE extends OutputExpression<DB, UT>>(selections: readonly OE[]): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>>;
|
|
903
|
+
output<CB extends OutputCallback<DB, TB>>(callback: CB): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputCallback<CB>>>;
|
|
904
|
+
output<OE extends OutputExpression<DB, TB>>(selection: OE): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>>;
|
|
905
|
+
/**
|
|
906
|
+
* Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
|
|
907
|
+
* that support `output` such as MS SQL Server (MSSQL).
|
|
908
|
+
*
|
|
909
|
+
* Also see the {@link output} method.
|
|
825
910
|
*/
|
|
826
|
-
|
|
911
|
+
outputAll(table: OutputPrefix): UpdateQueryBuilder<DB, UT, TB, ReturningAllRow<DB, TB, O>>;
|
|
827
912
|
/**
|
|
828
913
|
* Clears all `returning` clauses from the query.
|
|
829
914
|
*
|
|
@@ -960,17 +1045,17 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
|
|
|
960
1045
|
/**
|
|
961
1046
|
* Asserts that query's output row type equals the given type `T`.
|
|
962
1047
|
*
|
|
963
|
-
* This method can be used to simplify excessively complex types to make
|
|
1048
|
+
* This method can be used to simplify excessively complex types to make TypeScript happy
|
|
964
1049
|
* and much faster.
|
|
965
1050
|
*
|
|
966
1051
|
* Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
|
|
967
|
-
* for
|
|
1052
|
+
* for TypeScript and you get errors like this:
|
|
968
1053
|
*
|
|
969
1054
|
* ```
|
|
970
1055
|
* error TS2589: Type instantiation is excessively deep and possibly infinite.
|
|
971
1056
|
* ```
|
|
972
1057
|
*
|
|
973
|
-
* In these case you can often use this method to help
|
|
1058
|
+
* In these case you can often use this method to help TypeScript a little bit. When you use this
|
|
974
1059
|
* method to assert the output type of a query, Kysely can drop the complex output type that
|
|
975
1060
|
* consists of multiple nested helper types and replace it with the simple asserted type.
|
|
976
1061
|
*
|
|
@@ -148,10 +148,22 @@ export class UpdateQueryBuilder {
|
|
|
148
148
|
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectArg(selection)),
|
|
149
149
|
});
|
|
150
150
|
}
|
|
151
|
-
returningAll() {
|
|
151
|
+
returningAll(table) {
|
|
152
152
|
return new UpdateQueryBuilder({
|
|
153
153
|
...this.#props,
|
|
154
|
-
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll()),
|
|
154
|
+
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll(table)),
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
output(args) {
|
|
158
|
+
return new UpdateQueryBuilder({
|
|
159
|
+
...this.#props,
|
|
160
|
+
queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectArg(args)),
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
outputAll(table) {
|
|
164
|
+
return new UpdateQueryBuilder({
|
|
165
|
+
...this.#props,
|
|
166
|
+
queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectAll(table)),
|
|
155
167
|
});
|
|
156
168
|
}
|
|
157
169
|
/**
|
|
@@ -308,17 +320,17 @@ export class UpdateQueryBuilder {
|
|
|
308
320
|
/**
|
|
309
321
|
* Asserts that query's output row type equals the given type `T`.
|
|
310
322
|
*
|
|
311
|
-
* This method can be used to simplify excessively complex types to make
|
|
323
|
+
* This method can be used to simplify excessively complex types to make TypeScript happy
|
|
312
324
|
* and much faster.
|
|
313
325
|
*
|
|
314
326
|
* Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
|
|
315
|
-
* for
|
|
327
|
+
* for TypeScript and you get errors like this:
|
|
316
328
|
*
|
|
317
329
|
* ```
|
|
318
330
|
* error TS2589: Type instantiation is excessively deep and possibly infinite.
|
|
319
331
|
* ```
|
|
320
332
|
*
|
|
321
|
-
* In these case you can often use this method to help
|
|
333
|
+
* In these case you can often use this method to help TypeScript a little bit. When you use this
|
|
322
334
|
* method to assert the output type of a query, Kysely can drop the complex output type that
|
|
323
335
|
* consists of multiple nested helper types and replace it with the simple asserted type.
|
|
324
336
|
*
|
|
@@ -373,9 +385,11 @@ export class UpdateQueryBuilder {
|
|
|
373
385
|
*/
|
|
374
386
|
async execute() {
|
|
375
387
|
const compiledQuery = this.compile();
|
|
376
|
-
const query = compiledQuery.query;
|
|
377
388
|
const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
|
|
378
|
-
|
|
389
|
+
const { adapter } = this.#props.executor;
|
|
390
|
+
const query = compiledQuery.query;
|
|
391
|
+
if ((query.returning && adapter.supportsReturning) ||
|
|
392
|
+
(query.output && adapter.supportsOutput)) {
|
|
379
393
|
return result.rows;
|
|
380
394
|
}
|
|
381
395
|
return [
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
export declare class UpdateResult {
|
|
2
|
+
/**
|
|
3
|
+
* The number of rows the update query updated (even if not changed).
|
|
4
|
+
*/
|
|
2
5
|
readonly numUpdatedRows: bigint;
|
|
6
|
+
/**
|
|
7
|
+
* The number of rows the update query changed.
|
|
8
|
+
*
|
|
9
|
+
* This is **optional** and only supported in dialects such as MySQL.
|
|
10
|
+
* You would probably use {@link numUpdatedRows} in most cases.
|
|
11
|
+
*/
|
|
3
12
|
readonly numChangedRows?: bigint;
|
|
4
13
|
constructor(numUpdatedRows: bigint, numChangedRows: bigint | undefined);
|
|
5
14
|
}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
/// <reference types="./update-result.d.ts" />
|
|
2
2
|
export class UpdateResult {
|
|
3
|
+
/**
|
|
4
|
+
* The number of rows the update query updated (even if not changed).
|
|
5
|
+
*/
|
|
3
6
|
numUpdatedRows;
|
|
7
|
+
/**
|
|
8
|
+
* The number of rows the update query changed.
|
|
9
|
+
*
|
|
10
|
+
* This is **optional** and only supported in dialects such as MySQL.
|
|
11
|
+
* You would probably use {@link numUpdatedRows} in most cases.
|
|
12
|
+
*/
|
|
4
13
|
numChangedRows;
|
|
5
14
|
constructor(numUpdatedRows, numChangedRows) {
|
|
6
15
|
this.numUpdatedRows = numUpdatedRows;
|
|
@@ -265,7 +265,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
265
265
|
* .selectFrom('person')
|
|
266
266
|
* .selectAll()
|
|
267
267
|
* .where(
|
|
268
|
-
* sql
|
|
268
|
+
* sql<string>`coalesce(first_name, last_name)`,
|
|
269
269
|
* 'like',
|
|
270
270
|
* '%' + name + '%',
|
|
271
271
|
* )
|
|
@@ -94,6 +94,7 @@ import { AddIndexNode } from '../operation-node/add-index-node.js';
|
|
|
94
94
|
import { CastNode } from '../operation-node/cast-node.js';
|
|
95
95
|
import { FetchNode } from '../operation-node/fetch-node.js';
|
|
96
96
|
import { TopNode } from '../operation-node/top-node.js';
|
|
97
|
+
import { OutputNode } from '../operation-node/output-node.js';
|
|
97
98
|
export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
|
|
98
99
|
#private;
|
|
99
100
|
protected get numParameters(): number;
|
|
@@ -195,6 +196,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
195
196
|
protected visitAddIndex(node: AddIndexNode): void;
|
|
196
197
|
protected visitCast(node: CastNode): void;
|
|
197
198
|
protected visitFetch(node: FetchNode): void;
|
|
199
|
+
protected visitOutput(node: OutputNode): void;
|
|
198
200
|
protected visitTop(node: TopNode): void;
|
|
199
201
|
protected append(str: string): void;
|
|
200
202
|
protected appendValue(parameter: unknown): void;
|
|
@@ -18,6 +18,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
18
18
|
compileQuery(node) {
|
|
19
19
|
this.#sql = '';
|
|
20
20
|
this.#parameters = [];
|
|
21
|
+
this.nodeStack.splice(0, this.nodeStack.length);
|
|
21
22
|
this.visitNode(node);
|
|
22
23
|
return freeze({
|
|
23
24
|
query: node,
|
|
@@ -174,6 +175,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
174
175
|
this.compileList(node.columns);
|
|
175
176
|
this.append(')');
|
|
176
177
|
}
|
|
178
|
+
if (node.output) {
|
|
179
|
+
this.append(' ');
|
|
180
|
+
this.visitNode(node.output);
|
|
181
|
+
}
|
|
177
182
|
if (node.values) {
|
|
178
183
|
this.append(' ');
|
|
179
184
|
this.visitNode(node.values);
|
|
@@ -221,6 +226,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
221
226
|
this.append(' ');
|
|
222
227
|
}
|
|
223
228
|
this.visitNode(node.from);
|
|
229
|
+
if (node.output) {
|
|
230
|
+
this.append(' ');
|
|
231
|
+
this.visitNode(node.output);
|
|
232
|
+
}
|
|
224
233
|
if (node.using) {
|
|
225
234
|
this.append(' ');
|
|
226
235
|
this.visitNode(node.using);
|
|
@@ -391,6 +400,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
391
400
|
}
|
|
392
401
|
}
|
|
393
402
|
visitColumnDefinition(node) {
|
|
403
|
+
if (node.ifNotExists) {
|
|
404
|
+
this.append('if not exists ');
|
|
405
|
+
}
|
|
394
406
|
this.visitNode(node.column);
|
|
395
407
|
this.append(' ');
|
|
396
408
|
this.visitNode(node.dataType);
|
|
@@ -517,6 +529,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
517
529
|
if (node.updates) {
|
|
518
530
|
this.compileList(node.updates);
|
|
519
531
|
}
|
|
532
|
+
if (node.output) {
|
|
533
|
+
this.append(' ');
|
|
534
|
+
this.visitNode(node.output);
|
|
535
|
+
}
|
|
520
536
|
if (node.from) {
|
|
521
537
|
this.append(' ');
|
|
522
538
|
this.visitNode(node.from);
|
|
@@ -1091,7 +1107,11 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
1091
1107
|
}
|
|
1092
1108
|
if (node.whens) {
|
|
1093
1109
|
this.append(' ');
|
|
1094
|
-
this.compileList(node.whens);
|
|
1110
|
+
this.compileList(node.whens, ' ');
|
|
1111
|
+
}
|
|
1112
|
+
if (node.output) {
|
|
1113
|
+
this.append(' ');
|
|
1114
|
+
this.visitNode(node.output);
|
|
1095
1115
|
}
|
|
1096
1116
|
}
|
|
1097
1117
|
visitMatched(node) {
|
|
@@ -1132,6 +1152,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
1132
1152
|
this.visitNode(node.rowCount);
|
|
1133
1153
|
this.append(` rows ${node.modifier}`);
|
|
1134
1154
|
}
|
|
1155
|
+
visitOutput(node) {
|
|
1156
|
+
this.append('output ');
|
|
1157
|
+
this.compileList(node.selections);
|
|
1158
|
+
}
|
|
1135
1159
|
visitTop(node) {
|
|
1136
1160
|
this.append(`top(${node.expression})`);
|
|
1137
1161
|
if (node.modifiers) {
|
|
@@ -125,10 +125,10 @@ export declare class QueryCreator<DB> {
|
|
|
125
125
|
* ```
|
|
126
126
|
*/
|
|
127
127
|
selectFrom<TE extends keyof DB & string>(from: TE[]): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>;
|
|
128
|
-
selectFrom<TE extends TableExpression<DB,
|
|
128
|
+
selectFrom<TE extends TableExpression<DB, never>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
|
|
129
129
|
selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>;
|
|
130
130
|
selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, ExtractTableAlias<DB & PickTableWithAlias<DB, TE>, TE>, {}>;
|
|
131
|
-
selectFrom<TE extends TableExpression<DB,
|
|
131
|
+
selectFrom<TE extends TableExpression<DB, never>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
|
|
132
132
|
/**
|
|
133
133
|
* Creates a `select` query builder without a `from` clause.
|
|
134
134
|
*
|
|
@@ -365,24 +365,77 @@ export declare class QueryCreator<DB> {
|
|
|
365
365
|
*
|
|
366
366
|
* ### Examples
|
|
367
367
|
*
|
|
368
|
+
* <!-- siteExample("cte", "Simple selects", 10) -->
|
|
369
|
+
*
|
|
370
|
+
* Common table expressions (CTE) are a great way to modularize complex queries.
|
|
371
|
+
* Essentially they allow you to run multiple separate queries within a
|
|
372
|
+
* single roundtrip to the DB.
|
|
373
|
+
*
|
|
374
|
+
* Since CTEs are a part of the main query, query optimizers inside DB
|
|
375
|
+
* engines are able to optimize the overall query. For example, postgres
|
|
376
|
+
* is able to inline the CTEs inside the using queries if it decides it's
|
|
377
|
+
* faster.
|
|
378
|
+
*
|
|
368
379
|
* ```ts
|
|
369
|
-
* await db
|
|
380
|
+
* const result = await db
|
|
381
|
+
* // Create a CTE called `jennifers` that selects all
|
|
382
|
+
* // persons named 'Jennifer'.
|
|
370
383
|
* .with('jennifers', (db) => db
|
|
371
384
|
* .selectFrom('person')
|
|
372
385
|
* .where('first_name', '=', 'Jennifer')
|
|
373
386
|
* .select(['id', 'age'])
|
|
374
387
|
* )
|
|
388
|
+
* // Select all rows from the `jennifers` CTE and
|
|
389
|
+
* // further filter it.
|
|
375
390
|
* .with('adult_jennifers', (db) => db
|
|
376
391
|
* .selectFrom('jennifers')
|
|
377
392
|
* .where('age', '>', 18)
|
|
378
393
|
* .select(['id', 'age'])
|
|
379
394
|
* )
|
|
395
|
+
* // Finally select all adult jennifers that are
|
|
396
|
+
* // also younger than 60.
|
|
380
397
|
* .selectFrom('adult_jennifers')
|
|
381
398
|
* .where('age', '<', 60)
|
|
382
399
|
* .selectAll()
|
|
383
400
|
* .execute()
|
|
384
401
|
* ```
|
|
385
402
|
*
|
|
403
|
+
* <!-- siteExample("cte", "Inserts, updates and deletions", 20) -->
|
|
404
|
+
*
|
|
405
|
+
* Some databases like postgres also allow you to run other queries than selects
|
|
406
|
+
* in CTEs. On these databases CTEs are extremely powerful:
|
|
407
|
+
*
|
|
408
|
+
* ```ts
|
|
409
|
+
* const result = await db
|
|
410
|
+
* .with('new_person', (db) => db
|
|
411
|
+
* .insertInto('person')
|
|
412
|
+
* .values({
|
|
413
|
+
* first_name: 'Jennifer',
|
|
414
|
+
* age: 35,
|
|
415
|
+
* })
|
|
416
|
+
* .returning('id')
|
|
417
|
+
* )
|
|
418
|
+
* .with('new_pet', (db) => db
|
|
419
|
+
* .insertInto('pet')
|
|
420
|
+
* .values({
|
|
421
|
+
* name: 'Doggo',
|
|
422
|
+
* species: 'dog',
|
|
423
|
+
* is_favorite: true,
|
|
424
|
+
* // Use the id of the person we just inserted.
|
|
425
|
+
* owner_id: db
|
|
426
|
+
* .selectFrom('new_person')
|
|
427
|
+
* .select('id')
|
|
428
|
+
* })
|
|
429
|
+
* .returning('id')
|
|
430
|
+
* )
|
|
431
|
+
* .selectFrom(['new_person', 'new_pet'])
|
|
432
|
+
* .select([
|
|
433
|
+
* 'new_person.id as person_id',
|
|
434
|
+
* 'new_pet.id as pet_id'
|
|
435
|
+
* ])
|
|
436
|
+
* .execute()
|
|
437
|
+
* ```
|
|
438
|
+
*
|
|
386
439
|
* The CTE name can optionally specify column names in addition to
|
|
387
440
|
* a name. In that case Kysely requires the expression to retun
|
|
388
441
|
* rows with the same columns.
|
|
@@ -139,24 +139,77 @@ export class QueryCreator {
|
|
|
139
139
|
*
|
|
140
140
|
* ### Examples
|
|
141
141
|
*
|
|
142
|
+
* <!-- siteExample("cte", "Simple selects", 10) -->
|
|
143
|
+
*
|
|
144
|
+
* Common table expressions (CTE) are a great way to modularize complex queries.
|
|
145
|
+
* Essentially they allow you to run multiple separate queries within a
|
|
146
|
+
* single roundtrip to the DB.
|
|
147
|
+
*
|
|
148
|
+
* Since CTEs are a part of the main query, query optimizers inside DB
|
|
149
|
+
* engines are able to optimize the overall query. For example, postgres
|
|
150
|
+
* is able to inline the CTEs inside the using queries if it decides it's
|
|
151
|
+
* faster.
|
|
152
|
+
*
|
|
142
153
|
* ```ts
|
|
143
|
-
* await db
|
|
154
|
+
* const result = await db
|
|
155
|
+
* // Create a CTE called `jennifers` that selects all
|
|
156
|
+
* // persons named 'Jennifer'.
|
|
144
157
|
* .with('jennifers', (db) => db
|
|
145
158
|
* .selectFrom('person')
|
|
146
159
|
* .where('first_name', '=', 'Jennifer')
|
|
147
160
|
* .select(['id', 'age'])
|
|
148
161
|
* )
|
|
162
|
+
* // Select all rows from the `jennifers` CTE and
|
|
163
|
+
* // further filter it.
|
|
149
164
|
* .with('adult_jennifers', (db) => db
|
|
150
165
|
* .selectFrom('jennifers')
|
|
151
166
|
* .where('age', '>', 18)
|
|
152
167
|
* .select(['id', 'age'])
|
|
153
168
|
* )
|
|
169
|
+
* // Finally select all adult jennifers that are
|
|
170
|
+
* // also younger than 60.
|
|
154
171
|
* .selectFrom('adult_jennifers')
|
|
155
172
|
* .where('age', '<', 60)
|
|
156
173
|
* .selectAll()
|
|
157
174
|
* .execute()
|
|
158
175
|
* ```
|
|
159
176
|
*
|
|
177
|
+
* <!-- siteExample("cte", "Inserts, updates and deletions", 20) -->
|
|
178
|
+
*
|
|
179
|
+
* Some databases like postgres also allow you to run other queries than selects
|
|
180
|
+
* in CTEs. On these databases CTEs are extremely powerful:
|
|
181
|
+
*
|
|
182
|
+
* ```ts
|
|
183
|
+
* const result = await db
|
|
184
|
+
* .with('new_person', (db) => db
|
|
185
|
+
* .insertInto('person')
|
|
186
|
+
* .values({
|
|
187
|
+
* first_name: 'Jennifer',
|
|
188
|
+
* age: 35,
|
|
189
|
+
* })
|
|
190
|
+
* .returning('id')
|
|
191
|
+
* )
|
|
192
|
+
* .with('new_pet', (db) => db
|
|
193
|
+
* .insertInto('pet')
|
|
194
|
+
* .values({
|
|
195
|
+
* name: 'Doggo',
|
|
196
|
+
* species: 'dog',
|
|
197
|
+
* is_favorite: true,
|
|
198
|
+
* // Use the id of the person we just inserted.
|
|
199
|
+
* owner_id: db
|
|
200
|
+
* .selectFrom('new_person')
|
|
201
|
+
* .select('id')
|
|
202
|
+
* })
|
|
203
|
+
* .returning('id')
|
|
204
|
+
* )
|
|
205
|
+
* .selectFrom(['new_person', 'new_pet'])
|
|
206
|
+
* .select([
|
|
207
|
+
* 'new_person.id as person_id',
|
|
208
|
+
* 'new_pet.id as pet_id'
|
|
209
|
+
* ])
|
|
210
|
+
* .execute()
|
|
211
|
+
* ```
|
|
212
|
+
*
|
|
160
213
|
* The CTE name can optionally specify column names in addition to
|
|
161
214
|
* a name. In that case Kysely requires the expression to retun
|
|
162
215
|
* rows with the same columns.
|
|
@@ -33,12 +33,12 @@ export interface Sql {
|
|
|
33
33
|
* // method to give it an alias.
|
|
34
34
|
* sql<string>`concat(first_name, ' ', last_name)`.as('full_name')
|
|
35
35
|
* )
|
|
36
|
-
* .where(sql
|
|
36
|
+
* .where(sql<boolean>`birthdate between ${date1} and ${date2}`)
|
|
37
37
|
* // Here we assume we have list of nicknames for the person
|
|
38
38
|
* // (a list of strings) and we use the PostgreSQL `@>` operator
|
|
39
39
|
* // to test if all of them are valid nicknames for the user.
|
|
40
|
-
* .where('nicknames', '@>', sql
|
|
41
|
-
* .orderBy(sql
|
|
40
|
+
* .where('nicknames', '@>', sql<string[]>`ARRAY[${sql.join(nicknames)}]`)
|
|
41
|
+
* .orderBy(sql<string>`concat(first_name, ' ', last_name)`)
|
|
42
42
|
* .execute()
|
|
43
43
|
* ```
|
|
44
44
|
*
|
|
@@ -63,7 +63,7 @@ export interface Sql {
|
|
|
63
63
|
*
|
|
64
64
|
* ```ts
|
|
65
65
|
* const petName = db.selectFrom('pet').select('name').limit(1)
|
|
66
|
-
* const fullName = sql
|
|
66
|
+
* const fullName = sql<string>`concat(first_name, ' ', last_name)`
|
|
67
67
|
*
|
|
68
68
|
* sql`
|
|
69
69
|
* select ${fullName} as full_name, ${petName} as pet_name
|
|
@@ -301,7 +301,7 @@ export interface Sql {
|
|
|
301
301
|
* return db
|
|
302
302
|
* .selectFrom('person')
|
|
303
303
|
* .selectAll()
|
|
304
|
-
* .where('nicknames', '@>', sql
|
|
304
|
+
* .where('nicknames', '@>', sql<string[]>`ARRAY[${sql.join(nicknames)}]`)
|
|
305
305
|
* .execute()
|
|
306
306
|
* }
|
|
307
307
|
* ```
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { AlterColumnNode } from '../operation-node/alter-column-node.js';
|
|
3
3
|
import { parseDataTypeExpression, } from '../parser/data-type-parser.js';
|
|
4
4
|
import { parseDefaultValueExpression, } from '../parser/default-value-parser.js';
|
|
5
|
+
import { preventAwait } from '../util/prevent-await.js';
|
|
5
6
|
export class AlterColumnBuilder {
|
|
6
7
|
#column;
|
|
7
8
|
constructor(column) {
|
|
@@ -30,6 +31,7 @@ export class AlterColumnBuilder {
|
|
|
30
31
|
return func(this);
|
|
31
32
|
}
|
|
32
33
|
}
|
|
34
|
+
preventAwait(AlterColumnBuilder, "don't await AlterColumnBuilder instances");
|
|
33
35
|
/**
|
|
34
36
|
* Allows us to force consumers to do exactly one alteration to a column.
|
|
35
37
|
*
|
|
@@ -54,3 +56,4 @@ export class AlteredColumnBuilder {
|
|
|
54
56
|
return this.#alterColumnNode;
|
|
55
57
|
}
|
|
56
58
|
}
|
|
59
|
+
preventAwait(AlteredColumnBuilder, "don't await AlteredColumnBuilder instances");
|
|
@@ -72,7 +72,7 @@ export declare class AlterTableAddIndexBuilder implements OperationNodeSource, C
|
|
|
72
72
|
* await db.schema
|
|
73
73
|
* .alterTable('person')
|
|
74
74
|
* .addIndex('person_first_name_index')
|
|
75
|
-
* .expression(sql
|
|
75
|
+
* .expression(sql<boolean>`(first_name < 'Sami')`)
|
|
76
76
|
* .execute()
|
|
77
77
|
* ```
|
|
78
78
|
*
|
|
@@ -97,7 +97,7 @@ export class AlterTableAddIndexBuilder {
|
|
|
97
97
|
* await db.schema
|
|
98
98
|
* .alterTable('person')
|
|
99
99
|
* .addIndex('person_first_name_index')
|
|
100
|
-
* .expression(sql
|
|
100
|
+
* .expression(sql<boolean>`(first_name < 'Sami')`)
|
|
101
101
|
* .execute()
|
|
102
102
|
* ```
|
|
103
103
|
*
|
|
@@ -200,6 +200,7 @@ export class AlterTableBuilder {
|
|
|
200
200
|
return func(this);
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
|
+
preventAwait(AlterTableBuilder, "don't await AlterTableBuilder instances");
|
|
203
204
|
export class AlterTableColumnAlteringBuilder {
|
|
204
205
|
#props;
|
|
205
206
|
constructor(props) {
|
|
@@ -248,6 +249,4 @@ export class AlterTableColumnAlteringBuilder {
|
|
|
248
249
|
await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
|
|
249
250
|
}
|
|
250
251
|
}
|
|
251
|
-
preventAwait(AlterTableBuilder, "don't await AlterTableBuilder instances");
|
|
252
|
-
preventAwait(AlterColumnBuilder, "don't await AlterColumnBuilder instances");
|
|
253
252
|
preventAwait(AlterTableColumnAlteringBuilder, "don't await AlterTableColumnAlteringBuilder instances directly. To execute the query you need to call `execute`");
|
|
@@ -220,6 +220,11 @@ export declare class ColumnDefinitionBuilder implements OperationNodeSource {
|
|
|
220
220
|
* ```
|
|
221
221
|
*/
|
|
222
222
|
nullsNotDistinct(): ColumnDefinitionBuilder;
|
|
223
|
+
/**
|
|
224
|
+
* Adds `if not exists` specifier.
|
|
225
|
+
* This only works for PostgreSQL.
|
|
226
|
+
*/
|
|
227
|
+
ifNotExists(): ColumnDefinitionBuilder;
|
|
223
228
|
/**
|
|
224
229
|
* This can be used to add any additional SQL to the end of the column definition.
|
|
225
230
|
*
|
|
@@ -297,6 +297,13 @@ export class ColumnDefinitionBuilder {
|
|
|
297
297
|
nullsNotDistinct() {
|
|
298
298
|
return new ColumnDefinitionBuilder(ColumnDefinitionNode.cloneWith(this.#node, { nullsNotDistinct: true }));
|
|
299
299
|
}
|
|
300
|
+
/**
|
|
301
|
+
* Adds `if not exists` specifier.
|
|
302
|
+
* This only works for PostgreSQL.
|
|
303
|
+
*/
|
|
304
|
+
ifNotExists() {
|
|
305
|
+
return new ColumnDefinitionBuilder(ColumnDefinitionNode.cloneWith(this.#node, { ifNotExists: true }));
|
|
306
|
+
}
|
|
300
307
|
/**
|
|
301
308
|
* This can be used to add any additional SQL to the end of the column definition.
|
|
302
309
|
*
|