kysely 0.12.0 → 0.14.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 (172) hide show
  1. package/README.md +34 -10
  2. package/dist/cjs/{introspection → dialect}/database-introspector.d.ts +0 -0
  3. package/dist/cjs/{introspection → dialect}/database-introspector.js +0 -0
  4. package/dist/cjs/dialect/dialect-adapter-base.d.ts +36 -0
  5. package/dist/cjs/dialect/dialect.d.ts +1 -1
  6. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +38 -2
  7. package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -1
  8. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +17 -1
  9. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +29 -0
  10. package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +4 -1
  11. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +38 -2
  12. package/dist/cjs/dialect/postgres/postgres-adapter.js +2 -1
  13. package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +17 -1
  14. package/dist/cjs/dialect/postgres/postgres-driver.d.ts +29 -0
  15. package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +4 -1
  16. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +38 -2
  17. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +17 -1
  18. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +29 -0
  19. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +4 -1
  20. package/dist/cjs/driver/default-connection-provider.d.ts +4 -0
  21. package/dist/cjs/driver/runtime-driver.d.ts +29 -0
  22. package/dist/cjs/driver/single-connection-provider.d.ts +4 -0
  23. package/dist/cjs/index.d.ts +4 -3
  24. package/dist/cjs/index.js +3 -2
  25. package/dist/cjs/kysely.d.ts +152 -1
  26. package/dist/cjs/kysely.js +37 -0
  27. package/dist/cjs/migration/migration.d.ts +154 -11
  28. package/dist/cjs/migration/migration.js +256 -135
  29. package/dist/cjs/operation-node/check-constraint-node.d.ts +1 -1
  30. package/dist/cjs/operation-node/check-constraint-node.js +2 -3
  31. package/dist/cjs/operation-node/column-definition-node.d.ts +8 -7
  32. package/dist/cjs/operation-node/column-definition-node.js +0 -4
  33. package/dist/cjs/operation-node/common-table-expression-name-node.d.ts +15 -0
  34. package/dist/cjs/operation-node/common-table-expression-name-node.js +23 -0
  35. package/dist/cjs/operation-node/common-table-expression-node.d.ts +3 -3
  36. package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
  37. package/dist/cjs/operation-node/generated-node.d.ts +20 -0
  38. package/dist/cjs/operation-node/generated-node.js +31 -0
  39. package/dist/cjs/operation-node/on-conflict-node.d.ts +13 -2
  40. package/dist/cjs/operation-node/on-conflict-node.js +39 -1
  41. package/dist/cjs/operation-node/operation-node-transformer.d.ts +4 -2
  42. package/dist/cjs/operation-node/operation-node-transformer.js +22 -6
  43. package/dist/cjs/operation-node/operation-node-visitor.d.ts +4 -2
  44. package/dist/cjs/operation-node/operation-node-visitor.js +2 -1
  45. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  46. package/dist/cjs/operation-node/with-node.d.ts +3 -1
  47. package/dist/cjs/operation-node/with-node.js +2 -1
  48. package/dist/cjs/package.json +1 -3
  49. package/dist/cjs/parser/parse-context.d.ts +14 -0
  50. package/dist/cjs/parser/with-parser.d.ts +32 -5
  51. package/dist/cjs/parser/with-parser.js +13 -2
  52. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +36 -2
  53. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.d.ts +34 -0
  54. package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +34 -0
  55. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +8 -0
  56. package/dist/cjs/query-builder/delete-query-builder.d.ts +545 -0
  57. package/dist/cjs/query-builder/insert-query-builder.d.ts +142 -76
  58. package/dist/cjs/query-builder/insert-query-builder.js +150 -15
  59. package/dist/cjs/query-builder/join-interface.d.ts +3 -6
  60. package/dist/cjs/query-builder/on-conflict-builder.d.ts +684 -0
  61. package/dist/cjs/query-builder/on-conflict-builder.js +323 -0
  62. package/dist/cjs/query-builder/returning-interface.d.ts +1 -1
  63. package/dist/cjs/query-builder/select-query-builder.d.ts +513 -2
  64. package/dist/cjs/query-builder/select-query-builder.js +2 -2
  65. package/dist/cjs/query-builder/update-query-builder.d.ts +547 -2
  66. package/dist/cjs/query-builder/update-query-builder.js +2 -2
  67. package/dist/cjs/query-builder/where-interface.d.ts +7 -10
  68. package/dist/cjs/query-compiler/default-query-compiler.d.ts +4 -2
  69. package/dist/cjs/query-compiler/default-query-compiler.js +48 -8
  70. package/dist/cjs/query-creator.d.ts +27 -3
  71. package/dist/cjs/query-creator.js +33 -1
  72. package/dist/cjs/query-executor/default-query-executor.d.ts +19 -0
  73. package/dist/cjs/query-executor/noop-query-executor.d.ts +19 -0
  74. package/dist/cjs/raw-builder/raw-builder.js +1 -1
  75. package/dist/cjs/schema/alter-table-builder.d.ts +253 -5
  76. package/dist/cjs/schema/alter-table-builder.js +45 -9
  77. package/dist/cjs/schema/column-definition-builder.d.ts +146 -6
  78. package/dist/cjs/schema/column-definition-builder.js +21 -8
  79. package/dist/cjs/schema/create-index-builder.d.ts +3 -2
  80. package/dist/cjs/schema/create-index-builder.js +2 -2
  81. package/dist/cjs/schema/create-table-builder.d.ts +3 -2
  82. package/dist/cjs/schema/create-table-builder.js +2 -2
  83. package/dist/esm/{introspection → dialect}/database-introspector.d.ts +0 -0
  84. package/dist/esm/{introspection → dialect}/database-introspector.js +0 -0
  85. package/dist/esm/dialect/dialect-adapter-base.d.ts +36 -0
  86. package/dist/esm/dialect/dialect.d.ts +1 -1
  87. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +38 -2
  88. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -1
  89. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +17 -1
  90. package/dist/esm/dialect/mysql/mysql-driver.d.ts +29 -0
  91. package/dist/esm/dialect/mysql/mysql-introspector.d.ts +4 -1
  92. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +38 -2
  93. package/dist/esm/dialect/postgres/postgres-adapter.js +2 -1
  94. package/dist/esm/dialect/postgres/postgres-dialect.d.ts +17 -1
  95. package/dist/esm/dialect/postgres/postgres-driver.d.ts +29 -0
  96. package/dist/esm/dialect/postgres/postgres-introspector.d.ts +4 -1
  97. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +38 -2
  98. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +17 -1
  99. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +29 -0
  100. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +4 -1
  101. package/dist/esm/driver/default-connection-provider.d.ts +4 -0
  102. package/dist/esm/driver/runtime-driver.d.ts +29 -0
  103. package/dist/esm/driver/single-connection-provider.d.ts +4 -0
  104. package/dist/esm/index.d.ts +4 -3
  105. package/dist/esm/index.js +3 -2
  106. package/dist/esm/kysely.d.ts +152 -1
  107. package/dist/esm/kysely.js +37 -0
  108. package/dist/esm/migration/migration.d.ts +154 -11
  109. package/dist/esm/migration/migration.js +255 -134
  110. package/dist/esm/operation-node/check-constraint-node.d.ts +1 -1
  111. package/dist/esm/operation-node/check-constraint-node.js +2 -3
  112. package/dist/esm/operation-node/column-definition-node.d.ts +8 -7
  113. package/dist/esm/operation-node/column-definition-node.js +0 -4
  114. package/dist/esm/operation-node/common-table-expression-name-node.d.ts +15 -0
  115. package/dist/esm/operation-node/common-table-expression-name-node.js +20 -0
  116. package/dist/esm/operation-node/common-table-expression-node.d.ts +3 -3
  117. package/dist/esm/operation-node/data-type-node.d.ts +1 -1
  118. package/dist/esm/operation-node/generated-node.d.ts +20 -0
  119. package/dist/esm/operation-node/generated-node.js +28 -0
  120. package/dist/esm/operation-node/on-conflict-node.d.ts +13 -2
  121. package/dist/esm/operation-node/on-conflict-node.js +39 -1
  122. package/dist/esm/operation-node/operation-node-transformer.d.ts +4 -2
  123. package/dist/esm/operation-node/operation-node-transformer.js +22 -6
  124. package/dist/esm/operation-node/operation-node-visitor.d.ts +4 -2
  125. package/dist/esm/operation-node/operation-node-visitor.js +2 -1
  126. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  127. package/dist/esm/operation-node/with-node.d.ts +3 -1
  128. package/dist/esm/operation-node/with-node.js +2 -1
  129. package/dist/esm/package.json +1 -3
  130. package/dist/esm/parser/parse-context.d.ts +14 -0
  131. package/dist/esm/parser/with-parser.d.ts +32 -5
  132. package/dist/esm/parser/with-parser.js +13 -2
  133. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +36 -2
  134. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.d.ts +34 -0
  135. package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +34 -0
  136. package/dist/esm/plugin/with-schema/with-schema-transformer.js +8 -0
  137. package/dist/esm/query-builder/delete-query-builder.d.ts +545 -0
  138. package/dist/esm/query-builder/insert-query-builder.d.ts +142 -76
  139. package/dist/esm/query-builder/insert-query-builder.js +150 -15
  140. package/dist/esm/query-builder/join-interface.d.ts +3 -6
  141. package/dist/esm/query-builder/on-conflict-builder.d.ts +684 -0
  142. package/dist/esm/query-builder/on-conflict-builder.js +317 -0
  143. package/dist/esm/query-builder/returning-interface.d.ts +1 -1
  144. package/dist/esm/query-builder/select-query-builder.d.ts +513 -2
  145. package/dist/esm/query-builder/select-query-builder.js +2 -2
  146. package/dist/esm/query-builder/update-query-builder.d.ts +547 -2
  147. package/dist/esm/query-builder/update-query-builder.js +2 -2
  148. package/dist/esm/query-builder/where-interface.d.ts +7 -10
  149. package/dist/esm/query-compiler/default-query-compiler.d.ts +4 -2
  150. package/dist/esm/query-compiler/default-query-compiler.js +48 -8
  151. package/dist/esm/query-creator.d.ts +27 -3
  152. package/dist/esm/query-creator.js +33 -1
  153. package/dist/esm/query-executor/default-query-executor.d.ts +19 -0
  154. package/dist/esm/query-executor/noop-query-executor.d.ts +19 -0
  155. package/dist/esm/raw-builder/raw-builder.js +1 -1
  156. package/dist/esm/schema/alter-table-builder.d.ts +253 -5
  157. package/dist/esm/schema/alter-table-builder.js +45 -9
  158. package/dist/esm/schema/column-definition-builder.d.ts +146 -6
  159. package/dist/esm/schema/column-definition-builder.js +21 -8
  160. package/dist/esm/schema/create-index-builder.d.ts +3 -2
  161. package/dist/esm/schema/create-index-builder.js +2 -2
  162. package/dist/esm/schema/create-table-builder.d.ts +3 -2
  163. package/dist/esm/schema/create-table-builder.js +2 -2
  164. package/package.json +8 -6
  165. package/dist/cjs/operation-node/generated-always-as-node.d.ts +0 -16
  166. package/dist/cjs/operation-node/generated-always-as-node.js +0 -25
  167. package/dist/cjs/parser/on-conflict-parser.d.ts +0 -10
  168. package/dist/cjs/parser/on-conflict-parser.js +0 -35
  169. package/dist/esm/operation-node/generated-always-as-node.d.ts +0 -16
  170. package/dist/esm/operation-node/generated-always-as-node.js +0 -22
  171. package/dist/esm/parser/on-conflict-parser.d.ts +0 -10
  172. package/dist/esm/parser/on-conflict-parser.js +0 -30
@@ -12,6 +12,40 @@ import { KyselyPlugin, PluginTransformQueryArgs, PluginTransformResultArgs } fro
12
12
  */
13
13
  export declare class ImmediateValuePlugin implements KyselyPlugin {
14
14
  #private;
15
+ /**
16
+ * This is called for each query before it is executed. You can modify the query by
17
+ * transforming its {@link OperationNode} tree provided in {@link PluginTransformQueryArgs.node | args.node}
18
+ * and returning the transformed tree. You'd usually want to use an {@link OperationNodeTransformer}
19
+ * for this.
20
+ *
21
+ * If you need to pass some query-related data between this method and `transformResult` you
22
+ * can use a `WeakMap` with {@link PluginTransformQueryArgs.queryId | args.queryId} as the key:
23
+ *
24
+ * ```ts
25
+ * const plugin = {
26
+ * data: new WeakMap<QueryId, SomeData>(),
27
+ *
28
+ * transformQuery(args: PluginTransformQueryArgs): RootOperationNode {
29
+ * this.data.set(args.queryId, something)
30
+ * return args.node
31
+ * },
32
+ *
33
+ * transformResult(args: PluginTransformResultArgs): QueryResult<UnknownRow> {
34
+ * const data = this.data.get(args.queryId)
35
+ * return args.result
36
+ * }
37
+ * }
38
+ * ```
39
+ *
40
+ * You should use a `WeakMap` instead of a `Map` or some other strong references because `transformQuery`
41
+ * is not always matched by a call to `transformResult` which would leave orphaned items in the map
42
+ * and cause a memory leak.
43
+ */
15
44
  transformQuery(args: PluginTransformQueryArgs): RootOperationNode;
45
+ /**
46
+ * This method is called for each query after it has been executed. The result
47
+ * of the query can be accessed through {@link PluginTransformResultArgs.result | args.result}.
48
+ * You can modify the result and return the modifier result.
49
+ */
16
50
  transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>>;
17
51
  }
@@ -5,6 +5,40 @@ import { UnknownRow } from '../../util/type-utils.js';
5
5
  export declare class WithSchemaPlugin implements KyselyPlugin {
6
6
  #private;
7
7
  constructor(schema: string);
8
+ /**
9
+ * This is called for each query before it is executed. You can modify the query by
10
+ * transforming its {@link OperationNode} tree provided in {@link PluginTransformQueryArgs.node | args.node}
11
+ * and returning the transformed tree. You'd usually want to use an {@link OperationNodeTransformer}
12
+ * for this.
13
+ *
14
+ * If you need to pass some query-related data between this method and `transformResult` you
15
+ * can use a `WeakMap` with {@link PluginTransformQueryArgs.queryId | args.queryId} as the key:
16
+ *
17
+ * ```ts
18
+ * const plugin = {
19
+ * data: new WeakMap<QueryId, SomeData>(),
20
+ *
21
+ * transformQuery(args: PluginTransformQueryArgs): RootOperationNode {
22
+ * this.data.set(args.queryId, something)
23
+ * return args.node
24
+ * },
25
+ *
26
+ * transformResult(args: PluginTransformResultArgs): QueryResult<UnknownRow> {
27
+ * const data = this.data.get(args.queryId)
28
+ * return args.result
29
+ * }
30
+ * }
31
+ * ```
32
+ *
33
+ * You should use a `WeakMap` instead of a `Map` or some other strong references because `transformQuery`
34
+ * is not always matched by a call to `transformResult` which would leave orphaned items in the map
35
+ * and cause a memory leak.
36
+ */
8
37
  transformQuery(args: PluginTransformQueryArgs): RootOperationNode;
38
+ /**
39
+ * This method is called for each query after it has been executed. The result
40
+ * of the query can be accessed through {@link PluginTransformResultArgs.result | args.result}.
41
+ * You can modify the result and return the modifier result.
42
+ */
9
43
  transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>>;
10
44
  }
@@ -79,6 +79,9 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
79
79
  if ('joins' in node && node.joins) {
80
80
  this.#collectTablesFromJoins(node.joins, tables);
81
81
  }
82
+ if ('with' in node && node.with) {
83
+ this.#removeCommonTableExpressionTables(node.with, tables);
84
+ }
82
85
  return tables;
83
86
  }
84
87
  #collectTablesFromTableExpressionNodes(nodes, tables) {
@@ -101,4 +104,9 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
101
104
  tables.add(table.table.identifier);
102
105
  }
103
106
  }
107
+ #removeCommonTableExpressionTables(node, tables) {
108
+ for (const expr of node.expressions) {
109
+ tables.delete(expr.name.table.table.identifier);
110
+ }
111
+ }
104
112
  }
@@ -20,28 +20,573 @@ import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
20
20
  export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, JoinInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
21
21
  #private;
22
22
  constructor(props: DeleteQueryBuilderProps);
23
+ /**
24
+ * Adds a `where` clause to the query.
25
+ *
26
+ * Also see {@link orWhere}, {@link whereExists} and {@link whereRef}.
27
+ *
28
+ * ### Examples
29
+ *
30
+ * Find a row by column value:
31
+ *
32
+ * ```ts
33
+ * const person = await db
34
+ * .selectFrom('person')
35
+ * .selectAll()
36
+ * .where('id', '=', 100)
37
+ * .executeTakeFirst()
38
+ * ```
39
+ *
40
+ * The generated SQL (PostgreSQL):
41
+ *
42
+ * ```sql
43
+ * select * from "person" where "id" = $1
44
+ * ```
45
+ *
46
+ * Operator can be any supported operator or if the typings don't support it
47
+ * you can always use `db.raw('your operator')`.
48
+ *
49
+ * ```ts
50
+ * const persons = await db
51
+ * .selectFrom('person')
52
+ * .selectAll()
53
+ * .where('id', '>', 100)
54
+ * .execute()
55
+ * ```
56
+ *
57
+ * The generated SQL (PostgreSQL):
58
+ *
59
+ * ```sql
60
+ * select * from "person" where "id" > $1
61
+ * ```
62
+ *
63
+ * The `where` methods don't change the type of the query. You can add
64
+ * conditional `where`s easily by doing something like this:
65
+ *
66
+ * ```ts
67
+ * let query = db
68
+ * .selectFrom('person')
69
+ * .selectAll()
70
+ *
71
+ * if (firstName) {
72
+ * query = query.where('first_name', '=', firstName)
73
+ * }
74
+ *
75
+ * const persons = await query.execute()
76
+ * ```
77
+ *
78
+ * This is true for basically all methods execpt the `select` and
79
+ * `returning` methods, which DO change the return type of the
80
+ * query.
81
+ *
82
+ * Both the first and third argument can also be subqueries.
83
+ * A subquery is defined by passing a function and calling
84
+ * the `selectFrom` method of the object passed into the
85
+ * function:
86
+ *
87
+ * ```ts
88
+ * const persons = await db
89
+ * .selectFrom('person')
90
+ * .selectAll()
91
+ * .where(
92
+ * (qb) => qb.selectFrom('pet')
93
+ * .select('pet.name')
94
+ * .whereRef('pet.owner_id', '=', 'person.id')
95
+ * .limit(1),
96
+ * '=',
97
+ * 'Fluffy'
98
+ * )
99
+ * .execute()
100
+ * ```
101
+ *
102
+ * The generated SQL (PostgreSQL):
103
+ *
104
+ * ```sql
105
+ * select *
106
+ * from "person"
107
+ * where (
108
+ * select "pet"."name"
109
+ * from "pet"
110
+ * where "pet"."owner_id" = "person"."id"
111
+ * limit $1
112
+ * ) = $2
113
+ * ```
114
+ *
115
+ * A `where in` query can be built by using the `in` operator and an array
116
+ * of values. The values in the array can also be subqueries or raw
117
+ * instances.
118
+ *
119
+ * ```ts
120
+ * const persons = await db
121
+ * .selectFrom('person')
122
+ * .selectAll()
123
+ * .where('person.id', 'in', [100, 200, 300])
124
+ * .execute()
125
+ * ```
126
+ *
127
+ * The generated SQL (PostgreSQL):
128
+ *
129
+ * ```sql
130
+ * select * from "person" where "id" in ($1, $2, $3)
131
+ * ```
132
+ *
133
+ * If everything else fails, you can always pass {@link Kysely.raw | raw}
134
+ * as any of the arguments, including the operator:
135
+ *
136
+ * ```ts
137
+ * const persons = await db
138
+ * .selectFrom('person')
139
+ * .selectAll()
140
+ * .where(
141
+ * db.raw('coalesce(first_name, last_name)'),
142
+ * 'like',
143
+ * '%' + name + '%',
144
+ * )
145
+ * .execute()
146
+ * ```
147
+ *
148
+ * The generated SQL (PostgreSQL):
149
+ *
150
+ * ```sql
151
+ * select * from "person"
152
+ * where coalesce(first_name, last_name) like $1
153
+ * ```
154
+ *
155
+ * If you only pass one function argument to this method, it can be
156
+ * used to create parentheses around other where statements:
157
+ *
158
+ * ```ts
159
+ * const persons = await db
160
+ * .selectFrom('person')
161
+ * .selectAll()
162
+ * .where((qb) => qb
163
+ * .where('id', '=', 1)
164
+ * .orWhere('id', '=', 2)
165
+ * )
166
+ * .execute()
167
+ * ```
168
+ *
169
+ * The generated SQL (PostgreSQL):
170
+ *
171
+ * ```sql
172
+ * select * from "person" (where "id" = 1 or "id" = 2)
173
+ * ```
174
+ *
175
+ * In all examples above the columns were known at compile time
176
+ * (except for the `raw` expressions). By default kysely only allows
177
+ * you to refer to columns that exist in the database **and** can be
178
+ * referred to in the current query and context.
179
+ *
180
+ * Sometimes you may want to refer to columns that come from the user
181
+ * input and thus are not available at compile time.
182
+ *
183
+ * You have two options, `db.raw` or `db.dynamic`. The example below
184
+ * uses both:
185
+ *
186
+ * ```ts
187
+ * const { ref } = db.dynamic
188
+ *
189
+ * const persons = await db
190
+ * .selectFrom('person')
191
+ * .selectAll()
192
+ * .where(ref(columnFromUserInput), '=', 1)
193
+ * .orWhere(db.raw('??', [columnFromUserInput]), '=', 2)
194
+ * .execute()
195
+ * ```
196
+ */
23
197
  where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): DeleteQueryBuilder<DB, TB, O>;
24
198
  where(grouper: WhereGrouper<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
25
199
  where(raw: AnyRawBuilder): DeleteQueryBuilder<DB, TB, O>;
200
+ /**
201
+ * Adds a `where` clause where both sides of the operator are references
202
+ * to columns.
203
+ *
204
+ * The normal `where` method treats the right hand side argument as a
205
+ * value by default. `whereRef` treats it as a column reference. This method is
206
+ * expecially useful with joins and correclated subqueries.
207
+ *
208
+ * ### Examples
209
+ *
210
+ * Usage with a join:
211
+ *
212
+ * ```ts
213
+ * db.selectFrom(['person', 'pet'])
214
+ * .selectAll()
215
+ * .whereRef('person.first_name', '=', 'pet.name')
216
+ * ```
217
+ *
218
+ * The generated SQL (PostgreSQL):
219
+ *
220
+ * ```sql
221
+ * select * from "person", "pet" where "person"."first_name" = "pet"."name"
222
+ * ```
223
+ *
224
+ * Usage in a subquery:
225
+ *
226
+ * ```ts
227
+ * const persons = await db
228
+ * .selectFrom('person')
229
+ * .selectAll('person')
230
+ * .select((qb) => qb
231
+ * .selectFrom('pet')
232
+ * .select('name')
233
+ * .whereRef('pet.owner_id', '=', 'person.id')
234
+ * .limit(1)
235
+ * .as('pet_name')
236
+ * )
237
+ * .execute()
238
+ * ```
239
+ *
240
+ * The generated SQL (PostgreSQL):
241
+ *
242
+ * ```sql
243
+ * select "person".*, (
244
+ * select "name"
245
+ * from "pet"
246
+ * where "pet"."owner_id" = "person"."id"
247
+ * limit $1
248
+ * ) as "pet_name"
249
+ * from "person"
250
+ */
26
251
  whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
252
+ /**
253
+ * Adds an `or where` clause to the query. Otherwise works just like {@link where}.
254
+ *
255
+ * It's often necessary to wrap `or where` clauses in parentheses to control
256
+ * precendence. You can use the one argument version of the `where` method
257
+ * for that. See the examples.
258
+ *
259
+ * ### Examples
260
+ *
261
+ * ```ts
262
+ * const persons = await db
263
+ * .selectFrom('person')
264
+ * .selectAll()
265
+ * .where('id', '=', 1)
266
+ * .orWhere('id', '=', 2)
267
+ * .execute()
268
+ * ```
269
+ *
270
+ * The generated SQL (PostgreSQL):
271
+ *
272
+ * ```sql
273
+ * select * from "person" where "id" = 1 or "id" = 2
274
+ * ```
275
+ *
276
+ * Grouping with parentheses:
277
+ *
278
+ * ```ts
279
+ * const persons = await db
280
+ * .selectFrom('person')
281
+ * .selectAll()
282
+ * .where((qb) => qb
283
+ * .where('id', '=', 1)
284
+ * .orWhere('id', '=', 2)
285
+ * )
286
+ * .execute()
287
+ * ```
288
+ *
289
+ * The generated SQL (PostgreSQL):
290
+ *
291
+ * ```sql
292
+ * select * from "person" (where "id" = 1 or "id" = 2)
293
+ * ```
294
+ *
295
+ * Even the first `where` can be an `orWhere`. This is useful
296
+ * if you are looping through a set of conditions:
297
+ *
298
+ * ```ts
299
+ * const persons = await db
300
+ * .selectFrom('person')
301
+ * .selectAll()
302
+ * .where((qb) => qb
303
+ * .orWhere('id', '=', 1)
304
+ * .orWhere('id', '=', 2)
305
+ * )
306
+ * .execute()
307
+ * ```
308
+ *
309
+ * The generated SQL (PostgreSQL):
310
+ *
311
+ * ```sql
312
+ * select * from "person" (where "id" = 1 or "id" = 2)
313
+ * ```
314
+ */
27
315
  orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): DeleteQueryBuilder<DB, TB, O>;
28
316
  orWhere(grouper: WhereGrouper<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
29
317
  orWhere(raw: AnyRawBuilder): DeleteQueryBuilder<DB, TB, O>;
318
+ /**
319
+ * Adds an `or where` clause to the query. Otherwise works just like {@link whereRef}.
320
+ *
321
+ * Also see {@link orWhere} and {@link where}.
322
+ */
30
323
  orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
324
+ /**
325
+ * Adds a `where exists` clause to the query.
326
+ *
327
+ * You can either use a subquery or a raw instance.
328
+ *
329
+ * ### Examples
330
+ *
331
+ * The query below selets all persons that own a pet named Catto:
332
+ *
333
+ * ```ts
334
+ * const persons = await db
335
+ * .selectFrom('person')
336
+ * .selectAll()
337
+ * .whereExists((qb) => qb
338
+ * .selectFrom('pet')
339
+ * .select('pet.id')
340
+ * .whereRef('person.id', '=', 'pet.owner_id')
341
+ * .where('pet.name', '=', 'Catto')
342
+ * )
343
+ * .execute()
344
+ * ```
345
+ *
346
+ * The generated SQL (PostgreSQL):
347
+ *
348
+ * ```sql
349
+ * select * from "person"
350
+ * where exists (
351
+ * select "pet"."id"
352
+ * from "pet"
353
+ * where "person"."id" = "pet"."owner_id"
354
+ * and "pet"."name" = $1
355
+ * )
356
+ * ```
357
+ *
358
+ * The same query as in the previous example but with using raw:
359
+ *
360
+ * ```ts
361
+ * db.selectFrom('person')
362
+ * .selectAll()
363
+ * .whereExists(
364
+ * db.raw(
365
+ * '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
366
+ * ['Catto']
367
+ * )
368
+ * )
369
+ * ```
370
+ *
371
+ * The generated SQL (PostgreSQL):
372
+ *
373
+ * ```sql
374
+ * select * from "person"
375
+ * where exists (
376
+ * select pet.id
377
+ * from pet
378
+ * where person.id = pet.owner_id
379
+ * and pet.name = $1
380
+ * )
381
+ * ```
382
+ */
31
383
  whereExists(arg: ExistsExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
384
+ /**
385
+ * Just like {@link whereExists} but creates a `not exists` clause.
386
+ */
32
387
  whereNotExists(arg: ExistsExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
388
+ /**
389
+ * Just like {@link whereExists} but creates a `or exists` clause.
390
+ */
33
391
  orWhereExists(arg: ExistsExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
392
+ /**
393
+ * Just like {@link whereExists} but creates a `or not exists` clause.
394
+ */
34
395
  orWhereNotExists(arg: ExistsExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
396
+ /**
397
+ * Joins another table to the query using an inner join.
398
+ *
399
+ * ### Examples
400
+ *
401
+ * Simple usage by providing a table name and two columns to join:
402
+ *
403
+ * ```ts
404
+ * const result = await db
405
+ * .selectFrom('person')
406
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
407
+ * // `select` needs to come after the call to `innerJoin` so
408
+ * // that you can select from the joined table.
409
+ * .select('person.id', 'pet.name')
410
+ * .execute()
411
+ *
412
+ * result[0].id
413
+ * result[0].name
414
+ * ```
415
+ *
416
+ * The generated SQL (PostgreSQL):
417
+ *
418
+ * ```sql
419
+ * select "person"."id", "pet"."name"
420
+ * from "person"
421
+ * inner join "pet"
422
+ * on "pet"."owner_id" = "person"."id"
423
+ * ```
424
+ *
425
+ * You can give an alias for the joined table like this:
426
+ *
427
+ * ```ts
428
+ * await db.selectFrom('person')
429
+ * .innerJoin('pet as p', 'p.owner_id', 'person.id')
430
+ * .where('p.name', '=', 'Doggo')
431
+ * .selectAll()
432
+ * .execute()
433
+ * ```
434
+ *
435
+ * The generated SQL (PostgreSQL):
436
+ *
437
+ * ```sql
438
+ * select *
439
+ * from "person"
440
+ * inner join "pet" as "p"
441
+ * on "p"."owner_id" = "person"."id"
442
+ * where "p".name" = $1
443
+ * ```
444
+ *
445
+ * You can provide a function as the second argument to get a join
446
+ * builder for creating more complex joins. The join builder has a
447
+ * bunch of `on*` methods for building the `on` clause of the join.
448
+ * There's basically an equivalent for every `where` method
449
+ * (`on`, `onRef`, `onExists` etc.). You can do all the same things
450
+ * with the `on` method that you can with the corresponding `where`
451
+ * method. See the `where` method documentation for more examples.
452
+ *
453
+ * ```ts
454
+ * await db.selectFrom('person')
455
+ * .innerJoin(
456
+ * 'pet',
457
+ * (join) => join
458
+ * .onRef('pet.owner_id', '=', 'person.id')
459
+ * .on('pet.name', '=', 'Doggo')
460
+ * )
461
+ * .selectAll()
462
+ * .execute()
463
+ * ```
464
+ *
465
+ * The generated SQL (PostgreSQL):
466
+ *
467
+ * ```sql
468
+ * select *
469
+ * from "person"
470
+ * inner join "pet"
471
+ * on "pet"."owner_id" = "person"."id"
472
+ * and "pet"."name" = $1
473
+ * ```
474
+ *
475
+ * You can join a subquery by providing a function as the first
476
+ * argument:
477
+ *
478
+ * ```ts
479
+ * await db.selectFrom('person')
480
+ * .innerJoin(
481
+ * (qb) => qb.selectFrom('pet')
482
+ * .select(['owner_id', 'name'])
483
+ * .where('name', '=', 'Doggo')
484
+ * .as('doggos'),
485
+ * 'doggos.owner_id',
486
+ * 'person.id',
487
+ * )
488
+ * .selectAll()
489
+ * .execute()
490
+ * ```
491
+ *
492
+ * The generated SQL (PostgreSQL):
493
+ *
494
+ * ```sql
495
+ * select *
496
+ * from "person"
497
+ * inner join (
498
+ * select "owner_id", "name"
499
+ * from "pet"
500
+ * where "name" = $1
501
+ * ) as "doggos"
502
+ * on "doggos"."owner_id" = "person"."id"
503
+ * ```
504
+ */
35
505
  innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): DeleteQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
36
506
  innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): DeleteQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
507
+ /**
508
+ * Just like {@link innerJoin} but adds a left join nstead of an inner join.
509
+ */
37
510
  leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): DeleteQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
38
511
  leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): DeleteQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
512
+ /**
513
+ * Just like {@link innerJoin} but adds a right join instead of an inner join.
514
+ */
39
515
  rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): DeleteQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
40
516
  rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): DeleteQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
517
+ /**
518
+ * Just like {@link innerJoin} but adds a full join instead of an inner join.
519
+ */
41
520
  fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): DeleteQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
42
521
  fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): DeleteQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
522
+ /**
523
+ * Allows you to return data from modified rows.
524
+ *
525
+ * On supported databases like PostgreSQL, this method can be chained to
526
+ * `insert`, `update` and `delete` queries to return data.
527
+ *
528
+ * Note that on SQLite you need to give aliases for the expressions to avoid
529
+ * [this bug](https://sqlite.org/forum/forumpost/033daf0b32) in SQLite.
530
+ * For example `.returning('id as id')`.
531
+ *
532
+ * Also see the {@link returningAll} method.
533
+ *
534
+ * ### Examples
535
+ *
536
+ * Return one column:
537
+ *
538
+ * ```ts
539
+ * const { id } = await db
540
+ * .insertInto('person')
541
+ * .values({
542
+ * id: db.generated,
543
+ * first_name: 'Jennifer',
544
+ * last_name: 'Aniston'
545
+ * })
546
+ * .returning('id')
547
+ * .executeTakeFirst()
548
+ * ```
549
+ *
550
+ * Return multiple columns:
551
+ *
552
+ * ```ts
553
+ * const { id, first_name } = await db
554
+ * .insertInto('person')
555
+ * .values({
556
+ * id: db.generated,
557
+ * first_name: 'Jennifer',
558
+ * last_name: 'Aniston'
559
+ * })
560
+ * .returning(['id', 'last_name'])
561
+ * .executeTakeFirst()
562
+ * ```
563
+ *
564
+ * Return arbitrary expressions:
565
+ *
566
+ * ```ts
567
+ * const { raw } = db
568
+ *
569
+ * const { id, full_name, first_pet_id } = await db
570
+ * .insertInto('person')
571
+ * .values({
572
+ * id: db.generated,
573
+ * first_name: 'Jennifer',
574
+ * last_name: 'Aniston'
575
+ * })
576
+ * .returning([
577
+ * 'id as id',
578
+ * raw<string>(`concat(first_name, ' ', last_name)`).as('full_name'),
579
+ * (qb) => qb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
580
+ * ])
581
+ * .executeTakeFirst()
582
+ * ```
583
+ */
43
584
  returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): DeleteQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
44
585
  returning<SE extends SelectExpression<DB, TB>>(selection: SE): DeleteQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
586
+ /**
587
+ * Adds a `returning *` to an insert/update/delete query on databases
588
+ * that support `returning` such as PostgreSQL.
589
+ */
45
590
  returningAll(): DeleteQueryBuilder<DB, TB, DB[TB]>;
46
591
  /**
47
592
  * Simply calls the given function passing `this` as the only argument.