kysely 0.23.4 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -25
- package/dist/cjs/dialect/database-introspector.d.ts +4 -2
- package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -2
- package/dist/cjs/dialect/mysql/mysql-driver.d.ts +1 -1
- package/dist/cjs/dialect/mysql/mysql-driver.js +1 -1
- package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +1 -1
- package/dist/cjs/dialect/mysql/mysql-introspector.js +19 -13
- package/dist/cjs/dialect/postgres/postgres-adapter.js +1 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +1 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.js +3 -1
- package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +1 -0
- package/dist/cjs/dialect/sqlite/sqlite-dialect.js +1 -0
- package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +6 -5
- package/dist/cjs/driver/runtime-driver.js +4 -2
- package/dist/cjs/expression/expression-builder.d.ts +386 -0
- package/dist/cjs/expression/expression-builder.js +92 -0
- package/dist/cjs/expression/expression-wrapper.d.ts +92 -0
- package/dist/cjs/expression/expression-wrapper.js +54 -0
- package/dist/cjs/expression/expression.d.ts +1 -1
- package/dist/cjs/helpers/postgres.d.ts +133 -0
- package/dist/cjs/helpers/postgres.js +141 -0
- package/dist/cjs/index.d.ts +4 -3
- package/dist/cjs/index.js +4 -2
- package/dist/cjs/kysely.d.ts +10 -0
- package/dist/cjs/kysely.js +12 -1
- package/dist/cjs/migration/file-migration-provider.d.ts +5 -2
- package/dist/cjs/migration/migrator.d.ts +5 -2
- package/dist/cjs/operation-node/aggregate-function-node.d.ts +3 -2
- package/dist/cjs/operation-node/aggregate-function-node.js +2 -2
- package/dist/cjs/operation-node/create-index-node.d.ts +2 -0
- package/dist/cjs/operation-node/delete-query-node.d.ts +1 -2
- package/dist/cjs/operation-node/delete-query-node.js +2 -8
- package/dist/cjs/operation-node/function-node.d.ts +13 -0
- package/dist/cjs/operation-node/function-node.js +19 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +11 -2
- 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 +13 -2
- package/dist/cjs/operation-node/operator-node.js +38 -3
- package/dist/cjs/operation-node/query-node.d.ts +25 -8
- package/dist/cjs/operation-node/query-node.js +9 -2
- package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
- package/dist/cjs/operation-node/select-query-node.js +0 -6
- package/dist/cjs/operation-node/update-query-node.d.ts +0 -1
- package/dist/cjs/operation-node/update-query-node.js +0 -6
- package/dist/cjs/parser/binary-operation-parser.d.ts +9 -10
- package/dist/cjs/parser/binary-operation-parser.js +89 -39
- package/dist/cjs/parser/coalesce-parser.d.ts +0 -2
- package/dist/cjs/parser/coalesce-parser.js +0 -9
- package/dist/cjs/parser/expression-parser.d.ts +7 -3
- package/dist/cjs/parser/expression-parser.js +4 -4
- package/dist/cjs/parser/group-by-parser.d.ts +3 -2
- package/dist/cjs/parser/group-by-parser.js +3 -0
- package/dist/cjs/parser/insert-values-parser.d.ts +4 -1
- package/dist/cjs/parser/insert-values-parser.js +19 -13
- package/dist/cjs/parser/join-parser.js +1 -1
- package/dist/cjs/parser/parse-utils.d.ts +0 -2
- package/dist/cjs/parser/parse-utils.js +1 -8
- package/dist/cjs/parser/returning-parser.d.ts +2 -1
- package/dist/cjs/parser/select-parser.d.ts +5 -13
- package/dist/cjs/parser/select-parser.js +8 -4
- package/dist/cjs/parser/table-parser.d.ts +6 -3
- package/dist/cjs/parser/unary-operation-parser.d.ts +5 -2
- package/dist/cjs/parser/unary-operation-parser.js +9 -8
- package/dist/cjs/parser/update-set-parser.d.ts +4 -1
- package/dist/cjs/parser/update-set-parser.js +9 -4
- package/dist/cjs/parser/value-parser.d.ts +5 -0
- package/dist/cjs/parser/value-parser.js +1 -3
- package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +7 -0
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +10 -4
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +1 -1
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +40 -113
- package/dist/cjs/query-builder/aggregate-function-builder.js +23 -63
- package/dist/cjs/query-builder/delete-query-builder.d.ts +224 -205
- package/dist/cjs/query-builder/delete-query-builder.js +21 -27
- package/dist/cjs/query-builder/delete-result.js +3 -0
- package/dist/cjs/query-builder/deprecated-having-expression-builder.d.ts +62 -0
- package/dist/cjs/query-builder/deprecated-having-expression-builder.js +2 -0
- package/dist/cjs/query-builder/deprecated-on-expression-builder.d.ts +62 -0
- package/dist/cjs/query-builder/deprecated-on-expression-builder.js +2 -0
- package/dist/cjs/query-builder/deprecated-where-expression-builder.d.ts +62 -0
- package/dist/cjs/query-builder/deprecated-where-expression-builder.js +2 -0
- package/dist/cjs/query-builder/function-module.d.ts +304 -42
- package/dist/cjs/query-builder/function-module.js +44 -208
- package/dist/cjs/query-builder/having-interface.d.ts +19 -16
- package/dist/cjs/query-builder/insert-query-builder.d.ts +78 -30
- package/dist/cjs/query-builder/insert-query-builder.js +21 -30
- package/dist/cjs/query-builder/insert-result.js +3 -0
- package/dist/cjs/query-builder/join-builder.d.ts +23 -26
- package/dist/cjs/query-builder/join-builder.js +17 -22
- package/dist/cjs/query-builder/no-result-error.d.ts +1 -0
- package/dist/cjs/query-builder/no-result-error.js +5 -1
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +158 -276
- package/dist/cjs/query-builder/on-conflict-builder.js +52 -36
- package/dist/cjs/query-builder/over-builder.d.ts +5 -0
- package/dist/cjs/query-builder/over-builder.js +7 -0
- package/dist/cjs/query-builder/returning-interface.d.ts +2 -2
- package/dist/cjs/query-builder/select-query-builder.d.ts +155 -243
- package/dist/cjs/query-builder/select-query-builder.js +333 -78
- package/dist/cjs/query-builder/update-query-builder.d.ts +149 -217
- package/dist/cjs/query-builder/update-query-builder.js +21 -115
- package/dist/cjs/query-builder/update-result.js +3 -0
- package/dist/cjs/query-builder/where-interface.d.ts +71 -184
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +18 -2
- package/dist/cjs/query-creator.d.ts +38 -2
- package/dist/cjs/query-creator.js +3 -45
- package/dist/cjs/query-executor/query-executor.d.ts +3 -3
- package/dist/cjs/raw-builder/raw-builder.d.ts +5 -3
- package/dist/cjs/raw-builder/raw-builder.js +13 -7
- package/dist/cjs/raw-builder/sql.d.ts +17 -9
- package/dist/cjs/raw-builder/sql.js +8 -2
- package/dist/cjs/schema/alter-column-builder.d.ts +5 -0
- package/dist/cjs/schema/alter-column-builder.js +7 -0
- package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +5 -0
- package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +7 -0
- package/dist/cjs/schema/alter-table-drop-constraint-builder.d.ts +5 -0
- package/dist/cjs/schema/alter-table-drop-constraint-builder.js +7 -0
- package/dist/cjs/schema/column-definition-builder.d.ts +6 -1
- package/dist/cjs/schema/column-definition-builder.js +8 -1
- package/dist/cjs/schema/create-index-builder.d.ts +51 -9
- package/dist/cjs/schema/create-index-builder.js +17 -0
- package/dist/cjs/schema/create-schema-builder.d.ts +5 -0
- package/dist/cjs/schema/create-schema-builder.js +7 -0
- package/dist/cjs/schema/create-table-builder.d.ts +3 -1
- package/dist/cjs/schema/create-table-builder.js +3 -1
- package/dist/cjs/schema/create-type-builder.d.ts +5 -0
- package/dist/cjs/schema/create-type-builder.js +7 -0
- package/dist/cjs/schema/create-view-builder.d.ts +5 -0
- package/dist/cjs/schema/create-view-builder.js +7 -0
- package/dist/cjs/schema/drop-index-builder.d.ts +5 -0
- package/dist/cjs/schema/drop-index-builder.js +7 -0
- package/dist/cjs/schema/drop-schema-builder.d.ts +5 -0
- package/dist/cjs/schema/drop-schema-builder.js +7 -0
- package/dist/cjs/schema/drop-table-builder.d.ts +5 -0
- package/dist/cjs/schema/drop-table-builder.js +7 -0
- package/dist/cjs/schema/drop-type-builder.d.ts +5 -0
- package/dist/cjs/schema/drop-type-builder.js +7 -0
- package/dist/cjs/schema/drop-view-builder.d.ts +5 -0
- package/dist/cjs/schema/drop-view-builder.js +7 -0
- package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +5 -0
- package/dist/cjs/schema/foreign-key-constraint-builder.js +7 -0
- package/dist/cjs/util/compilable.d.ts +1 -0
- package/dist/cjs/util/compilable.js +6 -0
- package/dist/cjs/util/explainable.d.ts +35 -0
- package/dist/cjs/util/log.d.ts +2 -0
- package/dist/cjs/util/object-utils.js +1 -1
- package/dist/cjs/util/streamable.d.ts +29 -0
- package/dist/cjs/util/streamable.js +2 -0
- package/dist/cjs/util/type-utils.d.ts +6 -4
- package/dist/esm/dialect/database-introspector.d.ts +4 -2
- package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
- package/dist/esm/dialect/mysql/mysql-driver.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-driver.js +1 -1
- package/dist/esm/dialect/mysql/mysql-introspector.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-introspector.js +19 -13
- package/dist/esm/dialect/postgres/postgres-adapter.js +1 -1
- package/dist/esm/dialect/postgres/postgres-introspector.d.ts +1 -1
- package/dist/esm/dialect/postgres/postgres-introspector.js +3 -1
- package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +1 -0
- package/dist/esm/dialect/sqlite/sqlite-dialect.js +1 -0
- package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +1 -1
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +6 -5
- package/dist/esm/driver/runtime-driver.js +4 -2
- package/dist/esm/expression/expression-builder.d.ts +386 -0
- package/dist/esm/expression/expression-builder.js +88 -0
- package/dist/esm/expression/expression-wrapper.d.ts +92 -0
- package/dist/esm/expression/expression-wrapper.js +50 -0
- package/dist/esm/expression/expression.d.ts +1 -1
- package/dist/esm/helpers/postgres.d.ts +133 -0
- package/dist/esm/helpers/postgres.js +136 -0
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.js +2 -1
- package/dist/esm/kysely.d.ts +10 -0
- package/dist/esm/kysely.js +13 -2
- package/dist/esm/migration/file-migration-provider.d.ts +5 -2
- package/dist/esm/migration/migrator.d.ts +5 -2
- package/dist/esm/operation-node/aggregate-function-node.d.ts +3 -2
- package/dist/esm/operation-node/aggregate-function-node.js +2 -2
- package/dist/esm/operation-node/create-index-node.d.ts +2 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +1 -2
- package/dist/esm/operation-node/delete-query-node.js +2 -8
- package/dist/esm/operation-node/function-node.d.ts +13 -0
- package/dist/esm/operation-node/function-node.js +17 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +11 -2
- 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 +13 -2
- package/dist/esm/operation-node/operator-node.js +34 -3
- package/dist/esm/operation-node/query-node.d.ts +25 -8
- package/dist/esm/operation-node/query-node.js +9 -2
- package/dist/esm/operation-node/select-query-node.d.ts +0 -1
- package/dist/esm/operation-node/select-query-node.js +0 -6
- package/dist/esm/operation-node/update-query-node.d.ts +0 -1
- package/dist/esm/operation-node/update-query-node.js +0 -6
- package/dist/esm/parser/binary-operation-parser.d.ts +9 -10
- package/dist/esm/parser/binary-operation-parser.js +85 -37
- package/dist/esm/parser/coalesce-parser.d.ts +0 -2
- package/dist/esm/parser/coalesce-parser.js +1 -7
- package/dist/esm/parser/expression-parser.d.ts +7 -3
- package/dist/esm/parser/expression-parser.js +5 -5
- package/dist/esm/parser/group-by-parser.d.ts +3 -2
- package/dist/esm/parser/group-by-parser.js +3 -0
- package/dist/esm/parser/insert-values-parser.d.ts +4 -1
- package/dist/esm/parser/insert-values-parser.js +18 -12
- package/dist/esm/parser/join-parser.js +2 -2
- package/dist/esm/parser/parse-utils.d.ts +0 -2
- package/dist/esm/parser/parse-utils.js +0 -6
- package/dist/esm/parser/returning-parser.d.ts +2 -1
- package/dist/esm/parser/select-parser.d.ts +5 -13
- package/dist/esm/parser/select-parser.js +7 -3
- package/dist/esm/parser/table-parser.d.ts +6 -3
- package/dist/esm/parser/unary-operation-parser.d.ts +5 -2
- package/dist/esm/parser/unary-operation-parser.js +8 -8
- package/dist/esm/parser/update-set-parser.d.ts +4 -1
- package/dist/esm/parser/update-set-parser.js +7 -2
- package/dist/esm/parser/value-parser.d.ts +5 -0
- package/dist/esm/parser/value-parser.js +1 -3
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +7 -0
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +10 -4
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +1 -1
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +40 -113
- package/dist/esm/query-builder/aggregate-function-builder.js +24 -64
- package/dist/esm/query-builder/delete-query-builder.d.ts +224 -205
- package/dist/esm/query-builder/delete-query-builder.js +24 -30
- package/dist/esm/query-builder/delete-result.js +3 -0
- package/dist/esm/query-builder/deprecated-having-expression-builder.d.ts +62 -0
- package/dist/esm/query-builder/deprecated-having-expression-builder.js +2 -0
- package/dist/esm/query-builder/deprecated-on-expression-builder.d.ts +62 -0
- package/dist/esm/query-builder/deprecated-on-expression-builder.js +2 -0
- package/dist/esm/query-builder/deprecated-where-expression-builder.d.ts +62 -0
- package/dist/esm/query-builder/deprecated-where-expression-builder.js +2 -0
- package/dist/esm/query-builder/function-module.d.ts +304 -42
- package/dist/esm/query-builder/function-module.js +43 -207
- package/dist/esm/query-builder/having-interface.d.ts +19 -16
- package/dist/esm/query-builder/insert-query-builder.d.ts +78 -30
- package/dist/esm/query-builder/insert-query-builder.js +25 -34
- package/dist/esm/query-builder/insert-result.js +3 -0
- package/dist/esm/query-builder/join-builder.d.ts +23 -26
- package/dist/esm/query-builder/join-builder.js +18 -23
- package/dist/esm/query-builder/no-result-error.d.ts +1 -0
- package/dist/esm/query-builder/no-result-error.js +3 -0
- package/dist/esm/query-builder/on-conflict-builder.d.ts +158 -276
- package/dist/esm/query-builder/on-conflict-builder.js +54 -38
- package/dist/esm/query-builder/over-builder.d.ts +5 -0
- package/dist/esm/query-builder/over-builder.js +7 -0
- package/dist/esm/query-builder/returning-interface.d.ts +2 -2
- package/dist/esm/query-builder/select-query-builder.d.ts +155 -243
- package/dist/esm/query-builder/select-query-builder.js +337 -82
- package/dist/esm/query-builder/update-query-builder.d.ts +149 -217
- package/dist/esm/query-builder/update-query-builder.js +25 -119
- package/dist/esm/query-builder/update-result.js +3 -0
- package/dist/esm/query-builder/where-interface.d.ts +71 -184
- package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
- package/dist/esm/query-compiler/default-query-compiler.js +18 -2
- package/dist/esm/query-creator.d.ts +38 -2
- package/dist/esm/query-creator.js +3 -45
- package/dist/esm/query-executor/query-executor.d.ts +3 -3
- package/dist/esm/raw-builder/raw-builder.d.ts +5 -3
- package/dist/esm/raw-builder/raw-builder.js +13 -7
- package/dist/esm/raw-builder/sql.d.ts +17 -9
- package/dist/esm/raw-builder/sql.js +8 -2
- package/dist/esm/schema/alter-column-builder.d.ts +5 -0
- package/dist/esm/schema/alter-column-builder.js +7 -0
- package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +5 -0
- package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +7 -0
- package/dist/esm/schema/alter-table-drop-constraint-builder.d.ts +5 -0
- package/dist/esm/schema/alter-table-drop-constraint-builder.js +7 -0
- package/dist/esm/schema/column-definition-builder.d.ts +6 -1
- package/dist/esm/schema/column-definition-builder.js +8 -1
- package/dist/esm/schema/create-index-builder.d.ts +51 -9
- package/dist/esm/schema/create-index-builder.js +17 -0
- package/dist/esm/schema/create-schema-builder.d.ts +5 -0
- package/dist/esm/schema/create-schema-builder.js +7 -0
- package/dist/esm/schema/create-table-builder.d.ts +3 -1
- package/dist/esm/schema/create-table-builder.js +3 -1
- package/dist/esm/schema/create-type-builder.d.ts +5 -0
- package/dist/esm/schema/create-type-builder.js +7 -0
- package/dist/esm/schema/create-view-builder.d.ts +5 -0
- package/dist/esm/schema/create-view-builder.js +7 -0
- package/dist/esm/schema/drop-index-builder.d.ts +5 -0
- package/dist/esm/schema/drop-index-builder.js +7 -0
- package/dist/esm/schema/drop-schema-builder.d.ts +5 -0
- package/dist/esm/schema/drop-schema-builder.js +7 -0
- package/dist/esm/schema/drop-table-builder.d.ts +5 -0
- package/dist/esm/schema/drop-table-builder.js +7 -0
- package/dist/esm/schema/drop-type-builder.d.ts +5 -0
- package/dist/esm/schema/drop-type-builder.js +7 -0
- package/dist/esm/schema/drop-view-builder.d.ts +5 -0
- package/dist/esm/schema/drop-view-builder.js +7 -0
- package/dist/esm/schema/foreign-key-constraint-builder.d.ts +5 -0
- package/dist/esm/schema/foreign-key-constraint-builder.js +7 -0
- package/dist/esm/util/compilable.d.ts +1 -0
- package/dist/esm/util/compilable.js +4 -1
- package/dist/esm/util/explainable.d.ts +35 -0
- package/dist/esm/util/log.d.ts +2 -0
- package/dist/esm/util/object-utils.js +1 -1
- package/dist/esm/util/streamable.d.ts +29 -0
- package/dist/esm/util/streamable.js +2 -0
- package/dist/esm/util/type-utils.d.ts +6 -4
- package/helpers/postgres.d.ts +1 -0
- package/helpers/postgres.js +1 -0
- package/package.json +20 -9
- package/dist/cjs/query-builder/expression-builder.d.ts +0 -126
- package/dist/cjs/query-builder/expression-builder.js +0 -107
- package/dist/esm/query-builder/expression-builder.d.ts +0 -126
- package/dist/esm/query-builder/expression-builder.js +0 -104
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
2
|
+
import { TableExpression, From, FromTables, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from '../parser/table-parser.js';
|
|
3
|
+
import { FunctionModule } from '../query-builder/function-module.js';
|
|
4
|
+
import { ExtractTypeFromReferenceExpression, ReferenceExpression, StringReference } from '../parser/reference-parser.js';
|
|
5
|
+
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
6
|
+
import { BinaryOperatorExpression, ComparisonOperatorExpression, OperandValueExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
7
|
+
import { Expression } from './expression.js';
|
|
8
|
+
import { ExpressionWrapper } from './expression-wrapper.js';
|
|
9
|
+
import { ComparisonOperator, UnaryOperator } from '../operation-node/operator-node.js';
|
|
10
|
+
import { SqlBool } from '../util/type-utils.js';
|
|
11
|
+
import { ExtractTypeFromValueExpressionOrList } from '../parser/value-parser.js';
|
|
12
|
+
export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
13
|
+
/**
|
|
14
|
+
* Returns a {@link FunctionModule} that can be used to write type safe function
|
|
15
|
+
* calls.
|
|
16
|
+
*
|
|
17
|
+
* The difference between this and {@link Kysely.fn} is that this one is more
|
|
18
|
+
* type safe. You can only refer to columns visible to the part of the query
|
|
19
|
+
* you are building. {@link Kysely.fn} allows you to refer to columns in any
|
|
20
|
+
* table of the database even if it doesn't produce valid SQL.
|
|
21
|
+
*
|
|
22
|
+
* ```ts
|
|
23
|
+
* await db.selectFrom('person')
|
|
24
|
+
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
25
|
+
* .select((eb) => [
|
|
26
|
+
* 'person.id',
|
|
27
|
+
* eb.fn.count('pet.id').as('pet_count')
|
|
28
|
+
* ])
|
|
29
|
+
* .groupBy('person.id')
|
|
30
|
+
* .having(count('pet.id'), '>', 10)
|
|
31
|
+
* .execute()
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* The generated SQL (PostgreSQL):
|
|
35
|
+
*
|
|
36
|
+
* ```sql
|
|
37
|
+
* select "person"."id", count("pet"."id") as "pet_count"
|
|
38
|
+
* from "person"
|
|
39
|
+
* inner join "pet" on "pet"."owner_id" = "person"."id"
|
|
40
|
+
* group by "person"."id"
|
|
41
|
+
* having count("pet"."id") > $1
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
get fn(): FunctionModule<DB, TB>;
|
|
45
|
+
/**
|
|
46
|
+
* Creates a subquery.
|
|
47
|
+
*
|
|
48
|
+
* The query builder returned by this method is typed in a way that you can refer to
|
|
49
|
+
* all tables of the parent query in addition to the subquery's tables.
|
|
50
|
+
*
|
|
51
|
+
* This method accepts all the same inputs as {@link QueryCreator.selectFrom}.
|
|
52
|
+
*
|
|
53
|
+
* ### Examples
|
|
54
|
+
*
|
|
55
|
+
* This example shows that you can refer to both `pet.owner_id` and `person.id`
|
|
56
|
+
* columns from the subquery. This is needed to be able to create correlated
|
|
57
|
+
* subqueries:
|
|
58
|
+
*
|
|
59
|
+
* ```ts
|
|
60
|
+
* const result = await db.selectFrom('pet')
|
|
61
|
+
* .select((eb) => [
|
|
62
|
+
* 'pet.name',
|
|
63
|
+
* eb.selectFrom('person')
|
|
64
|
+
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
65
|
+
* .select('person.first_name')
|
|
66
|
+
* .as('owner_name')
|
|
67
|
+
* ])
|
|
68
|
+
* .execute()
|
|
69
|
+
*
|
|
70
|
+
* console.log(result[0].owner_name)
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* The generated SQL (PostgreSQL):
|
|
74
|
+
*
|
|
75
|
+
* ```sql
|
|
76
|
+
* select
|
|
77
|
+
* "pet"."name",
|
|
78
|
+
* ( select "person"."first_name"
|
|
79
|
+
* from "person"
|
|
80
|
+
* where "person"."id" = "pet"."owner_id"
|
|
81
|
+
* ) as "owner_name"
|
|
82
|
+
* from "pet"
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* You can use a normal query in place of `(qb) => qb.selectFrom(...)` but in
|
|
86
|
+
* that case Kysely typings wouldn't allow you to reference `pet.owner_id`
|
|
87
|
+
* because `pet` is not joined to that query.
|
|
88
|
+
*/
|
|
89
|
+
selectFrom<TE extends keyof DB & string>(from: TE[]): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
|
|
90
|
+
selectFrom<TE extends TableExpression<DB, TB>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
|
|
91
|
+
selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
|
|
92
|
+
selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, TB | ExtractTableAlias<DB, TE>, {}>;
|
|
93
|
+
selectFrom<TE extends TableExpression<DB, TB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
|
|
94
|
+
/**
|
|
95
|
+
* This can be used to reference columns.
|
|
96
|
+
*
|
|
97
|
+
* ### Examples
|
|
98
|
+
*
|
|
99
|
+
* By default the third argument of {@link bxp} and {@link cmpr} is a value.
|
|
100
|
+
* This function can be used to pass in a column reference instead:
|
|
101
|
+
*
|
|
102
|
+
* ```ts
|
|
103
|
+
* db.selectFrom('person')
|
|
104
|
+
* .selectAll('person')
|
|
105
|
+
* .where(({ or, cmpr, ref }) => or([
|
|
106
|
+
* cmpr('first_name', '=', ref('last_name')),
|
|
107
|
+
* cmpr('first_name', '=', ref('middle_name'))
|
|
108
|
+
* ]))
|
|
109
|
+
* ```
|
|
110
|
+
*
|
|
111
|
+
* In the next example we use the `ref` method to reference
|
|
112
|
+
* columns of the virtual table `excluded` in a type-safe way
|
|
113
|
+
* to create an upsert operation:
|
|
114
|
+
*
|
|
115
|
+
* ```ts
|
|
116
|
+
* db.insertInto('person')
|
|
117
|
+
* .values(person)
|
|
118
|
+
* .onConflict((oc) => oc
|
|
119
|
+
* .column('id')
|
|
120
|
+
* .doUpdateSet(({ ref }) => ({
|
|
121
|
+
* first_name: ref('excluded.first_name'),
|
|
122
|
+
* last_name: ref('excluded.last_name')
|
|
123
|
+
* }))
|
|
124
|
+
* )
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* In the next example we use `ref` in a raw sql expression. Unless you
|
|
128
|
+
* want to be as type-safe as possible, this is probably overkill:
|
|
129
|
+
*
|
|
130
|
+
* ```ts
|
|
131
|
+
* db.update('pet').set((eb) => ({
|
|
132
|
+
* name: sql`concat(${eb.ref('pet.name')}, ${suffix})`
|
|
133
|
+
* }))
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
ref<RE extends StringReference<DB, TB>>(reference: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
137
|
+
/**
|
|
138
|
+
* Returns a value expression.
|
|
139
|
+
*
|
|
140
|
+
* This can be used to pass in a value where a reference is taken by default.
|
|
141
|
+
*
|
|
142
|
+
* This function returns an {@link Expression} and can be used pretty much anywhere.
|
|
143
|
+
*
|
|
144
|
+
* ### Examples
|
|
145
|
+
*
|
|
146
|
+
* The {@link cmpr} function takes a reference by default as the first argument. `val` could
|
|
147
|
+
* be used to pass in a value instead:
|
|
148
|
+
*
|
|
149
|
+
* ```ts
|
|
150
|
+
* cmpr(val(38), '=', ref('age'))
|
|
151
|
+
* ```
|
|
152
|
+
*
|
|
153
|
+
* The generated SQL (PostgreSQL):
|
|
154
|
+
*
|
|
155
|
+
* ```sql
|
|
156
|
+
* $1 = "age"
|
|
157
|
+
* ```
|
|
158
|
+
*/
|
|
159
|
+
val<VE>(value: VE): ExpressionWrapper<ExtractTypeFromValueExpressionOrList<VE>>;
|
|
160
|
+
/**
|
|
161
|
+
* Creates a binary comparison expression.
|
|
162
|
+
*
|
|
163
|
+
* This function returns an {@link Expression} and can be used pretty much anywhere.
|
|
164
|
+
* See the examples for a couple of possible use cases.
|
|
165
|
+
*
|
|
166
|
+
* @see {@link bxp}
|
|
167
|
+
*
|
|
168
|
+
* ### Examples
|
|
169
|
+
*
|
|
170
|
+
* In this example we use `cmpr` and {@link or} to create a `WHERE expr1 OR expr2 OR expr3`
|
|
171
|
+
* statement:
|
|
172
|
+
*
|
|
173
|
+
* ```ts
|
|
174
|
+
* db.selectFrom('person')
|
|
175
|
+
* .selectAll('person')
|
|
176
|
+
* .where(({ or, cmpr }) => or([
|
|
177
|
+
* cmpr('first_name', '=', 'Jennifer'),
|
|
178
|
+
* cmpr('fist_name', '=', 'Arnold'),
|
|
179
|
+
* cmpr('fist_name', '=', 'Sylvester')
|
|
180
|
+
* ]))
|
|
181
|
+
* ```
|
|
182
|
+
*
|
|
183
|
+
* The generated SQL (PostgreSQL):
|
|
184
|
+
*
|
|
185
|
+
* ```sql
|
|
186
|
+
* select "person".*
|
|
187
|
+
* from "person"
|
|
188
|
+
* where "first_name" = $1
|
|
189
|
+
* or "first_name" = $2
|
|
190
|
+
* or "first_name" = $3
|
|
191
|
+
* ```
|
|
192
|
+
*
|
|
193
|
+
* By default the third argument is a value. {@link ref} can be used to
|
|
194
|
+
* pass in a column reference instead:
|
|
195
|
+
*
|
|
196
|
+
* ```ts
|
|
197
|
+
* db.selectFrom('person')
|
|
198
|
+
* .selectAll('person')
|
|
199
|
+
* .where(({ or, cmpr, ref }) => or([
|
|
200
|
+
* cmpr('first_name', '=', ref('last_name')),
|
|
201
|
+
* cmpr('first_name', '=', ref('middle_name'))
|
|
202
|
+
* ]))
|
|
203
|
+
* ```
|
|
204
|
+
*
|
|
205
|
+
* The generated SQL (PostgreSQL):
|
|
206
|
+
*
|
|
207
|
+
* ```sql
|
|
208
|
+
* select "person".*
|
|
209
|
+
* from "person"
|
|
210
|
+
* where "first_name" = "last_name"
|
|
211
|
+
* or "first_name" = "middle_name"
|
|
212
|
+
* ```
|
|
213
|
+
*/
|
|
214
|
+
cmpr<O extends SqlBool = SqlBool, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<O>;
|
|
215
|
+
/**
|
|
216
|
+
* Creates a binary expression.
|
|
217
|
+
*
|
|
218
|
+
* See {@link cmpr} for creating binary comparison operations.
|
|
219
|
+
*
|
|
220
|
+
* This function returns an {@link Expression} and can be used pretty much anywhere.
|
|
221
|
+
* See the examples for a couple of possible use cases.
|
|
222
|
+
*
|
|
223
|
+
* ### Examples
|
|
224
|
+
*
|
|
225
|
+
* In the following example `bxp` is used to increment an integer column:
|
|
226
|
+
*
|
|
227
|
+
* ```ts
|
|
228
|
+
* db.updateTable('person')
|
|
229
|
+
* .set((eb) => ({
|
|
230
|
+
* age: eb.bxp('age', '+', 1)
|
|
231
|
+
* }))
|
|
232
|
+
* .where('id', '=', id)
|
|
233
|
+
* ```
|
|
234
|
+
*
|
|
235
|
+
* The generated SQL (PostgreSQL):
|
|
236
|
+
*
|
|
237
|
+
* ```sql
|
|
238
|
+
* update "person"
|
|
239
|
+
* set "age" = "age" + $1
|
|
240
|
+
* where "id" = $2
|
|
241
|
+
* ```
|
|
242
|
+
*
|
|
243
|
+
* By default the third argument is a value. {@link ref} can be used to
|
|
244
|
+
* pass in a column reference instead:
|
|
245
|
+
*
|
|
246
|
+
* ```ts
|
|
247
|
+
* db.updateTable('person')
|
|
248
|
+
* .set((eb) => ({
|
|
249
|
+
* age: eb.bxp('age', '+', eb.ref('age'))
|
|
250
|
+
* }))
|
|
251
|
+
* .where('id', '=', id)
|
|
252
|
+
* ```
|
|
253
|
+
*
|
|
254
|
+
* The generated SQL (PostgreSQL):
|
|
255
|
+
*
|
|
256
|
+
* ```sql
|
|
257
|
+
* update "person"
|
|
258
|
+
* set "age" = "age" + "age"
|
|
259
|
+
* where "id" = $1
|
|
260
|
+
* ```
|
|
261
|
+
*/
|
|
262
|
+
bxp<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression>(lhs: RE, op: OP, rhs: OperandValueExpression<DB, TB, RE>): ExpressionWrapper<OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
263
|
+
/**
|
|
264
|
+
* Creates an unary expression.
|
|
265
|
+
*
|
|
266
|
+
* This function returns an {@link Expression} and can be used pretty much anywhere.
|
|
267
|
+
* See the examples for a couple of possible use cases.
|
|
268
|
+
*
|
|
269
|
+
* @see {@link not}, {@link exists} and {@link neg}.
|
|
270
|
+
*
|
|
271
|
+
* ### Examples
|
|
272
|
+
*
|
|
273
|
+
* ```ts
|
|
274
|
+
* db.selectFrom('person')
|
|
275
|
+
* .select((eb) => [
|
|
276
|
+
* 'first_name',
|
|
277
|
+
* eb.unary('-', 'age').as('negative_age')
|
|
278
|
+
* ])
|
|
279
|
+
* ```
|
|
280
|
+
*
|
|
281
|
+
* The generated SQL (PostgreSQL):
|
|
282
|
+
*
|
|
283
|
+
* ```sql
|
|
284
|
+
* select "first_name", -"age"
|
|
285
|
+
* from "person"
|
|
286
|
+
* ```
|
|
287
|
+
*/
|
|
288
|
+
unary<RE extends ReferenceExpression<DB, TB>>(op: UnaryOperator, expr: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
289
|
+
/**
|
|
290
|
+
* Creates a `not` operation.
|
|
291
|
+
*
|
|
292
|
+
* A shortcut for `unary('not', expr)`.
|
|
293
|
+
*
|
|
294
|
+
* @see {@link unary}
|
|
295
|
+
*/
|
|
296
|
+
not<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
297
|
+
/**
|
|
298
|
+
* Creates an `exists` operation.
|
|
299
|
+
*
|
|
300
|
+
* A shortcut for `unary('exists', expr)`.
|
|
301
|
+
*
|
|
302
|
+
* @see {@link unary}
|
|
303
|
+
*/
|
|
304
|
+
exists<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<SqlBool>;
|
|
305
|
+
/**
|
|
306
|
+
* Creates a negation operation.
|
|
307
|
+
*
|
|
308
|
+
* A shortcut for `unary('-', expr)`.
|
|
309
|
+
*
|
|
310
|
+
* @see {@link unary}
|
|
311
|
+
*/
|
|
312
|
+
neg<RE extends ReferenceExpression<DB, TB>>(expr: RE): ExpressionWrapper<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
313
|
+
/**
|
|
314
|
+
* Combines two or more expressions using the logical `and` operator.
|
|
315
|
+
*
|
|
316
|
+
* This function returns an {@link Expression} and can be used pretty much anywhere.
|
|
317
|
+
* See the examples for a couple of possible use cases.
|
|
318
|
+
*
|
|
319
|
+
* ### Examples
|
|
320
|
+
*
|
|
321
|
+
* In this example we use `and` with {@link cmpr} to create a `WHERE expr1 AND expr2 AND expr3`
|
|
322
|
+
* statement:
|
|
323
|
+
*
|
|
324
|
+
* ```ts
|
|
325
|
+
* db.selectFrom('person')
|
|
326
|
+
* .selectAll('person')
|
|
327
|
+
* .where(({ and, cmpr }) => and([
|
|
328
|
+
* cmpr('first_name', '=', 'Jennifer'),
|
|
329
|
+
* cmpr('fist_name', '=', 'Arnold'),
|
|
330
|
+
* cmpr('fist_name', '=', 'Sylvester')
|
|
331
|
+
* ]))
|
|
332
|
+
* ```
|
|
333
|
+
*
|
|
334
|
+
* The generated SQL (PostgreSQL):
|
|
335
|
+
*
|
|
336
|
+
* ```sql
|
|
337
|
+
* select "person".*
|
|
338
|
+
* from "person"
|
|
339
|
+
* where "first_name" = $1
|
|
340
|
+
* and "first_name" = $2
|
|
341
|
+
* and "first_name" = $3
|
|
342
|
+
* ```
|
|
343
|
+
*/
|
|
344
|
+
and(expres: ReadonlyArray<Expression<SqlBool>>): ExpressionWrapper<SqlBool>;
|
|
345
|
+
/**
|
|
346
|
+
* Combines two or more expressions using the logical `or` operator.
|
|
347
|
+
*
|
|
348
|
+
* This function returns an {@link Expression} and can be used pretty much anywhere.
|
|
349
|
+
* See the examples for a couple of possible use cases.
|
|
350
|
+
*
|
|
351
|
+
* ### Examples
|
|
352
|
+
*
|
|
353
|
+
* In this example we use `or` with {@link cmpr} to create a `WHERE expr1 OR expr2 OR expr3`
|
|
354
|
+
* statement:
|
|
355
|
+
*
|
|
356
|
+
* ```ts
|
|
357
|
+
* db.selectFrom('person')
|
|
358
|
+
* .selectAll('person')
|
|
359
|
+
* .where(({ or, cmpr }) => or([
|
|
360
|
+
* cmpr('first_name', '=', 'Jennifer'),
|
|
361
|
+
* cmpr('fist_name', '=', 'Arnold'),
|
|
362
|
+
* cmpr('fist_name', '=', 'Sylvester')
|
|
363
|
+
* ]))
|
|
364
|
+
* ```
|
|
365
|
+
*
|
|
366
|
+
* The generated SQL (PostgreSQL):
|
|
367
|
+
*
|
|
368
|
+
* ```sql
|
|
369
|
+
* select "person".*
|
|
370
|
+
* from "person"
|
|
371
|
+
* where "first_name" = $1
|
|
372
|
+
* or "first_name" = $2
|
|
373
|
+
* or "first_name" = $3
|
|
374
|
+
* ```
|
|
375
|
+
*/
|
|
376
|
+
or(expres: ReadonlyArray<Expression<SqlBool>>): ExpressionWrapper<SqlBool>;
|
|
377
|
+
/**
|
|
378
|
+
* See {@link QueryCreator.withSchema}
|
|
379
|
+
*
|
|
380
|
+
* @deprecated Will be removed in kysely 0.25.0.
|
|
381
|
+
*/
|
|
382
|
+
withSchema(schema: string): ExpressionBuilder<DB, TB>;
|
|
383
|
+
}
|
|
384
|
+
export declare function createExpressionBuilder<DB, TB extends keyof DB>(executor?: QueryExecutor): ExpressionBuilder<DB, TB>;
|
|
385
|
+
export declare function expressionBuilder<DB, TB extends keyof DB>(_: SelectQueryBuilder<DB, TB, any>): ExpressionBuilder<DB, TB>;
|
|
386
|
+
export declare function expressionBuilder<DB, TB extends keyof DB>(): ExpressionBuilder<DB, TB>;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.expressionBuilder = exports.createExpressionBuilder = void 0;
|
|
4
|
+
const select_query_builder_js_1 = require("../query-builder/select-query-builder.js");
|
|
5
|
+
const select_query_node_js_1 = require("../operation-node/select-query-node.js");
|
|
6
|
+
const table_parser_js_1 = require("../parser/table-parser.js");
|
|
7
|
+
const with_schema_plugin_js_1 = require("../plugin/with-schema/with-schema-plugin.js");
|
|
8
|
+
const query_id_js_1 = require("../util/query-id.js");
|
|
9
|
+
const function_module_js_1 = require("../query-builder/function-module.js");
|
|
10
|
+
const reference_parser_js_1 = require("../parser/reference-parser.js");
|
|
11
|
+
const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
|
|
12
|
+
const and_node_js_1 = require("../operation-node/and-node.js");
|
|
13
|
+
const or_node_js_1 = require("../operation-node/or-node.js");
|
|
14
|
+
const parens_node_js_1 = require("../operation-node/parens-node.js");
|
|
15
|
+
const expression_wrapper_js_1 = require("./expression-wrapper.js");
|
|
16
|
+
const unary_operation_parser_js_1 = require("../parser/unary-operation-parser.js");
|
|
17
|
+
const value_parser_js_1 = require("../parser/value-parser.js");
|
|
18
|
+
const noop_query_executor_js_1 = require("../query-executor/noop-query-executor.js");
|
|
19
|
+
const value_node_js_1 = require("../operation-node/value-node.js");
|
|
20
|
+
function createExpressionBuilder(executor = noop_query_executor_js_1.NOOP_QUERY_EXECUTOR) {
|
|
21
|
+
function unary(op, expr) {
|
|
22
|
+
return new expression_wrapper_js_1.ExpressionWrapper((0, unary_operation_parser_js_1.parseUnaryOperation)(op, expr));
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
get fn() {
|
|
26
|
+
return (0, function_module_js_1.createFunctionModule)();
|
|
27
|
+
},
|
|
28
|
+
selectFrom(table) {
|
|
29
|
+
return new select_query_builder_js_1.SelectQueryBuilder({
|
|
30
|
+
queryId: (0, query_id_js_1.createQueryId)(),
|
|
31
|
+
executor: executor,
|
|
32
|
+
queryNode: select_query_node_js_1.SelectQueryNode.create((0, table_parser_js_1.parseTableExpressionOrList)(table)),
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
ref(reference) {
|
|
36
|
+
return new expression_wrapper_js_1.ExpressionWrapper((0, reference_parser_js_1.parseStringReference)(reference));
|
|
37
|
+
},
|
|
38
|
+
val(value) {
|
|
39
|
+
return new expression_wrapper_js_1.ExpressionWrapper((0, value_parser_js_1.parseValueExpressionOrList)(value));
|
|
40
|
+
},
|
|
41
|
+
cmpr(lhs, op, rhs) {
|
|
42
|
+
return new expression_wrapper_js_1.ExpressionWrapper((0, binary_operation_parser_js_1.parseValueBinaryOperation)(lhs, op, rhs));
|
|
43
|
+
},
|
|
44
|
+
bxp(lhs, op, rhs) {
|
|
45
|
+
return new expression_wrapper_js_1.ExpressionWrapper((0, binary_operation_parser_js_1.parseValueBinaryOperation)(lhs, op, rhs));
|
|
46
|
+
},
|
|
47
|
+
unary,
|
|
48
|
+
not(expr) {
|
|
49
|
+
return unary('not', expr);
|
|
50
|
+
},
|
|
51
|
+
exists(expr) {
|
|
52
|
+
return unary('exists', expr);
|
|
53
|
+
},
|
|
54
|
+
neg(expr) {
|
|
55
|
+
return unary('-', expr);
|
|
56
|
+
},
|
|
57
|
+
and(exprs) {
|
|
58
|
+
if (exprs.length === 0) {
|
|
59
|
+
return new expression_wrapper_js_1.ExpressionWrapper(value_node_js_1.ValueNode.createImmediate(true));
|
|
60
|
+
}
|
|
61
|
+
else if (exprs.length === 1) {
|
|
62
|
+
return new expression_wrapper_js_1.ExpressionWrapper(exprs[0].toOperationNode());
|
|
63
|
+
}
|
|
64
|
+
let node = and_node_js_1.AndNode.create(exprs[0].toOperationNode(), exprs[1].toOperationNode());
|
|
65
|
+
for (let i = 2; i < exprs.length; ++i) {
|
|
66
|
+
node = and_node_js_1.AndNode.create(node, exprs[i].toOperationNode());
|
|
67
|
+
}
|
|
68
|
+
return new expression_wrapper_js_1.ExpressionWrapper(parens_node_js_1.ParensNode.create(node));
|
|
69
|
+
},
|
|
70
|
+
or(exprs) {
|
|
71
|
+
if (exprs.length === 0) {
|
|
72
|
+
return new expression_wrapper_js_1.ExpressionWrapper(value_node_js_1.ValueNode.createImmediate(false));
|
|
73
|
+
}
|
|
74
|
+
else if (exprs.length === 1) {
|
|
75
|
+
return new expression_wrapper_js_1.ExpressionWrapper(exprs[0].toOperationNode());
|
|
76
|
+
}
|
|
77
|
+
let node = or_node_js_1.OrNode.create(exprs[0].toOperationNode(), exprs[1].toOperationNode());
|
|
78
|
+
for (let i = 2; i < exprs.length; ++i) {
|
|
79
|
+
node = or_node_js_1.OrNode.create(node, exprs[i].toOperationNode());
|
|
80
|
+
}
|
|
81
|
+
return new expression_wrapper_js_1.ExpressionWrapper(parens_node_js_1.ParensNode.create(node));
|
|
82
|
+
},
|
|
83
|
+
withSchema(schema) {
|
|
84
|
+
return createExpressionBuilder(executor.withPluginAtFront(new with_schema_plugin_js_1.WithSchemaPlugin(schema)));
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
exports.createExpressionBuilder = createExpressionBuilder;
|
|
89
|
+
function expressionBuilder(_) {
|
|
90
|
+
return createExpressionBuilder();
|
|
91
|
+
}
|
|
92
|
+
exports.expressionBuilder = expressionBuilder;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { AliasNode } from '../operation-node/alias-node.js';
|
|
2
|
+
import { OperationNode } from '../operation-node/operation-node.js';
|
|
3
|
+
import { AliasedExpression, Expression } from './expression.js';
|
|
4
|
+
export declare class ExpressionWrapper<T> implements Expression<T> {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(node: OperationNode);
|
|
7
|
+
/** @private */
|
|
8
|
+
/**
|
|
9
|
+
* All expressions need to have this getter for complicated type-related reasons.
|
|
10
|
+
* Simply add this getter for your expression and always return `undefined` from it:
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* class SomeExpression<T> implements Expression<T> {
|
|
14
|
+
* get expressionType(): T | undefined {
|
|
15
|
+
* return undefined
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* The getter is needed to make the expression assignable to another expression only
|
|
21
|
+
* if the types `T` are assignable. Without this property (or some other property
|
|
22
|
+
* that references `T`), you could assing `Expression<string>` to `Expression<number>`.
|
|
23
|
+
*/
|
|
24
|
+
get expressionType(): T | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Returns an aliased version of the expression.
|
|
27
|
+
*
|
|
28
|
+
* In addition to slapping `as "the_alias"` to the end of the SQL,
|
|
29
|
+
* this method also provides strict typing:
|
|
30
|
+
*
|
|
31
|
+
* ```ts
|
|
32
|
+
* const result = await db
|
|
33
|
+
* .selectFrom('person')
|
|
34
|
+
* .select(eb =>
|
|
35
|
+
* eb.cmpr('first_name', '=', 'Jennifer').as('is_jennifer')
|
|
36
|
+
* )
|
|
37
|
+
* .executeTakeFirstOrThrow()
|
|
38
|
+
*
|
|
39
|
+
* // `is_jennifer: SqlBool` field exists in the result type.
|
|
40
|
+
* console.log(result.is_jennifer)
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* The generated SQL (PostgreSQL):
|
|
44
|
+
*
|
|
45
|
+
* ```ts
|
|
46
|
+
* select "first_name" = $1 as "is_jennifer"
|
|
47
|
+
* from "person"
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
as<A extends string>(alias: A): AliasedExpression<T, A>;
|
|
51
|
+
as<A extends string>(alias: Expression<unknown>): AliasedExpression<T, A>;
|
|
52
|
+
/**
|
|
53
|
+
* Change the output type of the raw expression.
|
|
54
|
+
*
|
|
55
|
+
* This method call doesn't change the SQL in any way. This methods simply
|
|
56
|
+
* returns a copy of this `ExpressionWrapper` with a new output type.
|
|
57
|
+
*/
|
|
58
|
+
$castTo<T>(): ExpressionWrapper<T>;
|
|
59
|
+
/**
|
|
60
|
+
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
61
|
+
*
|
|
62
|
+
* If you are creating a custom expression, it's often easiest to use the {@link sql}
|
|
63
|
+
* template tag to build the node:
|
|
64
|
+
*
|
|
65
|
+
* ```ts
|
|
66
|
+
* class SomeExpression<T> implements Expression<T> {
|
|
67
|
+
* toOperationNode(): OperationNode {
|
|
68
|
+
* return sql`some sql here`.toOperationNode()
|
|
69
|
+
* }
|
|
70
|
+
* }
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
toOperationNode(): OperationNode;
|
|
74
|
+
}
|
|
75
|
+
export declare class AliasedExpressionWrapper<T, A extends string> implements AliasedExpression<T, A> {
|
|
76
|
+
#private;
|
|
77
|
+
constructor(expr: Expression<T>, alias: A | Expression<unknown>);
|
|
78
|
+
/** @private */
|
|
79
|
+
/**
|
|
80
|
+
* Returns the aliased expression.
|
|
81
|
+
*/
|
|
82
|
+
get expression(): Expression<T>;
|
|
83
|
+
/** @private */
|
|
84
|
+
/**
|
|
85
|
+
* Returns the alias.
|
|
86
|
+
*/
|
|
87
|
+
get alias(): A | Expression<unknown>;
|
|
88
|
+
/**
|
|
89
|
+
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
90
|
+
*/
|
|
91
|
+
toOperationNode(): AliasNode;
|
|
92
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AliasedExpressionWrapper = exports.ExpressionWrapper = void 0;
|
|
4
|
+
const alias_node_js_1 = require("../operation-node/alias-node.js");
|
|
5
|
+
const identifier_node_js_1 = require("../operation-node/identifier-node.js");
|
|
6
|
+
const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
|
|
7
|
+
class ExpressionWrapper {
|
|
8
|
+
#node;
|
|
9
|
+
constructor(node) {
|
|
10
|
+
this.#node = node;
|
|
11
|
+
}
|
|
12
|
+
/** @private */
|
|
13
|
+
get expressionType() {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
as(alias) {
|
|
17
|
+
return new AliasedExpressionWrapper(this, alias);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Change the output type of the raw expression.
|
|
21
|
+
*
|
|
22
|
+
* This method call doesn't change the SQL in any way. This methods simply
|
|
23
|
+
* returns a copy of this `ExpressionWrapper` with a new output type.
|
|
24
|
+
*/
|
|
25
|
+
$castTo() {
|
|
26
|
+
return new ExpressionWrapper(this.#node);
|
|
27
|
+
}
|
|
28
|
+
toOperationNode() {
|
|
29
|
+
return this.#node;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.ExpressionWrapper = ExpressionWrapper;
|
|
33
|
+
class AliasedExpressionWrapper {
|
|
34
|
+
#expr;
|
|
35
|
+
#alias;
|
|
36
|
+
constructor(expr, alias) {
|
|
37
|
+
this.#expr = expr;
|
|
38
|
+
this.#alias = alias;
|
|
39
|
+
}
|
|
40
|
+
/** @private */
|
|
41
|
+
get expression() {
|
|
42
|
+
return this.#expr;
|
|
43
|
+
}
|
|
44
|
+
/** @private */
|
|
45
|
+
get alias() {
|
|
46
|
+
return this.#alias;
|
|
47
|
+
}
|
|
48
|
+
toOperationNode() {
|
|
49
|
+
return alias_node_js_1.AliasNode.create(this.#expr.toOperationNode(), (0, operation_node_source_js_1.isOperationNodeSource)(this.#alias)
|
|
50
|
+
? this.#alias.toOperationNode()
|
|
51
|
+
: identifier_node_js_1.IdentifierNode.create(this.#alias));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.AliasedExpressionWrapper = AliasedExpressionWrapper;
|
|
@@ -90,7 +90,7 @@ export interface AliasedExpression<T, A extends string> extends OperationNodeSou
|
|
|
90
90
|
/**
|
|
91
91
|
* Returns the alias.
|
|
92
92
|
*/
|
|
93
|
-
get alias(): A
|
|
93
|
+
get alias(): A | Expression<unknown>;
|
|
94
94
|
/**
|
|
95
95
|
* Creates the OperationNode that describes how to compile this expression into SQL.
|
|
96
96
|
*/
|