effect-qb 0.19.0 → 4.0.0-beta.92
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 +7 -1
- package/dist/index.js +1987 -679
- package/dist/mysql.js +1486 -616
- package/dist/postgres/metadata.js +1334 -263
- package/dist/postgres.js +3374 -2308
- package/dist/sqlite.js +1569 -627
- package/dist/standard.js +1982 -674
- package/package.json +2 -4
- package/src/internal/coercion/rules.ts +13 -1
- package/src/internal/column-state.d.ts +3 -3
- package/src/internal/column-state.ts +13 -12
- package/src/internal/column.ts +8 -8
- package/src/internal/datatypes/define.ts +5 -0
- package/src/internal/datatypes/lookup.ts +67 -18
- package/src/internal/datatypes/matrix.ts +903 -0
- package/src/internal/datatypes/shape.ts +2 -0
- package/src/internal/dialect-renderers/mysql.ts +6 -4
- package/src/internal/dialect-renderers/postgres.ts +6 -4
- package/src/internal/dialect-renderers/sqlite.ts +6 -4
- package/src/internal/dialect.ts +1 -1
- package/src/internal/executor.ts +56 -43
- package/src/internal/json/path-access.ts +351 -0
- package/src/internal/query.d.ts +1 -1
- package/src/internal/query.ts +1 -1
- package/src/internal/runtime/driver-value-mapping.ts +3 -3
- package/src/internal/runtime/schema.ts +28 -38
- package/src/internal/runtime/value.ts +20 -23
- package/src/internal/scalar.d.ts +1 -1
- package/src/internal/scalar.ts +2 -1
- package/src/internal/schema-derivation.d.ts +7 -7
- package/src/internal/schema-derivation.ts +11 -11
- package/src/internal/standard-dsl.ts +118 -28
- package/src/internal/table.ts +451 -120
- package/src/mysql/column.ts +6 -6
- package/src/mysql/datatypes/index.ts +1 -0
- package/src/mysql/datatypes/spec.ts +6 -176
- package/src/mysql/executor.ts +4 -6
- package/src/mysql/function/temporal.ts +1 -1
- package/src/mysql/internal/dsl.ts +113 -16
- package/src/mysql/json.ts +1 -33
- package/src/mysql/renderer.ts +13 -6
- package/src/mysql/type.ts +60 -0
- package/src/mysql.ts +3 -1
- package/src/postgres/check.ts +1 -0
- package/src/postgres/column.ts +11 -11
- package/src/postgres/datatypes/index.ts +1 -0
- package/src/postgres/datatypes/spec.ts +6 -260
- package/src/postgres/executor.ts +4 -6
- package/src/postgres/foreign-key.ts +24 -0
- package/src/postgres/function/temporal.ts +1 -1
- package/src/postgres/index.ts +1 -0
- package/src/postgres/internal/dsl.ts +119 -21
- package/src/postgres/json-extension.ts +7 -0
- package/src/postgres/json.ts +726 -173
- package/src/postgres/jsonb.ts +0 -1
- package/src/postgres/primary-key.ts +24 -0
- package/src/postgres/renderer.ts +13 -6
- package/src/postgres/schema-management.ts +1 -6
- package/src/postgres/schema.ts +16 -8
- package/src/postgres/table.ts +111 -113
- package/src/postgres/type.ts +86 -4
- package/src/postgres/unique.ts +32 -0
- package/src/postgres.ts +12 -6
- package/src/sqlite/column.ts +6 -6
- package/src/sqlite/datatypes/index.ts +1 -0
- package/src/sqlite/datatypes/spec.ts +6 -94
- package/src/sqlite/executor.ts +4 -6
- package/src/sqlite/function/temporal.ts +1 -1
- package/src/sqlite/internal/dsl.ts +97 -5
- package/src/sqlite/json.ts +1 -32
- package/src/sqlite/renderer.ts +13 -6
- package/src/sqlite/type.ts +40 -0
- package/src/sqlite.ts +3 -1
- package/src/standard/cast.ts +113 -0
- package/src/standard/check.ts +17 -0
- package/src/standard/column.ts +10 -10
- package/src/standard/datatypes/index.ts +2 -2
- package/src/standard/datatypes/spec.ts +10 -96
- package/src/standard/foreign-key.ts +37 -0
- package/src/standard/function/temporal.ts +1 -1
- package/src/standard/index.ts +17 -0
- package/src/standard/json.ts +883 -0
- package/src/standard/primary-key.ts +17 -0
- package/src/standard/renderer.ts +31 -3
- package/src/standard/table.ts +25 -21
- package/src/standard/unique.ts +17 -0
- package/src/standard.ts +14 -0
- package/src/internal/table.d.ts +0 -174
- package/src/postgres/cast.ts +0 -45
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as BaseTable from "../internal/table.js"
|
|
2
|
+
import type { TableOptionSpec } from "../internal/table-options.js"
|
|
3
|
+
|
|
4
|
+
type PrimaryKeySpec = Extract<TableOptionSpec, { readonly kind: "primaryKey" }>
|
|
5
|
+
|
|
6
|
+
export const make = BaseTable.primaryKey
|
|
7
|
+
|
|
8
|
+
export const named = <const Name extends string>(
|
|
9
|
+
name: BaseTable.NonEmptyStringInput<Name>
|
|
10
|
+
) =>
|
|
11
|
+
<Spec extends PrimaryKeySpec, TableContext extends BaseTable.TableDefinition<any, any, any, "schema", any>>(
|
|
12
|
+
option: BaseTable.TableOption<Spec, TableContext>
|
|
13
|
+
): BaseTable.TableOption<Spec & { readonly name: Name }, TableContext> =>
|
|
14
|
+
BaseTable.mapOption(option, (spec) => ({
|
|
15
|
+
...spec,
|
|
16
|
+
name
|
|
17
|
+
} as Spec & { readonly name: Name }))
|
package/src/standard/renderer.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { pipeArguments, type Pipeable } from "effect/Pipeable"
|
|
2
|
+
|
|
1
3
|
import * as CoreRenderer from "../internal/renderer.js"
|
|
2
|
-
import
|
|
4
|
+
import * as Casing from "../internal/casing.js"
|
|
3
5
|
import type * as Expression from "../internal/scalar.js"
|
|
4
6
|
import type { StandardDatatypeFamily, StandardDatatypeKind } from "./datatypes/spec.js"
|
|
5
7
|
import { renderStandardPlan } from "./internal/renderer.js"
|
|
@@ -8,14 +10,40 @@ export type RenderedQuery<Row> = CoreRenderer.RenderedQuery<Row, "standard">
|
|
|
8
10
|
|
|
9
11
|
export type RowOf<Value extends RenderedQuery<any>> = CoreRenderer.RowOf<Value>
|
|
10
12
|
|
|
11
|
-
export type Renderer = CoreRenderer.Renderer<"standard">
|
|
13
|
+
export type Renderer = CoreRenderer.Renderer<"standard"> & Pipeable & {
|
|
14
|
+
readonly [Casing.TypeId]: Casing.State
|
|
15
|
+
readonly withCasing: (options: Casing.Options) => Renderer
|
|
16
|
+
}
|
|
12
17
|
|
|
13
18
|
export type ValueMappings = Expression.DriverValueMappingsFor<StandardDatatypeKind | "uuid", StandardDatatypeFamily | "uuid">
|
|
14
19
|
|
|
15
20
|
export interface MakeOptions {
|
|
16
21
|
readonly valueMappings?: ValueMappings
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
interface RendererState extends MakeOptions {
|
|
17
25
|
readonly casing?: Casing.Options
|
|
18
26
|
}
|
|
19
27
|
|
|
28
|
+
const RendererProto = {
|
|
29
|
+
pipe(this: Pipeable) {
|
|
30
|
+
return pipeArguments(this, arguments)
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const makeWithState = (state: RendererState = {}): Renderer => {
|
|
35
|
+
const renderer = CoreRenderer.makeTrusted("standard", (plan) => renderStandardPlan(plan, state))
|
|
36
|
+
return Object.assign(Object.create(RendererProto), renderer, {
|
|
37
|
+
[Casing.TypeId]: {
|
|
38
|
+
casing: state.casing
|
|
39
|
+
},
|
|
40
|
+
withCasing: (override: Casing.Options) =>
|
|
41
|
+
makeWithState({
|
|
42
|
+
...state,
|
|
43
|
+
casing: Casing.merge(state.casing, override)
|
|
44
|
+
})
|
|
45
|
+
}) as Renderer
|
|
46
|
+
}
|
|
47
|
+
|
|
20
48
|
export const make = (options: MakeOptions = {}): Renderer =>
|
|
21
|
-
|
|
49
|
+
makeWithState({ valueMappings: options.valueMappings })
|
package/src/standard/table.ts
CHANGED
|
@@ -16,15 +16,28 @@ export type TableDefinition<
|
|
|
16
16
|
Fields extends DialectFieldMap,
|
|
17
17
|
PrimaryKeyColumns extends keyof Fields & string = InlinePrimaryKeyKeys<Fields>,
|
|
18
18
|
Kind extends "schema" | "alias" = "schema",
|
|
19
|
-
SchemaName extends string = "public"
|
|
20
|
-
|
|
19
|
+
SchemaName extends string = "public",
|
|
20
|
+
ConflictArbiters extends BaseTable.ConflictArbiter = BaseTable.TableDefinition<
|
|
21
|
+
Name,
|
|
22
|
+
Fields,
|
|
23
|
+
PrimaryKeyColumns,
|
|
24
|
+
Kind,
|
|
25
|
+
SchemaName
|
|
26
|
+
>[typeof BaseTable.TypeId]["conflictArbiters"][number]
|
|
27
|
+
> = BaseTable.TableDefinition<Name, Fields, PrimaryKeyColumns, Kind, SchemaName, ConflictArbiters>
|
|
21
28
|
|
|
22
29
|
export type TableClassStatic<
|
|
23
30
|
Name extends string,
|
|
24
31
|
Fields extends DialectFieldMap,
|
|
25
32
|
PrimaryKeyColumns extends keyof Fields & string = InlinePrimaryKeyKeys<Fields>,
|
|
26
|
-
SchemaName extends string = "public"
|
|
27
|
-
|
|
33
|
+
SchemaName extends string = "public",
|
|
34
|
+
ConflictArbiters extends BaseTable.ConflictArbiter = BaseTable.TableClassStatic<
|
|
35
|
+
Name,
|
|
36
|
+
Fields,
|
|
37
|
+
PrimaryKeyColumns,
|
|
38
|
+
SchemaName
|
|
39
|
+
>[typeof BaseTable.TypeId]["conflictArbiters"][number]
|
|
40
|
+
> = BaseTable.TableClassStatic<Name, Fields, PrimaryKeyColumns, SchemaName, ConflictArbiters>
|
|
28
41
|
|
|
29
42
|
export type AnyTable = BaseTable.AnyTable<Dialect>
|
|
30
43
|
|
|
@@ -37,6 +50,8 @@ type PrimaryKeyOfTable<Table extends BaseTable.AnyTable> = Table[typeof BaseTabl
|
|
|
37
50
|
type SchemaNameOfTable<Table extends BaseTable.AnyTable> =
|
|
38
51
|
Table[typeof BaseTable.TypeId]["schemaName"] extends infer SchemaName extends string ? SchemaName : "public"
|
|
39
52
|
|
|
53
|
+
type ConflictArbiterOfTable<Table extends BaseTable.AnyTable> = Table[typeof BaseTable.TypeId]["conflictArbiters"][number]
|
|
54
|
+
|
|
40
55
|
export type TableOption = BaseTable.TableOption
|
|
41
56
|
|
|
42
57
|
export const TypeId = BaseTable.TypeId
|
|
@@ -64,7 +79,7 @@ export function make(
|
|
|
64
79
|
name: string,
|
|
65
80
|
fields: DialectFieldMap,
|
|
66
81
|
schemaName?: string
|
|
67
|
-
):
|
|
82
|
+
): any {
|
|
68
83
|
return arguments.length >= 3
|
|
69
84
|
? BaseTable.make(name, fields, schemaName as string) as TableDefinition<string, DialectFieldMap, string, "schema", string>
|
|
70
85
|
: BaseTable.make(name, fields) as TableDefinition<string, DialectFieldMap, string, "schema", string>
|
|
@@ -81,14 +96,16 @@ export const alias = <
|
|
|
81
96
|
FieldsOfTable<Table>,
|
|
82
97
|
PrimaryKeyOfTable<Table>,
|
|
83
98
|
"alias",
|
|
84
|
-
SchemaNameOfTable<Table
|
|
99
|
+
SchemaNameOfTable<Table>,
|
|
100
|
+
ConflictArbiterOfTable<Table>
|
|
85
101
|
> =>
|
|
86
102
|
BaseTable.alias(table as any, aliasName) as TableDefinition<
|
|
87
103
|
AliasName,
|
|
88
104
|
FieldsOfTable<Table>,
|
|
89
105
|
PrimaryKeyOfTable<Table>,
|
|
90
106
|
"alias",
|
|
91
|
-
SchemaNameOfTable<Table
|
|
107
|
+
SchemaNameOfTable<Table>,
|
|
108
|
+
ConflictArbiterOfTable<Table>
|
|
92
109
|
>
|
|
93
110
|
|
|
94
111
|
type ClassApi = {
|
|
@@ -121,20 +138,7 @@ export const Class: ClassApi = ((
|
|
|
121
138
|
export const primaryKey = BaseTable.primaryKey
|
|
122
139
|
export const unique = BaseTable.unique
|
|
123
140
|
export const index = BaseTable.index
|
|
124
|
-
export const foreignKey =
|
|
125
|
-
LocalColumns extends string | readonly string[],
|
|
126
|
-
TargetTable extends AnyTable,
|
|
127
|
-
TargetColumns extends string | readonly string[]
|
|
128
|
-
>(
|
|
129
|
-
columns: LocalColumns & BaseTable.NonEmptyColumnInput<LocalColumns>,
|
|
130
|
-
target: () => TargetTable,
|
|
131
|
-
referencedColumns: TargetColumns & BaseTable.NonEmptyColumnInput<TargetColumns> & BaseTable.MatchingColumnArityInput<LocalColumns, TargetColumns>
|
|
132
|
-
) =>
|
|
133
|
-
BaseTable.foreignKey<LocalColumns, TargetTable, TargetColumns>(
|
|
134
|
-
columns as LocalColumns & BaseTable.NonEmptyColumnInput<LocalColumns>,
|
|
135
|
-
target,
|
|
136
|
-
referencedColumns as TargetColumns & BaseTable.NonEmptyColumnInput<TargetColumns> & BaseTable.MatchingColumnArityInput<LocalColumns, TargetColumns>
|
|
137
|
-
)
|
|
141
|
+
export const foreignKey = BaseTable.foreignKey
|
|
138
142
|
|
|
139
143
|
export const check = BaseTable.check
|
|
140
144
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as BaseTable from "../internal/table.js"
|
|
2
|
+
import type { TableOptionSpec } from "../internal/table-options.js"
|
|
3
|
+
|
|
4
|
+
type UniqueSpec = Extract<TableOptionSpec, { readonly kind: "unique" }>
|
|
5
|
+
|
|
6
|
+
export const make = BaseTable.unique
|
|
7
|
+
|
|
8
|
+
export const named = <const Name extends string>(
|
|
9
|
+
name: BaseTable.NonEmptyStringInput<Name>
|
|
10
|
+
) =>
|
|
11
|
+
<Spec extends UniqueSpec, TableContext extends BaseTable.TableDefinition<any, any, any, "schema", any>>(
|
|
12
|
+
option: BaseTable.TableOption<Spec, TableContext>
|
|
13
|
+
): BaseTable.TableOption<Spec & { readonly name: Name }, TableContext> =>
|
|
14
|
+
BaseTable.mapOption(option, (spec) => ({
|
|
15
|
+
...spec,
|
|
16
|
+
name
|
|
17
|
+
} as Spec & { readonly name: Name }))
|
package/src/standard.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
/** Standard SQL column-definition DSL. */
|
|
2
2
|
export * as Column from "./standard/column.js"
|
|
3
|
+
/** Standard SQL cast helpers. */
|
|
4
|
+
export * as Cast from "./standard/cast.js"
|
|
3
5
|
/** Standard SQL datatype witnesses and coercion families. */
|
|
4
6
|
export * as Datatypes from "./standard/datatypes/index.js"
|
|
5
7
|
/** Shared scalar SQL interfaces and DB-type descriptors. */
|
|
6
8
|
export * as Scalar from "./internal/scalar.js"
|
|
7
9
|
/** Standard SQL function expressions. */
|
|
8
10
|
export * as Function from "./standard/function/index.js"
|
|
11
|
+
/** Standard SQL JSON expression helpers and path segments. */
|
|
12
|
+
export * as Json from "./standard/json.js"
|
|
9
13
|
/** Standard SQL typed query execution contracts. */
|
|
10
14
|
export * as Executor from "./internal/executor.js"
|
|
11
15
|
/** Shared logical row-set interfaces. */
|
|
@@ -14,5 +18,15 @@ export * as RowSet from "./internal/row-set.js"
|
|
|
14
18
|
export * as Query from "./standard/query.js"
|
|
15
19
|
/** Standard SQL table-definition DSL. */
|
|
16
20
|
export * as Table from "./standard/table.js"
|
|
21
|
+
/** Standard SQL table-level primary-key options. */
|
|
22
|
+
export * as PrimaryKey from "./standard/primary-key.js"
|
|
23
|
+
/** Standard SQL table-level unique-constraint options. */
|
|
24
|
+
export * as Unique from "./standard/unique.js"
|
|
25
|
+
/** Standard SQL table-level index options. */
|
|
26
|
+
export * as Index from "./standard/index.js"
|
|
27
|
+
/** Standard SQL table-level foreign-key options. */
|
|
28
|
+
export * as ForeignKey from "./standard/foreign-key.js"
|
|
29
|
+
/** Standard SQL table-level check-constraint options. */
|
|
30
|
+
export * as Check from "./standard/check.js"
|
|
17
31
|
/** Standard SQL built-in renderer entrypoint. */
|
|
18
32
|
export * as Renderer from "./standard/renderer.js"
|
package/src/internal/table.d.ts
DELETED
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
import { type Pipeable } from "effect/Pipeable";
|
|
2
|
-
import * as Schema from "effect/Schema";
|
|
3
|
-
import * as Plan from "./row-set.js";
|
|
4
|
-
import type { TrueFormula } from "./predicate/formula.js";
|
|
5
|
-
import type { BoundColumnFrom } from "./column-state.js";
|
|
6
|
-
import { type DdlExpressionLike, type NonEmptyStringInput, type NormalizeColumns, type TableOptionSpec, type ValidateKnownColumns, type ValidatePrimaryKeyColumns } from "./table-options.js";
|
|
7
|
-
import { type InsertRow, type SelectRow, type TableFieldMap, type UpdateRow } from "./schema-derivation.js";
|
|
8
|
-
/** Symbol used to attach table-definition metadata. */
|
|
9
|
-
export declare const TypeId: unique symbol;
|
|
10
|
-
/** Symbol for the normalized table option list. */
|
|
11
|
-
export declare const OptionsSymbol: unique symbol;
|
|
12
|
-
/** Symbol used by `Table.Class` to declare table-level options. */
|
|
13
|
-
export declare const options: unique symbol;
|
|
14
|
-
declare const DeclaredOptionsSymbol: unique symbol;
|
|
15
|
-
type InlinePrimaryKeyKeys<Fields extends TableFieldMap> = Extract<{
|
|
16
|
-
[K in keyof Fields]: Fields[K]["metadata"]["primaryKey"] extends true ? K : never;
|
|
17
|
-
}[keyof Fields], string>;
|
|
18
|
-
type TableDialect<Fields extends TableFieldMap> = Fields[keyof Fields][typeof import("./column-state.js").ColumnTypeId]["dbType"]["dialect"];
|
|
19
|
-
type TableKind = "schema" | "alias";
|
|
20
|
-
type DefaultSchemaName = "public";
|
|
21
|
-
type ClassOptionSpec = Exclude<TableOptionSpec, {
|
|
22
|
-
readonly kind: "primaryKey";
|
|
23
|
-
}>;
|
|
24
|
-
interface TableOptionBuilderLike<Spec extends TableOptionSpec = TableOptionSpec> {
|
|
25
|
-
(table: TableDefinition<any, any, any, "schema", any>): TableDefinition<any, any, any, "schema", any>;
|
|
26
|
-
readonly option: Spec;
|
|
27
|
-
}
|
|
28
|
-
type ClassTableOption = TableOptionBuilderLike<ClassOptionSpec>;
|
|
29
|
-
type ClassDeclaredTableOptions = readonly ClassTableOption[];
|
|
30
|
-
type BuildPrimaryKey<Table extends TableDefinition<any, any, any, "schema", any>, Spec extends TableOptionSpec> = Spec extends {
|
|
31
|
-
readonly kind: "primaryKey";
|
|
32
|
-
readonly columns: infer Columns extends readonly string[];
|
|
33
|
-
} ? Columns[number] & keyof Table[typeof TypeId]["fields"] & string : Table[typeof TypeId]["primaryKey"][number];
|
|
34
|
-
type OptionInputTable<Table extends TableDefinition<any, any, any, "schema", any>, Spec extends TableOptionSpec> = Spec extends {
|
|
35
|
-
readonly kind: "primaryKey";
|
|
36
|
-
readonly columns: infer Columns extends readonly string[];
|
|
37
|
-
} ? ValidatePrimaryKeyColumns<Table[typeof TypeId]["fields"], Columns> extends never ? never : Table : Spec extends {
|
|
38
|
-
readonly columns: infer Columns extends readonly string[];
|
|
39
|
-
} ? ValidateKnownColumns<Table[typeof TypeId]["fields"], Columns> extends never ? never : Table : Table;
|
|
40
|
-
type ApplyOption<Table extends TableDefinition<any, any, any, "schema", any>, Spec extends TableOptionSpec> = Spec extends {
|
|
41
|
-
readonly kind: "primaryKey";
|
|
42
|
-
} ? TableDefinition<Table[typeof TypeId]["name"], Table[typeof TypeId]["fields"], BuildPrimaryKey<Table, Spec>, "schema"> : TableDefinition<Table[typeof TypeId]["name"], Table[typeof TypeId]["fields"], Table[typeof TypeId]["primaryKey"][number], "schema">;
|
|
43
|
-
export type MissingSelfGeneric = "Missing `Self` generic - use `class Self extends Table.Class<Self>(...) {}`";
|
|
44
|
-
/** Bound columns keyed by field name for a particular table. */
|
|
45
|
-
export type BoundColumns<Name extends string, Fields extends TableFieldMap> = {
|
|
46
|
-
readonly [K in keyof Fields]: BoundColumnFrom<Fields[K], Name, Extract<K, string>>;
|
|
47
|
-
};
|
|
48
|
-
/** Derived runtime schemas exposed by a table definition. */
|
|
49
|
-
export interface TableSchemas<Name extends string, Fields extends TableFieldMap, PrimaryKeyColumns extends keyof Fields & string> {
|
|
50
|
-
readonly select: Schema.Schema<SelectRow<Name, Fields>>;
|
|
51
|
-
readonly insert: Schema.Schema<InsertRow<Name, Fields>>;
|
|
52
|
-
readonly update: Schema.Schema<UpdateRow<Name, Fields, PrimaryKeyColumns>>;
|
|
53
|
-
}
|
|
54
|
-
interface TableState<Name extends string, Fields extends TableFieldMap, PrimaryKeyColumns extends keyof Fields & string, Kind extends TableKind = "schema", SchemaName extends string | undefined = DefaultSchemaName> {
|
|
55
|
-
readonly name: Name;
|
|
56
|
-
readonly baseName: string;
|
|
57
|
-
readonly schemaName: SchemaName;
|
|
58
|
-
readonly fields: Fields;
|
|
59
|
-
readonly primaryKey: readonly PrimaryKeyColumns[];
|
|
60
|
-
readonly kind: Kind;
|
|
61
|
-
}
|
|
62
|
-
export type DeclaredTableOptions = readonly TableOptionBuilderLike[];
|
|
63
|
-
export type { DdlExpressionLike, IndexKeySpec, NormalizeColumns, ReferentialAction } from "./table-options.js";
|
|
64
|
-
export type NonEmptySchemaNameInput<Value extends string | undefined> = Value extends string ? NonEmptyStringInput<Value> : Value;
|
|
65
|
-
export type TableDefinition<Name extends string, Fields extends TableFieldMap, PrimaryKeyColumns extends keyof Fields & string = InlinePrimaryKeyKeys<Fields>, Kind extends TableKind = "schema", SchemaName extends string | undefined = DefaultSchemaName> = Pipeable & {
|
|
66
|
-
readonly name: Name;
|
|
67
|
-
readonly columns: BoundColumns<Name, Fields>;
|
|
68
|
-
readonly schemas: TableSchemas<Name, Fields, PrimaryKeyColumns>;
|
|
69
|
-
readonly [TypeId]: TableState<Name, Fields, PrimaryKeyColumns, Kind, SchemaName>;
|
|
70
|
-
readonly [Plan.TypeId]: Plan.State<BoundColumns<Name, Fields>, never, Record<Name, Plan.Source<Name, "required", TrueFormula>>, TableDialect<Fields>>;
|
|
71
|
-
readonly [OptionsSymbol]: readonly TableOptionSpec[];
|
|
72
|
-
readonly [DeclaredOptionsSymbol]: readonly TableOptionSpec[];
|
|
73
|
-
} & BoundColumns<Name, Fields> & Plan.RowSet<BoundColumns<Name, Fields>, never, Record<Name, Plan.Source<Name, "required", TrueFormula>>, TableDialect<Fields>>;
|
|
74
|
-
/**
|
|
75
|
-
* Static class-based table definition.
|
|
76
|
-
*
|
|
77
|
-
* The class object itself acts as the table definition, exposing static bound
|
|
78
|
-
* columns, derived schemas, and plan metadata.
|
|
79
|
-
*/
|
|
80
|
-
export type TableClassStatic<Name extends string, Fields extends TableFieldMap, PrimaryKeyColumns extends keyof Fields & string = InlinePrimaryKeyKeys<Fields>, SchemaName extends string | undefined = DefaultSchemaName> = (abstract new (...args: any[]) => any) & Pipeable & {
|
|
81
|
-
readonly columns: BoundColumns<Name, Fields>;
|
|
82
|
-
readonly schemas: TableSchemas<Name, Fields, PrimaryKeyColumns>;
|
|
83
|
-
readonly [TypeId]: TableState<Name, Fields, PrimaryKeyColumns, "schema", SchemaName>;
|
|
84
|
-
readonly [Plan.TypeId]: Plan.State<BoundColumns<Name, Fields>, never, Record<Name, Plan.Source<Name, "required", TrueFormula>>, TableDialect<Fields>>;
|
|
85
|
-
readonly [OptionsSymbol]: readonly TableOptionSpec[];
|
|
86
|
-
readonly [DeclaredOptionsSymbol]?: readonly TableOptionSpec[];
|
|
87
|
-
readonly [options]?: ClassDeclaredTableOptions;
|
|
88
|
-
readonly tableName: Name;
|
|
89
|
-
} & BoundColumns<Name, Fields> & Plan.RowSet<BoundColumns<Name, Fields>, never, Record<Name, Plan.Source<Name, "required", TrueFormula>>, TableDialect<Fields>>;
|
|
90
|
-
/** Minimal structural table-like contract used across helper APIs. */
|
|
91
|
-
export type AnyTable<Dialect extends string = string> = {
|
|
92
|
-
readonly [TypeId]: TableState<string, TableFieldMap, string, TableKind, string | undefined>;
|
|
93
|
-
readonly [OptionsSymbol]: readonly TableOptionSpec[];
|
|
94
|
-
} & Plan.RowSet<any, any, Record<string, Plan.AnySource>, Dialect>;
|
|
95
|
-
/** Public table-option builder type used by `Table.index`, `Table.primaryKey`, and friends. */
|
|
96
|
-
export type TableOption<Spec extends TableOptionSpec = TableOptionSpec> = {
|
|
97
|
-
<Name extends string, Fields extends TableFieldMap, PrimaryKeyColumns extends keyof Fields & string>(table: OptionInputTable<TableDefinition<Name, Fields, PrimaryKeyColumns, "schema", any>, Spec>): ApplyOption<TableDefinition<Name, Fields, PrimaryKeyColumns, "schema", any>, Spec>;
|
|
98
|
-
readonly option: Spec;
|
|
99
|
-
};
|
|
100
|
-
export declare const option: <Spec extends TableOptionSpec>(spec: Spec) => TableOption<Spec>;
|
|
101
|
-
export declare const optionFromTable: <Spec extends TableOptionSpec>(spec: Spec, resolve: (table: TableDefinition<any, any, any, "schema", any>) => Spec) => TableOption<Spec>;
|
|
102
|
-
/** Creates a table definition from a name and field map. */
|
|
103
|
-
export declare function make<Name extends string, Fields extends TableFieldMap, const SchemaName extends string | undefined = DefaultSchemaName>(name: NonEmptyStringInput<Name>, fields: Fields, schemaName?: NonEmptySchemaNameInput<SchemaName>): TableDefinition<Name, Fields, InlinePrimaryKeyKeys<Fields>, "schema", SchemaName>;
|
|
104
|
-
/**
|
|
105
|
-
* Creates an aliased source from an existing table definition.
|
|
106
|
-
*
|
|
107
|
-
* The alias becomes the logical source identity used by the query layer while
|
|
108
|
-
* the original physical table name is retained in bound-column provenance for
|
|
109
|
-
* downstream SQL rendering work.
|
|
110
|
-
*/
|
|
111
|
-
export declare const alias: <Name extends string, Fields extends TableFieldMap, PrimaryKeyColumns extends keyof Fields & string, SchemaName extends string, AliasName extends string>(table: TableClassStatic<Name, Fields, PrimaryKeyColumns, SchemaName> | TableDefinition<Name, Fields, PrimaryKeyColumns, any, SchemaName>, aliasName: AliasName) => TableDefinition<AliasName, Fields, PrimaryKeyColumns, "alias", SchemaName>;
|
|
112
|
-
/** Returns the lazily derived select schema for a table. */
|
|
113
|
-
export declare function selectSchema<Name extends string, Fields extends TableFieldMap, PrimaryKeyColumns extends keyof Fields & string>(table: TableDefinition<Name, Fields, PrimaryKeyColumns, any, any> | TableClassStatic<Name, Fields, PrimaryKeyColumns, any>): Schema.Schema<SelectRow<Name, Fields>>;
|
|
114
|
-
/** Returns the lazily derived insert schema for a table. */
|
|
115
|
-
export declare function insertSchema<Name extends string, Fields extends TableFieldMap, PrimaryKeyColumns extends keyof Fields & string>(table: TableDefinition<Name, Fields, PrimaryKeyColumns, any, any> | TableClassStatic<Name, Fields, PrimaryKeyColumns, any>): Schema.Schema<InsertRow<Name, Fields>>;
|
|
116
|
-
/** Returns the lazily derived update schema for a table. */
|
|
117
|
-
export declare function updateSchema<Name extends string, Fields extends TableFieldMap, PrimaryKeyColumns extends keyof Fields & string>(table: TableDefinition<Name, Fields, PrimaryKeyColumns, any, any> | TableClassStatic<Name, Fields, PrimaryKeyColumns, any>): Schema.Schema<UpdateRow<Name, Fields, PrimaryKeyColumns>>;
|
|
118
|
-
/**
|
|
119
|
-
* Class-based table constructor mirroring `Schema.Class`.
|
|
120
|
-
*
|
|
121
|
-
* The returned base class can be extended and configured with
|
|
122
|
-
* `static readonly [Table.options]`.
|
|
123
|
-
*/
|
|
124
|
-
export declare function Class<Self = never>(name: "", schemaName?: string | undefined): never;
|
|
125
|
-
export declare function Class<Self = never>(name: string, schemaName: ""): never;
|
|
126
|
-
export declare function Class<Self = never, const SchemaName extends string | undefined = DefaultSchemaName, const Name extends string = string>(name: NonEmptyStringInput<Name>, schemaName?: NonEmptySchemaNameInput<SchemaName>): <Fields extends TableFieldMap>(fields: Fields) => [Self] extends [never] ? "Missing `Self` generic - use `class Self extends Table.Class<Self>(...) {}`" : TableClassStatic<Name, Fields, Extract<{ [K in keyof Fields]: Fields[K]["metadata"]["primaryKey"] extends true ? K : never; }[keyof Fields], string>, SchemaName>;
|
|
127
|
-
/** Declares a table-level primary key. */
|
|
128
|
-
export declare const primaryKey: <const Columns extends string | readonly string[]>(columns: Columns) => TableOption<{
|
|
129
|
-
readonly kind: "primaryKey";
|
|
130
|
-
readonly columns: NormalizeColumns<Columns>;
|
|
131
|
-
}>;
|
|
132
|
-
/** Declares a table-level unique constraint. */
|
|
133
|
-
export declare const unique: <const Columns extends string | readonly string[]>(columns: Columns) => TableOption<{
|
|
134
|
-
readonly kind: "unique";
|
|
135
|
-
readonly columns: NormalizeColumns<Columns>;
|
|
136
|
-
}>;
|
|
137
|
-
/** Declares a table-level index. */
|
|
138
|
-
export declare const index: <const Columns extends string | readonly string[]>(columns: Columns) => TableOption<{
|
|
139
|
-
readonly kind: "index";
|
|
140
|
-
readonly columns: NormalizeColumns<Columns>;
|
|
141
|
-
}>;
|
|
142
|
-
/** Declares a table-level foreign key. */
|
|
143
|
-
export declare const foreignKey: <const LocalColumns extends string | readonly string[], TargetTable extends AnyTable, const TargetColumns extends string | readonly string[]>(columns: LocalColumns, target: () => TargetTable, referencedColumns: TargetColumns) => TableOption<{
|
|
144
|
-
readonly kind: "foreignKey";
|
|
145
|
-
readonly columns: NormalizeColumns<LocalColumns>;
|
|
146
|
-
readonly references: () => {
|
|
147
|
-
readonly tableName: string;
|
|
148
|
-
readonly schemaName?: string | undefined;
|
|
149
|
-
readonly columns: NormalizeColumns<TargetColumns>;
|
|
150
|
-
readonly knownColumns: readonly string[];
|
|
151
|
-
};
|
|
152
|
-
}>;
|
|
153
|
-
/** Declares a check constraint expression. */
|
|
154
|
-
export declare const check: <const Name extends string>(name: NonEmptyStringInput<Name>, predicate: DdlExpressionLike) => TableOption<{
|
|
155
|
-
readonly kind: "check";
|
|
156
|
-
readonly name: Name;
|
|
157
|
-
readonly predicate: DdlExpressionLike;
|
|
158
|
-
}>;
|
|
159
|
-
/** Extracts the row type produced by `selectSchema(table)`. */
|
|
160
|
-
export type SelectOf<Table extends AnyTable> = Table[typeof TypeId] extends {
|
|
161
|
-
readonly name: infer Name extends string;
|
|
162
|
-
readonly fields: infer Fields extends TableFieldMap;
|
|
163
|
-
} ? SelectRow<Name, Fields> : never;
|
|
164
|
-
/** Extracts the payload type produced by `insertSchema(table)`. */
|
|
165
|
-
export type InsertOf<Table extends AnyTable> = Table[typeof TypeId] extends {
|
|
166
|
-
readonly name: infer Name extends string;
|
|
167
|
-
readonly fields: infer Fields extends TableFieldMap;
|
|
168
|
-
} ? InsertRow<Name, Fields> : never;
|
|
169
|
-
/** Extracts the payload type produced by `updateSchema(table)`. */
|
|
170
|
-
export type UpdateOf<Table extends AnyTable> = Table[typeof TypeId] extends {
|
|
171
|
-
readonly name: infer Name extends string;
|
|
172
|
-
readonly fields: infer Fields extends TableFieldMap;
|
|
173
|
-
readonly primaryKey: readonly (infer PrimaryKeyColumns)[];
|
|
174
|
-
} ? UpdateRow<Name, Fields, Extract<PrimaryKeyColumns, keyof Fields & string>> : never;
|
package/src/postgres/cast.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import type * as Expression from "../internal/scalar.js"
|
|
2
|
-
import type * as ExpressionAst from "../internal/expression-ast.js"
|
|
3
|
-
import type { ExpressionInput } from "../internal/query.js"
|
|
4
|
-
import { cast as postgresCast } from "./internal/dsl.js"
|
|
5
|
-
|
|
6
|
-
type CastInput = ExpressionInput
|
|
7
|
-
type CastTarget = Expression.DbType.Any
|
|
8
|
-
type CastNullability<Value extends CastInput> = Value extends Expression.Any
|
|
9
|
-
? Expression.NullabilityOf<Value>
|
|
10
|
-
: Value extends null ? "always" : "never"
|
|
11
|
-
type CastKind<Value extends CastInput> = Value extends Expression.Any
|
|
12
|
-
? Expression.KindOf<Value>
|
|
13
|
-
: "scalar"
|
|
14
|
-
type CastDependencies<Value extends CastInput> = Value extends Expression.Any
|
|
15
|
-
? Expression.DependenciesOf<Value>
|
|
16
|
-
: never
|
|
17
|
-
type CastExpression<
|
|
18
|
-
Value extends CastInput,
|
|
19
|
-
Target extends CastTarget
|
|
20
|
-
> = Expression.Scalar<
|
|
21
|
-
Expression.RuntimeOfDbType<Target>,
|
|
22
|
-
Target,
|
|
23
|
-
CastNullability<Value>,
|
|
24
|
-
Target["dialect"],
|
|
25
|
-
CastKind<Value>,
|
|
26
|
-
CastDependencies<Value>
|
|
27
|
-
> & {
|
|
28
|
-
readonly [ExpressionAst.TypeId]: ExpressionAst.CastNode<Value extends Expression.Any ? Value : Expression.Any, Target>
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const to: {
|
|
32
|
-
<Value extends CastInput, Target extends CastTarget>(
|
|
33
|
-
value: Value,
|
|
34
|
-
target: Target
|
|
35
|
-
): CastExpression<Value, Target>
|
|
36
|
-
<Target extends CastTarget>(
|
|
37
|
-
target: Target
|
|
38
|
-
): <Value extends CastInput>(value: Value) => CastExpression<Value, Target>
|
|
39
|
-
} = ((...args: [CastInput, CastTarget] | [CastTarget]) =>
|
|
40
|
-
args.length === 1
|
|
41
|
-
? ((value: CastInput) => postgresCast(value as never, args[0] as never))
|
|
42
|
-
: postgresCast(args[0] as never, args[1] as never)) as unknown as typeof to
|
|
43
|
-
|
|
44
|
-
/** Postgres cast helpers. */
|
|
45
|
-
export const cast = { to }
|