kysely 0.26.3 → 0.27.1
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 +2 -2
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +8 -0
- package/dist/cjs/dialect/dialect-adapter-base.js +3 -0
- package/dist/cjs/dialect/dialect-adapter.d.ts +8 -0
- package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +78 -0
- package/dist/cjs/dialect/mssql/mssql-adapter.js +30 -0
- package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +143 -0
- package/dist/cjs/dialect/mssql/mssql-dialect-config.js +2 -0
- package/dist/cjs/dialect/mssql/mssql-dialect.d.ts +70 -0
- package/dist/cjs/dialect/mssql/mssql-dialect.js +65 -0
- package/dist/cjs/dialect/mssql/mssql-driver.d.ts +54 -0
- package/dist/cjs/dialect/mssql/mssql-driver.js +268 -0
- package/dist/cjs/dialect/mssql/mssql-introspector.d.ts +20 -0
- package/dist/cjs/dialect/mssql/mssql-introspector.js +99 -0
- package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +11 -0
- package/dist/cjs/dialect/mssql/mssql-query-compiler.js +64 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +2 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +28 -0
- package/dist/cjs/dialect/postgres/postgres-driver.js +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -1
- package/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +15 -2
- package/dist/cjs/driver/driver.d.ts +1 -1
- package/dist/cjs/driver/driver.js +1 -0
- package/dist/cjs/driver/runtime-driver.js +5 -1
- package/dist/cjs/driver/single-connection-provider.js +7 -8
- package/dist/cjs/expression/expression-builder.d.ts +66 -75
- package/dist/cjs/expression/expression-builder.js +8 -17
- package/dist/cjs/expression/expression-wrapper.d.ts +21 -11
- package/dist/cjs/expression/expression-wrapper.js +12 -0
- package/dist/cjs/helpers/mssql.d.ts +152 -0
- package/dist/cjs/helpers/mssql.js +160 -0
- package/dist/cjs/index.d.ts +7 -1
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/migration/migrator.js +12 -16
- package/dist/cjs/operation-node/add-index-node.d.ts +21 -0
- package/dist/cjs/operation-node/add-index-node.js +31 -0
- package/dist/cjs/operation-node/alter-table-node.d.ts +5 -1
- package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
- package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
- package/dist/cjs/operation-node/create-index-node.d.ts +1 -0
- package/dist/cjs/operation-node/create-table-node.d.ts +1 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +1 -0
- package/dist/cjs/operation-node/limit-node.d.ts +2 -3
- package/dist/cjs/operation-node/limit-node.js +1 -2
- package/dist/cjs/operation-node/offset-node.d.ts +2 -3
- package/dist/cjs/operation-node/offset-node.js +1 -2
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +19 -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 +2 -0
- package/dist/cjs/operation-node/select-modifier-node.d.ts +2 -1
- package/dist/cjs/operation-node/select-modifier-node.js +2 -1
- package/dist/cjs/operation-node/unique-constraint-node.d.ts +4 -1
- package/dist/cjs/operation-node/unique-constraint-node.js +8 -1
- package/dist/cjs/parser/binary-operation-parser.js +1 -1
- package/dist/cjs/parser/coalesce-parser.d.ts +12 -2
- package/dist/cjs/parser/reference-parser.d.ts +2 -1
- package/dist/cjs/parser/update-set-parser.d.ts +5 -2
- package/dist/cjs/parser/update-set-parser.js +13 -3
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +21 -4
- package/dist/cjs/query-builder/aggregate-function-builder.js +21 -0
- package/dist/cjs/query-builder/case-builder.d.ts +6 -5
- package/dist/cjs/query-builder/delete-query-builder.d.ts +8 -7
- package/dist/cjs/query-builder/delete-query-builder.js +4 -3
- package/dist/cjs/query-builder/function-module.d.ts +96 -25
- package/dist/cjs/query-builder/function-module.js +17 -3
- package/dist/cjs/query-builder/having-interface.d.ts +3 -5
- package/dist/cjs/query-builder/insert-query-builder.d.ts +34 -12
- package/dist/cjs/query-builder/insert-query-builder.js +16 -5
- package/dist/cjs/query-builder/insert-result.d.ts +8 -1
- package/dist/cjs/query-builder/insert-result.js +8 -1
- package/dist/cjs/query-builder/json-path-builder.d.ts +5 -3
- package/dist/cjs/query-builder/json-path-builder.js +9 -3
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +58 -16
- package/dist/cjs/query-builder/on-conflict-builder.js +1 -6
- package/dist/cjs/query-builder/over-builder.d.ts +2 -2
- package/dist/cjs/query-builder/select-query-builder.d.ts +49 -31
- package/dist/cjs/query-builder/select-query-builder.js +12 -10
- package/dist/cjs/query-builder/update-query-builder.d.ts +23 -7
- package/dist/cjs/query-builder/update-query-builder.js +4 -4
- package/dist/cjs/query-builder/where-interface.d.ts +3 -3
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +9 -1
- package/dist/cjs/query-compiler/default-query-compiler.js +73 -12
- package/dist/cjs/raw-builder/raw-builder.d.ts +11 -1
- package/dist/cjs/raw-builder/raw-builder.js +3 -0
- package/dist/cjs/raw-builder/sql.js +9 -2
- package/dist/cjs/schema/alter-table-add-index-builder.d.ts +104 -0
- package/dist/cjs/schema/alter-table-add-index-builder.js +146 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +41 -1
- package/dist/cjs/schema/alter-table-builder.js +59 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +25 -0
- package/dist/cjs/schema/column-definition-builder.js +27 -0
- package/dist/cjs/schema/create-index-builder.d.ts +23 -0
- package/dist/cjs/schema/create-index-builder.js +30 -0
- package/dist/cjs/schema/create-table-builder.d.ts +28 -2
- package/dist/cjs/schema/create-table-builder.js +38 -3
- package/dist/cjs/schema/unique-constraint-builder.d.ts +14 -0
- package/dist/cjs/schema/unique-constraint-builder.js +24 -0
- package/dist/cjs/util/log.js +5 -1
- package/dist/cjs/util/object-utils.d.ts +2 -2
- package/dist/cjs/util/object-utils.js +1 -1
- package/dist/cjs/util/type-utils.d.ts +27 -19
- package/dist/esm/dialect/dialect-adapter-base.d.ts +8 -0
- package/dist/esm/dialect/dialect-adapter-base.js +3 -0
- package/dist/esm/dialect/dialect-adapter.d.ts +8 -0
- package/dist/esm/dialect/mssql/mssql-adapter.d.ts +78 -0
- package/dist/esm/dialect/mssql/mssql-adapter.js +27 -0
- package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +143 -0
- package/dist/esm/dialect/mssql/mssql-dialect-config.js +2 -0
- package/dist/esm/dialect/mssql/mssql-dialect.d.ts +70 -0
- package/dist/esm/dialect/mssql/mssql-dialect.js +62 -0
- package/dist/esm/dialect/mssql/mssql-driver.d.ts +54 -0
- package/dist/esm/dialect/mssql/mssql-driver.js +265 -0
- package/dist/esm/dialect/mssql/mssql-introspector.d.ts +20 -0
- package/dist/esm/dialect/mssql/mssql-introspector.js +96 -0
- package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +11 -0
- package/dist/esm/dialect/mssql/mssql-query-compiler.js +61 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +2 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +28 -0
- package/dist/esm/dialect/postgres/postgres-driver.js +1 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +1 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -1
- package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
- package/dist/esm/dialect/sqlite/sqlite-driver.js +15 -2
- package/dist/esm/driver/driver.d.ts +1 -1
- package/dist/esm/driver/driver.js +1 -0
- package/dist/esm/driver/runtime-driver.js +5 -1
- package/dist/esm/driver/single-connection-provider.js +7 -8
- package/dist/esm/expression/expression-builder.d.ts +66 -75
- package/dist/esm/expression/expression-builder.js +10 -19
- package/dist/esm/expression/expression-wrapper.d.ts +21 -11
- package/dist/esm/expression/expression-wrapper.js +12 -0
- package/dist/esm/helpers/mssql.d.ts +152 -0
- package/dist/esm/helpers/mssql.js +155 -0
- package/dist/esm/index.d.ts +7 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/migration/migrator.js +12 -16
- package/dist/esm/operation-node/add-index-node.d.ts +21 -0
- package/dist/esm/operation-node/add-index-node.js +29 -0
- package/dist/esm/operation-node/alter-table-node.d.ts +5 -1
- package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
- package/dist/esm/operation-node/column-update-node.d.ts +2 -3
- package/dist/esm/operation-node/create-index-node.d.ts +1 -0
- package/dist/esm/operation-node/create-table-node.d.ts +1 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +1 -0
- package/dist/esm/operation-node/limit-node.d.ts +2 -3
- package/dist/esm/operation-node/limit-node.js +1 -2
- package/dist/esm/operation-node/offset-node.d.ts +2 -3
- package/dist/esm/operation-node/offset-node.js +1 -2
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +19 -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 +2 -0
- package/dist/esm/operation-node/select-modifier-node.d.ts +2 -1
- package/dist/esm/operation-node/select-modifier-node.js +2 -1
- package/dist/esm/operation-node/unique-constraint-node.d.ts +4 -1
- package/dist/esm/operation-node/unique-constraint-node.js +8 -1
- package/dist/esm/parser/binary-operation-parser.js +1 -1
- package/dist/esm/parser/coalesce-parser.d.ts +12 -2
- package/dist/esm/parser/reference-parser.d.ts +2 -1
- package/dist/esm/parser/update-set-parser.d.ts +5 -2
- package/dist/esm/parser/update-set-parser.js +10 -1
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +21 -4
- package/dist/esm/query-builder/aggregate-function-builder.js +21 -0
- package/dist/esm/query-builder/case-builder.d.ts +6 -5
- package/dist/esm/query-builder/delete-query-builder.d.ts +8 -7
- package/dist/esm/query-builder/delete-query-builder.js +4 -3
- package/dist/esm/query-builder/function-module.d.ts +96 -25
- package/dist/esm/query-builder/function-module.js +17 -3
- package/dist/esm/query-builder/having-interface.d.ts +3 -5
- package/dist/esm/query-builder/insert-query-builder.d.ts +34 -12
- package/dist/esm/query-builder/insert-query-builder.js +17 -6
- package/dist/esm/query-builder/insert-result.d.ts +8 -1
- package/dist/esm/query-builder/insert-result.js +8 -1
- package/dist/esm/query-builder/json-path-builder.d.ts +5 -3
- package/dist/esm/query-builder/json-path-builder.js +9 -3
- package/dist/esm/query-builder/on-conflict-builder.d.ts +58 -16
- package/dist/esm/query-builder/on-conflict-builder.js +2 -7
- package/dist/esm/query-builder/over-builder.d.ts +2 -2
- package/dist/esm/query-builder/select-query-builder.d.ts +49 -31
- package/dist/esm/query-builder/select-query-builder.js +13 -11
- package/dist/esm/query-builder/update-query-builder.d.ts +23 -7
- package/dist/esm/query-builder/update-query-builder.js +5 -5
- package/dist/esm/query-builder/where-interface.d.ts +3 -3
- package/dist/esm/query-compiler/default-query-compiler.d.ts +9 -1
- package/dist/esm/query-compiler/default-query-compiler.js +73 -12
- package/dist/esm/raw-builder/raw-builder.d.ts +11 -1
- package/dist/esm/raw-builder/raw-builder.js +3 -0
- package/dist/esm/raw-builder/sql.js +9 -2
- package/dist/esm/schema/alter-table-add-index-builder.d.ts +104 -0
- package/dist/esm/schema/alter-table-add-index-builder.js +143 -0
- package/dist/esm/schema/alter-table-builder.d.ts +41 -1
- package/dist/esm/schema/alter-table-builder.js +59 -2
- package/dist/esm/schema/column-definition-builder.d.ts +25 -0
- package/dist/esm/schema/column-definition-builder.js +27 -0
- package/dist/esm/schema/create-index-builder.d.ts +23 -0
- package/dist/esm/schema/create-index-builder.js +30 -0
- package/dist/esm/schema/create-table-builder.d.ts +28 -2
- package/dist/esm/schema/create-table-builder.js +38 -3
- package/dist/esm/schema/unique-constraint-builder.d.ts +14 -0
- package/dist/esm/schema/unique-constraint-builder.js +21 -0
- package/dist/esm/util/log.js +5 -1
- package/dist/esm/util/object-utils.d.ts +2 -2
- package/dist/esm/util/object-utils.js +1 -1
- package/dist/esm/util/type-utils.d.ts +27 -19
- package/helpers/mssql.d.ts +1 -0
- package/helpers/mssql.js +1 -0
- package/package.json +15 -10
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/// <reference types="./mssql.d.ts" />
|
|
2
|
+
import { sql } from '../raw-builder/sql.js';
|
|
3
|
+
/**
|
|
4
|
+
* An MS SQL Server helper for aggregating a subquery into a JSON array.
|
|
5
|
+
*
|
|
6
|
+
* NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
|
|
7
|
+
* Otherwise the nested selections will be returned as JSON strings.
|
|
8
|
+
*
|
|
9
|
+
* The plugin can be installed like this:
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* const db = new Kysely({
|
|
13
|
+
* dialect: new MssqlDialect(config),
|
|
14
|
+
* plugins: [new ParseJSONResultsPlugin()]
|
|
15
|
+
* })
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* ### Examples
|
|
19
|
+
*
|
|
20
|
+
* ```ts
|
|
21
|
+
* const result = await db
|
|
22
|
+
* .selectFrom('person')
|
|
23
|
+
* .select((eb) => [
|
|
24
|
+
* 'id',
|
|
25
|
+
* jsonArrayFrom(
|
|
26
|
+
* eb.selectFrom('pet')
|
|
27
|
+
* .select(['pet.id as pet_id', 'pet.name'])
|
|
28
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
29
|
+
* .orderBy('pet.name')
|
|
30
|
+
* .modifyEnd(sql`offset 0 rows`)
|
|
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 (MS SQL Server):
|
|
41
|
+
*
|
|
42
|
+
* ```sql
|
|
43
|
+
* select "id", (
|
|
44
|
+
* select coalesce((select * from (
|
|
45
|
+
* select "pet"."id" as "pet_id", "pet"."name"
|
|
46
|
+
* from "pet"
|
|
47
|
+
* where "pet"."owner_id" = "person"."id"
|
|
48
|
+
* order by "pet"."name"
|
|
49
|
+
* offset 0 rows
|
|
50
|
+
* ) as "agg" for json path, include_null_values), '[]')
|
|
51
|
+
* ) as "pets"
|
|
52
|
+
* from "person"
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export function jsonArrayFrom(expr) {
|
|
56
|
+
return sql `coalesce((select * from ${expr} as agg for json path, include_null_values), '[]')`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* An MS SQL Server helper for turning a subquery into a JSON object.
|
|
60
|
+
*
|
|
61
|
+
* The subquery must only return one row.
|
|
62
|
+
*
|
|
63
|
+
* NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
|
|
64
|
+
* Otherwise the nested selections will be returned as JSON strings.
|
|
65
|
+
*
|
|
66
|
+
* The plugin can be installed like this:
|
|
67
|
+
*
|
|
68
|
+
* ```ts
|
|
69
|
+
* const db = new Kysely({
|
|
70
|
+
* dialect: new MssqlDialect(config),
|
|
71
|
+
* plugins: [new ParseJSONResultsPlugin()]
|
|
72
|
+
* })
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* ### Examples
|
|
76
|
+
*
|
|
77
|
+
* ```ts
|
|
78
|
+
* const result = await db
|
|
79
|
+
* .selectFrom('person')
|
|
80
|
+
* .select((eb) => [
|
|
81
|
+
* 'id',
|
|
82
|
+
* jsonObjectFrom(
|
|
83
|
+
* eb.selectFrom('pet')
|
|
84
|
+
* .select(['pet.id as pet_id', 'pet.name'])
|
|
85
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
86
|
+
* .where('pet.is_favorite', '=', 1)
|
|
87
|
+
* ).as('favorite_pet')
|
|
88
|
+
* ])
|
|
89
|
+
* .execute()
|
|
90
|
+
*
|
|
91
|
+
* result[0].id
|
|
92
|
+
* result[0].favorite_pet.pet_id
|
|
93
|
+
* result[0].favorite_pet.name
|
|
94
|
+
* ```
|
|
95
|
+
*
|
|
96
|
+
* The generated SQL (MS SQL Server):
|
|
97
|
+
*
|
|
98
|
+
* ```sql
|
|
99
|
+
* select "id", (
|
|
100
|
+
* select * from (
|
|
101
|
+
* select "pet"."id" as "pet_id", "pet"."name"
|
|
102
|
+
* from "pet"
|
|
103
|
+
* where "pet"."owner_id" = "person"."id"
|
|
104
|
+
* and "pet"."is_favorite" = @1
|
|
105
|
+
* ) as "agg" for json path, include_null_values, without_array_wrapper
|
|
106
|
+
* ) as "favorite_pet"
|
|
107
|
+
* from "person"
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
export function jsonObjectFrom(expr) {
|
|
111
|
+
return sql `(select * from ${expr} as agg for json path, include_null_values, without_array_wrapper)`;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* The MS SQL Server `json_query` function, single argument variant.
|
|
115
|
+
*
|
|
116
|
+
* NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
|
|
117
|
+
* Otherwise the nested selections will be returned as JSON strings.
|
|
118
|
+
*
|
|
119
|
+
* The plugin can be installed like this:
|
|
120
|
+
*
|
|
121
|
+
* ```ts
|
|
122
|
+
* const db = new Kysely({
|
|
123
|
+
* dialect: new MssqlDialect(config),
|
|
124
|
+
* plugins: [new ParseJSONResultsPlugin()]
|
|
125
|
+
* })
|
|
126
|
+
* ```
|
|
127
|
+
*
|
|
128
|
+
* ### Examples
|
|
129
|
+
*
|
|
130
|
+
* ```ts
|
|
131
|
+
* const result = await db
|
|
132
|
+
* .selectFrom('person')
|
|
133
|
+
* .select((eb) => [
|
|
134
|
+
* 'id',
|
|
135
|
+
* jsonBuildObject({
|
|
136
|
+
* first: eb.ref('first_name'),
|
|
137
|
+
* last: eb.ref('last_name'),
|
|
138
|
+
* full: eb.fn('concat', ['first_name', eb.val(' '), 'last_name'])
|
|
139
|
+
* }).as('name')
|
|
140
|
+
* ])
|
|
141
|
+
* .execute()
|
|
142
|
+
* ```
|
|
143
|
+
*
|
|
144
|
+
* The generated SQL (MS SQL Server):
|
|
145
|
+
*
|
|
146
|
+
* ```sql
|
|
147
|
+
* select "id", json_query(
|
|
148
|
+
* '{"first":"'+"first_name"+',"last":"'+"last_name"+',"full":"'+concat("first_name", ' ', "last_name")+'"}'
|
|
149
|
+
* ) as "name"
|
|
150
|
+
* from "person"
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
export function jsonBuildObject(obj) {
|
|
154
|
+
return sql `json_query('{${sql.join(Object.keys(obj).map((k) => sql `"${sql.raw(k)}":"'+${obj[k]}+'"`), sql `,`)}}')`;
|
|
155
|
+
}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -72,6 +72,12 @@ export * from './dialect/postgres/postgres-dialect.js';
|
|
|
72
72
|
export * from './dialect/sqlite/sqlite-query-compiler.js';
|
|
73
73
|
export * from './dialect/sqlite/sqlite-introspector.js';
|
|
74
74
|
export * from './dialect/sqlite/sqlite-adapter.js';
|
|
75
|
+
export * from './dialect/mssql/mssql-adapter.js';
|
|
76
|
+
export * from './dialect/mssql/mssql-dialect-config.js';
|
|
77
|
+
export * from './dialect/mssql/mssql-dialect.js';
|
|
78
|
+
export * from './dialect/mssql/mssql-driver.js';
|
|
79
|
+
export * from './dialect/mssql/mssql-introspector.js';
|
|
80
|
+
export * from './dialect/mssql/mssql-query-compiler.js';
|
|
75
81
|
export * from './query-compiler/default-query-compiler.js';
|
|
76
82
|
export * from './query-compiler/query-compiler.js';
|
|
77
83
|
export * from './migration/migrator.js';
|
|
@@ -176,7 +182,7 @@ export * from './util/compilable.js';
|
|
|
176
182
|
export * from './util/explainable.js';
|
|
177
183
|
export * from './util/streamable.js';
|
|
178
184
|
export * from './util/log.js';
|
|
179
|
-
export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, } from './util/type-utils.js';
|
|
185
|
+
export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, Nullable, NotNull, } from './util/type-utils.js';
|
|
180
186
|
export * from './util/infer-result.js';
|
|
181
187
|
export { logOnce } from './util/log-once.js';
|
|
182
188
|
export { SelectExpression, SelectCallback, SelectArg, Selection, CallbackSelection, } from './parser/select-parser.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -73,6 +73,12 @@ export * from './dialect/postgres/postgres-dialect.js';
|
|
|
73
73
|
export * from './dialect/sqlite/sqlite-query-compiler.js';
|
|
74
74
|
export * from './dialect/sqlite/sqlite-introspector.js';
|
|
75
75
|
export * from './dialect/sqlite/sqlite-adapter.js';
|
|
76
|
+
export * from './dialect/mssql/mssql-adapter.js';
|
|
77
|
+
export * from './dialect/mssql/mssql-dialect-config.js';
|
|
78
|
+
export * from './dialect/mssql/mssql-dialect.js';
|
|
79
|
+
export * from './dialect/mssql/mssql-driver.js';
|
|
80
|
+
export * from './dialect/mssql/mssql-introspector.js';
|
|
81
|
+
export * from './dialect/mssql/mssql-query-compiler.js';
|
|
76
82
|
export * from './query-compiler/default-query-compiler.js';
|
|
77
83
|
export * from './query-compiler/query-compiler.js';
|
|
78
84
|
export * from './migration/migrator.js';
|
|
@@ -218,10 +218,7 @@ export class Migrator {
|
|
|
218
218
|
}
|
|
219
219
|
if (!(await this.#doesSchemaExists())) {
|
|
220
220
|
try {
|
|
221
|
-
await this.#props.db.schema
|
|
222
|
-
.createSchema(this.#migrationTableSchema)
|
|
223
|
-
.ifNotExists()
|
|
224
|
-
.execute();
|
|
221
|
+
await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema));
|
|
225
222
|
}
|
|
226
223
|
catch (error) {
|
|
227
224
|
// At least on PostgreSQL, `if not exists` doesn't guarantee the `create schema`
|
|
@@ -237,20 +234,15 @@ export class Migrator {
|
|
|
237
234
|
if (!(await this.#doesTableExists(this.#migrationTable))) {
|
|
238
235
|
try {
|
|
239
236
|
if (this.#migrationTableSchema) {
|
|
240
|
-
await this.#props.db.schema
|
|
241
|
-
.createSchema(this.#migrationTableSchema)
|
|
242
|
-
.ifNotExists()
|
|
243
|
-
.execute();
|
|
237
|
+
await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema));
|
|
244
238
|
}
|
|
245
|
-
await this.#props.db.schema
|
|
239
|
+
await this.#createIfNotExists(this.#props.db.schema
|
|
246
240
|
.withPlugin(this.#schemaPlugin)
|
|
247
241
|
.createTable(this.#migrationTable)
|
|
248
|
-
.ifNotExists()
|
|
249
242
|
.addColumn('name', 'varchar(255)', (col) => col.notNull().primaryKey())
|
|
250
243
|
// The migration run time as ISO string. This is not a real date type as we
|
|
251
244
|
// can't know which data type is supported by all future dialects.
|
|
252
|
-
.addColumn('timestamp', 'varchar(255)', (col) => col.notNull())
|
|
253
|
-
.execute();
|
|
245
|
+
.addColumn('timestamp', 'varchar(255)', (col) => col.notNull()));
|
|
254
246
|
}
|
|
255
247
|
catch (error) {
|
|
256
248
|
// At least on PostgreSQL, `if not exists` doesn't guarantee the `create table`
|
|
@@ -265,13 +257,11 @@ export class Migrator {
|
|
|
265
257
|
async #ensureMigrationLockTableExists() {
|
|
266
258
|
if (!(await this.#doesTableExists(this.#migrationLockTable))) {
|
|
267
259
|
try {
|
|
268
|
-
await this.#props.db.schema
|
|
260
|
+
await this.#createIfNotExists(this.#props.db.schema
|
|
269
261
|
.withPlugin(this.#schemaPlugin)
|
|
270
262
|
.createTable(this.#migrationLockTable)
|
|
271
|
-
.ifNotExists()
|
|
272
263
|
.addColumn('id', 'varchar(255)', (col) => col.notNull().primaryKey())
|
|
273
|
-
.addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0))
|
|
274
|
-
.execute();
|
|
264
|
+
.addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0)));
|
|
275
265
|
}
|
|
276
266
|
catch (error) {
|
|
277
267
|
// At least on PostgreSQL, `if not exists` doesn't guarantee the `create table`
|
|
@@ -479,6 +469,12 @@ export class Migrator {
|
|
|
479
469
|
}
|
|
480
470
|
return { results };
|
|
481
471
|
}
|
|
472
|
+
async #createIfNotExists(qb) {
|
|
473
|
+
if (this.#props.db.getExecutor().adapter.supportsCreateIfNotExists) {
|
|
474
|
+
qb = qb.ifNotExists();
|
|
475
|
+
}
|
|
476
|
+
await qb.execute();
|
|
477
|
+
}
|
|
482
478
|
}
|
|
483
479
|
class MigrationResultSetError extends Error {
|
|
484
480
|
#resultSet;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
2
|
+
import { OperationNode } from './operation-node.js';
|
|
3
|
+
import { RawNode } from './raw-node.js';
|
|
4
|
+
export type AddIndexNodeProps = Omit<AddIndexNode, 'kind' | 'name'>;
|
|
5
|
+
export interface AddIndexNode extends OperationNode {
|
|
6
|
+
readonly kind: 'AddIndexNode';
|
|
7
|
+
readonly name: IdentifierNode;
|
|
8
|
+
readonly columns?: OperationNode[];
|
|
9
|
+
readonly unique?: boolean;
|
|
10
|
+
readonly using?: RawNode;
|
|
11
|
+
readonly ifNotExists?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export declare const AddIndexNode: Readonly<{
|
|
17
|
+
is(node: OperationNode): node is AddIndexNode;
|
|
18
|
+
create(name: string): AddIndexNode;
|
|
19
|
+
cloneWith(node: AddIndexNode, props: AddIndexNodeProps): AddIndexNode;
|
|
20
|
+
cloneWithColumns(node: AddIndexNode, columns: OperationNode[]): AddIndexNode;
|
|
21
|
+
}>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/// <reference types="./add-index-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export const AddIndexNode = freeze({
|
|
8
|
+
is(node) {
|
|
9
|
+
return node.kind === 'AddIndexNode';
|
|
10
|
+
},
|
|
11
|
+
create(name) {
|
|
12
|
+
return freeze({
|
|
13
|
+
kind: 'AddIndexNode',
|
|
14
|
+
name: IdentifierNode.create(name)
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
cloneWith(node, props) {
|
|
18
|
+
return freeze({
|
|
19
|
+
...node,
|
|
20
|
+
...props,
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
cloneWithColumns(node, columns) {
|
|
24
|
+
return freeze({
|
|
25
|
+
...node,
|
|
26
|
+
columns: [...(node.columns || []), ...columns],
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
});
|
|
@@ -8,7 +8,9 @@ import { AlterColumnNode } from './alter-column-node.js';
|
|
|
8
8
|
import { AddConstraintNode } from './add-constraint-node.js';
|
|
9
9
|
import { DropConstraintNode } from './drop-constraint-node.js';
|
|
10
10
|
import { ModifyColumnNode } from './modify-column-node.js';
|
|
11
|
-
|
|
11
|
+
import { DropIndexNode } from './drop-index-node.js';
|
|
12
|
+
import { AddIndexNode } from './add-index-node.js';
|
|
13
|
+
export type AlterTableNodeTableProps = Pick<AlterTableNode, 'renameTo' | 'setSchema' | 'addConstraint' | 'dropConstraint' | 'addIndex' | 'dropIndex'>;
|
|
12
14
|
export type AlterTableColumnAlterationNode = RenameColumnNode | AddColumnNode | DropColumnNode | AlterColumnNode | ModifyColumnNode;
|
|
13
15
|
export interface AlterTableNode extends OperationNode {
|
|
14
16
|
readonly kind: 'AlterTableNode';
|
|
@@ -18,6 +20,8 @@ export interface AlterTableNode extends OperationNode {
|
|
|
18
20
|
readonly columnAlterations?: ReadonlyArray<AlterTableColumnAlterationNode>;
|
|
19
21
|
readonly addConstraint?: AddConstraintNode;
|
|
20
22
|
readonly dropConstraint?: DropConstraintNode;
|
|
23
|
+
readonly addIndex?: AddIndexNode;
|
|
24
|
+
readonly dropIndex?: DropIndexNode;
|
|
21
25
|
}
|
|
22
26
|
/**
|
|
23
27
|
* @internal
|
|
@@ -20,6 +20,7 @@ export interface ColumnDefinitionNode extends OperationNode {
|
|
|
20
20
|
readonly unsigned?: boolean;
|
|
21
21
|
readonly frontModifiers?: ReadonlyArray<OperationNode>;
|
|
22
22
|
readonly endModifiers?: ReadonlyArray<OperationNode>;
|
|
23
|
+
readonly nullsNotDistinct?: boolean;
|
|
23
24
|
}
|
|
24
25
|
/**
|
|
25
26
|
* @internal
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { ColumnNode } from './column-node.js';
|
|
2
1
|
import { OperationNode } from './operation-node.js';
|
|
3
2
|
export interface ColumnUpdateNode extends OperationNode {
|
|
4
3
|
readonly kind: 'ColumnUpdateNode';
|
|
5
|
-
readonly column:
|
|
4
|
+
readonly column: OperationNode;
|
|
6
5
|
readonly value: OperationNode;
|
|
7
6
|
}
|
|
8
7
|
/**
|
|
@@ -10,5 +9,5 @@ export interface ColumnUpdateNode extends OperationNode {
|
|
|
10
9
|
*/
|
|
11
10
|
export declare const ColumnUpdateNode: Readonly<{
|
|
12
11
|
is(node: OperationNode): node is ColumnUpdateNode;
|
|
13
|
-
create(column:
|
|
12
|
+
create(column: OperationNode, value: OperationNode): ColumnUpdateNode;
|
|
14
13
|
}>;
|
|
@@ -16,6 +16,7 @@ export interface CreateTableNode extends OperationNode {
|
|
|
16
16
|
readonly onCommit?: OnCommitAction;
|
|
17
17
|
readonly frontModifiers?: ReadonlyArray<OperationNode>;
|
|
18
18
|
readonly endModifiers?: ReadonlyArray<OperationNode>;
|
|
19
|
+
readonly selectQuery?: OperationNode;
|
|
19
20
|
}
|
|
20
21
|
/**
|
|
21
22
|
* @internal
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { OperationNode } from './operation-node.js';
|
|
2
|
-
import { ValueNode } from './value-node.js';
|
|
3
2
|
export interface LimitNode extends OperationNode {
|
|
4
3
|
readonly kind: 'LimitNode';
|
|
5
|
-
readonly limit:
|
|
4
|
+
readonly limit: OperationNode;
|
|
6
5
|
}
|
|
7
6
|
/**
|
|
8
7
|
* @internal
|
|
9
8
|
*/
|
|
10
9
|
export declare const LimitNode: Readonly<{
|
|
11
10
|
is(node: OperationNode): node is LimitNode;
|
|
12
|
-
create(limit:
|
|
11
|
+
create(limit: OperationNode): LimitNode;
|
|
13
12
|
}>;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/// <reference types="./limit-node.d.ts" />
|
|
2
2
|
import { freeze } from '../util/object-utils.js';
|
|
3
|
-
import { ValueNode } from './value-node.js';
|
|
4
3
|
/**
|
|
5
4
|
* @internal
|
|
6
5
|
*/
|
|
@@ -11,7 +10,7 @@ export const LimitNode = freeze({
|
|
|
11
10
|
create(limit) {
|
|
12
11
|
return freeze({
|
|
13
12
|
kind: 'LimitNode',
|
|
14
|
-
limit
|
|
13
|
+
limit,
|
|
15
14
|
});
|
|
16
15
|
},
|
|
17
16
|
});
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { OperationNode } from './operation-node.js';
|
|
2
|
-
import { ValueNode } from './value-node.js';
|
|
3
2
|
export interface OffsetNode extends OperationNode {
|
|
4
3
|
readonly kind: 'OffsetNode';
|
|
5
|
-
readonly offset:
|
|
4
|
+
readonly offset: OperationNode;
|
|
6
5
|
}
|
|
7
6
|
/**
|
|
8
7
|
* @internal
|
|
9
8
|
*/
|
|
10
9
|
export declare const OffsetNode: Readonly<{
|
|
11
10
|
is(node: OperationNode): node is OffsetNode;
|
|
12
|
-
create(offset:
|
|
11
|
+
create(offset: OperationNode): OffsetNode;
|
|
13
12
|
}>;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/// <reference types="./offset-node.d.ts" />
|
|
2
2
|
import { freeze } from '../util/object-utils.js';
|
|
3
|
-
import { ValueNode } from './value-node.js';
|
|
4
3
|
/**
|
|
5
4
|
* @internal
|
|
6
5
|
*/
|
|
@@ -11,7 +10,7 @@ export const OffsetNode = freeze({
|
|
|
11
10
|
create(offset) {
|
|
12
11
|
return freeze({
|
|
13
12
|
kind: 'OffsetNode',
|
|
14
|
-
offset
|
|
13
|
+
offset,
|
|
15
14
|
});
|
|
16
15
|
},
|
|
17
16
|
});
|
|
@@ -85,6 +85,7 @@ 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
87
|
import { TupleNode } from './tuple-node.js';
|
|
88
|
+
import { AddIndexNode } from './add-index-node.js';
|
|
88
89
|
/**
|
|
89
90
|
* Transforms an operation node tree into another one.
|
|
90
91
|
*
|
|
@@ -199,6 +200,7 @@ export declare class OperationNodeTransformer {
|
|
|
199
200
|
protected transformJSONPathLeg(node: JSONPathLegNode): JSONPathLegNode;
|
|
200
201
|
protected transformJSONOperatorChain(node: JSONOperatorChainNode): JSONOperatorChainNode;
|
|
201
202
|
protected transformTuple(node: TupleNode): TupleNode;
|
|
203
|
+
protected transformAddIndex(node: AddIndexNode): AddIndexNode;
|
|
202
204
|
protected transformDataType(node: DataTypeNode): DataTypeNode;
|
|
203
205
|
protected transformSelectAll(node: SelectAllNode): SelectAllNode;
|
|
204
206
|
protected transformIdentifier(node: IdentifierNode): IdentifierNode;
|
|
@@ -119,6 +119,7 @@ export class OperationNodeTransformer {
|
|
|
119
119
|
JSONPathLegNode: this.transformJSONPathLeg.bind(this),
|
|
120
120
|
JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this),
|
|
121
121
|
TupleNode: this.transformTuple.bind(this),
|
|
122
|
+
AddIndexNode: this.transformAddIndex.bind(this),
|
|
122
123
|
});
|
|
123
124
|
transformNode(node) {
|
|
124
125
|
if (!node) {
|
|
@@ -256,6 +257,7 @@ export class OperationNodeTransformer {
|
|
|
256
257
|
ignore: node.ignore,
|
|
257
258
|
replace: node.replace,
|
|
258
259
|
explain: this.transformNode(node.explain),
|
|
260
|
+
defaultValues: node.defaultValues,
|
|
259
261
|
});
|
|
260
262
|
}
|
|
261
263
|
transformValues(node) {
|
|
@@ -295,6 +297,7 @@ export class OperationNodeTransformer {
|
|
|
295
297
|
onCommit: node.onCommit,
|
|
296
298
|
frontModifiers: this.transformNodeList(node.frontModifiers),
|
|
297
299
|
endModifiers: this.transformNodeList(node.endModifiers),
|
|
300
|
+
selectQuery: this.transformNode(node.selectQuery),
|
|
298
301
|
});
|
|
299
302
|
}
|
|
300
303
|
transformColumnDefinition(node) {
|
|
@@ -313,6 +316,7 @@ export class OperationNodeTransformer {
|
|
|
313
316
|
generated: this.transformNode(node.generated),
|
|
314
317
|
frontModifiers: this.transformNodeList(node.frontModifiers),
|
|
315
318
|
endModifiers: this.transformNodeList(node.endModifiers),
|
|
319
|
+
nullsNotDistinct: node.nullsNotDistinct,
|
|
316
320
|
});
|
|
317
321
|
}
|
|
318
322
|
transformAddColumn(node) {
|
|
@@ -414,6 +418,7 @@ export class OperationNodeTransformer {
|
|
|
414
418
|
using: this.transformNode(node.using),
|
|
415
419
|
ifNotExists: node.ifNotExists,
|
|
416
420
|
where: this.transformNode(node.where),
|
|
421
|
+
nullsNotDistinct: node.nullsNotDistinct,
|
|
417
422
|
});
|
|
418
423
|
}
|
|
419
424
|
transformList(node) {
|
|
@@ -443,6 +448,7 @@ export class OperationNodeTransformer {
|
|
|
443
448
|
kind: 'UniqueConstraintNode',
|
|
444
449
|
columns: this.transformNodeList(node.columns),
|
|
445
450
|
name: this.transformNode(node.name),
|
|
451
|
+
nullsNotDistinct: node.nullsNotDistinct,
|
|
446
452
|
});
|
|
447
453
|
}
|
|
448
454
|
transformForeignKeyConstraint(node) {
|
|
@@ -531,6 +537,8 @@ export class OperationNodeTransformer {
|
|
|
531
537
|
columnAlterations: this.transformNodeList(node.columnAlterations),
|
|
532
538
|
addConstraint: this.transformNode(node.addConstraint),
|
|
533
539
|
dropConstraint: this.transformNode(node.dropConstraint),
|
|
540
|
+
addIndex: this.transformNode(node.addIndex),
|
|
541
|
+
dropIndex: this.transformNode(node.dropIndex),
|
|
534
542
|
});
|
|
535
543
|
}
|
|
536
544
|
transformDropColumn(node) {
|
|
@@ -626,6 +634,7 @@ export class OperationNodeTransformer {
|
|
|
626
634
|
kind: 'SelectModifierNode',
|
|
627
635
|
modifier: node.modifier,
|
|
628
636
|
rawModifier: this.transformNode(node.rawModifier),
|
|
637
|
+
of: this.transformNodeList(node.of),
|
|
629
638
|
});
|
|
630
639
|
}
|
|
631
640
|
transformCreateType(node) {
|
|
@@ -763,6 +772,16 @@ export class OperationNodeTransformer {
|
|
|
763
772
|
values: this.transformNodeList(node.values),
|
|
764
773
|
});
|
|
765
774
|
}
|
|
775
|
+
transformAddIndex(node) {
|
|
776
|
+
return requireAllProps({
|
|
777
|
+
kind: 'AddIndexNode',
|
|
778
|
+
name: this.transformNode(node.name),
|
|
779
|
+
columns: this.transformNodeList(node.columns),
|
|
780
|
+
unique: node.unique,
|
|
781
|
+
using: this.transformNode(node.using),
|
|
782
|
+
ifNotExists: node.ifNotExists,
|
|
783
|
+
});
|
|
784
|
+
}
|
|
766
785
|
transformDataType(node) {
|
|
767
786
|
// An Object.freezed leaf node. No need to clone.
|
|
768
787
|
return node;
|
|
@@ -85,6 +85,7 @@ 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
87
|
import { TupleNode } from './tuple-node.js';
|
|
88
|
+
import { AddIndexNode } from './add-index-node.js';
|
|
88
89
|
export declare abstract class OperationNodeVisitor {
|
|
89
90
|
#private;
|
|
90
91
|
protected readonly nodeStack: OperationNode[];
|
|
@@ -176,4 +177,5 @@ export declare abstract class OperationNodeVisitor {
|
|
|
176
177
|
protected abstract visitJSONPathLeg(node: JSONPathLegNode): void;
|
|
177
178
|
protected abstract visitJSONOperatorChain(node: JSONOperatorChainNode): void;
|
|
178
179
|
protected abstract visitTuple(node: TupleNode): void;
|
|
180
|
+
protected abstract visitAddIndex(node: AddIndexNode): void;
|
|
179
181
|
}
|
|
@@ -92,6 +92,7 @@ export class OperationNodeVisitor {
|
|
|
92
92
|
JSONPathLegNode: this.visitJSONPathLeg.bind(this),
|
|
93
93
|
JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this),
|
|
94
94
|
TupleNode: this.visitTuple.bind(this),
|
|
95
|
+
AddIndexNode: this.visitAddIndex.bind(this),
|
|
95
96
|
});
|
|
96
97
|
visitNode = (node) => {
|
|
97
98
|
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' | 'TupleNode';
|
|
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' | 'AddIndexNode';
|
|
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", "is distinct from", "is not distinct from"];
|
|
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", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"];
|
|
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", "between", "between symmetric"];
|
|
8
|
+
export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "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];
|
|
@@ -4,12 +4,13 @@ export interface SelectModifierNode extends OperationNode {
|
|
|
4
4
|
readonly kind: 'SelectModifierNode';
|
|
5
5
|
readonly modifier?: SelectModifier;
|
|
6
6
|
readonly rawModifier?: OperationNode;
|
|
7
|
+
readonly of?: ReadonlyArray<OperationNode>;
|
|
7
8
|
}
|
|
8
9
|
/**
|
|
9
10
|
* @internal
|
|
10
11
|
*/
|
|
11
12
|
export declare const SelectModifierNode: Readonly<{
|
|
12
13
|
is(node: OperationNode): node is SelectModifierNode;
|
|
13
|
-
create(modifier: SelectModifier): SelectModifierNode;
|
|
14
|
+
create(modifier: SelectModifier, of?: ReadonlyArray<OperationNode>): SelectModifierNode;
|
|
14
15
|
createWithExpression(modifier: OperationNode): SelectModifierNode;
|
|
15
16
|
}>;
|
|
@@ -7,10 +7,11 @@ export const SelectModifierNode = freeze({
|
|
|
7
7
|
is(node) {
|
|
8
8
|
return node.kind === 'SelectModifierNode';
|
|
9
9
|
},
|
|
10
|
-
create(modifier) {
|
|
10
|
+
create(modifier, of) {
|
|
11
11
|
return freeze({
|
|
12
12
|
kind: 'SelectModifierNode',
|
|
13
13
|
modifier,
|
|
14
|
+
of,
|
|
14
15
|
});
|
|
15
16
|
},
|
|
16
17
|
createWithExpression(modifier) {
|