effect-qb 0.17.0 → 0.19.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 +4 -0
- package/dist/index.js +8065 -0
- package/dist/mysql.js +3053 -2505
- package/dist/postgres/metadata.js +1366 -1250
- package/dist/postgres.js +2020 -2719
- package/dist/sqlite.js +3226 -2732
- package/dist/standard.js +8019 -0
- package/package.json +10 -3
- package/src/casing.ts +71 -0
- package/src/index.ts +2 -0
- package/src/internal/casing.ts +89 -0
- package/src/internal/column-state.ts +11 -6
- package/src/internal/column.ts +44 -7
- package/src/internal/datatypes/define.ts +2 -1
- package/src/internal/datatypes/enrich.ts +23 -0
- package/src/internal/datatypes/lookup.ts +14 -7
- package/src/internal/derived-table.ts +4 -36
- package/src/{mysql/internal/sql-expression-renderer.ts → internal/dialect-renderers/mysql.ts} +548 -359
- package/src/{postgres/internal/sql-expression-renderer.ts → internal/dialect-renderers/postgres.ts} +654 -399
- package/src/{sqlite/internal/sql-expression-renderer.ts → internal/dialect-renderers/sqlite.ts} +501 -345
- package/src/internal/dialect.ts +35 -0
- package/src/internal/dsl-mutation-runtime.ts +12 -162
- package/src/internal/dsl-plan-runtime.ts +10 -138
- package/src/internal/dsl-query-runtime.ts +5 -79
- package/src/internal/dsl-transaction-ddl-runtime.ts +41 -65
- package/src/internal/executor.ts +10 -6
- package/src/internal/grouping-key.ts +87 -20
- package/src/internal/implication-runtime.ts +1 -1
- package/src/internal/predicate/runtime.ts +3 -0
- package/src/internal/query.d.ts +38 -11
- package/src/internal/query.ts +64 -25
- package/src/internal/renderer.ts +26 -14
- package/src/internal/runtime/normalize.ts +12 -5
- package/src/internal/scalar.ts +6 -1
- package/src/internal/schema-derivation.d.ts +12 -61
- package/src/internal/schema-derivation.ts +90 -38
- package/src/internal/schema-expression.ts +2 -2
- package/src/internal/sql-expression-renderer.ts +19 -0
- package/src/internal/standard-dsl.ts +6885 -0
- package/src/internal/table-options.ts +126 -66
- package/src/internal/table.d.ts +33 -32
- package/src/internal/table.ts +406 -155
- package/src/mysql/column-extension.ts +3 -0
- package/src/mysql/column.ts +10 -11
- package/src/mysql/datatypes/index.ts +3 -2
- package/src/mysql/executor.ts +7 -5
- package/src/mysql/internal/dialect.ts +9 -4
- package/src/mysql/internal/dsl.ts +219 -155
- package/src/mysql/internal/renderer.ts +6 -2
- package/src/mysql/json.ts +37 -0
- package/src/mysql/query-extension.ts +16 -0
- package/src/mysql/renderer.ts +31 -4
- package/src/mysql.ts +4 -12
- package/src/postgres/column-extension.ts +28 -0
- package/src/postgres/column.ts +5 -11
- package/src/postgres/datatypes/index.d.ts +2 -1
- package/src/postgres/datatypes/index.ts +3 -2
- package/src/postgres/executor.ts +7 -5
- package/src/postgres/function/core.ts +1 -3
- package/src/postgres/function/index.ts +1 -17
- package/src/postgres/internal/dialect.ts +9 -4
- package/src/postgres/internal/dsl.ts +208 -160
- package/src/postgres/internal/renderer.ts +6 -2
- package/src/postgres/internal/schema-ddl.ts +22 -10
- package/src/postgres/internal/schema-model.ts +238 -7
- package/src/postgres/json.ts +43 -7
- package/src/postgres/jsonb.ts +38 -0
- package/src/postgres/query-extension.ts +2 -0
- package/src/postgres/renderer.ts +31 -4
- package/src/postgres/schema-management.ts +17 -12
- package/src/postgres/schema.ts +98 -15
- package/src/postgres/table.ts +193 -524
- package/src/postgres/type.ts +8 -7
- package/src/postgres.ts +9 -11
- package/src/sqlite/column-extension.ts +3 -0
- package/src/sqlite/column.ts +10 -11
- package/src/sqlite/datatypes/index.ts +3 -2
- package/src/sqlite/executor.ts +7 -5
- package/src/sqlite/internal/dialect.ts +9 -4
- package/src/sqlite/internal/dsl.ts +208 -155
- package/src/sqlite/internal/renderer.ts +6 -2
- package/src/sqlite/json.ts +37 -0
- package/src/sqlite/query-extension.ts +2 -0
- package/src/sqlite/renderer.ts +31 -4
- package/src/sqlite.ts +4 -12
- package/src/standard/column.ts +163 -0
- package/src/standard/datatypes/index.ts +83 -0
- package/src/standard/datatypes/spec.ts +98 -0
- package/src/standard/dialect.ts +40 -0
- package/src/standard/function/aggregate.ts +2 -0
- package/src/standard/function/core.ts +2 -0
- package/src/standard/function/index.ts +18 -0
- package/src/standard/function/string.ts +2 -0
- package/src/standard/function/temporal.ts +78 -0
- package/src/standard/function/window.ts +2 -0
- package/src/standard/internal/renderer.ts +45 -0
- package/src/standard/query.ts +152 -0
- package/src/standard/renderer.ts +21 -0
- package/src/standard/table.ts +147 -0
- package/src/standard.ts +18 -0
- package/src/internal/aggregation-validation.ts +0 -57
- package/src/mysql/table.ts +0 -183
- package/src/sqlite/table.ts +0 -183
package/src/postgres/schema.ts
CHANGED
|
@@ -1,35 +1,118 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { pipeArguments, type Pipeable } from "effect/Pipeable"
|
|
2
|
+
|
|
3
|
+
import { ColumnTypeId } from "../internal/column-state.js"
|
|
4
|
+
import type { AnyColumnDefinition } from "../internal/column-state.js"
|
|
5
|
+
import * as Casing from "../internal/casing.js"
|
|
6
|
+
import * as BaseTable from "../internal/table.js"
|
|
7
|
+
import type { TableFieldMap } from "../internal/schema-derivation.js"
|
|
8
|
+
import { make as makeTable } from "../standard/table.js"
|
|
2
9
|
import { enumType, sequence, type EnumDefinition, type SequenceDefinition } from "./schema-management.js"
|
|
3
10
|
|
|
4
|
-
|
|
11
|
+
type InlinePrimaryKeyKeys<Fields extends TableFieldMap> = Extract<{
|
|
12
|
+
[K in keyof Fields]: Fields[K]["metadata"]["primaryKey"] extends true ? K : never
|
|
13
|
+
}[keyof Fields], string>
|
|
14
|
+
|
|
15
|
+
type FieldDialect<Column extends AnyColumnDefinition> = Column[typeof ColumnTypeId]["dbType"]["dialect"]
|
|
16
|
+
|
|
17
|
+
type ValidatePostgresSchemaFields<Fields extends TableFieldMap> = {
|
|
18
|
+
[K in keyof Fields]: Exclude<FieldDialect<Fields[K]>, "standard" | "postgres"> extends never ? Fields[K] : never
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
type ApplySchemaTableOptions<
|
|
22
|
+
Name extends string,
|
|
23
|
+
Fields extends TableFieldMap,
|
|
24
|
+
PrimaryKeyColumns extends keyof Fields & string,
|
|
25
|
+
SchemaName extends string,
|
|
26
|
+
Options extends BaseTable.DeclaredTableOptions
|
|
27
|
+
> = BaseTable.ApplyDeclaredOptions<
|
|
28
|
+
BaseTable.TableDefinition<Name, Fields, PrimaryKeyColumns, "schema", SchemaName>,
|
|
29
|
+
Options
|
|
30
|
+
> extends BaseTable.TableDefinition<any, any, infer AppliedPrimaryKeyColumns extends keyof Fields & string, "schema", any>
|
|
31
|
+
? BaseTable.TableDefinition<Name, Fields, AppliedPrimaryKeyColumns, "schema", SchemaName>
|
|
32
|
+
: BaseTable.TableDefinition<Name, Fields, PrimaryKeyColumns, "schema", SchemaName>
|
|
33
|
+
|
|
34
|
+
type ValidatePostgresSchemaTable<
|
|
35
|
+
Table extends BaseTable.TableDefinition<any, any, any, any, any>
|
|
36
|
+
> = Table extends BaseTable.TableDefinition<any, infer Fields extends TableFieldMap, any, any, any>
|
|
37
|
+
? BaseTable.TableDefinition<any, Fields & ValidatePostgresSchemaFields<Fields>, any, any, any>
|
|
38
|
+
: never
|
|
39
|
+
|
|
40
|
+
export type SchemaNamespace<SchemaName extends string> = Pipeable & {
|
|
41
|
+
readonly schemaName: SchemaName
|
|
42
|
+
readonly table: <
|
|
43
|
+
Name extends string,
|
|
44
|
+
Fields extends TableFieldMap,
|
|
45
|
+
const Options extends BaseTable.DeclaredTableOptions,
|
|
46
|
+
PrimaryKeyColumns extends keyof Fields & string = InlinePrimaryKeyKeys<Fields>
|
|
47
|
+
>(
|
|
48
|
+
name: BaseTable.NonEmptyStringInput<Name>,
|
|
49
|
+
fields: Fields & BaseTable.NonEmptyFieldMap<Fields> & ValidatePostgresSchemaFields<Fields>,
|
|
50
|
+
...options: Options & BaseTable.ValidateDeclaredOptions<BaseTable.TableDefinition<Name, Fields, PrimaryKeyColumns, "schema", SchemaName>, Options>
|
|
51
|
+
) => ApplySchemaTableOptions<Name, Fields, PrimaryKeyColumns, SchemaName, Options>
|
|
5
52
|
readonly enum: <
|
|
6
53
|
Name extends string,
|
|
7
54
|
const Values extends readonly [string, ...string[]]
|
|
8
55
|
>(
|
|
9
|
-
name: Name
|
|
56
|
+
name: BaseTable.NonEmptyStringInput<Name>,
|
|
10
57
|
values: Values
|
|
11
58
|
) => EnumDefinition<Name, Values, SchemaName>
|
|
12
59
|
readonly sequence: <
|
|
13
60
|
Name extends string
|
|
14
61
|
>(
|
|
15
|
-
name: Name
|
|
62
|
+
name: BaseTable.NonEmptyStringInput<Name>
|
|
16
63
|
) => SequenceDefinition<Name, SchemaName>
|
|
64
|
+
readonly withSchema: <
|
|
65
|
+
Table extends BaseTable.TableDefinition<any, any, any, any, any>
|
|
66
|
+
>(table: Table & ValidatePostgresSchemaTable<Table>) => BaseTable.TableDefinition<
|
|
67
|
+
Table[typeof BaseTable.TypeId]["name"],
|
|
68
|
+
Table[typeof BaseTable.TypeId]["fields"],
|
|
69
|
+
Table[typeof BaseTable.TypeId]["primaryKey"][number],
|
|
70
|
+
Table[typeof BaseTable.TypeId]["kind"],
|
|
71
|
+
SchemaName
|
|
72
|
+
>
|
|
73
|
+
readonly [Casing.TypeId]: Casing.State
|
|
74
|
+
readonly withCasing: (options: Casing.Options) => SchemaNamespace<SchemaName>
|
|
17
75
|
}
|
|
18
76
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
77
|
+
const SchemaProto = {
|
|
78
|
+
pipe(this: Pipeable) {
|
|
79
|
+
return pipeArguments(this, arguments)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export const make = <SchemaName extends string>(
|
|
84
|
+
schemaName: BaseTable.NonEmptyStringInput<SchemaName>,
|
|
85
|
+
options: { readonly casing?: Casing.Options } = {}
|
|
86
|
+
): SchemaNamespace<SchemaName> => {
|
|
87
|
+
const physicalSchemaName = Casing.applyCategory(options.casing, "schemas", schemaName)
|
|
88
|
+
const namespace = Object.create(SchemaProto)
|
|
89
|
+
namespace.schemaName = schemaName
|
|
90
|
+
namespace.table = ((name: string, fields: any, ...declaredOptions: any[]) => {
|
|
91
|
+
let table = makeTable(name, fields, schemaName)
|
|
92
|
+
for (const option of declaredOptions) {
|
|
93
|
+
table = option(table)
|
|
94
|
+
}
|
|
95
|
+
return options.casing === undefined ? table : BaseTable.withCasing(table as any, options.casing)
|
|
96
|
+
}) as SchemaNamespace<SchemaName>["table"]
|
|
97
|
+
namespace.enum = <
|
|
24
98
|
Name extends string,
|
|
25
99
|
const Values extends readonly [string, ...string[]]
|
|
26
100
|
>(
|
|
27
|
-
name: Name
|
|
101
|
+
name: BaseTable.NonEmptyStringInput<Name>,
|
|
28
102
|
values: Values
|
|
29
|
-
) => enumType(name, values,
|
|
30
|
-
sequence
|
|
103
|
+
) => enumType(Casing.applyCategory(options.casing, "types", name), values, physicalSchemaName) as EnumDefinition<Name, Values, SchemaName>
|
|
104
|
+
namespace.sequence = <
|
|
31
105
|
Name extends string
|
|
32
106
|
>(
|
|
33
|
-
name: Name
|
|
34
|
-
) => sequence(name,
|
|
35
|
-
|
|
107
|
+
name: BaseTable.NonEmptyStringInput<Name>
|
|
108
|
+
) => sequence(Casing.applyCategory(options.casing, "sequences", name), physicalSchemaName) as SequenceDefinition<Name, SchemaName>
|
|
109
|
+
namespace.withSchema = <
|
|
110
|
+
Table extends BaseTable.TableDefinition<any, any, any, any, any>
|
|
111
|
+
>(table: Table & ValidatePostgresSchemaTable<Table>) => BaseTable.withSchema(table, schemaName, options.casing)
|
|
112
|
+
namespace[Casing.TypeId] = {
|
|
113
|
+
casing: options.casing
|
|
114
|
+
}
|
|
115
|
+
namespace.withCasing = (override: Casing.Options) =>
|
|
116
|
+
make(schemaName, { casing: Casing.merge(options.casing, override) })
|
|
117
|
+
return namespace as SchemaNamespace<SchemaName>
|
|
118
|
+
}
|