kysely 0.11.1 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -2
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -6
- package/dist/cjs/dialect/postgres/postgres-query-compiler.d.ts +3 -0
- package/dist/cjs/dialect/postgres/postgres-query-compiler.js +9 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.js +6 -2
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +7 -7
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -2
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +6 -6
- package/dist/cjs/driver/runtime-driver.js +1 -1
- package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +1 -0
- package/dist/cjs/dynamic/dynamic-reference-builder.js +9 -1
- package/dist/cjs/dynamic/dynamic.d.ts +6 -7
- package/dist/cjs/dynamic/dynamic.js +6 -7
- package/dist/cjs/index.d.ts +51 -33
- package/dist/cjs/index.js +48 -30
- package/dist/cjs/kysely.d.ts +39 -15
- package/dist/cjs/kysely.js +32 -9
- package/dist/cjs/migration/migration.d.ts +2 -2
- package/dist/cjs/operation-node/alias-node.d.ts +1 -1
- package/dist/cjs/operation-node/create-table-node.d.ts +6 -2
- package/dist/cjs/operation-node/create-table-node.js +6 -6
- package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +4 -4
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +11 -1
- package/dist/cjs/operation-node/operation-node-utils.d.ts +1 -1
- 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/query-node.d.ts +0 -2
- package/dist/cjs/operation-node/query-node.js +0 -10
- package/dist/cjs/operation-node/values-node.d.ts +15 -0
- package/dist/cjs/operation-node/values-node.js +18 -0
- package/dist/cjs/parser/complex-expression-parser.d.ts +9 -0
- package/dist/cjs/parser/complex-expression-parser.js +25 -0
- package/dist/cjs/parser/filter-parser.d.ts +13 -3
- package/dist/cjs/parser/filter-parser.js +56 -62
- package/dist/cjs/parser/insert-values-parser.d.ts +7 -10
- package/dist/cjs/parser/insert-values-parser.js +31 -39
- package/dist/cjs/parser/order-by-parser.d.ts +1 -1
- package/dist/cjs/parser/parse-context.d.ts +8 -8
- package/dist/cjs/parser/parse-context.js +10 -10
- package/dist/cjs/parser/reference-parser.d.ts +8 -7
- package/dist/cjs/parser/reference-parser.js +8 -17
- package/dist/cjs/parser/returning-parser.d.ts +1 -5
- package/dist/cjs/parser/select-parser.d.ts +12 -14
- package/dist/cjs/parser/select-parser.js +5 -9
- package/dist/cjs/parser/table-parser.d.ts +9 -11
- package/dist/cjs/parser/table-parser.js +2 -8
- package/dist/cjs/parser/union-parser.d.ts +2 -2
- package/dist/cjs/parser/union-parser.js +1 -6
- package/dist/cjs/parser/update-set-parser.d.ts +2 -8
- package/dist/cjs/parser/update-set-parser.js +6 -26
- package/dist/cjs/parser/value-parser.d.ts +9 -6
- package/dist/cjs/parser/value-parser.js +7 -30
- package/dist/cjs/parser/with-parser.d.ts +6 -3
- package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
- package/dist/cjs/query-builder/delete-query-builder.d.ts +102 -0
- package/dist/cjs/query-builder/delete-query-builder.js +185 -0
- package/dist/cjs/query-builder/expression-builder.d.ts +8 -6
- package/dist/cjs/query-builder/expression-builder.js +3 -3
- package/dist/cjs/query-builder/function-builder.d.ts +2 -1
- package/dist/cjs/query-builder/function-builder.js +2 -1
- package/dist/cjs/query-builder/having-interface.d.ts +49 -0
- package/dist/cjs/query-builder/having-interface.js +2 -0
- package/dist/cjs/query-builder/insert-query-builder.d.ts +439 -0
- package/dist/cjs/query-builder/insert-query-builder.js +256 -0
- package/dist/cjs/query-builder/insert-result.d.ts +3 -2
- package/dist/cjs/query-builder/insert-result.js +3 -2
- package/dist/cjs/query-builder/join-builder.d.ts +22 -20
- package/dist/cjs/query-builder/join-builder.js +12 -12
- package/dist/cjs/query-builder/join-interface.d.ts +133 -0
- package/dist/cjs/query-builder/join-interface.js +2 -0
- package/dist/cjs/query-builder/no-result-error.d.ts +9 -0
- package/dist/cjs/query-builder/no-result-error.js +14 -0
- package/dist/cjs/query-builder/returning-interface.d.ts +73 -0
- package/dist/cjs/query-builder/returning-interface.js +2 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +711 -0
- package/dist/cjs/query-builder/select-query-builder.js +571 -0
- package/dist/cjs/query-builder/update-query-builder.d.ts +190 -0
- package/dist/cjs/query-builder/update-query-builder.js +279 -0
- package/dist/cjs/query-builder/where-interface.d.ts +381 -0
- package/dist/cjs/query-builder/where-interface.js +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +22 -5
- package/dist/cjs/query-creator.d.ts +42 -40
- package/dist/cjs/query-creator.js +33 -28
- package/dist/cjs/query-executor/query-executor.d.ts +1 -1
- package/dist/cjs/query-executor/query-executor.js +1 -1
- package/dist/cjs/raw-builder/raw-builder.d.ts +2 -0
- package/dist/cjs/raw-builder/raw-builder.js +6 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +2 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +27 -20
- package/dist/cjs/schema/create-index-builder.d.ts +2 -1
- package/dist/cjs/schema/create-index-builder.js +2 -1
- package/dist/cjs/schema/create-table-builder.d.ts +26 -9
- package/dist/cjs/schema/create-table-builder.js +42 -9
- package/dist/cjs/schema/create-view-builder.d.ts +17 -3
- package/dist/cjs/schema/create-view-builder.js +25 -16
- package/dist/cjs/schema/schema.d.ts +18 -11
- package/dist/cjs/schema/schema.js +18 -11
- package/dist/cjs/util/dynamic-import.js +1 -1
- package/dist/cjs/util/log.d.ts +11 -8
- package/dist/cjs/util/log.js +25 -12
- package/dist/cjs/util/type-utils.d.ts +7 -7
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -2
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -6
- package/dist/esm/dialect/postgres/postgres-query-compiler.d.ts +3 -0
- package/dist/esm/dialect/postgres/postgres-query-compiler.js +9 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.js +6 -2
- package/dist/esm/dialect/sqlite/sqlite-driver.js +7 -7
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -2
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +6 -6
- package/dist/esm/driver/runtime-driver.js +1 -1
- package/dist/esm/dynamic/dynamic-reference-builder.d.ts +1 -0
- package/dist/esm/dynamic/dynamic-reference-builder.js +7 -0
- package/dist/esm/dynamic/dynamic.d.ts +6 -7
- package/dist/esm/dynamic/dynamic.js +6 -7
- package/dist/esm/index.d.ts +51 -33
- package/dist/esm/index.js +48 -30
- package/dist/esm/kysely.d.ts +39 -15
- package/dist/esm/kysely.js +32 -9
- package/dist/esm/migration/migration.d.ts +2 -2
- package/dist/esm/operation-node/alias-node.d.ts +1 -1
- package/dist/esm/operation-node/create-table-node.d.ts +6 -2
- package/dist/esm/operation-node/create-table-node.js +6 -6
- package/dist/esm/operation-node/create-view-node.d.ts +1 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +4 -4
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +11 -1
- package/dist/esm/operation-node/operation-node-utils.d.ts +1 -1
- 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/query-node.d.ts +0 -2
- package/dist/esm/operation-node/query-node.js +0 -10
- package/dist/esm/operation-node/values-node.d.ts +15 -0
- package/dist/esm/operation-node/values-node.js +15 -0
- package/dist/esm/parser/complex-expression-parser.d.ts +9 -0
- package/dist/esm/parser/complex-expression-parser.js +20 -0
- package/dist/esm/parser/filter-parser.d.ts +13 -3
- package/dist/esm/parser/filter-parser.js +55 -62
- package/dist/esm/parser/insert-values-parser.d.ts +7 -10
- package/dist/esm/parser/insert-values-parser.js +31 -38
- package/dist/esm/parser/order-by-parser.d.ts +1 -1
- package/dist/esm/parser/parse-context.d.ts +8 -8
- package/dist/esm/parser/parse-context.js +10 -10
- package/dist/esm/parser/reference-parser.d.ts +8 -7
- package/dist/esm/parser/reference-parser.js +9 -18
- package/dist/esm/parser/returning-parser.d.ts +1 -5
- package/dist/esm/parser/select-parser.d.ts +12 -14
- package/dist/esm/parser/select-parser.js +6 -10
- package/dist/esm/parser/table-parser.d.ts +9 -11
- package/dist/esm/parser/table-parser.js +3 -9
- package/dist/esm/parser/union-parser.d.ts +2 -2
- package/dist/esm/parser/union-parser.js +1 -6
- package/dist/esm/parser/update-set-parser.d.ts +2 -8
- package/dist/esm/parser/update-set-parser.js +5 -24
- package/dist/esm/parser/value-parser.d.ts +9 -6
- package/dist/esm/parser/value-parser.js +8 -31
- package/dist/esm/parser/with-parser.d.ts +6 -3
- package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
- package/dist/esm/query-builder/delete-query-builder.d.ts +102 -0
- package/dist/esm/query-builder/delete-query-builder.js +181 -0
- package/dist/esm/query-builder/expression-builder.d.ts +8 -6
- package/dist/esm/query-builder/expression-builder.js +3 -3
- package/dist/esm/query-builder/function-builder.d.ts +2 -1
- package/dist/esm/query-builder/function-builder.js +2 -1
- package/dist/esm/query-builder/having-interface.d.ts +49 -0
- package/dist/esm/query-builder/having-interface.js +1 -0
- package/dist/esm/query-builder/insert-query-builder.d.ts +439 -0
- package/dist/esm/query-builder/insert-query-builder.js +252 -0
- package/dist/esm/query-builder/insert-result.d.ts +3 -2
- package/dist/esm/query-builder/insert-result.js +3 -2
- package/dist/esm/query-builder/join-builder.d.ts +22 -20
- package/dist/esm/query-builder/join-builder.js +12 -12
- package/dist/esm/query-builder/join-interface.d.ts +133 -0
- package/dist/esm/query-builder/join-interface.js +1 -0
- package/dist/esm/query-builder/no-result-error.d.ts +9 -0
- package/dist/esm/query-builder/no-result-error.js +10 -0
- package/dist/esm/query-builder/returning-interface.d.ts +73 -0
- package/dist/esm/query-builder/returning-interface.js +1 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +711 -0
- package/dist/esm/query-builder/select-query-builder.js +566 -0
- package/dist/esm/query-builder/update-query-builder.d.ts +190 -0
- package/dist/esm/query-builder/update-query-builder.js +275 -0
- package/dist/esm/query-builder/where-interface.d.ts +381 -0
- package/dist/esm/query-builder/where-interface.js +1 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/esm/query-compiler/default-query-compiler.js +22 -5
- package/dist/esm/query-creator.d.ts +42 -40
- package/dist/esm/query-creator.js +33 -28
- package/dist/esm/query-executor/query-executor.d.ts +1 -1
- package/dist/esm/query-executor/query-executor.js +1 -1
- package/dist/esm/raw-builder/raw-builder.d.ts +2 -0
- package/dist/esm/raw-builder/raw-builder.js +6 -0
- package/dist/esm/schema/alter-table-builder.d.ts +2 -2
- package/dist/esm/schema/column-definition-builder.d.ts +27 -20
- package/dist/esm/schema/create-index-builder.d.ts +2 -1
- package/dist/esm/schema/create-index-builder.js +2 -1
- package/dist/esm/schema/create-table-builder.d.ts +26 -9
- package/dist/esm/schema/create-table-builder.js +43 -10
- package/dist/esm/schema/create-view-builder.d.ts +17 -3
- package/dist/esm/schema/create-view-builder.js +25 -16
- package/dist/esm/schema/schema.d.ts +18 -11
- package/dist/esm/schema/schema.js +18 -11
- package/dist/esm/util/dynamic-import.js +1 -1
- package/dist/esm/util/log.d.ts +11 -8
- package/dist/esm/util/log.js +25 -12
- package/dist/esm/util/type-utils.d.ts +7 -7
- package/package.json +3 -3
- package/dist/cjs/query-builder/query-builder.d.ts +0 -1707
- package/dist/cjs/query-builder/query-builder.js +0 -1067
- package/dist/esm/query-builder/query-builder.d.ts +0 -1707
- package/dist/esm/query-builder/query-builder.js +0 -1061
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, WhereGrouper } from '../parser/filter-parser.js';
|
|
2
|
+
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
3
|
+
import { AnyRawBuilder } from '../util/type-utils.js';
|
|
4
|
+
export interface WhereInterface<DB, TB extends keyof DB> {
|
|
5
|
+
/**
|
|
6
|
+
* Adds a `where` clause to the query.
|
|
7
|
+
*
|
|
8
|
+
* Also see {@link WhereInterface.whereExists | whereExists}, {@link WhereInterface.whereRef | whereRef}
|
|
9
|
+
* and {@link WhereInterface.whereRef | orWhere}.
|
|
10
|
+
*
|
|
11
|
+
* ### Examples
|
|
12
|
+
*
|
|
13
|
+
* Find a row by column value:
|
|
14
|
+
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* const person = await db
|
|
17
|
+
* .selectFrom('person')
|
|
18
|
+
* .selectAll()
|
|
19
|
+
* .where('id', '=', 100)
|
|
20
|
+
* .executeTakeFirst()
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* The generated SQL (PostgreSQL):
|
|
24
|
+
*
|
|
25
|
+
* ```sql
|
|
26
|
+
* select * from "person" where "id" = $1
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* Operator can be any supported operator or if the typings don't support it
|
|
30
|
+
* you can always use `db.raw('your operator')`.
|
|
31
|
+
*
|
|
32
|
+
* ```ts
|
|
33
|
+
* const persons = await db
|
|
34
|
+
* .selectFrom('person')
|
|
35
|
+
* .selectAll()
|
|
36
|
+
* .where('id', '>', 100)
|
|
37
|
+
* .execute()
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* The generated SQL (PostgreSQL):
|
|
41
|
+
*
|
|
42
|
+
* ```sql
|
|
43
|
+
* select * from "person" where "id" > $1
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* The `where` methods don't change the type of the query. You can add
|
|
47
|
+
* conditional `where`s easily by doing something like this:
|
|
48
|
+
*
|
|
49
|
+
* ```ts
|
|
50
|
+
* let query = db
|
|
51
|
+
* .selectFrom('person')
|
|
52
|
+
* .selectAll()
|
|
53
|
+
*
|
|
54
|
+
* if (firstName) {
|
|
55
|
+
* query = query.where('first_name', '=', firstName)
|
|
56
|
+
* }
|
|
57
|
+
*
|
|
58
|
+
* const persons = await query.execute()
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* This is true for basically all methods execpt the `select` and
|
|
62
|
+
* `returning` methods, which DO change the return type of the
|
|
63
|
+
* query.
|
|
64
|
+
*
|
|
65
|
+
* Both the first and third argument can also be subqueries.
|
|
66
|
+
* A subquery is defined by passing a function and calling
|
|
67
|
+
* the `selectFrom` method of the object passed into the
|
|
68
|
+
* function:
|
|
69
|
+
*
|
|
70
|
+
* ```ts
|
|
71
|
+
* const persons = await db
|
|
72
|
+
* .selectFrom('person')
|
|
73
|
+
* .selectAll()
|
|
74
|
+
* .where(
|
|
75
|
+
* (qb) => qb.selectFrom('pet')
|
|
76
|
+
* .select('pet.name')
|
|
77
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
78
|
+
* .limit(1),
|
|
79
|
+
* '=',
|
|
80
|
+
* 'Fluffy'
|
|
81
|
+
* )
|
|
82
|
+
* .execute()
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* The generated SQL (PostgreSQL):
|
|
86
|
+
*
|
|
87
|
+
* ```sql
|
|
88
|
+
* select *
|
|
89
|
+
* from "person"
|
|
90
|
+
* where (
|
|
91
|
+
* select "pet"."name"
|
|
92
|
+
* from "pet"
|
|
93
|
+
* where "pet"."owner_id" = "person"."id"
|
|
94
|
+
* limit $1
|
|
95
|
+
* ) = $2
|
|
96
|
+
* ```
|
|
97
|
+
*
|
|
98
|
+
* A `where in` query can be built by using the `in` operator and an array
|
|
99
|
+
* of values. The values in the array can also be subqueries or raw
|
|
100
|
+
* instances.
|
|
101
|
+
*
|
|
102
|
+
* ```ts
|
|
103
|
+
* const persons = await db
|
|
104
|
+
* .selectFrom('person')
|
|
105
|
+
* .selectAll()
|
|
106
|
+
* .where('person.id', 'in', [100, 200, 300])
|
|
107
|
+
* .execute()
|
|
108
|
+
* ```
|
|
109
|
+
*
|
|
110
|
+
* The generated SQL (PostgreSQL):
|
|
111
|
+
*
|
|
112
|
+
* ```sql
|
|
113
|
+
* select * from "person" where "id" in ($1, $2, $3)
|
|
114
|
+
* ```
|
|
115
|
+
*
|
|
116
|
+
* If everything else fails, you can always pass {@link Kysely.raw | raw}
|
|
117
|
+
* as any of the arguments, including the operator:
|
|
118
|
+
*
|
|
119
|
+
* ```ts
|
|
120
|
+
* const persons = await db
|
|
121
|
+
* .selectFrom('person')
|
|
122
|
+
* .selectAll()
|
|
123
|
+
* .where(
|
|
124
|
+
* db.raw('coalesce(first_name, last_name)'),
|
|
125
|
+
* 'like',
|
|
126
|
+
* '%' + name + '%',
|
|
127
|
+
* )
|
|
128
|
+
* .execute()
|
|
129
|
+
* ```
|
|
130
|
+
*
|
|
131
|
+
* The generated SQL (PostgreSQL):
|
|
132
|
+
*
|
|
133
|
+
* ```sql
|
|
134
|
+
* select * from "person"
|
|
135
|
+
* where coalesce(first_name, last_name) like $1
|
|
136
|
+
* ```
|
|
137
|
+
*
|
|
138
|
+
* If you only pass one function argument to this method, it can be
|
|
139
|
+
* used to create parentheses around other where statements:
|
|
140
|
+
*
|
|
141
|
+
* ```ts
|
|
142
|
+
* const persons = await db
|
|
143
|
+
* .selectFrom('person')
|
|
144
|
+
* .selectAll()
|
|
145
|
+
* .where((qb) => qb
|
|
146
|
+
* .where('id', '=', 1)
|
|
147
|
+
* .orWhere('id', '=', 2)
|
|
148
|
+
* )
|
|
149
|
+
* .execute()
|
|
150
|
+
* ```
|
|
151
|
+
*
|
|
152
|
+
* The generated SQL (PostgreSQL):
|
|
153
|
+
*
|
|
154
|
+
* ```sql
|
|
155
|
+
* select * from "person" (where "id" = 1 or "id" = 2)
|
|
156
|
+
* ```
|
|
157
|
+
*
|
|
158
|
+
* In all examples above the columns were known at compile time
|
|
159
|
+
* (except for the `raw` expressions). By default kysely only allows
|
|
160
|
+
* you to refer to columns that exist in the database **and** can be
|
|
161
|
+
* referred to in the current query and context.
|
|
162
|
+
*
|
|
163
|
+
* Sometimes you may want to refer to columns that come from the user
|
|
164
|
+
* input and thus are not available at compile time.
|
|
165
|
+
*
|
|
166
|
+
* You have two options, `db.raw` or `db.dynamic`. The example below
|
|
167
|
+
* uses both:
|
|
168
|
+
*
|
|
169
|
+
* ```ts
|
|
170
|
+
* const { ref } = db.dynamic
|
|
171
|
+
*
|
|
172
|
+
* const persons = await db
|
|
173
|
+
* .selectFrom('person')
|
|
174
|
+
* .selectAll()
|
|
175
|
+
* .where(ref(columnFromUserInput), '=', 1)
|
|
176
|
+
* .orWhere(db.raw('??', [columnFromUserInput]), '=', 2)
|
|
177
|
+
* .execute()
|
|
178
|
+
* ```
|
|
179
|
+
*/
|
|
180
|
+
where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): WhereInterface<DB, TB>;
|
|
181
|
+
where(grouper: WhereGrouper<DB, TB>): WhereInterface<DB, TB>;
|
|
182
|
+
where(raw: AnyRawBuilder): WhereInterface<DB, TB>;
|
|
183
|
+
/**
|
|
184
|
+
* Adds a `where` clause where both sides of the operator are references
|
|
185
|
+
* to columns.
|
|
186
|
+
*
|
|
187
|
+
* The normal `where` method treats the right hand side argument as a
|
|
188
|
+
* value by default. `whereRef` treats it as a column reference. This method is
|
|
189
|
+
* expecially useful with joins and correclated subqueries.
|
|
190
|
+
*
|
|
191
|
+
* ### Examples
|
|
192
|
+
*
|
|
193
|
+
* Usage with a join:
|
|
194
|
+
*
|
|
195
|
+
* ```ts
|
|
196
|
+
* db.selectFrom(['person', 'pet'])
|
|
197
|
+
* .selectAll()
|
|
198
|
+
* .whereRef('person.first_name', '=', 'pet.name')
|
|
199
|
+
* ```
|
|
200
|
+
*
|
|
201
|
+
* The generated SQL (PostgreSQL):
|
|
202
|
+
*
|
|
203
|
+
* ```sql
|
|
204
|
+
* select * from "person", "pet" where "person"."first_name" = "pet"."name"
|
|
205
|
+
* ```
|
|
206
|
+
*
|
|
207
|
+
* Usage in a subquery:
|
|
208
|
+
*
|
|
209
|
+
* ```ts
|
|
210
|
+
* const persons = await db
|
|
211
|
+
* .selectFrom('person')
|
|
212
|
+
* .selectAll('person')
|
|
213
|
+
* .select((qb) => qb
|
|
214
|
+
* .selectFrom('pet')
|
|
215
|
+
* .select('name')
|
|
216
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
217
|
+
* .limit(1)
|
|
218
|
+
* .as('pet_name')
|
|
219
|
+
* )
|
|
220
|
+
* .execute()
|
|
221
|
+
* ```
|
|
222
|
+
*
|
|
223
|
+
* The generated SQL (PostgreSQL):
|
|
224
|
+
*
|
|
225
|
+
* ```sql
|
|
226
|
+
* select "person".*, (
|
|
227
|
+
* select "name"
|
|
228
|
+
* from "pet"
|
|
229
|
+
* where "pet"."owner_id" = "person"."id"
|
|
230
|
+
* limit $1
|
|
231
|
+
* ) as "pet_name"
|
|
232
|
+
* from "person"
|
|
233
|
+
*/
|
|
234
|
+
whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): WhereInterface<DB, TB>;
|
|
235
|
+
/**
|
|
236
|
+
* Adds an `or where` clause to the query. Otherwise works just like
|
|
237
|
+
* {@link WhereInterface.where | where}.
|
|
238
|
+
*
|
|
239
|
+
* It's often necessary to wrap `or where` clauses in parentheses to control
|
|
240
|
+
* precendence. You can use the one argument version of the `where` method
|
|
241
|
+
* for that. See the examples.
|
|
242
|
+
*
|
|
243
|
+
* ### Examples
|
|
244
|
+
*
|
|
245
|
+
* ```ts
|
|
246
|
+
* const persons = await db
|
|
247
|
+
* .selectFrom('person')
|
|
248
|
+
* .selectAll()
|
|
249
|
+
* .where('id', '=', 1)
|
|
250
|
+
* .orWhere('id', '=', 2)
|
|
251
|
+
* .execute()
|
|
252
|
+
* ```
|
|
253
|
+
*
|
|
254
|
+
* The generated SQL (PostgreSQL):
|
|
255
|
+
*
|
|
256
|
+
* ```sql
|
|
257
|
+
* select * from "person" where "id" = 1 or "id" = 2
|
|
258
|
+
* ```
|
|
259
|
+
*
|
|
260
|
+
* Grouping with parentheses:
|
|
261
|
+
*
|
|
262
|
+
* ```ts
|
|
263
|
+
* const persons = await db
|
|
264
|
+
* .selectFrom('person')
|
|
265
|
+
* .selectAll()
|
|
266
|
+
* .where((qb) => qb
|
|
267
|
+
* .where('id', '=', 1)
|
|
268
|
+
* .orWhere('id', '=', 2)
|
|
269
|
+
* )
|
|
270
|
+
* .execute()
|
|
271
|
+
* ```
|
|
272
|
+
*
|
|
273
|
+
* The generated SQL (PostgreSQL):
|
|
274
|
+
*
|
|
275
|
+
* ```sql
|
|
276
|
+
* select * from "person" (where "id" = 1 or "id" = 2)
|
|
277
|
+
* ```
|
|
278
|
+
*
|
|
279
|
+
* Even the first `where` can be an `orWhere`. This is useful
|
|
280
|
+
* if you are looping through a set of conditions:
|
|
281
|
+
*
|
|
282
|
+
* ```ts
|
|
283
|
+
* const persons = await db
|
|
284
|
+
* .selectFrom('person')
|
|
285
|
+
* .selectAll()
|
|
286
|
+
* .where((qb) => qb
|
|
287
|
+
* .orWhere('id', '=', 1)
|
|
288
|
+
* .orWhere('id', '=', 2)
|
|
289
|
+
* )
|
|
290
|
+
* .execute()
|
|
291
|
+
* ```
|
|
292
|
+
*
|
|
293
|
+
* The generated SQL (PostgreSQL):
|
|
294
|
+
*
|
|
295
|
+
* ```sql
|
|
296
|
+
* select * from "person" (where "id" = 1 or "id" = 2)
|
|
297
|
+
* ```
|
|
298
|
+
*/
|
|
299
|
+
orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): WhereInterface<DB, TB>;
|
|
300
|
+
orWhere(grouper: WhereGrouper<DB, TB>): WhereInterface<DB, TB>;
|
|
301
|
+
orWhere(raw: AnyRawBuilder): WhereInterface<DB, TB>;
|
|
302
|
+
/**
|
|
303
|
+
* Adds an `or where` clause to the query. Otherwise works just like
|
|
304
|
+
* {@link WhereInterface.whereRef | whereRef}.
|
|
305
|
+
*
|
|
306
|
+
* Also see {@link WhereInterface.orWhere | orWhere} and {@link WhereInterface.where | where}.
|
|
307
|
+
*/
|
|
308
|
+
orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): WhereInterface<DB, TB>;
|
|
309
|
+
/**
|
|
310
|
+
* Adds a `where exists` clause to the query.
|
|
311
|
+
*
|
|
312
|
+
* You can either use a subquery or a raw instance.
|
|
313
|
+
*
|
|
314
|
+
* ### Examples
|
|
315
|
+
*
|
|
316
|
+
* The query below selets all persons that own a pet named Catto:
|
|
317
|
+
*
|
|
318
|
+
* ```ts
|
|
319
|
+
* const persons = await db
|
|
320
|
+
* .selectFrom('person')
|
|
321
|
+
* .selectAll()
|
|
322
|
+
* .whereExists((qb) => qb
|
|
323
|
+
* .selectFrom('pet')
|
|
324
|
+
* .select('pet.id')
|
|
325
|
+
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
326
|
+
* .where('pet.name', '=', 'Catto')
|
|
327
|
+
* )
|
|
328
|
+
* .execute()
|
|
329
|
+
* ```
|
|
330
|
+
*
|
|
331
|
+
* The generated SQL (PostgreSQL):
|
|
332
|
+
*
|
|
333
|
+
* ```sql
|
|
334
|
+
* select * from "person"
|
|
335
|
+
* where exists (
|
|
336
|
+
* select "pet"."id"
|
|
337
|
+
* from "pet"
|
|
338
|
+
* where "person"."id" = "pet"."owner_id"
|
|
339
|
+
* and "pet"."name" = $1
|
|
340
|
+
* )
|
|
341
|
+
* ```
|
|
342
|
+
*
|
|
343
|
+
* The same query as in the previous example but with using raw:
|
|
344
|
+
*
|
|
345
|
+
* ```ts
|
|
346
|
+
* db.selectFrom('person')
|
|
347
|
+
* .selectAll()
|
|
348
|
+
* .whereExists(
|
|
349
|
+
* db.raw(
|
|
350
|
+
* '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
|
|
351
|
+
* ['Catto']
|
|
352
|
+
* )
|
|
353
|
+
* )
|
|
354
|
+
* ```
|
|
355
|
+
*
|
|
356
|
+
* The generated SQL (PostgreSQL):
|
|
357
|
+
*
|
|
358
|
+
* ```sql
|
|
359
|
+
* select * from "person"
|
|
360
|
+
* where exists (
|
|
361
|
+
* select pet.id
|
|
362
|
+
* from pet
|
|
363
|
+
* where person.id = pet.owner_id
|
|
364
|
+
* and pet.name = $1
|
|
365
|
+
* )
|
|
366
|
+
* ```
|
|
367
|
+
*/
|
|
368
|
+
whereExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
|
|
369
|
+
/**
|
|
370
|
+
* Just like {@link WhereInterface.whereExists | whereExists} but creates a `not exists` clause.
|
|
371
|
+
*/
|
|
372
|
+
whereNotExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
|
|
373
|
+
/**
|
|
374
|
+
* Just like {@link WhereInterface.whereExists | whereExists} but creates a `or exists` clause.
|
|
375
|
+
*/
|
|
376
|
+
orWhereExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
|
|
377
|
+
/**
|
|
378
|
+
* Just like {@link WhereInterface.whereExists | whereExists} but creates a `or not exists` clause.
|
|
379
|
+
*/
|
|
380
|
+
orWhereNotExists(arg: ExistsExpression<DB, TB>): WhereInterface<DB, TB>;
|
|
381
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -67,6 +67,7 @@ import { DropViewNode } from '../operation-node/drop-view-node.js';
|
|
|
67
67
|
import { GeneratedAlwaysAsNode } from '../operation-node/generated-always-as-node.js';
|
|
68
68
|
import { DefaultValueNode } from '../operation-node/default-value-node.js';
|
|
69
69
|
import { OnNode } from '../operation-node/on-node.js';
|
|
70
|
+
import { ValuesNode } from '../operation-node/values-node.js';
|
|
70
71
|
export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
|
|
71
72
|
#private;
|
|
72
73
|
protected get numParameters(): number;
|
|
@@ -81,6 +82,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
81
82
|
protected visitWhere(node: WhereNode): void;
|
|
82
83
|
protected visitHaving(node: HavingNode): void;
|
|
83
84
|
protected visitInsertQuery(node: InsertQueryNode): void;
|
|
85
|
+
protected visitValues(node: ValuesNode): void;
|
|
84
86
|
protected visitDeleteQuery(node: DeleteQueryNode): void;
|
|
85
87
|
protected visitReturning(node: ReturningNode): void;
|
|
86
88
|
protected visitAlias(node: AliasNode): void;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { InsertQueryNode } from '../operation-node/insert-query-node.js';
|
|
1
2
|
import { OperationNodeVisitor } from '../operation-node/operation-node-visitor.js';
|
|
2
3
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
3
4
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
@@ -24,9 +25,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
24
25
|
return this.#sql;
|
|
25
26
|
}
|
|
26
27
|
visitSelectQuery(node) {
|
|
27
|
-
const wrapInParens = this.
|
|
28
|
+
const wrapInParens = this.parentNode !== undefined &&
|
|
28
29
|
!CreateViewNode.is(this.parentNode) &&
|
|
29
|
-
!UnionNode.is(this.parentNode)
|
|
30
|
+
!UnionNode.is(this.parentNode) &&
|
|
31
|
+
!InsertQueryNode.is(this.parentNode);
|
|
30
32
|
if (wrapInParens) {
|
|
31
33
|
this.append('(');
|
|
32
34
|
}
|
|
@@ -143,8 +145,8 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
143
145
|
this.append(')');
|
|
144
146
|
}
|
|
145
147
|
if (node.values) {
|
|
146
|
-
this.append('
|
|
147
|
-
this.
|
|
148
|
+
this.append(' ');
|
|
149
|
+
this.visitNode(node.values);
|
|
148
150
|
}
|
|
149
151
|
if (node.onConflict) {
|
|
150
152
|
this.append(' ');
|
|
@@ -162,6 +164,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
162
164
|
this.append(')');
|
|
163
165
|
}
|
|
164
166
|
}
|
|
167
|
+
visitValues(node) {
|
|
168
|
+
this.append('values ');
|
|
169
|
+
this.compileList(node.values);
|
|
170
|
+
}
|
|
165
171
|
visitDeleteQuery(node) {
|
|
166
172
|
const isSubQuery = this.nodeStack.find(QueryNode.is) !== node;
|
|
167
173
|
if (isSubQuery) {
|
|
@@ -294,7 +300,11 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
294
300
|
this.visitNode(node.table);
|
|
295
301
|
}
|
|
296
302
|
visitCreateTable(node) {
|
|
297
|
-
this.append('create
|
|
303
|
+
this.append('create ');
|
|
304
|
+
if (node.temporary) {
|
|
305
|
+
this.append('temporary ');
|
|
306
|
+
}
|
|
307
|
+
this.append('table ');
|
|
298
308
|
if (node.ifNotExists) {
|
|
299
309
|
this.append('if not exists ');
|
|
300
310
|
}
|
|
@@ -302,6 +312,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
302
312
|
this.append(' (');
|
|
303
313
|
this.compileList([...node.columns, ...(node.constraints ?? [])]);
|
|
304
314
|
this.append(')');
|
|
315
|
+
if (node.onCommit) {
|
|
316
|
+
this.append(' on commit ');
|
|
317
|
+
this.append(node.onCommit);
|
|
318
|
+
}
|
|
305
319
|
}
|
|
306
320
|
visitColumnDefinition(node) {
|
|
307
321
|
this.visitNode(node.column);
|
|
@@ -664,6 +678,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
664
678
|
if (node.materialized) {
|
|
665
679
|
this.append('materialized ');
|
|
666
680
|
}
|
|
681
|
+
if (node.temporary) {
|
|
682
|
+
this.append('temporary ');
|
|
683
|
+
}
|
|
667
684
|
this.append('view ');
|
|
668
685
|
if (node.ifNotExists) {
|
|
669
686
|
this.append('if not exists ');
|