kysely 0.17.1 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/README.md +2 -0
  2. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +19 -0
  3. package/dist/cjs/driver/default-connection-provider.d.ts +1 -1
  4. package/dist/cjs/driver/default-connection-provider.js +2 -2
  5. package/dist/cjs/driver/dummy-driver.d.ts +8 -0
  6. package/dist/cjs/driver/dummy-driver.js +8 -0
  7. package/dist/cjs/driver/single-connection-provider.d.ts +1 -1
  8. package/dist/cjs/driver/single-connection-provider.js +2 -2
  9. package/dist/cjs/operation-node/alias-node.d.ts +2 -2
  10. package/dist/cjs/operation-node/alias-node.js +1 -2
  11. package/dist/cjs/operation-node/operation-node-transformer.js +1 -0
  12. package/dist/cjs/operation-node/update-query-node.d.ts +3 -0
  13. package/dist/cjs/operation-node/update-query-node.js +11 -2
  14. package/dist/cjs/parser/complex-expression-parser.d.ts +1 -1
  15. package/dist/cjs/parser/reference-parser.js +2 -1
  16. package/dist/cjs/parser/table-parser.js +2 -1
  17. package/dist/cjs/parser/update-set-parser.d.ts +3 -3
  18. package/dist/cjs/parser/with-parser.d.ts +2 -2
  19. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +2 -1
  20. package/dist/cjs/query-builder/delete-query-builder.d.ts +12 -5
  21. package/dist/cjs/query-builder/expression-builder.d.ts +1 -1
  22. package/dist/cjs/query-builder/expression-builder.js +2 -2
  23. package/dist/cjs/query-builder/function-builder.js +2 -2
  24. package/dist/cjs/query-builder/insert-query-builder.d.ts +1 -1
  25. package/dist/cjs/query-builder/on-conflict-builder.d.ts +25 -11
  26. package/dist/cjs/query-builder/select-query-builder.d.ts +15 -6
  27. package/dist/cjs/query-builder/select-query-builder.js +5 -5
  28. package/dist/cjs/query-builder/update-query-builder.d.ts +69 -33
  29. package/dist/cjs/query-builder/update-query-builder.js +7 -0
  30. package/dist/cjs/query-builder/where-interface.d.ts +12 -5
  31. package/dist/cjs/query-compiler/default-query-compiler.js +4 -0
  32. package/dist/cjs/query-creator.d.ts +1 -1
  33. package/dist/cjs/query-executor/default-query-executor.d.ts +8 -5
  34. package/dist/cjs/query-executor/default-query-executor.js +2 -2
  35. package/dist/cjs/query-executor/noop-query-executor.d.ts +7 -4
  36. package/dist/cjs/query-executor/noop-query-executor.js +2 -2
  37. package/dist/cjs/query-executor/query-executor-base.d.ts +62 -0
  38. package/dist/cjs/query-executor/query-executor-base.js +46 -0
  39. package/dist/cjs/query-executor/query-executor.d.ts +16 -17
  40. package/dist/cjs/query-executor/query-executor.js +0 -59
  41. package/dist/cjs/raw-builder/raw-builder.d.ts +32 -2
  42. package/dist/cjs/raw-builder/raw-builder.js +5 -26
  43. package/dist/cjs/raw-builder/sql.d.ts +11 -3
  44. package/dist/cjs/raw-builder/sql.js +10 -2
  45. package/dist/cjs/schema/alter-table-builder.d.ts +24 -2
  46. package/dist/cjs/schema/alter-table-builder.js +20 -0
  47. package/dist/cjs/schema/column-definition-builder.d.ts +4 -2
  48. package/dist/cjs/schema/create-table-builder.d.ts +1 -1
  49. package/dist/cjs/schema/create-table-builder.js +1 -1
  50. package/dist/cjs/util/type-utils.d.ts +1 -1
  51. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +19 -0
  52. package/dist/esm/driver/default-connection-provider.d.ts +1 -1
  53. package/dist/esm/driver/default-connection-provider.js +2 -2
  54. package/dist/esm/driver/dummy-driver.d.ts +8 -0
  55. package/dist/esm/driver/dummy-driver.js +8 -0
  56. package/dist/esm/driver/single-connection-provider.d.ts +1 -1
  57. package/dist/esm/driver/single-connection-provider.js +2 -2
  58. package/dist/esm/operation-node/alias-node.d.ts +2 -2
  59. package/dist/esm/operation-node/alias-node.js +1 -2
  60. package/dist/esm/operation-node/operation-node-transformer.js +1 -0
  61. package/dist/esm/operation-node/update-query-node.d.ts +3 -0
  62. package/dist/esm/operation-node/update-query-node.js +11 -2
  63. package/dist/esm/parser/complex-expression-parser.d.ts +1 -1
  64. package/dist/esm/parser/reference-parser.js +2 -1
  65. package/dist/esm/parser/table-parser.js +2 -1
  66. package/dist/esm/parser/update-set-parser.d.ts +3 -3
  67. package/dist/esm/parser/with-parser.d.ts +2 -2
  68. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +2 -1
  69. package/dist/esm/query-builder/delete-query-builder.d.ts +12 -5
  70. package/dist/esm/query-builder/expression-builder.d.ts +1 -1
  71. package/dist/esm/query-builder/expression-builder.js +1 -1
  72. package/dist/esm/query-builder/function-builder.js +1 -1
  73. package/dist/esm/query-builder/insert-query-builder.d.ts +1 -1
  74. package/dist/esm/query-builder/on-conflict-builder.d.ts +25 -11
  75. package/dist/esm/query-builder/select-query-builder.d.ts +15 -6
  76. package/dist/esm/query-builder/select-query-builder.js +5 -5
  77. package/dist/esm/query-builder/update-query-builder.d.ts +69 -33
  78. package/dist/esm/query-builder/update-query-builder.js +7 -0
  79. package/dist/esm/query-builder/where-interface.d.ts +12 -5
  80. package/dist/esm/query-compiler/default-query-compiler.js +4 -0
  81. package/dist/esm/query-creator.d.ts +1 -1
  82. package/dist/esm/query-executor/default-query-executor.d.ts +8 -5
  83. package/dist/esm/query-executor/default-query-executor.js +2 -2
  84. package/dist/esm/query-executor/noop-query-executor.d.ts +7 -4
  85. package/dist/esm/query-executor/noop-query-executor.js +2 -2
  86. package/dist/esm/query-executor/query-executor-base.d.ts +62 -0
  87. package/dist/esm/query-executor/query-executor-base.js +43 -0
  88. package/dist/esm/query-executor/query-executor.d.ts +16 -17
  89. package/dist/esm/query-executor/query-executor.js +1 -57
  90. package/dist/esm/raw-builder/raw-builder.d.ts +32 -2
  91. package/dist/esm/raw-builder/raw-builder.js +5 -26
  92. package/dist/esm/raw-builder/sql.d.ts +11 -3
  93. package/dist/esm/raw-builder/sql.js +10 -2
  94. package/dist/esm/schema/alter-table-builder.d.ts +24 -2
  95. package/dist/esm/schema/alter-table-builder.js +20 -0
  96. package/dist/esm/schema/column-definition-builder.d.ts +4 -2
  97. package/dist/esm/schema/create-table-builder.d.ts +1 -1
  98. package/dist/esm/schema/create-table-builder.js +1 -1
  99. package/dist/esm/util/type-utils.d.ts +1 -1
  100. package/package.json +9 -9
@@ -8,14 +8,14 @@ import { RawBuilder } from '../raw-builder/raw-builder.js';
8
8
  export declare type CommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB>) => CommonTableExpressionOutput<DB, CN>;
9
9
  export declare type RecursiveCommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpressionName<CN>>>) => CommonTableExpressionOutput<DB, CN>;
10
10
  export declare type QueryCreatorWithCommonTableExpression<DB, CN extends string, CTE> = QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpression<CTE>>>;
11
- declare type CommonTableExpressionOutput<DB, CN extends string> = SelectQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | InsertQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | UpdateQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | DeleteQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | RawBuilder<ExtractRowFromCommonTableExpressionName<CN>>;
11
+ declare type CommonTableExpressionOutput<DB, CN extends string> = SelectQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | InsertQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | UpdateQueryBuilder<DB, any, any, ExtractRowFromCommonTableExpressionName<CN>> | DeleteQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | RawBuilder<ExtractRowFromCommonTableExpressionName<CN>>;
12
12
  /**
13
13
  * Given a common CommonTableExpression CTE extracts the row type from it.
14
14
  *
15
15
  * For example a CTE `(db) => db.selectFrom('person').select(['id', 'first_name'])`
16
16
  * would result in `Pick<Person, 'id' | 'first_name'>`.
17
17
  */
18
- declare type ExtractRowFromCommonTableExpression<CTE> = CTE extends (creator: QueryCreator<any>) => infer Q ? Q extends SelectQueryBuilder<any, any, infer QO> ? QO : Q extends InsertQueryBuilder<any, any, infer QO> ? QO : Q extends UpdateQueryBuilder<any, any, infer QO> ? QO : Q extends DeleteQueryBuilder<any, any, infer QO> ? QO : Q extends RawBuilder<infer RO> ? RO : never : never;
18
+ declare type ExtractRowFromCommonTableExpression<CTE> = CTE extends (creator: QueryCreator<any>) => infer Q ? Q extends SelectQueryBuilder<any, any, infer QO> ? QO : Q extends InsertQueryBuilder<any, any, infer QO> ? QO : Q extends UpdateQueryBuilder<any, any, any, infer QO> ? QO : Q extends DeleteQueryBuilder<any, any, infer QO> ? QO : Q extends RawBuilder<infer RO> ? RO : never : never;
19
19
  /**
20
20
  * Extracts 'person' from a string like 'person(id, first_name)'.
21
21
  */
@@ -1,6 +1,7 @@
1
- import { DeleteQueryNode, UpdateQueryNode } from '../../index-nodeless.js';
1
+ import { DeleteQueryNode } from '../../operation-node/delete-query-node.js';
2
2
  import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
3
3
  import { SelectQueryNode } from '../../operation-node/select-query-node.js';
4
+ import { UpdateQueryNode } from '../../operation-node/update-query-node.js';
4
5
  export declare class DeduplicateJoinsTransformer extends OperationNodeTransformer {
5
6
  #private;
6
7
  protected transformSelectQuery(node: SelectQueryNode): SelectQueryNode;
@@ -46,7 +46,13 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
46
46
  * ```
47
47
  *
48
48
  * Operator can be any supported operator or if the typings don't support it
49
- * you can always use `sql\`your operator\``.
49
+ * you can always use
50
+ *
51
+ * ```ts
52
+ * sql`your operator`
53
+ * ```
54
+ *
55
+ * The next example uses the `>` operator:
50
56
  *
51
57
  * ```ts
52
58
  * const persons = await db
@@ -62,8 +68,8 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
62
68
  * select * from "person" where "id" > $1
63
69
  * ```
64
70
  *
65
- * The `where` methods don't change the type of the query. You can add
66
- * conditional `where`s easily by doing something like this:
71
+ * `where` methods don't change the type of the query. You can add
72
+ * conditional statements easily by doing something like this:
67
73
  *
68
74
  * ```ts
69
75
  * let query = db
@@ -71,6 +77,8 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
71
77
  * .selectAll()
72
78
  *
73
79
  * if (firstName) {
80
+ * // The query builder is immutable. Remember to reassign
81
+ * // the result back to the query variable.
74
82
  * query = query.where('first_name', '=', firstName)
75
83
  * }
76
84
  *
@@ -78,8 +86,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
78
86
  * ```
79
87
  *
80
88
  * This is true for basically all methods execpt the `select` and
81
- * `returning` methods, which DO change the return type of the
82
- * query.
89
+ * `returning`, that __do__ change the return type of the query.
83
90
  *
84
91
  * Both the first and third argument can also be subqueries.
85
92
  * A subquery is defined by passing a function and calling
@@ -3,7 +3,7 @@ import { TableExpression, TableExpressionDatabase, TableExpressionTables } from
3
3
  import { FunctionBuilder } from './function-builder.js';
4
4
  import { ExtractTypeFromReferenceExpression, StringReference } from '../parser/reference-parser.js';
5
5
  import { RawBuilder } from '../raw-builder/raw-builder.js';
6
- import { QueryExecutor } from '../index-nodeless.js';
6
+ import { QueryExecutor } from '../query-executor/query-executor.js';
7
7
  export declare class ExpressionBuilder<DB, TB extends keyof DB> {
8
8
  #private;
9
9
  constructor(props: ExpressionBuilderProps);
@@ -7,8 +7,8 @@ import { createQueryId } from '../util/query-id.js';
7
7
  import { FunctionBuilder } from './function-builder.js';
8
8
  import { parseStringReference, } from '../parser/reference-parser.js';
9
9
  import { RawBuilder } from '../raw-builder/raw-builder.js';
10
- import { RawNode } from '../index-nodeless.js';
11
10
  import { freeze } from '../util/object-utils.js';
11
+ import { RawNode } from '../operation-node/raw-node.js';
12
12
  export class ExpressionBuilder {
13
13
  #props;
14
14
  constructor(props) {
@@ -1,5 +1,5 @@
1
1
  /// <reference types="./function-builder.d.ts" />
2
- import { RawNode } from '../index-nodeless.js';
2
+ import { RawNode } from '../operation-node/raw-node.js';
3
3
  import { parseStringReference, } from '../parser/reference-parser.js';
4
4
  import { RawBuilder } from '../raw-builder/raw-builder.js';
5
5
  import { createQueryId } from '../util/query-id.js';
@@ -382,7 +382,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
382
382
  * .onDuplicateKeyUpdate({ species: 'hamster' })
383
383
  * ```
384
384
  */
385
- onDuplicateKeyUpdate(updates: MutationObject<DB, TB>): InsertQueryBuilder<DB, TB, O>;
385
+ onDuplicateKeyUpdate(updates: MutationObject<DB, TB, TB>): InsertQueryBuilder<DB, TB, O>;
386
386
  /**
387
387
  * Allows you to return data from modified rows.
388
388
  *
@@ -69,7 +69,13 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
69
69
  * ```
70
70
  *
71
71
  * Operator can be any supported operator or if the typings don't support it
72
- * you can always use `sql\`your operator\``.
72
+ * you can always use
73
+ *
74
+ * ```ts
75
+ * sql`your operator`
76
+ * ```
77
+ *
78
+ * The next example uses the `>` operator:
73
79
  *
74
80
  * ```ts
75
81
  * const persons = await db
@@ -85,8 +91,8 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
85
91
  * select * from "person" where "id" > $1
86
92
  * ```
87
93
  *
88
- * The `where` methods don't change the type of the query. You can add
89
- * conditional `where`s easily by doing something like this:
94
+ * `where` methods don't change the type of the query. You can add
95
+ * conditional statements easily by doing something like this:
90
96
  *
91
97
  * ```ts
92
98
  * let query = db
@@ -94,6 +100,8 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
94
100
  * .selectAll()
95
101
  *
96
102
  * if (firstName) {
103
+ * // The query builder is immutable. Remember to reassign
104
+ * // the result back to the query variable.
97
105
  * query = query.where('first_name', '=', firstName)
98
106
  * }
99
107
  *
@@ -101,8 +109,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
101
109
  * ```
102
110
  *
103
111
  * This is true for basically all methods execpt the `select` and
104
- * `returning` methods, which DO change the return type of the
105
- * query.
112
+ * `returning`, that __do__ change the return type of the query.
106
113
  *
107
114
  * Both the first and third argument can also be subqueries.
108
115
  * A subquery is defined by passing a function and calling
@@ -379,7 +386,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
379
386
  * do update set "first_name" = $3
380
387
  * ```
381
388
  */
382
- doUpdateSet(updates: MutationObject<OnConflictDatabase<DB, TB>, OnConflictTables<TB>>): OnConflictUpdateBuilder<OnConflictDatabase<DB, TB>, OnConflictTables<TB>>;
389
+ doUpdateSet(updates: MutationObject<OnConflictDatabase<DB, TB>, OnConflictTables<TB>, OnConflictTables<TB>>): OnConflictUpdateBuilder<OnConflictDatabase<DB, TB>, OnConflictTables<TB>>;
383
390
  }
384
391
  export interface OnConflictBuilderProps {
385
392
  readonly onConflictNode: OnConflictNode;
@@ -426,7 +433,13 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
426
433
  * ```
427
434
  *
428
435
  * Operator can be any supported operator or if the typings don't support it
429
- * you can always use `sql\`your operator\``.
436
+ * you can always use
437
+ *
438
+ * ```ts
439
+ * sql`your operator`
440
+ * ```
441
+ *
442
+ * The next example uses the `>` operator:
430
443
  *
431
444
  * ```ts
432
445
  * const persons = await db
@@ -442,8 +455,8 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
442
455
  * select * from "person" where "id" > $1
443
456
  * ```
444
457
  *
445
- * The `where` methods don't change the type of the query. You can add
446
- * conditional `where`s easily by doing something like this:
458
+ * `where` methods don't change the type of the query. You can add
459
+ * conditional statements easily by doing something like this:
447
460
  *
448
461
  * ```ts
449
462
  * let query = db
@@ -451,6 +464,8 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
451
464
  * .selectAll()
452
465
  *
453
466
  * if (firstName) {
467
+ * // The query builder is immutable. Remember to reassign
468
+ * // the result back to the query variable.
454
469
  * query = query.where('first_name', '=', firstName)
455
470
  * }
456
471
  *
@@ -458,8 +473,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
458
473
  * ```
459
474
  *
460
475
  * This is true for basically all methods execpt the `select` and
461
- * `returning` methods, which DO change the return type of the
462
- * query.
476
+ * `returning`, that __do__ change the return type of the query.
463
477
  *
464
478
  * Both the first and third argument can also be subqueries.
465
479
  * A subquery is defined by passing a function and calling
@@ -45,7 +45,13 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
45
45
  * ```
46
46
  *
47
47
  * Operator can be any supported operator or if the typings don't support it
48
- * you can always use `sql\`your operator\``.
48
+ * you can always use
49
+ *
50
+ * ```ts
51
+ * sql`your operator`
52
+ * ```
53
+ *
54
+ * The next example uses the `>` operator:
49
55
  *
50
56
  * ```ts
51
57
  * const persons = await db
@@ -61,8 +67,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
61
67
  * select * from "person" where "id" > $1
62
68
  * ```
63
69
  *
64
- * The `where` methods don't change the type of the query. You can add
65
- * conditional `where`s easily by doing something like this:
70
+ * `where` methods don't change the type of the query. You can add
71
+ * conditional statements easily by doing something like this:
66
72
  *
67
73
  * ```ts
68
74
  * let query = db
@@ -70,6 +76,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
70
76
  * .selectAll()
71
77
  *
72
78
  * if (firstName) {
79
+ * // The query builder is immutable. Remember to reassign
80
+ * // the result back to the query variable.
73
81
  * query = query.where('first_name', '=', firstName)
74
82
  * }
75
83
  *
@@ -77,8 +85,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
77
85
  * ```
78
86
  *
79
87
  * This is true for basically all methods execpt the `select` and
80
- * `returning` methods, which DO change the return type of the
81
- * query.
88
+ * `returning`, that __do__ change the return type of the query.
82
89
  *
83
90
  * Both the first and third argument can also be subqueries.
84
91
  * A subquery is defined by passing a function and calling
@@ -1205,7 +1212,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1205
1212
  * ### Examples
1206
1213
  *
1207
1214
  * ```ts
1208
- * await db.selectFrom('pet')
1215
+ * const pets = await db.selectFrom('pet')
1209
1216
  * .selectAll('pet')
1210
1217
  * .select(
1211
1218
  * (qb) => qb.selectFrom('person')
@@ -1214,6 +1221,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1214
1221
  * .as('owner_first_name')
1215
1222
  * )
1216
1223
  * .execute()
1224
+ *
1225
+ * pets[0].owner_first_name
1217
1226
  * ```
1218
1227
  */
1219
1228
  as<A extends string>(alias: A): AliasedQueryBuilder<DB, TB, O, A>;
@@ -13,6 +13,7 @@ import { freeze } from '../util/object-utils.js';
13
13
  import { parseGroupBy } from '../parser/group-by-parser.js';
14
14
  import { parseUnion } from '../parser/union-parser.js';
15
15
  import { NoResultError } from './no-result-error.js';
16
+ import { IdentifierNode } from '../operation-node/identifier-node.js';
16
17
  export class SelectQueryBuilder {
17
18
  #props;
18
19
  constructor(props) {
@@ -513,7 +514,7 @@ export class SelectQueryBuilder {
513
514
  * ### Examples
514
515
  *
515
516
  * ```ts
516
- * await db.selectFrom('pet')
517
+ * const pets = await db.selectFrom('pet')
517
518
  * .selectAll('pet')
518
519
  * .select(
519
520
  * (qb) => qb.selectFrom('person')
@@ -522,6 +523,8 @@ export class SelectQueryBuilder {
522
523
  * .as('owner_first_name')
523
524
  * )
524
525
  * .execute()
526
+ *
527
+ * pets[0].owner_first_name
525
528
  * ```
526
529
  */
527
530
  as(alias) {
@@ -610,9 +613,6 @@ export class AliasedQueryBuilder {
610
613
  }
611
614
  toOperationNode() {
612
615
  const node = this.#queryBuilder.toOperationNode();
613
- if (SelectQueryNode.is(node)) {
614
- return AliasNode.create(node, this.#alias);
615
- }
616
- throw new Error('only select queries can be aliased');
616
+ return AliasNode.create(node, IdentifierNode.create(this.#alias));
617
617
  }
618
618
  }
@@ -19,7 +19,7 @@ import { JoinInterface } from './join-interface.js';
19
19
  import { ReturningInterface } from './returning-interface.js';
20
20
  import { NoResultErrorConstructor } from './no-result-error.js';
21
21
  import { Selectable } from '../util/column-type.js';
22
- export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, JoinInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
22
+ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, JoinInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
23
23
  #private;
24
24
  constructor(props: UpdateQueryBuilderProps);
25
25
  /**
@@ -46,7 +46,13 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
46
46
  * ```
47
47
  *
48
48
  * Operator can be any supported operator or if the typings don't support it
49
- * you can always use `sql\`your operator\``.
49
+ * you can always use
50
+ *
51
+ * ```ts
52
+ * sql`your operator`
53
+ * ```
54
+ *
55
+ * The next example uses the `>` operator:
50
56
  *
51
57
  * ```ts
52
58
  * const persons = await db
@@ -62,8 +68,8 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
62
68
  * select * from "person" where "id" > $1
63
69
  * ```
64
70
  *
65
- * The `where` methods don't change the type of the query. You can add
66
- * conditional `where`s easily by doing something like this:
71
+ * `where` methods don't change the type of the query. You can add
72
+ * conditional statements easily by doing something like this:
67
73
  *
68
74
  * ```ts
69
75
  * let query = db
@@ -71,6 +77,8 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
71
77
  * .selectAll()
72
78
  *
73
79
  * if (firstName) {
80
+ * // The query builder is immutable. Remember to reassign
81
+ * // the result back to the query variable.
74
82
  * query = query.where('first_name', '=', firstName)
75
83
  * }
76
84
  *
@@ -78,8 +86,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
78
86
  * ```
79
87
  *
80
88
  * This is true for basically all methods execpt the `select` and
81
- * `returning` methods, which DO change the return type of the
82
- * query.
89
+ * `returning`, that __do__ change the return type of the query.
83
90
  *
84
91
  * Both the first and third argument can also be subqueries.
85
92
  * A subquery is defined by passing a function and calling
@@ -199,9 +206,9 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
199
206
  * .execute()
200
207
  * ```
201
208
  */
202
- where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): UpdateQueryBuilder<DB, TB, O>;
203
- where(grouper: WhereGrouper<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
204
- where(raw: AnyRawBuilder): UpdateQueryBuilder<DB, TB, O>;
209
+ where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): UpdateQueryBuilder<DB, UT, TB, O>;
210
+ where(grouper: WhereGrouper<DB, TB>): UpdateQueryBuilder<DB, UT, TB, O>;
211
+ where(raw: AnyRawBuilder): UpdateQueryBuilder<DB, UT, TB, O>;
205
212
  /**
206
213
  * Adds a `where` clause where both sides of the operator are references
207
214
  * to columns.
@@ -253,7 +260,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
253
260
  * ) as "pet_name"
254
261
  * from "person"
255
262
  */
256
- whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
263
+ whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): UpdateQueryBuilder<DB, UT, TB, O>;
257
264
  /**
258
265
  * Adds an `or where` clause to the query. Otherwise works just like {@link where}.
259
266
  *
@@ -317,15 +324,15 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
317
324
  * select * from "person" (where "id" = 1 or "id" = 2)
318
325
  * ```
319
326
  */
320
- orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): UpdateQueryBuilder<DB, TB, O>;
321
- orWhere(grouper: WhereGrouper<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
322
- orWhere(raw: AnyRawBuilder): UpdateQueryBuilder<DB, TB, O>;
327
+ orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): UpdateQueryBuilder<DB, UT, TB, O>;
328
+ orWhere(grouper: WhereGrouper<DB, TB>): UpdateQueryBuilder<DB, UT, TB, O>;
329
+ orWhere(raw: AnyRawBuilder): UpdateQueryBuilder<DB, UT, TB, O>;
323
330
  /**
324
331
  * Adds an `or where` clause to the query. Otherwise works just like {@link whereRef}.
325
332
  *
326
333
  * Also see {@link orWhere} and {@link where}.
327
334
  */
328
- orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
335
+ orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): UpdateQueryBuilder<DB, UT, TB, O>;
329
336
  /**
330
337
  * Adds a `where exists` clause to the query.
331
338
  *
@@ -386,19 +393,48 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
386
393
  * )
387
394
  * ```
388
395
  */
389
- whereExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
396
+ whereExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, UT, TB, O>;
390
397
  /**
391
398
  * Just like {@link whereExists} but creates a `not exists` clause.
392
399
  */
393
- whereNotExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
400
+ whereNotExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, UT, TB, O>;
394
401
  /**
395
402
  * Just like {@link whereExists} but creates a `or exists` clause.
396
403
  */
397
- orWhereExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
404
+ orWhereExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, UT, TB, O>;
398
405
  /**
399
406
  * Just like {@link whereExists} but creates a `or not exists` clause.
400
407
  */
401
- orWhereNotExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
408
+ orWhereNotExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, UT, TB, O>;
409
+ /**
410
+ * Adds a from clause to the update query.
411
+ *
412
+ * This is supported only on some databases like PostgreSQL.
413
+ *
414
+ * The API is the same as {@link QueryCreator.selectFrom}.
415
+ *
416
+ * ### Examples
417
+ *
418
+ * ```ts
419
+ * db.updateTable('person')
420
+ * .from('pet')
421
+ * .set({
422
+ * first_name: (eb) => eb.ref('pet.name')
423
+ * })
424
+ * .whereRef('pet.owner_id', '=', 'person.id')
425
+ * ```
426
+ *
427
+ * The generated SQL (PostgreSQL):
428
+ *
429
+ * ```sql
430
+ * update "person"
431
+ * set "first_name" = "pet"."name"
432
+ * from "pet"
433
+ * where "pet"."owner_id" = "person"."id"
434
+ * ```
435
+ */
436
+ from<TE extends TableExpression<DB, TB>>(table: TE): UpdateQueryBuilder<TableExpressionDatabase<DB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
437
+ from<TE extends TableExpression<DB, TB>>(table: TE[]): UpdateQueryBuilder<TableExpressionDatabase<DB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
402
438
  /**
403
439
  * Joins another table to the query using an inner join.
404
440
  *
@@ -508,23 +544,23 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
508
544
  * on "doggos"."owner_id" = "person"."id"
509
545
  * ```
510
546
  */
511
- innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
512
- innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
547
+ innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<TableExpressionDatabase<DB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
548
+ innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<TableExpressionDatabase<DB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
513
549
  /**
514
550
  * Just like {@link innerJoin} but adds a left join nstead of an inner join.
515
551
  */
516
- leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
517
- leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
552
+ leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
553
+ leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
518
554
  /**
519
555
  * Just like {@link innerJoin} but adds a right join instead of an inner join.
520
556
  */
521
- rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
522
- rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
557
+ rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
558
+ rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
523
559
  /**
524
560
  * Just like {@link innerJoin} but adds a full join instead of an inner join.
525
561
  */
526
- fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
527
- fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
562
+ fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
563
+ fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, UT, TableExpressionTables<DB, TB, TE>, O>;
528
564
  /**
529
565
  * Sets the values to update for an {@link Kysely.updateTable | update} query.
530
566
  *
@@ -612,7 +648,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
612
648
  * where "id" = $4
613
649
  * ```
614
650
  */
615
- set(row: MutationObject<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
651
+ set(row: MutationObject<DB, TB, UT>): UpdateQueryBuilder<DB, UT, TB, O>;
616
652
  /**
617
653
  * Allows you to return data from modified rows.
618
654
  *
@@ -672,13 +708,13 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
672
708
  * .executeTakeFirst()
673
709
  * ```
674
710
  */
675
- returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): UpdateQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
676
- returning<SE extends SelectExpression<DB, TB>>(selection: SE): UpdateQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
711
+ returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SE>>;
712
+ returning<SE extends SelectExpression<DB, TB>>(selection: SE): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SE>>;
677
713
  /**
678
714
  * Adds a `returning *` to an insert/update/delete query on databases
679
715
  * that support `returning` such as PostgreSQL.
680
716
  */
681
- returningAll(): UpdateQueryBuilder<DB, TB, Selectable<DB[TB]>>;
717
+ returningAll(): UpdateQueryBuilder<DB, UT, TB, Selectable<DB[TB]>>;
682
718
  /**
683
719
  * Simply calls the given function passing `this` as the only argument.
684
720
  *
@@ -738,18 +774,18 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
738
774
  * }
739
775
  * ```
740
776
  */
741
- if<O2>(condition: boolean, func: (qb: this) => UpdateQueryBuilder<DB, TB, O2>): UpdateQueryBuilder<DB, TB, O2 extends UpdateResult ? UpdateResult : O extends UpdateResult ? Partial<O2> : MergePartial<O, O2>>;
777
+ if<O2>(condition: boolean, func: (qb: this) => UpdateQueryBuilder<DB, UT, TB, O2>): UpdateQueryBuilder<DB, UT, TB, O2 extends UpdateResult ? UpdateResult : O extends UpdateResult ? Partial<O2> : MergePartial<O, O2>>;
742
778
  /**
743
779
  * Change the output type of the query.
744
780
  *
745
781
  * You should only use this method as the last resort if the types
746
782
  * don't support your use case.
747
783
  */
748
- castTo<T>(): UpdateQueryBuilder<DB, TB, T>;
784
+ castTo<T>(): UpdateQueryBuilder<DB, UT, TB, T>;
749
785
  /**
750
786
  * Returns a copy of this UpdateQueryBuilder instance with the given plugin installed.
751
787
  */
752
- withPlugin(plugin: KyselyPlugin): UpdateQueryBuilder<DB, TB, O>;
788
+ withPlugin(plugin: KyselyPlugin): UpdateQueryBuilder<DB, UT, TB, O>;
753
789
  toOperationNode(): UpdateQueryNode;
754
790
  compile(): CompiledQuery;
755
791
  /**
@@ -1,5 +1,6 @@
1
1
  /// <reference types="./update-query-builder.d.ts" />
2
2
  import { parseJoin, } from '../parser/join-parser.js';
3
+ import { parseTableExpressionOrList, } from '../parser/table-parser.js';
3
4
  import { parseSelectExpressionOrList, parseSelectAll, } from '../parser/select-parser.js';
4
5
  import { parseExistFilter, parseReferenceFilter, parseWhereFilter, parseNotExistFilter, } from '../parser/filter-parser.js';
5
6
  import { QueryNode } from '../operation-node/query-node.js';
@@ -62,6 +63,12 @@ export class UpdateQueryBuilder {
62
63
  queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(arg)),
63
64
  });
64
65
  }
66
+ from(from) {
67
+ return new UpdateQueryBuilder({
68
+ ...this.#props,
69
+ queryNode: UpdateQueryNode.cloneWithFromItems(this.#props.queryNode, parseTableExpressionOrList(from)),
70
+ });
71
+ }
65
72
  innerJoin(...args) {
66
73
  return new UpdateQueryBuilder({
67
74
  ...this.#props,
@@ -26,7 +26,13 @@ export interface WhereInterface<DB, TB extends keyof DB> {
26
26
  * ```
27
27
  *
28
28
  * Operator can be any supported operator or if the typings don't support it
29
- * you can always use `sql\`your operator\``.
29
+ * you can always use
30
+ *
31
+ * ```ts
32
+ * sql`your operator`
33
+ * ```
34
+ *
35
+ * The next example uses the `>` operator:
30
36
  *
31
37
  * ```ts
32
38
  * const persons = await db
@@ -42,8 +48,8 @@ export interface WhereInterface<DB, TB extends keyof DB> {
42
48
  * select * from "person" where "id" > $1
43
49
  * ```
44
50
  *
45
- * The `where` methods don't change the type of the query. You can add
46
- * conditional `where`s easily by doing something like this:
51
+ * `where` methods don't change the type of the query. You can add
52
+ * conditional statements easily by doing something like this:
47
53
  *
48
54
  * ```ts
49
55
  * let query = db
@@ -51,6 +57,8 @@ export interface WhereInterface<DB, TB extends keyof DB> {
51
57
  * .selectAll()
52
58
  *
53
59
  * if (firstName) {
60
+ * // The query builder is immutable. Remember to reassign
61
+ * // the result back to the query variable.
54
62
  * query = query.where('first_name', '=', firstName)
55
63
  * }
56
64
  *
@@ -58,8 +66,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
58
66
  * ```
59
67
  *
60
68
  * This is true for basically all methods execpt the `select` and
61
- * `returning` methods, which DO change the return type of the
62
- * query.
69
+ * `returning`, that __do__ change the return type of the query.
63
70
  *
64
71
  * Both the first and third argument can also be subqueries.
65
72
  * A subquery is defined by passing a function and calling
@@ -425,6 +425,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
425
425
  if (node.updates) {
426
426
  this.compileList(node.updates);
427
427
  }
428
+ if (node.from) {
429
+ this.append(' ');
430
+ this.visitNode(node.from);
431
+ }
428
432
  if (node.joins) {
429
433
  this.append(' ');
430
434
  this.compileList(node.joins, ' ');
@@ -203,7 +203,7 @@ export declare class QueryCreator<DB> {
203
203
  * console.log(result.numUpdatedRows)
204
204
  * ```
205
205
  */
206
- updateTable<TR extends TableReference<DB>>(table: TR): UpdateQueryBuilder<TableExpressionDatabase<DB, TR>, TableExpressionTables<DB, never, TR>, UpdateResult>;
206
+ updateTable<TR extends TableReference<DB>>(table: TR): UpdateQueryBuilder<TableExpressionDatabase<DB, TR>, TableExpressionTables<DB, never, TR>, TableExpressionTables<DB, never, TR>, UpdateResult>;
207
207
  /**
208
208
  * Creates a `with` query (Common Table Expression).
209
209
  *