kysely 0.26.1 → 0.26.2
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 +6 -6
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +3 -3
- package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +3 -2
- package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -2
- package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +3 -2
- package/dist/cjs/dialect/postgres/postgres-adapter.js +2 -2
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +2 -2
- package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +4 -2
- package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -2
- package/dist/cjs/driver/runtime-driver.js +17 -2
- package/dist/cjs/expression/expression-builder.d.ts +298 -27
- package/dist/cjs/expression/expression-builder.js +36 -26
- package/dist/cjs/expression/expression-wrapper.d.ts +177 -8
- package/dist/cjs/expression/expression-wrapper.js +4 -4
- package/dist/cjs/expression/expression.d.ts +64 -1
- package/dist/cjs/helpers/mysql.d.ts +11 -8
- package/dist/cjs/helpers/mysql.js +21 -32
- package/dist/cjs/helpers/postgres.d.ts +8 -5
- package/dist/cjs/helpers/postgres.js +8 -5
- package/dist/cjs/helpers/sqlite.d.ts +164 -0
- package/dist/cjs/helpers/sqlite.js +180 -0
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/kysely.d.ts +4 -3
- package/dist/cjs/kysely.js +1 -1
- package/dist/cjs/operation-node/common-table-expression-node.d.ts +4 -0
- package/dist/cjs/operation-node/common-table-expression-node.js +6 -0
- package/dist/cjs/operation-node/delete-query-node.d.ts +1 -1
- package/dist/cjs/operation-node/delete-query-node.js +3 -3
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +8 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/operator-node.d.ts +3 -3
- package/dist/cjs/operation-node/operator-node.js +3 -0
- package/dist/cjs/operation-node/order-by-node.d.ts +2 -2
- package/dist/cjs/operation-node/order-by-node.js +4 -4
- package/dist/cjs/operation-node/over-node.d.ts +1 -1
- package/dist/cjs/operation-node/over-node.js +3 -3
- package/dist/cjs/operation-node/select-query-node.d.ts +5 -4
- package/dist/cjs/operation-node/select-query-node.js +13 -7
- package/dist/cjs/operation-node/tuple-node.d.ts +12 -0
- package/dist/cjs/operation-node/tuple-node.js +18 -0
- package/dist/cjs/parser/binary-operation-parser.d.ts +11 -7
- package/dist/cjs/parser/binary-operation-parser.js +35 -46
- package/dist/cjs/parser/expression-parser.d.ts +9 -4
- package/dist/cjs/parser/join-parser.d.ts +2 -2
- package/dist/cjs/parser/join-parser.js +2 -3
- package/dist/cjs/parser/order-by-parser.d.ts +6 -2
- package/dist/cjs/parser/order-by-parser.js +41 -7
- package/dist/cjs/parser/parse-utils.js +2 -2
- package/dist/cjs/parser/reference-parser.js +1 -1
- package/dist/cjs/parser/select-parser.d.ts +5 -5
- package/dist/cjs/parser/set-operation-parser.d.ts +3 -1
- package/dist/cjs/parser/set-operation-parser.js +13 -4
- package/dist/cjs/parser/tuple-parser.d.ts +47 -0
- package/dist/cjs/parser/tuple-parser.js +2 -0
- package/dist/cjs/parser/value-parser.d.ts +4 -2
- package/dist/cjs/parser/value-parser.js +12 -1
- package/dist/cjs/parser/with-parser.d.ts +3 -2
- package/dist/cjs/parser/with-parser.js +16 -4
- package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +3 -3
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +4 -8
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +50 -14
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +5 -5
- package/dist/cjs/query-builder/aggregate-function-builder.js +2 -2
- package/dist/cjs/query-builder/case-builder.js +8 -4
- package/dist/cjs/query-builder/cte-builder.d.ts +20 -0
- package/dist/cjs/query-builder/cte-builder.js +39 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +34 -7
- package/dist/cjs/query-builder/delete-query-builder.js +3 -3
- package/dist/cjs/query-builder/function-module.d.ts +41 -6
- package/dist/cjs/query-builder/function-module.js +3 -0
- package/dist/cjs/query-builder/having-interface.d.ts +2 -5
- package/dist/cjs/query-builder/join-builder.d.ts +2 -6
- package/dist/cjs/query-builder/join-builder.js +2 -2
- package/dist/cjs/query-builder/json-path-builder.d.ts +59 -3
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +65 -12
- package/dist/cjs/query-builder/on-conflict-builder.js +4 -4
- package/dist/cjs/query-builder/over-builder.js +1 -1
- package/dist/cjs/query-builder/select-query-builder.d.ts +201 -65
- package/dist/cjs/query-builder/select-query-builder.js +72 -924
- package/dist/cjs/query-builder/update-query-builder.d.ts +34 -7
- package/dist/cjs/query-builder/update-query-builder.js +2 -2
- package/dist/cjs/query-builder/where-interface.d.ts +32 -8
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +39 -7
- package/dist/cjs/query-creator.d.ts +74 -2
- package/dist/cjs/query-creator.js +83 -6
- package/dist/cjs/raw-builder/raw-builder.d.ts +88 -49
- package/dist/cjs/raw-builder/raw-builder.js +18 -45
- package/dist/cjs/raw-builder/sql.js +8 -8
- package/dist/cjs/schema/alter-table-builder.d.ts +4 -0
- package/dist/cjs/schema/alter-table-builder.js +12 -0
- package/dist/cjs/schema/create-index-builder.d.ts +1 -1
- package/dist/cjs/schema/create-index-builder.js +1 -1
- package/dist/cjs/util/column-type.d.ts +7 -6
- package/dist/cjs/util/json-object-args.d.ts +3 -0
- package/dist/cjs/util/json-object-args.js +35 -0
- package/dist/cjs/util/object-utils.d.ts +1 -0
- package/dist/cjs/util/object-utils.js +9 -1
- package/dist/cjs/util/type-utils.d.ts +10 -10
- package/dist/esm/dialect/dialect-adapter-base.d.ts +3 -3
- package/dist/esm/dialect/mysql/mysql-adapter.d.ts +3 -2
- package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
- package/dist/esm/dialect/postgres/postgres-adapter.d.ts +3 -2
- package/dist/esm/dialect/postgres/postgres-adapter.js +2 -2
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +2 -2
- package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +4 -2
- package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -2
- package/dist/esm/driver/runtime-driver.js +17 -2
- package/dist/esm/expression/expression-builder.d.ts +298 -27
- package/dist/esm/expression/expression-builder.js +40 -30
- package/dist/esm/expression/expression-wrapper.d.ts +177 -8
- package/dist/esm/expression/expression-wrapper.js +5 -5
- package/dist/esm/expression/expression.d.ts +64 -1
- package/dist/esm/helpers/mysql.d.ts +11 -8
- package/dist/esm/helpers/mysql.js +21 -32
- package/dist/esm/helpers/postgres.d.ts +8 -5
- package/dist/esm/helpers/postgres.js +8 -5
- package/dist/esm/helpers/sqlite.d.ts +164 -0
- package/dist/esm/helpers/sqlite.js +175 -0
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/kysely.d.ts +4 -3
- package/dist/esm/kysely.js +1 -1
- package/dist/esm/operation-node/common-table-expression-node.d.ts +4 -0
- package/dist/esm/operation-node/common-table-expression-node.js +6 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +1 -1
- package/dist/esm/operation-node/delete-query-node.js +3 -3
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +8 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +1 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/operator-node.d.ts +3 -3
- package/dist/esm/operation-node/operator-node.js +3 -0
- package/dist/esm/operation-node/order-by-node.d.ts +2 -2
- package/dist/esm/operation-node/order-by-node.js +4 -4
- package/dist/esm/operation-node/over-node.d.ts +1 -1
- package/dist/esm/operation-node/over-node.js +3 -3
- package/dist/esm/operation-node/select-query-node.d.ts +5 -4
- package/dist/esm/operation-node/select-query-node.js +13 -7
- package/dist/esm/operation-node/tuple-node.d.ts +12 -0
- package/dist/esm/operation-node/tuple-node.js +16 -0
- package/dist/esm/parser/binary-operation-parser.d.ts +11 -7
- package/dist/esm/parser/binary-operation-parser.js +36 -47
- package/dist/esm/parser/expression-parser.d.ts +9 -4
- package/dist/esm/parser/join-parser.d.ts +2 -2
- package/dist/esm/parser/join-parser.js +3 -4
- package/dist/esm/parser/order-by-parser.d.ts +6 -2
- package/dist/esm/parser/order-by-parser.js +40 -7
- package/dist/esm/parser/parse-utils.js +3 -3
- package/dist/esm/parser/reference-parser.js +1 -1
- package/dist/esm/parser/select-parser.d.ts +5 -5
- package/dist/esm/parser/set-operation-parser.d.ts +3 -1
- package/dist/esm/parser/set-operation-parser.js +11 -2
- package/dist/esm/parser/tuple-parser.d.ts +47 -0
- package/dist/esm/parser/tuple-parser.js +2 -0
- package/dist/esm/parser/value-parser.d.ts +4 -2
- package/dist/esm/parser/value-parser.js +10 -1
- package/dist/esm/parser/with-parser.d.ts +3 -2
- package/dist/esm/parser/with-parser.js +16 -4
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +3 -3
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +5 -9
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +51 -15
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +5 -5
- package/dist/esm/query-builder/aggregate-function-builder.js +3 -3
- package/dist/esm/query-builder/case-builder.js +10 -6
- package/dist/esm/query-builder/cte-builder.d.ts +20 -0
- package/dist/esm/query-builder/cte-builder.js +36 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +34 -7
- package/dist/esm/query-builder/delete-query-builder.js +4 -4
- package/dist/esm/query-builder/function-module.d.ts +41 -6
- package/dist/esm/query-builder/function-module.js +3 -0
- package/dist/esm/query-builder/having-interface.d.ts +2 -5
- package/dist/esm/query-builder/join-builder.d.ts +2 -6
- package/dist/esm/query-builder/join-builder.js +3 -3
- package/dist/esm/query-builder/json-path-builder.d.ts +59 -3
- package/dist/esm/query-builder/on-conflict-builder.d.ts +65 -12
- package/dist/esm/query-builder/on-conflict-builder.js +5 -5
- package/dist/esm/query-builder/over-builder.js +1 -1
- package/dist/esm/query-builder/select-query-builder.d.ts +201 -65
- package/dist/esm/query-builder/select-query-builder.js +72 -923
- package/dist/esm/query-builder/update-query-builder.d.ts +34 -7
- package/dist/esm/query-builder/update-query-builder.js +3 -3
- package/dist/esm/query-builder/where-interface.d.ts +32 -8
- package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
- package/dist/esm/query-compiler/default-query-compiler.js +39 -7
- package/dist/esm/query-creator.d.ts +74 -2
- package/dist/esm/query-creator.js +84 -7
- package/dist/esm/raw-builder/raw-builder.d.ts +88 -49
- package/dist/esm/raw-builder/raw-builder.js +17 -42
- package/dist/esm/raw-builder/sql.js +9 -9
- package/dist/esm/schema/alter-table-builder.d.ts +4 -0
- package/dist/esm/schema/alter-table-builder.js +12 -0
- package/dist/esm/schema/create-index-builder.d.ts +1 -1
- package/dist/esm/schema/create-index-builder.js +2 -2
- package/dist/esm/util/column-type.d.ts +7 -6
- package/dist/esm/util/json-object-args.d.ts +3 -0
- package/dist/esm/util/json-object-args.js +32 -0
- package/dist/esm/util/object-utils.d.ts +1 -0
- package/dist/esm/util/object-utils.js +7 -0
- package/dist/esm/util/type-utils.d.ts +10 -10
- package/helpers/sqlite.d.ts +1 -0
- package/helpers/sqlite.js +1 -0
- package/package.json +7 -4
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { Expression } from '../expression/expression.js';
|
|
2
|
+
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
3
|
+
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
4
|
+
import { Simplify } from '../util/type-utils.js';
|
|
5
|
+
/**
|
|
6
|
+
* A SQLite helper for aggregating a subquery into a JSON array.
|
|
7
|
+
*
|
|
8
|
+
* NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
|
|
9
|
+
* Otherwise the nested selections will be returned as JSON strings.
|
|
10
|
+
*
|
|
11
|
+
* The plugin can be installed like this:
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* const db = new Kysely({
|
|
15
|
+
* dialect: new SqliteDialect(config),
|
|
16
|
+
* plugins: [new ParseJSONResultsPlugin()]
|
|
17
|
+
* })
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* ### Examples
|
|
21
|
+
*
|
|
22
|
+
* ```ts
|
|
23
|
+
* const result = await db
|
|
24
|
+
* .selectFrom('person')
|
|
25
|
+
* .select((eb) => [
|
|
26
|
+
* 'id',
|
|
27
|
+
* jsonArrayFrom(
|
|
28
|
+
* eb.selectFrom('pet')
|
|
29
|
+
* .select(['pet.id as pet_id', 'pet.name'])
|
|
30
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
31
|
+
* .orderBy('pet.name')
|
|
32
|
+
* ).as('pets')
|
|
33
|
+
* ])
|
|
34
|
+
* .execute()
|
|
35
|
+
*
|
|
36
|
+
* result[0].id
|
|
37
|
+
* result[0].pets[0].pet_id
|
|
38
|
+
* result[0].pets[0].name
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* The generated SQL (SQLite):
|
|
42
|
+
*
|
|
43
|
+
* ```sql
|
|
44
|
+
* select "id", (
|
|
45
|
+
* select coalesce(json_group_array(json_object(
|
|
46
|
+
* 'pet_id', "agg"."pet_id",
|
|
47
|
+
* 'name', "agg"."name"
|
|
48
|
+
* )), '[]') from (
|
|
49
|
+
* select "pet"."id" as "pet_id", "pet"."name"
|
|
50
|
+
* from "pet"
|
|
51
|
+
* where "pet"."owner_id" = "person"."id"
|
|
52
|
+
* order by "pet"."name"
|
|
53
|
+
* ) as "agg"
|
|
54
|
+
* ) as "pets"
|
|
55
|
+
* from "person"
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function jsonArrayFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O>[]>;
|
|
59
|
+
/**
|
|
60
|
+
* A SQLite helper for turning a subquery into a JSON object.
|
|
61
|
+
*
|
|
62
|
+
* The subquery must only return one row.
|
|
63
|
+
*
|
|
64
|
+
* NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
|
|
65
|
+
* Otherwise the nested selections will be returned as JSON strings.
|
|
66
|
+
*
|
|
67
|
+
* The plugin can be installed like this:
|
|
68
|
+
*
|
|
69
|
+
* ```ts
|
|
70
|
+
* const db = new Kysely({
|
|
71
|
+
* dialect: new SqliteDialect(config),
|
|
72
|
+
* plugins: [new ParseJSONResultsPlugin()]
|
|
73
|
+
* })
|
|
74
|
+
* ```
|
|
75
|
+
*
|
|
76
|
+
* ### Examples
|
|
77
|
+
*
|
|
78
|
+
* ```ts
|
|
79
|
+
* const result = await db
|
|
80
|
+
* .selectFrom('person')
|
|
81
|
+
* .select((eb) => [
|
|
82
|
+
* 'id',
|
|
83
|
+
* jsonObjectFrom(
|
|
84
|
+
* eb.selectFrom('pet')
|
|
85
|
+
* .select(['pet.id as pet_id', 'pet.name'])
|
|
86
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
87
|
+
* .where('pet.is_favorite', '=', true)
|
|
88
|
+
* ).as('favorite_pet')
|
|
89
|
+
* ])
|
|
90
|
+
* .execute()
|
|
91
|
+
*
|
|
92
|
+
* result[0].id
|
|
93
|
+
* result[0].favorite_pet.pet_id
|
|
94
|
+
* result[0].favorite_pet.name
|
|
95
|
+
* ```
|
|
96
|
+
*
|
|
97
|
+
* The generated SQL (SQLite):
|
|
98
|
+
*
|
|
99
|
+
* ```sql
|
|
100
|
+
* select "id", (
|
|
101
|
+
* select json_object(
|
|
102
|
+
* 'pet_id', "obj"."pet_id",
|
|
103
|
+
* 'name', "obj"."name"
|
|
104
|
+
* ) from (
|
|
105
|
+
* select "pet"."id" as "pet_id", "pet"."name"
|
|
106
|
+
* from "pet"
|
|
107
|
+
* where "pet"."owner_id" = "person"."id"
|
|
108
|
+
* and "pet"."is_favorite" = ?
|
|
109
|
+
* ) as obj
|
|
110
|
+
* ) as "favorite_pet"
|
|
111
|
+
* from "person";
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export declare function jsonObjectFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O> | null>;
|
|
115
|
+
/**
|
|
116
|
+
* The SQLite `json_object` function.
|
|
117
|
+
*
|
|
118
|
+
* NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
|
|
119
|
+
* Otherwise the nested selections will be returned as JSON strings.
|
|
120
|
+
*
|
|
121
|
+
* The plugin can be installed like this:
|
|
122
|
+
*
|
|
123
|
+
* ```ts
|
|
124
|
+
* const db = new Kysely({
|
|
125
|
+
* dialect: new SqliteDialect(config),
|
|
126
|
+
* plugins: [new ParseJSONResultsPlugin()]
|
|
127
|
+
* })
|
|
128
|
+
* ```
|
|
129
|
+
*
|
|
130
|
+
* ### Examples
|
|
131
|
+
*
|
|
132
|
+
* ```ts
|
|
133
|
+
* const result = await db
|
|
134
|
+
* .selectFrom('person')
|
|
135
|
+
* .select((eb) => [
|
|
136
|
+
* 'id',
|
|
137
|
+
* jsonBuildObject({
|
|
138
|
+
* first: eb.ref('first_name'),
|
|
139
|
+
* last: eb.ref('last_name'),
|
|
140
|
+
* full: sql<string>`first_name || ' ' || last_name`
|
|
141
|
+
* }).as('name')
|
|
142
|
+
* ])
|
|
143
|
+
* .execute()
|
|
144
|
+
*
|
|
145
|
+
* result[0].id
|
|
146
|
+
* result[0].name.first
|
|
147
|
+
* result[0].name.last
|
|
148
|
+
* result[0].name.full
|
|
149
|
+
* ```
|
|
150
|
+
*
|
|
151
|
+
* The generated SQL (SQLite):
|
|
152
|
+
*
|
|
153
|
+
* ```sql
|
|
154
|
+
* select "id", json_object(
|
|
155
|
+
* 'first', first_name,
|
|
156
|
+
* 'last', last_name,
|
|
157
|
+
* 'full', "first_name" || ' ' || "last_name"
|
|
158
|
+
* ) as "name"
|
|
159
|
+
* from "person"
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
export declare function jsonBuildObject<O extends Record<string, Expression<unknown>>>(obj: O): RawBuilder<Simplify<{
|
|
163
|
+
[K in keyof O]: O[K] extends Expression<infer V> ? V : never;
|
|
164
|
+
}>>;
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/// <reference types="./sqlite.d.ts" />
|
|
2
|
+
import { sql } from '../raw-builder/sql.js';
|
|
3
|
+
import { getJsonObjectArgs } from '../util/json-object-args.js';
|
|
4
|
+
/**
|
|
5
|
+
* A SQLite helper for aggregating a subquery into a JSON array.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
|
|
8
|
+
* Otherwise the nested selections will be returned as JSON strings.
|
|
9
|
+
*
|
|
10
|
+
* The plugin can be installed like this:
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* const db = new Kysely({
|
|
14
|
+
* dialect: new SqliteDialect(config),
|
|
15
|
+
* plugins: [new ParseJSONResultsPlugin()]
|
|
16
|
+
* })
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* ### Examples
|
|
20
|
+
*
|
|
21
|
+
* ```ts
|
|
22
|
+
* const result = await db
|
|
23
|
+
* .selectFrom('person')
|
|
24
|
+
* .select((eb) => [
|
|
25
|
+
* 'id',
|
|
26
|
+
* jsonArrayFrom(
|
|
27
|
+
* eb.selectFrom('pet')
|
|
28
|
+
* .select(['pet.id as pet_id', 'pet.name'])
|
|
29
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
30
|
+
* .orderBy('pet.name')
|
|
31
|
+
* ).as('pets')
|
|
32
|
+
* ])
|
|
33
|
+
* .execute()
|
|
34
|
+
*
|
|
35
|
+
* result[0].id
|
|
36
|
+
* result[0].pets[0].pet_id
|
|
37
|
+
* result[0].pets[0].name
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* The generated SQL (SQLite):
|
|
41
|
+
*
|
|
42
|
+
* ```sql
|
|
43
|
+
* select "id", (
|
|
44
|
+
* select coalesce(json_group_array(json_object(
|
|
45
|
+
* 'pet_id', "agg"."pet_id",
|
|
46
|
+
* 'name', "agg"."name"
|
|
47
|
+
* )), '[]') from (
|
|
48
|
+
* select "pet"."id" as "pet_id", "pet"."name"
|
|
49
|
+
* from "pet"
|
|
50
|
+
* where "pet"."owner_id" = "person"."id"
|
|
51
|
+
* order by "pet"."name"
|
|
52
|
+
* ) as "agg"
|
|
53
|
+
* ) as "pets"
|
|
54
|
+
* from "person"
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export function jsonArrayFrom(expr) {
|
|
58
|
+
return sql `(select coalesce(json_group_array(json_object(${sql.join(getSqliteJsonObjectArgs(expr.toOperationNode(), 'agg'))})), '[]') from ${expr} as agg)`;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* A SQLite helper for turning a subquery into a JSON object.
|
|
62
|
+
*
|
|
63
|
+
* The subquery must only return one row.
|
|
64
|
+
*
|
|
65
|
+
* NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
|
|
66
|
+
* Otherwise the nested selections will be returned as JSON strings.
|
|
67
|
+
*
|
|
68
|
+
* The plugin can be installed like this:
|
|
69
|
+
*
|
|
70
|
+
* ```ts
|
|
71
|
+
* const db = new Kysely({
|
|
72
|
+
* dialect: new SqliteDialect(config),
|
|
73
|
+
* plugins: [new ParseJSONResultsPlugin()]
|
|
74
|
+
* })
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* ### Examples
|
|
78
|
+
*
|
|
79
|
+
* ```ts
|
|
80
|
+
* const result = await db
|
|
81
|
+
* .selectFrom('person')
|
|
82
|
+
* .select((eb) => [
|
|
83
|
+
* 'id',
|
|
84
|
+
* jsonObjectFrom(
|
|
85
|
+
* eb.selectFrom('pet')
|
|
86
|
+
* .select(['pet.id as pet_id', 'pet.name'])
|
|
87
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
88
|
+
* .where('pet.is_favorite', '=', true)
|
|
89
|
+
* ).as('favorite_pet')
|
|
90
|
+
* ])
|
|
91
|
+
* .execute()
|
|
92
|
+
*
|
|
93
|
+
* result[0].id
|
|
94
|
+
* result[0].favorite_pet.pet_id
|
|
95
|
+
* result[0].favorite_pet.name
|
|
96
|
+
* ```
|
|
97
|
+
*
|
|
98
|
+
* The generated SQL (SQLite):
|
|
99
|
+
*
|
|
100
|
+
* ```sql
|
|
101
|
+
* select "id", (
|
|
102
|
+
* select json_object(
|
|
103
|
+
* 'pet_id', "obj"."pet_id",
|
|
104
|
+
* 'name', "obj"."name"
|
|
105
|
+
* ) from (
|
|
106
|
+
* select "pet"."id" as "pet_id", "pet"."name"
|
|
107
|
+
* from "pet"
|
|
108
|
+
* where "pet"."owner_id" = "person"."id"
|
|
109
|
+
* and "pet"."is_favorite" = ?
|
|
110
|
+
* ) as obj
|
|
111
|
+
* ) as "favorite_pet"
|
|
112
|
+
* from "person";
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
export function jsonObjectFrom(expr) {
|
|
116
|
+
return sql `(select json_object(${sql.join(getSqliteJsonObjectArgs(expr.toOperationNode(), 'obj'))}) from ${expr} as obj)`;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The SQLite `json_object` function.
|
|
120
|
+
*
|
|
121
|
+
* NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
|
|
122
|
+
* Otherwise the nested selections will be returned as JSON strings.
|
|
123
|
+
*
|
|
124
|
+
* The plugin can be installed like this:
|
|
125
|
+
*
|
|
126
|
+
* ```ts
|
|
127
|
+
* const db = new Kysely({
|
|
128
|
+
* dialect: new SqliteDialect(config),
|
|
129
|
+
* plugins: [new ParseJSONResultsPlugin()]
|
|
130
|
+
* })
|
|
131
|
+
* ```
|
|
132
|
+
*
|
|
133
|
+
* ### Examples
|
|
134
|
+
*
|
|
135
|
+
* ```ts
|
|
136
|
+
* const result = await db
|
|
137
|
+
* .selectFrom('person')
|
|
138
|
+
* .select((eb) => [
|
|
139
|
+
* 'id',
|
|
140
|
+
* jsonBuildObject({
|
|
141
|
+
* first: eb.ref('first_name'),
|
|
142
|
+
* last: eb.ref('last_name'),
|
|
143
|
+
* full: sql<string>`first_name || ' ' || last_name`
|
|
144
|
+
* }).as('name')
|
|
145
|
+
* ])
|
|
146
|
+
* .execute()
|
|
147
|
+
*
|
|
148
|
+
* result[0].id
|
|
149
|
+
* result[0].name.first
|
|
150
|
+
* result[0].name.last
|
|
151
|
+
* result[0].name.full
|
|
152
|
+
* ```
|
|
153
|
+
*
|
|
154
|
+
* The generated SQL (SQLite):
|
|
155
|
+
*
|
|
156
|
+
* ```sql
|
|
157
|
+
* select "id", json_object(
|
|
158
|
+
* 'first', first_name,
|
|
159
|
+
* 'last', last_name,
|
|
160
|
+
* 'full', "first_name" || ' ' || "last_name"
|
|
161
|
+
* ) as "name"
|
|
162
|
+
* from "person"
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
export function jsonBuildObject(obj) {
|
|
166
|
+
return sql `json_object(${sql.join(Object.keys(obj).flatMap((k) => [sql.lit(k), obj[k]]))})`;
|
|
167
|
+
}
|
|
168
|
+
function getSqliteJsonObjectArgs(node, table) {
|
|
169
|
+
try {
|
|
170
|
+
return getJsonObjectArgs(node, table);
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
throw new Error('SQLite jsonArrayFrom and jsonObjectFrom functions can only handle explicit selections due to limitations of the json_object function. selectAll() is not allowed in the subquery.');
|
|
174
|
+
}
|
|
175
|
+
}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -170,6 +170,7 @@ export * from './operation-node/json-reference-node.js';
|
|
|
170
170
|
export * from './operation-node/json-path-leg-node.js';
|
|
171
171
|
export * from './operation-node/json-path-node.js';
|
|
172
172
|
export * from './operation-node/json-operator-chain-node.js';
|
|
173
|
+
export * from './operation-node/tuple-node.js';
|
|
173
174
|
export * from './util/column-type.js';
|
|
174
175
|
export * from './util/compilable.js';
|
|
175
176
|
export * from './util/explainable.js';
|
|
@@ -186,5 +187,6 @@ export { JoinReferenceExpression, JoinCallbackExpression, } from './parser/join-
|
|
|
186
187
|
export { InsertObject } from './parser/insert-values-parser.js';
|
|
187
188
|
export { UpdateObject } from './parser/update-set-parser.js';
|
|
188
189
|
export { OrderByExpression, OrderByDirectionExpression, } from './parser/order-by-parser.js';
|
|
189
|
-
export { ComparisonOperatorExpression, OperandValueExpression, OperandValueExpressionOrList, } from './parser/binary-operation-parser.js';
|
|
190
|
+
export { ComparisonOperatorExpression, OperandValueExpression, OperandValueExpressionOrList, FilterObject, } from './parser/binary-operation-parser.js';
|
|
190
191
|
export { ExistsExpression } from './parser/unary-operation-parser.js';
|
|
192
|
+
export { OperandExpression, ExpressionOrFactory, } from './parser/expression-parser.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -171,6 +171,7 @@ export * from './operation-node/json-reference-node.js';
|
|
|
171
171
|
export * from './operation-node/json-path-leg-node.js';
|
|
172
172
|
export * from './operation-node/json-path-node.js';
|
|
173
173
|
export * from './operation-node/json-operator-chain-node.js';
|
|
174
|
+
export * from './operation-node/tuple-node.js';
|
|
174
175
|
export * from './util/column-type.js';
|
|
175
176
|
export * from './util/compilable.js';
|
|
176
177
|
export * from './util/explainable.js';
|
package/dist/esm/kysely.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ import { QueryId } from './util/query-id.js';
|
|
|
15
15
|
import { Compilable } from './util/compilable.js';
|
|
16
16
|
import { CaseBuilder } from './query-builder/case-builder.js';
|
|
17
17
|
import { Expression } from './expression/expression.js';
|
|
18
|
+
import { DrainOuterGeneric } from './util/type-utils.js';
|
|
18
19
|
/**
|
|
19
20
|
* The main Kysely class.
|
|
20
21
|
*
|
|
@@ -38,7 +39,7 @@ import { Expression } from './expression/expression.js';
|
|
|
38
39
|
* id: Generated<number>
|
|
39
40
|
* owner_id: number
|
|
40
41
|
* name: string
|
|
41
|
-
* species 'cat' | 'dog'
|
|
42
|
+
* species: 'cat' | 'dog'
|
|
42
43
|
* }
|
|
43
44
|
*
|
|
44
45
|
* interface Database {
|
|
@@ -228,7 +229,7 @@ export declare class Kysely<DB> extends QueryCreator<DB> implements QueryExecuto
|
|
|
228
229
|
* .execute()
|
|
229
230
|
* ```
|
|
230
231
|
*/
|
|
231
|
-
withTables<T extends Record<string, Record<string, any>>>(): Kysely<DB & T
|
|
232
|
+
withTables<T extends Record<string, Record<string, any>>>(): Kysely<DrainOuterGeneric<DB & T>>;
|
|
232
233
|
/**
|
|
233
234
|
* Releases all resources and disconnects from the database.
|
|
234
235
|
*
|
|
@@ -385,7 +386,7 @@ export declare class Transaction<DB> extends Kysely<DB> {
|
|
|
385
386
|
* .execute()
|
|
386
387
|
* ```
|
|
387
388
|
*/
|
|
388
|
-
withTables<T extends Record<string, Record<string, any>>>(): Transaction<DB & T
|
|
389
|
+
withTables<T extends Record<string, Record<string, any>>>(): Transaction<DrainOuterGeneric<DB & T>>;
|
|
389
390
|
}
|
|
390
391
|
export interface KyselyProps {
|
|
391
392
|
readonly config: KyselyConfig;
|
package/dist/esm/kysely.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { CommonTableExpressionNameNode } from './common-table-expression-name-node.js';
|
|
2
2
|
import { OperationNode } from './operation-node.js';
|
|
3
|
+
type CommonTableExpressionNodeProps = Pick<CommonTableExpressionNode, 'materialized'>;
|
|
3
4
|
export interface CommonTableExpressionNode extends OperationNode {
|
|
4
5
|
readonly kind: 'CommonTableExpressionNode';
|
|
5
6
|
readonly name: CommonTableExpressionNameNode;
|
|
7
|
+
readonly materialized?: boolean;
|
|
6
8
|
readonly expression: OperationNode;
|
|
7
9
|
}
|
|
8
10
|
/**
|
|
@@ -11,4 +13,6 @@ export interface CommonTableExpressionNode extends OperationNode {
|
|
|
11
13
|
export declare const CommonTableExpressionNode: Readonly<{
|
|
12
14
|
is(node: OperationNode): node is CommonTableExpressionNode;
|
|
13
15
|
create(name: CommonTableExpressionNameNode, expression: OperationNode): CommonTableExpressionNode;
|
|
16
|
+
cloneWith(node: CommonTableExpressionNode, props: CommonTableExpressionNodeProps): CommonTableExpressionNode;
|
|
14
17
|
}>;
|
|
18
|
+
export {};
|
|
@@ -27,7 +27,7 @@ export interface DeleteQueryNode extends OperationNode {
|
|
|
27
27
|
export declare const DeleteQueryNode: Readonly<{
|
|
28
28
|
is(node: OperationNode): node is DeleteQueryNode;
|
|
29
29
|
create(fromItems: OperationNode[], withNode?: WithNode): DeleteQueryNode;
|
|
30
|
-
|
|
30
|
+
cloneWithOrderByItems(deleteNode: DeleteQueryNode, items: ReadonlyArray<OrderByItemNode>): DeleteQueryNode;
|
|
31
31
|
cloneWithLimit(deleteNode: DeleteQueryNode, limit: LimitNode): DeleteQueryNode;
|
|
32
32
|
cloneWithUsing(deleteNode: DeleteQueryNode, tables: OperationNode[]): DeleteQueryNode;
|
|
33
33
|
}>;
|
|
@@ -17,12 +17,12 @@ export const DeleteQueryNode = freeze({
|
|
|
17
17
|
...(withNode && { with: withNode }),
|
|
18
18
|
});
|
|
19
19
|
},
|
|
20
|
-
|
|
20
|
+
cloneWithOrderByItems(deleteNode, items) {
|
|
21
21
|
return freeze({
|
|
22
22
|
...deleteNode,
|
|
23
23
|
orderBy: deleteNode.orderBy
|
|
24
|
-
? OrderByNode.
|
|
25
|
-
: OrderByNode.create(
|
|
24
|
+
? OrderByNode.cloneWithItems(deleteNode.orderBy, items)
|
|
25
|
+
: OrderByNode.create(items),
|
|
26
26
|
});
|
|
27
27
|
},
|
|
28
28
|
cloneWithLimit(deleteNode, limit) {
|
|
@@ -84,6 +84,7 @@ import { JSONReferenceNode } from './json-reference-node.js';
|
|
|
84
84
|
import { JSONPathNode } from './json-path-node.js';
|
|
85
85
|
import { JSONPathLegNode } from './json-path-leg-node.js';
|
|
86
86
|
import { JSONOperatorChainNode } from './json-operator-chain-node.js';
|
|
87
|
+
import { TupleNode } from './tuple-node.js';
|
|
87
88
|
/**
|
|
88
89
|
* Transforms an operation node tree into another one.
|
|
89
90
|
*
|
|
@@ -197,6 +198,7 @@ export declare class OperationNodeTransformer {
|
|
|
197
198
|
protected transformJSONPath(node: JSONPathNode): JSONPathNode;
|
|
198
199
|
protected transformJSONPathLeg(node: JSONPathLegNode): JSONPathLegNode;
|
|
199
200
|
protected transformJSONOperatorChain(node: JSONOperatorChainNode): JSONOperatorChainNode;
|
|
201
|
+
protected transformTuple(node: TupleNode): TupleNode;
|
|
200
202
|
protected transformDataType(node: DataTypeNode): DataTypeNode;
|
|
201
203
|
protected transformSelectAll(node: SelectAllNode): SelectAllNode;
|
|
202
204
|
protected transformIdentifier(node: IdentifierNode): IdentifierNode;
|
|
@@ -118,6 +118,7 @@ export class OperationNodeTransformer {
|
|
|
118
118
|
JSONPathNode: this.transformJSONPath.bind(this),
|
|
119
119
|
JSONPathLegNode: this.transformJSONPathLeg.bind(this),
|
|
120
120
|
JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this),
|
|
121
|
+
TupleNode: this.transformTuple.bind(this),
|
|
121
122
|
});
|
|
122
123
|
transformNode(node) {
|
|
123
124
|
if (!node) {
|
|
@@ -489,6 +490,7 @@ export class OperationNodeTransformer {
|
|
|
489
490
|
return requireAllProps({
|
|
490
491
|
kind: 'CommonTableExpressionNode',
|
|
491
492
|
name: this.transformNode(node.name),
|
|
493
|
+
materialized: node.materialized,
|
|
492
494
|
expression: this.transformNode(node.expression),
|
|
493
495
|
});
|
|
494
496
|
}
|
|
@@ -755,6 +757,12 @@ export class OperationNodeTransformer {
|
|
|
755
757
|
values: this.transformNodeList(node.values),
|
|
756
758
|
});
|
|
757
759
|
}
|
|
760
|
+
transformTuple(node) {
|
|
761
|
+
return requireAllProps({
|
|
762
|
+
kind: 'TupleNode',
|
|
763
|
+
values: this.transformNodeList(node.values),
|
|
764
|
+
});
|
|
765
|
+
}
|
|
758
766
|
transformDataType(node) {
|
|
759
767
|
// An Object.freezed leaf node. No need to clone.
|
|
760
768
|
return node;
|
|
@@ -84,6 +84,7 @@ import { JSONReferenceNode } from './json-reference-node.js';
|
|
|
84
84
|
import { JSONPathNode } from './json-path-node.js';
|
|
85
85
|
import { JSONPathLegNode } from './json-path-leg-node.js';
|
|
86
86
|
import { JSONOperatorChainNode } from './json-operator-chain-node.js';
|
|
87
|
+
import { TupleNode } from './tuple-node.js';
|
|
87
88
|
export declare abstract class OperationNodeVisitor {
|
|
88
89
|
#private;
|
|
89
90
|
protected readonly nodeStack: OperationNode[];
|
|
@@ -174,4 +175,5 @@ export declare abstract class OperationNodeVisitor {
|
|
|
174
175
|
protected abstract visitJSONPath(node: JSONPathNode): void;
|
|
175
176
|
protected abstract visitJSONPathLeg(node: JSONPathLegNode): void;
|
|
176
177
|
protected abstract visitJSONOperatorChain(node: JSONOperatorChainNode): void;
|
|
178
|
+
protected abstract visitTuple(node: TupleNode): void;
|
|
177
179
|
}
|
|
@@ -91,6 +91,7 @@ export class OperationNodeVisitor {
|
|
|
91
91
|
JSONPathNode: this.visitJSONPath.bind(this),
|
|
92
92
|
JSONPathLegNode: this.visitJSONPathLeg.bind(this),
|
|
93
93
|
JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this),
|
|
94
|
+
TupleNode: this.visitTuple.bind(this),
|
|
94
95
|
});
|
|
95
96
|
visitNode = (node) => {
|
|
96
97
|
this.nodeStack.push(node);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode';
|
|
1
|
+
export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode' | 'TupleNode';
|
|
2
2
|
export interface OperationNode {
|
|
3
3
|
readonly kind: OperationNodeKind;
|
|
4
4
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { OperationNode } from './operation-node.js';
|
|
2
|
-
export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp"];
|
|
2
|
+
export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp"];
|
|
3
3
|
export declare const ARITHMETIC_OPERATORS: readonly ["+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>"];
|
|
4
4
|
export declare const JSON_OPERATORS: readonly ["->", "->>"];
|
|
5
|
-
export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"];
|
|
5
|
+
export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"];
|
|
6
6
|
export declare const UNARY_FILTER_OPERATORS: readonly ["exists", "not exists"];
|
|
7
7
|
export declare const UNARY_OPERATORS: readonly ["not", "-", "exists", "not exists"];
|
|
8
|
-
export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists"];
|
|
8
|
+
export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists", "between", "between symmetric"];
|
|
9
9
|
export type ComparisonOperator = (typeof COMPARISON_OPERATORS)[number];
|
|
10
10
|
export type ArithmeticOperator = (typeof ARITHMETIC_OPERATORS)[number];
|
|
11
11
|
export type JSONOperator = (typeof JSON_OPERATORS)[number];
|
|
@@ -20,6 +20,7 @@ export const COMPARISON_OPERATORS = [
|
|
|
20
20
|
'not ilike',
|
|
21
21
|
'@>',
|
|
22
22
|
'<@',
|
|
23
|
+
'&&',
|
|
23
24
|
'?',
|
|
24
25
|
'?&',
|
|
25
26
|
'!<',
|
|
@@ -61,6 +62,8 @@ export const OPERATORS = [
|
|
|
61
62
|
...BINARY_OPERATORS,
|
|
62
63
|
...JSON_OPERATORS,
|
|
63
64
|
...UNARY_OPERATORS,
|
|
65
|
+
'between',
|
|
66
|
+
'between symmetric',
|
|
64
67
|
];
|
|
65
68
|
/**
|
|
66
69
|
* @internal
|
|
@@ -9,6 +9,6 @@ export interface OrderByNode extends OperationNode {
|
|
|
9
9
|
*/
|
|
10
10
|
export declare const OrderByNode: Readonly<{
|
|
11
11
|
is(node: OperationNode): node is OrderByNode;
|
|
12
|
-
create(
|
|
13
|
-
|
|
12
|
+
create(items: ReadonlyArray<OrderByItemNode>): OrderByNode;
|
|
13
|
+
cloneWithItems(orderBy: OrderByNode, items: ReadonlyArray<OrderByItemNode>): OrderByNode;
|
|
14
14
|
}>;
|
|
@@ -7,16 +7,16 @@ export const OrderByNode = freeze({
|
|
|
7
7
|
is(node) {
|
|
8
8
|
return node.kind === 'OrderByNode';
|
|
9
9
|
},
|
|
10
|
-
create(
|
|
10
|
+
create(items) {
|
|
11
11
|
return freeze({
|
|
12
12
|
kind: 'OrderByNode',
|
|
13
|
-
items: freeze([
|
|
13
|
+
items: freeze([...items]),
|
|
14
14
|
});
|
|
15
15
|
},
|
|
16
|
-
|
|
16
|
+
cloneWithItems(orderBy, items) {
|
|
17
17
|
return freeze({
|
|
18
18
|
...orderBy,
|
|
19
|
-
items: freeze([...orderBy.items,
|
|
19
|
+
items: freeze([...orderBy.items, ...items]),
|
|
20
20
|
});
|
|
21
21
|
},
|
|
22
22
|
});
|
|
@@ -14,6 +14,6 @@ export interface OverNode extends OperationNode {
|
|
|
14
14
|
export declare const OverNode: Readonly<{
|
|
15
15
|
is(node: OperationNode): node is OverNode;
|
|
16
16
|
create(): OverNode;
|
|
17
|
-
|
|
17
|
+
cloneWithOrderByItems(overNode: OverNode, items: ReadonlyArray<OrderByItemNode>): OverNode;
|
|
18
18
|
cloneWithPartitionByItems(overNode: OverNode, items: ReadonlyArray<PartitionByItemNode>): OverNode;
|
|
19
19
|
}>;
|
|
@@ -14,12 +14,12 @@ export const OverNode = freeze({
|
|
|
14
14
|
kind: 'OverNode',
|
|
15
15
|
});
|
|
16
16
|
},
|
|
17
|
-
|
|
17
|
+
cloneWithOrderByItems(overNode, items) {
|
|
18
18
|
return freeze({
|
|
19
19
|
...overNode,
|
|
20
20
|
orderBy: overNode.orderBy
|
|
21
|
-
? OrderByNode.
|
|
22
|
-
: OrderByNode.create(
|
|
21
|
+
? OrderByNode.cloneWithItems(overNode.orderBy, items)
|
|
22
|
+
: OrderByNode.create(items),
|
|
23
23
|
});
|
|
24
24
|
},
|
|
25
25
|
cloneWithPartitionByItems(overNode, items) {
|