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
|
@@ -17,7 +17,8 @@ const sql_js_1 = require("../raw-builder/sql.js");
|
|
|
17
17
|
* `jsonArrayFrom`, are not guaranteed to work with third party dialects. In order for
|
|
18
18
|
* them to work, the dialect must automatically parse the `json` data type into
|
|
19
19
|
* javascript JSON values like objects and arrays. Some dialects might simply return
|
|
20
|
-
* the data as a JSON string.
|
|
20
|
+
* the data as a JSON string. In these cases you can use the built in `ParseJSONResultsPlugin`
|
|
21
|
+
* to parse the results.
|
|
21
22
|
*
|
|
22
23
|
* ```ts
|
|
23
24
|
* import { jsonArrayFrom } from 'kysely/helpers/postgres'
|
|
@@ -68,10 +69,11 @@ exports.jsonArrayFrom = jsonArrayFrom;
|
|
|
68
69
|
* use the `jsonObjectFrom` helper to fetch person's favorite pet along with the person's id.
|
|
69
70
|
*
|
|
70
71
|
* Please keep in mind that the helpers under the `kysely/helpers` folder, including
|
|
71
|
-
* `jsonObjectFrom`, are not guaranteed to work with
|
|
72
|
+
* `jsonObjectFrom`, are not guaranteed to work with 3rd party dialects. In order for
|
|
72
73
|
* them to work, the dialect must automatically parse the `json` data type into
|
|
73
74
|
* javascript JSON values like objects and arrays. Some dialects might simply return
|
|
74
|
-
* the data as a JSON string.
|
|
75
|
+
* the data as a JSON string. In these cases you can use the built in `ParseJSONResultsPlugin`
|
|
76
|
+
* to parse the results.
|
|
75
77
|
*
|
|
76
78
|
* ```ts
|
|
77
79
|
* import { jsonObjectFrom } from 'kysely/helpers/postgres'
|
|
@@ -112,8 +114,9 @@ exports.jsonObjectFrom = jsonObjectFrom;
|
|
|
112
114
|
* The PostgreSQL `json_build_object` function.
|
|
113
115
|
*
|
|
114
116
|
* NOTE: This helper is only guaranteed to fully work with the built-in `PostgresDialect`.
|
|
115
|
-
* While the produced SQL is
|
|
116
|
-
* may not parse the nested
|
|
117
|
+
* While the produced SQL is compatible with all PostgreSQL databases, some 3rd party dialects
|
|
118
|
+
* may not parse the nested JSON into objects. In these cases you can use the built in
|
|
119
|
+
* `ParseJSONResultsPlugin` to parse the results.
|
|
117
120
|
*
|
|
118
121
|
* ### Examples
|
|
119
122
|
*
|
|
@@ -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,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.jsonBuildObject = exports.jsonObjectFrom = exports.jsonArrayFrom = void 0;
|
|
4
|
+
const sql_js_1 = require("../raw-builder/sql.js");
|
|
5
|
+
const json_object_args_js_1 = require("../util/json-object-args.js");
|
|
6
|
+
/**
|
|
7
|
+
* A SQLite helper for aggregating a subquery into a JSON array.
|
|
8
|
+
*
|
|
9
|
+
* NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
|
|
10
|
+
* Otherwise the nested selections will be returned as JSON strings.
|
|
11
|
+
*
|
|
12
|
+
* The plugin can be installed like this:
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* const db = new Kysely({
|
|
16
|
+
* dialect: new SqliteDialect(config),
|
|
17
|
+
* plugins: [new ParseJSONResultsPlugin()]
|
|
18
|
+
* })
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* ### Examples
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* const result = await db
|
|
25
|
+
* .selectFrom('person')
|
|
26
|
+
* .select((eb) => [
|
|
27
|
+
* 'id',
|
|
28
|
+
* jsonArrayFrom(
|
|
29
|
+
* eb.selectFrom('pet')
|
|
30
|
+
* .select(['pet.id as pet_id', 'pet.name'])
|
|
31
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
32
|
+
* .orderBy('pet.name')
|
|
33
|
+
* ).as('pets')
|
|
34
|
+
* ])
|
|
35
|
+
* .execute()
|
|
36
|
+
*
|
|
37
|
+
* result[0].id
|
|
38
|
+
* result[0].pets[0].pet_id
|
|
39
|
+
* result[0].pets[0].name
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* The generated SQL (SQLite):
|
|
43
|
+
*
|
|
44
|
+
* ```sql
|
|
45
|
+
* select "id", (
|
|
46
|
+
* select coalesce(json_group_array(json_object(
|
|
47
|
+
* 'pet_id', "agg"."pet_id",
|
|
48
|
+
* 'name', "agg"."name"
|
|
49
|
+
* )), '[]') from (
|
|
50
|
+
* select "pet"."id" as "pet_id", "pet"."name"
|
|
51
|
+
* from "pet"
|
|
52
|
+
* where "pet"."owner_id" = "person"."id"
|
|
53
|
+
* order by "pet"."name"
|
|
54
|
+
* ) as "agg"
|
|
55
|
+
* ) as "pets"
|
|
56
|
+
* from "person"
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
function jsonArrayFrom(expr) {
|
|
60
|
+
return (0, sql_js_1.sql) `(select coalesce(json_group_array(json_object(${sql_js_1.sql.join(getSqliteJsonObjectArgs(expr.toOperationNode(), 'agg'))})), '[]') from ${expr} as agg)`;
|
|
61
|
+
}
|
|
62
|
+
exports.jsonArrayFrom = jsonArrayFrom;
|
|
63
|
+
/**
|
|
64
|
+
* A SQLite helper for turning a subquery into a JSON object.
|
|
65
|
+
*
|
|
66
|
+
* The subquery must only return one row.
|
|
67
|
+
*
|
|
68
|
+
* NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
|
|
69
|
+
* Otherwise the nested selections will be returned as JSON strings.
|
|
70
|
+
*
|
|
71
|
+
* The plugin can be installed like this:
|
|
72
|
+
*
|
|
73
|
+
* ```ts
|
|
74
|
+
* const db = new Kysely({
|
|
75
|
+
* dialect: new SqliteDialect(config),
|
|
76
|
+
* plugins: [new ParseJSONResultsPlugin()]
|
|
77
|
+
* })
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* ### Examples
|
|
81
|
+
*
|
|
82
|
+
* ```ts
|
|
83
|
+
* const result = await db
|
|
84
|
+
* .selectFrom('person')
|
|
85
|
+
* .select((eb) => [
|
|
86
|
+
* 'id',
|
|
87
|
+
* jsonObjectFrom(
|
|
88
|
+
* eb.selectFrom('pet')
|
|
89
|
+
* .select(['pet.id as pet_id', 'pet.name'])
|
|
90
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
91
|
+
* .where('pet.is_favorite', '=', true)
|
|
92
|
+
* ).as('favorite_pet')
|
|
93
|
+
* ])
|
|
94
|
+
* .execute()
|
|
95
|
+
*
|
|
96
|
+
* result[0].id
|
|
97
|
+
* result[0].favorite_pet.pet_id
|
|
98
|
+
* result[0].favorite_pet.name
|
|
99
|
+
* ```
|
|
100
|
+
*
|
|
101
|
+
* The generated SQL (SQLite):
|
|
102
|
+
*
|
|
103
|
+
* ```sql
|
|
104
|
+
* select "id", (
|
|
105
|
+
* select json_object(
|
|
106
|
+
* 'pet_id', "obj"."pet_id",
|
|
107
|
+
* 'name', "obj"."name"
|
|
108
|
+
* ) from (
|
|
109
|
+
* select "pet"."id" as "pet_id", "pet"."name"
|
|
110
|
+
* from "pet"
|
|
111
|
+
* where "pet"."owner_id" = "person"."id"
|
|
112
|
+
* and "pet"."is_favorite" = ?
|
|
113
|
+
* ) as obj
|
|
114
|
+
* ) as "favorite_pet"
|
|
115
|
+
* from "person";
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
function jsonObjectFrom(expr) {
|
|
119
|
+
return (0, sql_js_1.sql) `(select json_object(${sql_js_1.sql.join(getSqliteJsonObjectArgs(expr.toOperationNode(), 'obj'))}) from ${expr} as obj)`;
|
|
120
|
+
}
|
|
121
|
+
exports.jsonObjectFrom = jsonObjectFrom;
|
|
122
|
+
/**
|
|
123
|
+
* The SQLite `json_object` function.
|
|
124
|
+
*
|
|
125
|
+
* NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
|
|
126
|
+
* Otherwise the nested selections will be returned as JSON strings.
|
|
127
|
+
*
|
|
128
|
+
* The plugin can be installed like this:
|
|
129
|
+
*
|
|
130
|
+
* ```ts
|
|
131
|
+
* const db = new Kysely({
|
|
132
|
+
* dialect: new SqliteDialect(config),
|
|
133
|
+
* plugins: [new ParseJSONResultsPlugin()]
|
|
134
|
+
* })
|
|
135
|
+
* ```
|
|
136
|
+
*
|
|
137
|
+
* ### Examples
|
|
138
|
+
*
|
|
139
|
+
* ```ts
|
|
140
|
+
* const result = await db
|
|
141
|
+
* .selectFrom('person')
|
|
142
|
+
* .select((eb) => [
|
|
143
|
+
* 'id',
|
|
144
|
+
* jsonBuildObject({
|
|
145
|
+
* first: eb.ref('first_name'),
|
|
146
|
+
* last: eb.ref('last_name'),
|
|
147
|
+
* full: sql<string>`first_name || ' ' || last_name`
|
|
148
|
+
* }).as('name')
|
|
149
|
+
* ])
|
|
150
|
+
* .execute()
|
|
151
|
+
*
|
|
152
|
+
* result[0].id
|
|
153
|
+
* result[0].name.first
|
|
154
|
+
* result[0].name.last
|
|
155
|
+
* result[0].name.full
|
|
156
|
+
* ```
|
|
157
|
+
*
|
|
158
|
+
* The generated SQL (SQLite):
|
|
159
|
+
*
|
|
160
|
+
* ```sql
|
|
161
|
+
* select "id", json_object(
|
|
162
|
+
* 'first', first_name,
|
|
163
|
+
* 'last', last_name,
|
|
164
|
+
* 'full', "first_name" || ' ' || "last_name"
|
|
165
|
+
* ) as "name"
|
|
166
|
+
* from "person"
|
|
167
|
+
* ```
|
|
168
|
+
*/
|
|
169
|
+
function jsonBuildObject(obj) {
|
|
170
|
+
return (0, sql_js_1.sql) `json_object(${sql_js_1.sql.join(Object.keys(obj).flatMap((k) => [sql_js_1.sql.lit(k), obj[k]]))})`;
|
|
171
|
+
}
|
|
172
|
+
exports.jsonBuildObject = jsonBuildObject;
|
|
173
|
+
function getSqliteJsonObjectArgs(node, table) {
|
|
174
|
+
try {
|
|
175
|
+
return (0, json_object_args_js_1.getJsonObjectArgs)(node, table);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
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.');
|
|
179
|
+
}
|
|
180
|
+
}
|
package/dist/cjs/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/cjs/index.js
CHANGED
|
@@ -188,6 +188,7 @@ __exportStar(require("./operation-node/json-reference-node.js"), exports);
|
|
|
188
188
|
__exportStar(require("./operation-node/json-path-leg-node.js"), exports);
|
|
189
189
|
__exportStar(require("./operation-node/json-path-node.js"), exports);
|
|
190
190
|
__exportStar(require("./operation-node/json-operator-chain-node.js"), exports);
|
|
191
|
+
__exportStar(require("./operation-node/tuple-node.js"), exports);
|
|
191
192
|
__exportStar(require("./util/column-type.js"), exports);
|
|
192
193
|
__exportStar(require("./util/compilable.js"), exports);
|
|
193
194
|
__exportStar(require("./util/explainable.js"), exports);
|
package/dist/cjs/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/cjs/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
|
}>;
|
|
@@ -19,12 +19,12 @@ exports.DeleteQueryNode = (0, object_utils_js_1.freeze)({
|
|
|
19
19
|
...(withNode && { with: withNode }),
|
|
20
20
|
});
|
|
21
21
|
},
|
|
22
|
-
|
|
22
|
+
cloneWithOrderByItems(deleteNode, items) {
|
|
23
23
|
return (0, object_utils_js_1.freeze)({
|
|
24
24
|
...deleteNode,
|
|
25
25
|
orderBy: deleteNode.orderBy
|
|
26
|
-
? order_by_node_js_1.OrderByNode.
|
|
27
|
-
: order_by_node_js_1.OrderByNode.create(
|
|
26
|
+
? order_by_node_js_1.OrderByNode.cloneWithItems(deleteNode.orderBy, items)
|
|
27
|
+
: order_by_node_js_1.OrderByNode.create(items),
|
|
28
28
|
});
|
|
29
29
|
},
|
|
30
30
|
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;
|
|
@@ -120,6 +120,7 @@ class OperationNodeTransformer {
|
|
|
120
120
|
JSONPathNode: this.transformJSONPath.bind(this),
|
|
121
121
|
JSONPathLegNode: this.transformJSONPathLeg.bind(this),
|
|
122
122
|
JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this),
|
|
123
|
+
TupleNode: this.transformTuple.bind(this),
|
|
123
124
|
});
|
|
124
125
|
transformNode(node) {
|
|
125
126
|
if (!node) {
|
|
@@ -491,6 +492,7 @@ class OperationNodeTransformer {
|
|
|
491
492
|
return (0, require_all_props_js_1.requireAllProps)({
|
|
492
493
|
kind: 'CommonTableExpressionNode',
|
|
493
494
|
name: this.transformNode(node.name),
|
|
495
|
+
materialized: node.materialized,
|
|
494
496
|
expression: this.transformNode(node.expression),
|
|
495
497
|
});
|
|
496
498
|
}
|
|
@@ -757,6 +759,12 @@ class OperationNodeTransformer {
|
|
|
757
759
|
values: this.transformNodeList(node.values),
|
|
758
760
|
});
|
|
759
761
|
}
|
|
762
|
+
transformTuple(node) {
|
|
763
|
+
return (0, require_all_props_js_1.requireAllProps)({
|
|
764
|
+
kind: 'TupleNode',
|
|
765
|
+
values: this.transformNodeList(node.values),
|
|
766
|
+
});
|
|
767
|
+
}
|
|
760
768
|
transformDataType(node) {
|
|
761
769
|
// An Object.freezed leaf node. No need to clone.
|
|
762
770
|
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
|
}
|
|
@@ -93,6 +93,7 @@ class OperationNodeVisitor {
|
|
|
93
93
|
JSONPathNode: this.visitJSONPath.bind(this),
|
|
94
94
|
JSONPathLegNode: this.visitJSONPathLeg.bind(this),
|
|
95
95
|
JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this),
|
|
96
|
+
TupleNode: this.visitTuple.bind(this),
|
|
96
97
|
});
|
|
97
98
|
visitNode = (node) => {
|
|
98
99
|
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];
|
|
@@ -22,6 +22,7 @@ exports.COMPARISON_OPERATORS = [
|
|
|
22
22
|
'not ilike',
|
|
23
23
|
'@>',
|
|
24
24
|
'<@',
|
|
25
|
+
'&&',
|
|
25
26
|
'?',
|
|
26
27
|
'?&',
|
|
27
28
|
'!<',
|
|
@@ -63,6 +64,8 @@ exports.OPERATORS = [
|
|
|
63
64
|
...exports.BINARY_OPERATORS,
|
|
64
65
|
...exports.JSON_OPERATORS,
|
|
65
66
|
...exports.UNARY_OPERATORS,
|
|
67
|
+
'between',
|
|
68
|
+
'between symmetric',
|
|
66
69
|
];
|
|
67
70
|
/**
|
|
68
71
|
* @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
|
}>;
|