effect-qb 0.16.0 → 0.17.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/dist/mysql.js +1661 -591
- package/dist/postgres/metadata.js +1930 -135
- package/dist/postgres.js +7808 -6718
- package/dist/sqlite.js +8360 -0
- package/package.json +6 -1
- package/src/internal/derived-table.ts +29 -3
- package/src/internal/dialect.ts +2 -0
- package/src/internal/dsl-mutation-runtime.ts +173 -4
- package/src/internal/dsl-plan-runtime.ts +165 -20
- package/src/internal/dsl-query-runtime.ts +60 -6
- package/src/internal/dsl-transaction-ddl-runtime.ts +72 -2
- package/src/internal/executor.ts +47 -9
- package/src/internal/expression-ast.ts +3 -2
- package/src/internal/grouping-key.ts +141 -1
- package/src/internal/implication-runtime.ts +2 -1
- package/src/internal/json/types.ts +155 -40
- package/src/internal/predicate/context.ts +14 -1
- package/src/internal/predicate/key.ts +19 -2
- package/src/internal/predicate/runtime.ts +27 -3
- package/src/internal/query.ts +252 -30
- package/src/internal/renderer.ts +35 -2
- package/src/internal/runtime/driver-value-mapping.ts +58 -0
- package/src/internal/runtime/normalize.ts +62 -38
- package/src/internal/runtime/schema.ts +5 -3
- package/src/internal/runtime/value.ts +153 -30
- package/src/internal/table-options.ts +108 -1
- package/src/internal/table.ts +87 -29
- package/src/mysql/column.ts +18 -2
- package/src/mysql/datatypes/index.ts +21 -0
- package/src/mysql/errors/catalog.ts +5 -5
- package/src/mysql/errors/normalize.ts +2 -2
- package/src/mysql/internal/dsl.ts +736 -218
- package/src/mysql/internal/renderer.ts +2 -1
- package/src/mysql/internal/sql-expression-renderer.ts +486 -130
- package/src/mysql/query.ts +9 -2
- package/src/mysql/table.ts +38 -12
- package/src/postgres/column.ts +4 -2
- package/src/postgres/errors/normalize.ts +2 -2
- package/src/postgres/executor.ts +48 -5
- package/src/postgres/function/core.ts +19 -1
- package/src/postgres/internal/dsl.ts +683 -240
- package/src/postgres/internal/renderer.ts +2 -1
- package/src/postgres/internal/schema-ddl.ts +2 -1
- package/src/postgres/internal/schema-model.ts +6 -3
- package/src/postgres/internal/sql-expression-renderer.ts +420 -91
- package/src/postgres/json.ts +57 -17
- package/src/postgres/query.ts +9 -2
- package/src/postgres/schema-management.ts +91 -4
- package/src/postgres/schema.ts +1 -1
- package/src/postgres/table.ts +189 -53
- package/src/sqlite/column.ts +128 -0
- package/src/sqlite/datatypes/index.ts +79 -0
- package/src/sqlite/datatypes/spec.ts +98 -0
- package/src/sqlite/errors/catalog.ts +103 -0
- package/src/sqlite/errors/fields.ts +19 -0
- package/src/sqlite/errors/index.ts +19 -0
- package/src/sqlite/errors/normalize.ts +229 -0
- package/src/sqlite/errors/requirements.ts +71 -0
- package/src/sqlite/errors/types.ts +29 -0
- package/src/sqlite/executor.ts +227 -0
- package/src/sqlite/function/aggregate.ts +2 -0
- package/src/sqlite/function/core.ts +2 -0
- package/src/sqlite/function/index.ts +19 -0
- package/src/sqlite/function/string.ts +2 -0
- package/src/sqlite/function/temporal.ts +100 -0
- package/src/sqlite/function/window.ts +2 -0
- package/src/sqlite/internal/dialect.ts +37 -0
- package/src/sqlite/internal/dsl.ts +6926 -0
- package/src/sqlite/internal/renderer.ts +47 -0
- package/src/sqlite/internal/sql-expression-renderer.ts +1821 -0
- package/src/sqlite/json.ts +2 -0
- package/src/sqlite/query.ts +196 -0
- package/src/sqlite/renderer.ts +24 -0
- package/src/sqlite/table.ts +183 -0
- package/src/sqlite.ts +22 -0
package/src/mysql/query.ts
CHANGED
|
@@ -16,7 +16,6 @@ import {
|
|
|
16
16
|
type HavingPredicateInput,
|
|
17
17
|
type OrderDirection,
|
|
18
18
|
type OutputOfSelection,
|
|
19
|
-
type MutationInputOf,
|
|
20
19
|
type MutationTargetLike,
|
|
21
20
|
type NumericExpressionInput,
|
|
22
21
|
type PredicateInput,
|
|
@@ -136,8 +135,17 @@ export {
|
|
|
136
135
|
orderBy,
|
|
137
136
|
groupBy
|
|
138
137
|
} from "./internal/dsl.js"
|
|
138
|
+
import type * as Expression from "../internal/scalar.js"
|
|
139
139
|
export { mysqlType as type }
|
|
140
140
|
|
|
141
|
+
type MysqlMutationValueInput<Value> =
|
|
142
|
+
| Value
|
|
143
|
+
| Expression.Scalar<Value, Expression.DbType.Any, Expression.Nullability, "mysql", Expression.ScalarKind, Expression.BindingId>
|
|
144
|
+
|
|
145
|
+
export type MutationInputOf<Shape> = {
|
|
146
|
+
readonly [K in keyof Shape]: MysqlMutationValueInput<Shape[K]>
|
|
147
|
+
}
|
|
148
|
+
|
|
141
149
|
type StructuredSource = AnyValuesSource | AnyUnnestSource | AnyTableFunctionSource
|
|
142
150
|
|
|
143
151
|
type StructuredFromApi = <CurrentSource extends StructuredSource>(
|
|
@@ -163,7 +171,6 @@ export type {
|
|
|
163
171
|
HavingPredicateInput,
|
|
164
172
|
OrderDirection,
|
|
165
173
|
OutputOfSelection,
|
|
166
|
-
MutationInputOf,
|
|
167
174
|
MutationTargetLike,
|
|
168
175
|
NumericExpressionInput,
|
|
169
176
|
PredicateInput,
|
package/src/mysql/table.ts
CHANGED
|
@@ -53,17 +53,31 @@ type SchemaNameOfTable<Table> = Table extends BaseTable.TableDefinition<any, any
|
|
|
53
53
|
? SchemaName
|
|
54
54
|
: never
|
|
55
55
|
|
|
56
|
+
type ApplySchemaTableOptions<
|
|
57
|
+
Name extends string,
|
|
58
|
+
Fields extends DialectFieldMap,
|
|
59
|
+
PrimaryKeyColumns extends keyof Fields & string,
|
|
60
|
+
SchemaName extends string,
|
|
61
|
+
Options extends BaseTable.DeclaredTableOptions
|
|
62
|
+
> = BaseTable.ApplyDeclaredOptions<
|
|
63
|
+
BaseTable.TableDefinition<Name, Fields, PrimaryKeyColumns, "schema", SchemaName>,
|
|
64
|
+
Options
|
|
65
|
+
> extends BaseTable.TableDefinition<any, any, infer AppliedPrimaryKeyColumns extends keyof Fields & string, "schema", any>
|
|
66
|
+
? TableDefinition<Name, Fields, AppliedPrimaryKeyColumns, "schema", SchemaName>
|
|
67
|
+
: TableDefinition<Name, Fields, PrimaryKeyColumns, "schema", SchemaName>
|
|
68
|
+
|
|
56
69
|
export type TableSchemaNamespace<SchemaName extends string> = {
|
|
57
70
|
readonly schemaName: SchemaName
|
|
58
71
|
readonly table: <
|
|
59
72
|
Name extends string,
|
|
60
73
|
Fields extends DialectFieldMap,
|
|
74
|
+
const Options extends BaseTable.DeclaredTableOptions,
|
|
61
75
|
PrimaryKeyColumns extends keyof Fields & string = InlinePrimaryKeyKeys<Fields>
|
|
62
76
|
>(
|
|
63
77
|
name: Name,
|
|
64
78
|
fields: Fields,
|
|
65
|
-
...options: BaseTable.
|
|
66
|
-
) =>
|
|
79
|
+
...options: Options & BaseTable.ValidateDeclaredOptions<BaseTable.TableDefinition<Name, Fields, PrimaryKeyColumns, "schema", SchemaName>, Options>
|
|
80
|
+
) => ApplySchemaTableOptions<Name, Fields, PrimaryKeyColumns, SchemaName, Options>
|
|
67
81
|
}
|
|
68
82
|
|
|
69
83
|
export type TableOption = BaseTable.TableOption
|
|
@@ -85,23 +99,31 @@ export const make = <
|
|
|
85
99
|
|
|
86
100
|
export const schema = <SchemaName extends string>(
|
|
87
101
|
schemaName: SchemaName
|
|
88
|
-
): TableSchemaNamespace<SchemaName> =>
|
|
89
|
-
|
|
90
|
-
table: <
|
|
102
|
+
): TableSchemaNamespace<SchemaName> => {
|
|
103
|
+
const table = <
|
|
91
104
|
Name extends string,
|
|
92
105
|
Fields extends DialectFieldMap,
|
|
106
|
+
const Options extends BaseTable.DeclaredTableOptions,
|
|
93
107
|
PrimaryKeyColumns extends keyof Fields & string = InlinePrimaryKeyKeys<Fields>
|
|
94
108
|
>(
|
|
95
109
|
name: Name,
|
|
96
110
|
fields: Fields,
|
|
97
|
-
...declaredOptions: BaseTable.
|
|
111
|
+
...declaredOptions: Options & BaseTable.ValidateDeclaredOptions<BaseTable.TableDefinition<Name, Fields, PrimaryKeyColumns, "schema", SchemaName>, Options>
|
|
98
112
|
) =>
|
|
99
|
-
BaseTable.schema(schemaName).table(
|
|
113
|
+
(BaseTable.schema(schemaName).table as (
|
|
114
|
+
name: Name,
|
|
115
|
+
fields: Fields,
|
|
116
|
+
...options: BaseTable.DeclaredTableOptions
|
|
117
|
+
) => BaseTable.TableDefinition<any, any, any, "schema", any>)(
|
|
100
118
|
name,
|
|
101
119
|
fields,
|
|
102
120
|
...declaredOptions
|
|
103
|
-
) as
|
|
104
|
-
|
|
121
|
+
) as ApplySchemaTableOptions<Name, Fields, PrimaryKeyColumns, SchemaName, Options>
|
|
122
|
+
return {
|
|
123
|
+
schemaName,
|
|
124
|
+
table
|
|
125
|
+
} as unknown as TableSchemaNamespace<SchemaName>
|
|
126
|
+
}
|
|
105
127
|
|
|
106
128
|
export const alias = <
|
|
107
129
|
Table extends AnyTable,
|
|
@@ -144,11 +166,15 @@ export const foreignKey = <
|
|
|
144
166
|
TargetTable extends AnyTable,
|
|
145
167
|
TargetColumns extends string | readonly string[]
|
|
146
168
|
>(
|
|
147
|
-
columns: LocalColumns
|
|
169
|
+
columns: LocalColumns & BaseTable.NonEmptyColumnInput<LocalColumns>,
|
|
148
170
|
target: () => TargetTable,
|
|
149
|
-
referencedColumns: TargetColumns
|
|
171
|
+
referencedColumns: TargetColumns & BaseTable.NonEmptyColumnInput<TargetColumns> & BaseTable.MatchingColumnArityInput<LocalColumns, TargetColumns>
|
|
150
172
|
): BaseTable.TableOption =>
|
|
151
|
-
BaseTable.foreignKey
|
|
173
|
+
BaseTable.foreignKey<LocalColumns, BaseTable.AnyTable, TargetColumns>(
|
|
174
|
+
columns as LocalColumns & BaseTable.NonEmptyColumnInput<LocalColumns>,
|
|
175
|
+
target as () => BaseTable.AnyTable,
|
|
176
|
+
referencedColumns as TargetColumns & BaseTable.NonEmptyColumnInput<TargetColumns> & BaseTable.MatchingColumnArityInput<LocalColumns, TargetColumns>
|
|
177
|
+
)
|
|
152
178
|
|
|
153
179
|
export const check = BaseTable.check
|
|
154
180
|
|
package/src/postgres/column.ts
CHANGED
|
@@ -59,6 +59,8 @@ const boundedString = (length?: number): Schema.Schema<string> =>
|
|
|
59
59
|
? Schema.String
|
|
60
60
|
: Schema.String.pipe(Schema.maxLength(length))
|
|
61
61
|
|
|
62
|
+
const finiteNumber = Schema.Number.pipe(Schema.finite())
|
|
63
|
+
|
|
62
64
|
export const custom = <SchemaType extends Schema.Schema.Any, Db extends Expression.DbType.Any>(
|
|
63
65
|
schema: SchemaType,
|
|
64
66
|
dbType: Db
|
|
@@ -92,8 +94,8 @@ export const number = (options?: BaseColumn.NumericOptions) =>
|
|
|
92
94
|
ddlType: renderNumericDdlType("numeric", options),
|
|
93
95
|
identity: undefined
|
|
94
96
|
})
|
|
95
|
-
export const float4 = () => primitive(
|
|
96
|
-
export const float8 = () => primitive(
|
|
97
|
+
export const float4 = () => primitive(finiteNumber, postgresDatatypes.float4())
|
|
98
|
+
export const float8 = () => primitive(finiteNumber, postgresDatatypes.float8())
|
|
97
99
|
export const boolean = () => primitive(Schema.Boolean, postgresDatatypes.boolean())
|
|
98
100
|
export const date = () => primitive(LocalDateStringSchema, postgresDatatypes.date())
|
|
99
101
|
export const timestamp = () => primitive(LocalDateTimeStringSchema, postgresDatatypes.timestamp())
|
|
@@ -44,8 +44,8 @@ const asNumber = (value: unknown): number | undefined => {
|
|
|
44
44
|
if (typeof value === "number" && Number.isFinite(value)) {
|
|
45
45
|
return value
|
|
46
46
|
}
|
|
47
|
-
if (typeof value === "string" && value.trim()
|
|
48
|
-
const parsed = Number(value)
|
|
47
|
+
if (typeof value === "string" && /^[+-]?\d+$/.test(value.trim())) {
|
|
48
|
+
const parsed = Number(value.trim())
|
|
49
49
|
return Number.isFinite(parsed) ? parsed : undefined
|
|
50
50
|
}
|
|
51
51
|
return undefined
|
package/src/postgres/executor.ts
CHANGED
|
@@ -55,12 +55,55 @@ export interface QueryExecutor<Context = never> {
|
|
|
55
55
|
): Stream.Stream<CoreQuery.ResultRow<PlanValue>, PostgresQueryError<PlanValue>, Context>
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
type DriverExecute<Error, Context> = <Row>(
|
|
59
|
+
query: CoreRenderer.RenderedQuery<Row, "postgres">
|
|
60
|
+
) => Effect.Effect<ReadonlyArray<FlatRow>, Error, Context>
|
|
61
|
+
|
|
62
|
+
type DriverHandlers<Error, Context> = {
|
|
63
|
+
readonly execute: DriverExecute<Error, Context>
|
|
64
|
+
readonly stream: <Row>(
|
|
65
|
+
query: CoreRenderer.RenderedQuery<Row, "postgres">
|
|
66
|
+
) => Stream.Stream<FlatRow, Error, Context>
|
|
67
|
+
}
|
|
68
|
+
|
|
58
69
|
/** Constructs a Postgres-specialized SQL driver. */
|
|
59
|
-
export function driver
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
70
|
+
export function driver<
|
|
71
|
+
Error = never,
|
|
72
|
+
Context = never
|
|
73
|
+
>(
|
|
74
|
+
execute: DriverExecute<Error, Context>
|
|
75
|
+
): Driver<Error, Context>
|
|
76
|
+
export function driver<
|
|
77
|
+
Error = never,
|
|
78
|
+
Context = never
|
|
79
|
+
>(
|
|
80
|
+
handlers: DriverHandlers<Error, Context>
|
|
81
|
+
): Driver<Error, Context>
|
|
82
|
+
export function driver<
|
|
83
|
+
Error = never,
|
|
84
|
+
Context = never
|
|
85
|
+
>(
|
|
86
|
+
dialect: "postgres",
|
|
87
|
+
execute: DriverExecute<Error, Context>
|
|
88
|
+
): Driver<Error, Context>
|
|
89
|
+
export function driver<
|
|
90
|
+
Error = never,
|
|
91
|
+
Context = never
|
|
92
|
+
>(
|
|
93
|
+
dialect: "postgres",
|
|
94
|
+
handlers: DriverHandlers<Error, Context>
|
|
95
|
+
): Driver<Error, Context>
|
|
96
|
+
export function driver<
|
|
97
|
+
Error = never,
|
|
98
|
+
Context = never
|
|
99
|
+
>(
|
|
100
|
+
dialectOrExecute: "postgres" | DriverExecute<Error, Context> | DriverHandlers<Error, Context>,
|
|
101
|
+
maybeExecute?: DriverExecute<Error, Context> | DriverHandlers<Error, Context>
|
|
102
|
+
): Driver<Error, Context> {
|
|
103
|
+
const executeOrHandlers = typeof dialectOrExecute === "string" ? maybeExecute : dialectOrExecute
|
|
104
|
+
return typeof executeOrHandlers === "function"
|
|
105
|
+
? CoreExecutor.driver("postgres", executeOrHandlers)
|
|
106
|
+
: CoreExecutor.driver("postgres", executeOrHandlers as DriverHandlers<Error, Context>)
|
|
64
107
|
}
|
|
65
108
|
|
|
66
109
|
const fromDriver = <
|
|
@@ -12,11 +12,29 @@ import { isSequenceDefinition, type SequenceDefinition } from "../schema-managem
|
|
|
12
12
|
|
|
13
13
|
/** Postgres scalar core functions. */
|
|
14
14
|
export { coalesce, call, uuidGenerateV4 }
|
|
15
|
+
|
|
16
|
+
const safeUnquotedIdentifier = /^[a-z_][a-z0-9_$]*$/
|
|
17
|
+
|
|
18
|
+
const quoteIdentifier = (value: string): string =>
|
|
19
|
+
`"${value.replaceAll("\"", "\"\"")}"`
|
|
20
|
+
|
|
21
|
+
const renderIdentifier = (value: string): string =>
|
|
22
|
+
safeUnquotedIdentifier.test(value)
|
|
23
|
+
? value
|
|
24
|
+
: quoteIdentifier(value)
|
|
25
|
+
|
|
26
|
+
const renderQualifiedSequenceName = (
|
|
27
|
+
value: SequenceDefinition<string, string | undefined>
|
|
28
|
+
): string =>
|
|
29
|
+
value.schemaName === undefined || value.schemaName === "public"
|
|
30
|
+
? renderIdentifier(value.name)
|
|
31
|
+
: `${renderIdentifier(value.schemaName)}.${renderIdentifier(value.name)}`
|
|
32
|
+
|
|
15
33
|
export const nextVal = (
|
|
16
34
|
value: ExpressionInput | SequenceDefinition<string, string | undefined>
|
|
17
35
|
) =>
|
|
18
36
|
nextValInternal(
|
|
19
37
|
isSequenceDefinition(value)
|
|
20
|
-
? cast(literal(value
|
|
38
|
+
? cast(literal(renderQualifiedSequenceName(value)), postgresType.regclass())
|
|
21
39
|
: value
|
|
22
40
|
)
|