@dsqlbase/core 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/base.d.ts +9 -0
- package/dist/client/base.d.ts.map +1 -0
- package/dist/client/base.js +13 -0
- package/dist/client/base.js.map +1 -0
- package/dist/client/database.d.ts +5 -0
- package/dist/client/database.d.ts.map +1 -0
- package/dist/client/database.js +8 -0
- package/dist/client/database.js.map +1 -0
- package/dist/client/model.d.ts +19 -0
- package/dist/client/model.d.ts.map +1 -0
- package/dist/client/model.js +12 -0
- package/dist/client/model.js.map +1 -0
- package/dist/definition/base.d.ts +49 -0
- package/dist/definition/base.d.ts.map +1 -0
- package/dist/definition/base.js +54 -0
- package/dist/definition/base.js.map +1 -0
- package/dist/definition/column.d.ts +74 -0
- package/dist/definition/column.d.ts.map +1 -0
- package/dist/definition/column.js +94 -0
- package/dist/definition/column.js.map +1 -0
- package/dist/definition/constraint.d.ts +69 -0
- package/dist/definition/constraint.d.ts.map +1 -0
- package/dist/definition/constraint.js +79 -0
- package/dist/definition/constraint.js.map +1 -0
- package/dist/definition/domain.d.ts +39 -0
- package/dist/definition/domain.d.ts.map +1 -0
- package/dist/definition/domain.js +48 -0
- package/dist/definition/domain.js.map +1 -0
- package/dist/definition/index.d.ts +11 -0
- package/dist/definition/index.d.ts.map +1 -0
- package/dist/definition/index.js +11 -0
- package/dist/definition/index.js.map +1 -0
- package/dist/definition/indexes.d.ts +64 -0
- package/dist/definition/indexes.d.ts.map +1 -0
- package/dist/definition/indexes.js +84 -0
- package/dist/definition/indexes.js.map +1 -0
- package/dist/definition/namespace.d.ts +14 -0
- package/dist/definition/namespace.d.ts.map +1 -0
- package/dist/definition/namespace.js +15 -0
- package/dist/definition/namespace.js.map +1 -0
- package/dist/definition/relations.d.ts +53 -0
- package/dist/definition/relations.d.ts.map +1 -0
- package/dist/definition/relations.js +40 -0
- package/dist/definition/relations.js.map +1 -0
- package/dist/definition/schema.d.ts +14 -0
- package/dist/definition/schema.d.ts.map +1 -0
- package/dist/definition/schema.js +15 -0
- package/dist/definition/schema.js.map +1 -0
- package/dist/definition/sequence.d.ts +32 -0
- package/dist/definition/sequence.d.ts.map +1 -0
- package/dist/definition/sequence.js +59 -0
- package/dist/definition/sequence.js.map +1 -0
- package/dist/definition/table.d.ts +66 -0
- package/dist/definition/table.d.ts.map +1 -0
- package/dist/definition/table.js +59 -0
- package/dist/definition/table.js.map +1 -0
- package/dist/definition/view.d.ts +9 -0
- package/dist/definition/view.d.ts.map +1 -0
- package/dist/definition/view.js +11 -0
- package/dist/definition/view.js.map +1 -0
- package/dist/driver/codec.d.ts +13 -0
- package/dist/driver/codec.d.ts.map +1 -0
- package/dist/driver/codec.js +15 -0
- package/dist/driver/codec.js.map +1 -0
- package/dist/driver/index.d.ts +3 -0
- package/dist/driver/index.d.ts.map +1 -0
- package/dist/driver/index.js +2 -0
- package/dist/driver/index.js.map +1 -0
- package/dist/driver/session.d.ts +23 -0
- package/dist/driver/session.d.ts.map +1 -0
- package/dist/driver/session.js +2 -0
- package/dist/driver/session.js.map +1 -0
- package/dist/execution/column.d.ts +17 -0
- package/dist/execution/column.d.ts.map +1 -0
- package/dist/execution/column.js +23 -0
- package/dist/execution/column.js.map +1 -0
- package/dist/execution/context.d.ts +19 -0
- package/dist/execution/context.d.ts.map +1 -0
- package/dist/execution/context.js +14 -0
- package/dist/execution/context.js.map +1 -0
- package/dist/execution/dialect.d.ts +75 -0
- package/dist/execution/dialect.d.ts.map +1 -0
- package/dist/execution/dialect.js +123 -0
- package/dist/execution/dialect.js.map +1 -0
- package/dist/execution/index.d.ts +8 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +7 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/operation.d.ts +140 -0
- package/dist/execution/operation.d.ts.map +1 -0
- package/dist/execution/operation.js +303 -0
- package/dist/execution/operation.js.map +1 -0
- package/dist/execution/schema.d.ts +38 -0
- package/dist/execution/schema.d.ts.map +1 -0
- package/dist/execution/schema.js +104 -0
- package/dist/execution/schema.js.map +1 -0
- package/dist/execution/table.d.ts +107 -0
- package/dist/execution/table.d.ts.map +1 -0
- package/dist/execution/table.js +46 -0
- package/dist/execution/table.js.map +1 -0
- package/dist/execution/thenable.d.ts +7 -0
- package/dist/execution/thenable.d.ts.map +1 -0
- package/dist/execution/thenable.js +12 -0
- package/dist/execution/thenable.js.map +1 -0
- package/dist/execution/types.d.ts +42 -0
- package/dist/execution/types.d.ts.map +1 -0
- package/dist/execution/types.js +2 -0
- package/dist/execution/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/base.d.ts +29 -0
- package/dist/runtime/base.d.ts.map +1 -0
- package/dist/runtime/base.js +3 -0
- package/dist/runtime/base.js.map +1 -0
- package/dist/runtime/column.d.ts +18 -0
- package/dist/runtime/column.d.ts.map +1 -0
- package/dist/runtime/column.js +24 -0
- package/dist/runtime/column.js.map +1 -0
- package/dist/runtime/context.d.ts +21 -0
- package/dist/runtime/context.d.ts.map +1 -0
- package/dist/runtime/context.js +14 -0
- package/dist/runtime/context.js.map +1 -0
- package/dist/runtime/dialect.d.ts +42 -0
- package/dist/runtime/dialect.d.ts.map +1 -0
- package/dist/runtime/dialect.js +2 -0
- package/dist/runtime/dialect.js.map +1 -0
- package/dist/runtime/executor.d.ts +12 -0
- package/dist/runtime/executor.d.ts.map +1 -0
- package/dist/runtime/executor.js +18 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/runtime/index.d.ts +10 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +8 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/operation.d.ts +82 -0
- package/dist/runtime/operation.d.ts.map +1 -0
- package/dist/runtime/operation.js +236 -0
- package/dist/runtime/operation.js.map +1 -0
- package/dist/runtime/query.d.ts +77 -0
- package/dist/runtime/query.d.ts.map +1 -0
- package/dist/runtime/query.js +125 -0
- package/dist/runtime/query.js.map +1 -0
- package/dist/runtime/registry.d.ts +27 -0
- package/dist/runtime/registry.d.ts.map +1 -0
- package/dist/runtime/registry.js +106 -0
- package/dist/runtime/registry.js.map +1 -0
- package/dist/runtime/session.d.ts +23 -0
- package/dist/runtime/session.d.ts.map +1 -0
- package/dist/runtime/session.js +2 -0
- package/dist/runtime/session.js.map +1 -0
- package/dist/runtime/table.d.ts +34 -0
- package/dist/runtime/table.d.ts.map +1 -0
- package/dist/runtime/table.js +46 -0
- package/dist/runtime/table.js.map +1 -0
- package/dist/sql/expressions.d.ts +25 -0
- package/dist/sql/expressions.d.ts.map +1 -0
- package/dist/sql/expressions.js +79 -0
- package/dist/sql/expressions.js.map +1 -0
- package/dist/sql/index.d.ts +4 -0
- package/dist/sql/index.d.ts.map +1 -0
- package/dist/sql/index.js +4 -0
- package/dist/sql/index.js.map +1 -0
- package/dist/sql/nodes.d.ts +49 -0
- package/dist/sql/nodes.d.ts.map +1 -0
- package/dist/sql/nodes.js +102 -0
- package/dist/sql/nodes.js.map +1 -0
- package/dist/sql/tag.d.ts +13 -0
- package/dist/sql/tag.d.ts.map +1 -0
- package/dist/sql/tag.js +32 -0
- package/dist/sql/tag.js.map +1 -0
- package/dist/sql/utils.d.ts +7 -0
- package/dist/sql/utils.d.ts.map +1 -0
- package/dist/sql/utils.js +15 -0
- package/dist/sql/utils.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/object.d.ts +29 -0
- package/dist/types/object.d.ts.map +1 -0
- package/dist/types/object.js +2 -0
- package/dist/types/object.js.map +1 -0
- package/dist/types/prettify.d.ts +5 -0
- package/dist/types/prettify.d.ts.map +1 -0
- package/dist/types/prettify.js +3 -0
- package/dist/types/prettify.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/thenable.d.ts +7 -0
- package/dist/utils/thenable.d.ts.map +1 -0
- package/dist/utils/thenable.js +12 -0
- package/dist/utils/thenable.js.map +1 -0
- package/dist/utils/types.d.ts +46 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +2 -0
- package/dist/utils/types.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { TypedObject } from "../utils/index.js";
|
|
2
|
+
import { SQLIdentifier, SQLNode, SQLStatement } from "../sql/index.js";
|
|
3
|
+
import { ExecutionContext } from "./context.js";
|
|
4
|
+
import { AnyTable } from "./table.js";
|
|
5
|
+
import { AnyColumn } from "./column.js";
|
|
6
|
+
import { AnySchema } from "./base.js";
|
|
7
|
+
export type OperationType = "select" | "insert" | "update" | "delete";
|
|
8
|
+
export type OperationMode = "one" | "many";
|
|
9
|
+
export type OperationResult<TMode extends OperationMode, TResult> = TMode extends "one" ? TResult | null : TResult[];
|
|
10
|
+
export interface Operation<TMode extends OperationMode, TTable extends AnyTable, TArgs extends object, TResult = unknown> {
|
|
11
|
+
type: OperationType;
|
|
12
|
+
mode: TMode;
|
|
13
|
+
table: TTable;
|
|
14
|
+
name: string;
|
|
15
|
+
args: TArgs;
|
|
16
|
+
query: SQLStatement;
|
|
17
|
+
resolve: (rows: unknown[]) => OperationResult<TMode, TResult>;
|
|
18
|
+
}
|
|
19
|
+
export type AnyOperation = Operation<OperationMode, AnyTable, object, unknown>;
|
|
20
|
+
export interface OperationRequest<TArgs extends object, TMode extends OperationMode = OperationMode> {
|
|
21
|
+
name?: string;
|
|
22
|
+
mode: TMode;
|
|
23
|
+
args: TArgs;
|
|
24
|
+
}
|
|
25
|
+
export type FieldSelection = [
|
|
26
|
+
fieldName: string,
|
|
27
|
+
column: AnyColumn | SQLIdentifier | FieldSelection[]
|
|
28
|
+
];
|
|
29
|
+
export type FieldMutation = [column: string | AnyColumn | SQLIdentifier, value: SQLNode];
|
|
30
|
+
export type FieldResolver = [fieldName: string, resolver: AnyColumn | FieldResolver[]];
|
|
31
|
+
export interface SelectOperationArgs {
|
|
32
|
+
select: FieldSelection[];
|
|
33
|
+
where?: SQLNode | SQLNode[];
|
|
34
|
+
orderBy?: SQLNode[];
|
|
35
|
+
join?: [fieldName: string, args: SelectOperationArgs][];
|
|
36
|
+
distinct?: boolean;
|
|
37
|
+
limit?: number;
|
|
38
|
+
offset?: number;
|
|
39
|
+
}
|
|
40
|
+
export interface SelectOperation<TMode extends OperationMode, TTable extends AnyTable, TArgs extends SelectOperationArgs, TReturn = unknown> extends Operation<TMode, TTable, TArgs, TReturn> {
|
|
41
|
+
type: "select";
|
|
42
|
+
}
|
|
43
|
+
export interface InsertOperationArgs {
|
|
44
|
+
data: FieldMutation[][];
|
|
45
|
+
return?: FieldSelection[];
|
|
46
|
+
}
|
|
47
|
+
export interface InsertOperation<TMode extends OperationMode, TTable extends AnyTable, TArgs extends InsertOperationArgs, TReturn> extends Operation<TMode, TTable, TArgs, TReturn> {
|
|
48
|
+
type: "insert";
|
|
49
|
+
}
|
|
50
|
+
export interface UpdateOperationArgs {
|
|
51
|
+
set: FieldMutation[];
|
|
52
|
+
where: SQLNode | SQLNode[];
|
|
53
|
+
return?: FieldSelection[];
|
|
54
|
+
}
|
|
55
|
+
export interface UpdateOperation<TMode extends OperationMode, TTable extends AnyTable, TArgs extends UpdateOperationArgs, TReturn = unknown> extends Operation<TMode, TTable, TArgs, TReturn> {
|
|
56
|
+
type: "update";
|
|
57
|
+
}
|
|
58
|
+
export interface DeleteOperationArgs {
|
|
59
|
+
where: SQLNode | SQLNode[];
|
|
60
|
+
return?: FieldSelection[];
|
|
61
|
+
}
|
|
62
|
+
export interface DeleteOperation<TMode extends OperationMode, TTable extends AnyTable, TArgs extends DeleteOperationArgs = DeleteOperationArgs, TReturn = unknown> extends Operation<TMode, TTable, TArgs, TReturn> {
|
|
63
|
+
type: "delete";
|
|
64
|
+
}
|
|
65
|
+
export declare class OperationsFactory<TSchema extends AnySchema = AnySchema> implements TypedObject<TSchema> {
|
|
66
|
+
readonly __type: TSchema;
|
|
67
|
+
private readonly _ctx;
|
|
68
|
+
constructor(ctx: ExecutionContext);
|
|
69
|
+
private _validateWhereExpression;
|
|
70
|
+
private _validateOrderExpression;
|
|
71
|
+
private _resolveFields;
|
|
72
|
+
private _resolveInsertEntries;
|
|
73
|
+
private _resolveUpdateEntries;
|
|
74
|
+
private _resolveSelectParams;
|
|
75
|
+
private _resolveJoinEntries;
|
|
76
|
+
_createResultResolver<TMode extends OperationMode, TResult extends object>(resolvers: FieldResolver[], mode: TMode): (rows: unknown[]) => OperationResult<TMode, TResult>;
|
|
77
|
+
createSelectOperation<TResult extends object, TTable extends AnyTable, TMode extends OperationMode = OperationMode, TArgs extends SelectOperationArgs = SelectOperationArgs>(table: TTable, config: OperationRequest<TArgs, TMode>): SelectOperation<TMode, TTable, TArgs, TResult>;
|
|
78
|
+
createInsertOperation<TResult extends object, TTable extends AnyTable, TMode extends OperationMode, TArgs extends InsertOperationArgs>(table: TTable, config: OperationRequest<TArgs, TMode>): InsertOperation<TMode, TTable, TArgs, TResult>;
|
|
79
|
+
createUpdateOperation<TResult extends object, TMode extends OperationMode = OperationMode, TTable extends AnyTable = AnyTable, TArgs extends UpdateOperationArgs = UpdateOperationArgs>(table: TTable, config: OperationRequest<TArgs, TMode>): UpdateOperation<TMode, TTable, TArgs, TResult>;
|
|
80
|
+
createDeleteOperation<TResult extends object, TMode extends OperationMode = OperationMode, TTable extends AnyTable = AnyTable, TArgs extends DeleteOperationArgs = DeleteOperationArgs>(table: TTable, config: OperationRequest<TArgs, TMode>): DeleteOperation<TMode, TTable, TArgs, TResult>;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=operation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../src/runtime/operation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { Relation } from "../definition/index.js";
|
|
2
|
+
import { SQLIdentifier } from "../sql/index.js";
|
|
3
|
+
export class OperationsFactory {
|
|
4
|
+
_ctx;
|
|
5
|
+
constructor(ctx) {
|
|
6
|
+
this._ctx = ctx;
|
|
7
|
+
}
|
|
8
|
+
_validateWhereExpression(table, where) {
|
|
9
|
+
if (Array.isArray(where)) {
|
|
10
|
+
return where[0];
|
|
11
|
+
}
|
|
12
|
+
return where;
|
|
13
|
+
}
|
|
14
|
+
_validateOrderExpression(table, order) {
|
|
15
|
+
return order;
|
|
16
|
+
}
|
|
17
|
+
_resolveFields(table, selection) {
|
|
18
|
+
const columns = [];
|
|
19
|
+
const resolvers = [];
|
|
20
|
+
if (!selection || selection.length === 0) {
|
|
21
|
+
for (const [key, column] of Object.entries(table.columns)) {
|
|
22
|
+
columns.push(column);
|
|
23
|
+
resolvers.push([key, column]);
|
|
24
|
+
}
|
|
25
|
+
return { columns, resolvers };
|
|
26
|
+
}
|
|
27
|
+
for (const [key, selected] of selection) {
|
|
28
|
+
if (selected) {
|
|
29
|
+
const column = table.columns[key];
|
|
30
|
+
if (!column) {
|
|
31
|
+
throw new Error(`Column "${key}" does not exist on table "${table.name}"`);
|
|
32
|
+
}
|
|
33
|
+
columns.push(column);
|
|
34
|
+
resolvers.push([key, column]);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return { columns, resolvers };
|
|
38
|
+
}
|
|
39
|
+
_resolveInsertEntries(table, data) {
|
|
40
|
+
const columns = [];
|
|
41
|
+
const rows = [];
|
|
42
|
+
for (const record of data) {
|
|
43
|
+
const row = [];
|
|
44
|
+
for (const [key, value] of record) {
|
|
45
|
+
const column = table.getColumn(typeof key === "string" ? key : key.name);
|
|
46
|
+
if (!column) {
|
|
47
|
+
throw new Error(`Column "${key}" does not exist on table "${table.name}"`);
|
|
48
|
+
}
|
|
49
|
+
columns.push(new SQLIdentifier(column.name));
|
|
50
|
+
row.push(value);
|
|
51
|
+
}
|
|
52
|
+
rows.push(row);
|
|
53
|
+
}
|
|
54
|
+
return [columns, rows];
|
|
55
|
+
}
|
|
56
|
+
_resolveUpdateEntries(table, data) {
|
|
57
|
+
const entries = [];
|
|
58
|
+
for (const [key, value] of data) {
|
|
59
|
+
const column = table.getColumn(typeof key === "string" ? key : key.name);
|
|
60
|
+
if (!column) {
|
|
61
|
+
throw new Error(`Column "${key}" does not exist on table "${table.name}"`);
|
|
62
|
+
}
|
|
63
|
+
if (column.primaryKey) {
|
|
64
|
+
throw new Error(`Cannot update primary key column "${key}"`);
|
|
65
|
+
}
|
|
66
|
+
entries.push([new SQLIdentifier(column.name), value]);
|
|
67
|
+
}
|
|
68
|
+
return entries;
|
|
69
|
+
}
|
|
70
|
+
_resolveSelectParams(table, args, mode, resolvers = []) {
|
|
71
|
+
const fields = this._resolveFields(table, args.select);
|
|
72
|
+
resolvers.push(...fields.resolvers);
|
|
73
|
+
const where = args.where ? this._validateWhereExpression(table, args.where) : undefined;
|
|
74
|
+
const order = args.orderBy ? this._validateOrderExpression(table, args.orderBy) : undefined;
|
|
75
|
+
const join = args.join ? this._resolveJoinEntries(table, args.join, resolvers) : undefined;
|
|
76
|
+
const limit = mode === "one" ? 1 : args.limit;
|
|
77
|
+
return {
|
|
78
|
+
table,
|
|
79
|
+
select: fields.columns,
|
|
80
|
+
distinct: args.distinct,
|
|
81
|
+
where,
|
|
82
|
+
order,
|
|
83
|
+
limit: limit,
|
|
84
|
+
offset: args.offset,
|
|
85
|
+
join,
|
|
86
|
+
resolvers,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
_resolveJoinEntries(table, join, resolvers) {
|
|
90
|
+
const joins = [];
|
|
91
|
+
if (!join || Object.keys(join).length === 0) {
|
|
92
|
+
return joins;
|
|
93
|
+
}
|
|
94
|
+
for (const [key, value] of join) {
|
|
95
|
+
const fieldName = typeof key === "string" ? key : key.name;
|
|
96
|
+
const relation = table.getRelation(fieldName);
|
|
97
|
+
if (!relation) {
|
|
98
|
+
throw new Error(`Relation "${fieldName}" does not exist on table "${table.name}"`);
|
|
99
|
+
}
|
|
100
|
+
const targetTable = this._ctx.schema.getRelationTarget(table.name, fieldName);
|
|
101
|
+
if (!targetTable) {
|
|
102
|
+
throw new Error(`Target table for relation "${key}" on table "${table.name}" not found in schema`);
|
|
103
|
+
}
|
|
104
|
+
const fromColumn = table.getColumn(relation.from[0].name);
|
|
105
|
+
const toColumn = targetTable.getColumn(relation.to[0].name);
|
|
106
|
+
if (!fromColumn || !toColumn) {
|
|
107
|
+
throw new Error(`Invalid relation "${key}" on table "${table.name}": missing columns "${relation.from[0].name}" or "${relation.to[0].name}"`);
|
|
108
|
+
}
|
|
109
|
+
let params = undefined;
|
|
110
|
+
const joinResolvers = [];
|
|
111
|
+
if (typeof value === "boolean" && value === true) {
|
|
112
|
+
params = this._resolveSelectParams(targetTable, { select: [] }, relation.type === Relation.HAS_MANY ? "many" : "one", joinResolvers);
|
|
113
|
+
}
|
|
114
|
+
else if (typeof value === "object") {
|
|
115
|
+
params = this._resolveSelectParams(targetTable, value, relation.type === Relation.HAS_MANY ? "many" : "one", joinResolvers);
|
|
116
|
+
}
|
|
117
|
+
if (params) {
|
|
118
|
+
joins.push({
|
|
119
|
+
alias: fieldName,
|
|
120
|
+
type: relation.type === "has_many" ? "many" : "one",
|
|
121
|
+
from: fromColumn,
|
|
122
|
+
to: toColumn,
|
|
123
|
+
params: {
|
|
124
|
+
...params,
|
|
125
|
+
// where: params.where
|
|
126
|
+
// ? and([equals(toColumn, fromColumn), params.where])
|
|
127
|
+
// : equals(toColumn, fromColumn),
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
resolvers.push([fieldName, joinResolvers]);
|
|
132
|
+
}
|
|
133
|
+
return joins;
|
|
134
|
+
}
|
|
135
|
+
_createResultResolver(resolvers, mode) {
|
|
136
|
+
return (rows) => {
|
|
137
|
+
const results = [];
|
|
138
|
+
for (const row of rows) {
|
|
139
|
+
const result = {};
|
|
140
|
+
for (const [key, resolver] of resolvers) {
|
|
141
|
+
if (Array.isArray(resolver)) {
|
|
142
|
+
const nestedRows = row[key];
|
|
143
|
+
if (typeof nestedRows === "undefined" || nestedRows === null) {
|
|
144
|
+
result[key] = null;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
const nestedResolver = this._createResultResolver(resolver, Array.isArray(nestedRows) ? "many" : "one");
|
|
148
|
+
result[key] = nestedResolver(Array.isArray(nestedRows) ? nestedRows : [nestedRows]);
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
result[key] = resolver.resolve(row[resolver.name]);
|
|
152
|
+
}
|
|
153
|
+
results.push(result);
|
|
154
|
+
}
|
|
155
|
+
if (mode === "one") {
|
|
156
|
+
return (results[0] ?? null);
|
|
157
|
+
}
|
|
158
|
+
return results;
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
createSelectOperation(table, config) {
|
|
162
|
+
const { name, args, mode } = config;
|
|
163
|
+
const { resolvers: fieldResolvers, ...params } = this._resolveSelectParams(table, args, mode);
|
|
164
|
+
const query = this._ctx.dialect.buildSelectQuery(params);
|
|
165
|
+
return {
|
|
166
|
+
type: "select",
|
|
167
|
+
table: table,
|
|
168
|
+
mode: mode,
|
|
169
|
+
name: name ?? `select_${table.name}`,
|
|
170
|
+
args: args,
|
|
171
|
+
query: query.toQuery(),
|
|
172
|
+
resolve: this._createResultResolver(fieldResolvers, mode),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
createInsertOperation(table, config) {
|
|
176
|
+
const { name, args, mode } = config;
|
|
177
|
+
const [columns, values] = this._resolveInsertEntries(table, args.data);
|
|
178
|
+
const selection = this._resolveFields(table, args.return);
|
|
179
|
+
const query = this._ctx.dialect.buildInsertQuery({
|
|
180
|
+
table,
|
|
181
|
+
columns,
|
|
182
|
+
values,
|
|
183
|
+
return: selection.columns,
|
|
184
|
+
});
|
|
185
|
+
return {
|
|
186
|
+
type: "insert",
|
|
187
|
+
mode: config.mode,
|
|
188
|
+
table: table,
|
|
189
|
+
name: name ?? `insert_${table.name}`,
|
|
190
|
+
args: args,
|
|
191
|
+
query: query.toQuery(),
|
|
192
|
+
resolve: this._createResultResolver(selection.resolvers, mode),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
createUpdateOperation(table, config) {
|
|
196
|
+
const { name, args, mode } = config;
|
|
197
|
+
const entries = this._resolveUpdateEntries(table, args.set);
|
|
198
|
+
const where = args.where ? this._validateWhereExpression(table, args.where) : undefined;
|
|
199
|
+
const selection = this._resolveFields(table, args.return);
|
|
200
|
+
const query = this._ctx.dialect.buildUpdateQuery({
|
|
201
|
+
table,
|
|
202
|
+
set: entries,
|
|
203
|
+
where,
|
|
204
|
+
return: selection.columns,
|
|
205
|
+
});
|
|
206
|
+
return {
|
|
207
|
+
type: "update",
|
|
208
|
+
table: table,
|
|
209
|
+
mode,
|
|
210
|
+
name: name ?? `update_${table.name}`,
|
|
211
|
+
args: args,
|
|
212
|
+
query: query.toQuery(),
|
|
213
|
+
resolve: this._createResultResolver(selection.resolvers, mode),
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
createDeleteOperation(table, config) {
|
|
217
|
+
const { name, args, mode } = config;
|
|
218
|
+
const where = args.where ? this._validateWhereExpression(table, args.where) : undefined;
|
|
219
|
+
const selection = this._resolveFields(table, args.return);
|
|
220
|
+
const query = this._ctx.dialect.buildDeleteQuery({
|
|
221
|
+
table,
|
|
222
|
+
where,
|
|
223
|
+
return: selection.columns,
|
|
224
|
+
});
|
|
225
|
+
return {
|
|
226
|
+
type: "delete",
|
|
227
|
+
table: table,
|
|
228
|
+
mode: config.mode,
|
|
229
|
+
name: name ?? `delete_${table.name}`,
|
|
230
|
+
args: args,
|
|
231
|
+
query: query.toQuery(),
|
|
232
|
+
resolve: this._createResultResolver(selection.resolvers, mode),
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=operation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation.js","sourceRoot":"","sources":["../../src/runtime/operation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { SQLNode, SQLQuery } from "../sql/index.js";
|
|
2
|
+
export interface JoinParams {
|
|
3
|
+
alias: string;
|
|
4
|
+
type: "one" | "many";
|
|
5
|
+
from: SQLNode;
|
|
6
|
+
to: SQLNode;
|
|
7
|
+
params: SelectParams;
|
|
8
|
+
}
|
|
9
|
+
export interface SelectParams {
|
|
10
|
+
table: SQLNode;
|
|
11
|
+
select: SQLNode[];
|
|
12
|
+
where?: SQLNode;
|
|
13
|
+
order?: SQLNode[];
|
|
14
|
+
limit?: number;
|
|
15
|
+
offset?: number;
|
|
16
|
+
distinct?: boolean;
|
|
17
|
+
join?: JoinParams[];
|
|
18
|
+
}
|
|
19
|
+
export interface InsertParams {
|
|
20
|
+
table: SQLNode;
|
|
21
|
+
columns: SQLNode[];
|
|
22
|
+
values: SQLNode[][];
|
|
23
|
+
return?: SQLNode[];
|
|
24
|
+
}
|
|
25
|
+
export interface UpdateParams {
|
|
26
|
+
table: SQLNode;
|
|
27
|
+
set: [column: SQLNode, value: SQLNode][];
|
|
28
|
+
where?: SQLNode;
|
|
29
|
+
return?: SQLNode[];
|
|
30
|
+
}
|
|
31
|
+
export interface DeleteParams {
|
|
32
|
+
table: SQLNode;
|
|
33
|
+
where?: SQLNode;
|
|
34
|
+
return?: SQLNode[];
|
|
35
|
+
}
|
|
36
|
+
export declare class QueryBuilder {
|
|
37
|
+
private _getSelection;
|
|
38
|
+
/**
|
|
39
|
+
* Builds a lateral join for the given join parameters. This is used to implement relations between tables.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* Given a `tasks` table with a relation to an `assignee` in the `users` table, the following join definition:
|
|
43
|
+
* ```ts
|
|
44
|
+
* const join: JoinParams = {
|
|
45
|
+
* alias: "assignee",
|
|
46
|
+
* type: "one",
|
|
47
|
+
* from: sql`${tasks.assigneeId}`,
|
|
48
|
+
* to: sql`${users.id}`,
|
|
49
|
+
* params: {
|
|
50
|
+
* table: users,
|
|
51
|
+
* select: [users.id, users.name, users.email],
|
|
52
|
+
* where: sql`${users.id} = ${tasks.assigneeId}`,
|
|
53
|
+
* },
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
* would produce the following SQL:
|
|
57
|
+
*
|
|
58
|
+
* ```sql
|
|
59
|
+
* SELECT "id", "title", "description", "__join_assignee"."data" AS "assignee" FROM "tasks"
|
|
60
|
+
* LEFT JOIN LATERAL (
|
|
61
|
+
* SELECT row_to_json("__t".*) AS "data"
|
|
62
|
+
* FROM (
|
|
63
|
+
* SELECT "id", "name", "email"
|
|
64
|
+
* FROM "users"
|
|
65
|
+
* WHERE "users"."id" = "tasks"."assignee_id"
|
|
66
|
+
* ) AS "__t"
|
|
67
|
+
* ) AS "__join_assignee"
|
|
68
|
+
* ON true
|
|
69
|
+
* ```
|
|
70
|
+
**/
|
|
71
|
+
private _buildLateralJoin;
|
|
72
|
+
buildSelectQuery(params: SelectParams): SQLQuery;
|
|
73
|
+
buildInsertQuery(params: InsertParams): SQLQuery;
|
|
74
|
+
buildUpdateQuery(params: UpdateParams): SQLQuery<unknown>;
|
|
75
|
+
buildDeleteQuery(params: DeleteParams): SQLQuery<unknown>;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/runtime/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa;IAiBrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAgCI;IACJ,OAAO,CAAC,iBAAiB;IAmBzB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,QAAQ;IAsChD,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,QAAQ;IAehD,gBAAgB,CAAC,MAAM,EAAE,YAAY;IAmBrC,gBAAgB,CAAC,MAAM,EAAE,YAAY;CAetC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { sql } from "../sql/index.js";
|
|
2
|
+
export class QueryBuilder {
|
|
3
|
+
_getSelection(columns, joinFields) {
|
|
4
|
+
const selection = [...columns];
|
|
5
|
+
if (columns.length === 0 && joinFields.length === 0) {
|
|
6
|
+
return sql `*`;
|
|
7
|
+
}
|
|
8
|
+
for (const field of joinFields) {
|
|
9
|
+
const alias = sql.identifier(`__join_${field}`);
|
|
10
|
+
const node = sql `${alias}.${sql.identifier("data")} AS ${sql.identifier(field)}`;
|
|
11
|
+
selection.push(node);
|
|
12
|
+
}
|
|
13
|
+
return sql.join(selection, ", ");
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Builds a lateral join for the given join parameters. This is used to implement relations between tables.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* Given a `tasks` table with a relation to an `assignee` in the `users` table, the following join definition:
|
|
20
|
+
* ```ts
|
|
21
|
+
* const join: JoinParams = {
|
|
22
|
+
* alias: "assignee",
|
|
23
|
+
* type: "one",
|
|
24
|
+
* from: sql`${tasks.assigneeId}`,
|
|
25
|
+
* to: sql`${users.id}`,
|
|
26
|
+
* params: {
|
|
27
|
+
* table: users,
|
|
28
|
+
* select: [users.id, users.name, users.email],
|
|
29
|
+
* where: sql`${users.id} = ${tasks.assigneeId}`,
|
|
30
|
+
* },
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
* would produce the following SQL:
|
|
34
|
+
*
|
|
35
|
+
* ```sql
|
|
36
|
+
* SELECT "id", "title", "description", "__join_assignee"."data" AS "assignee" FROM "tasks"
|
|
37
|
+
* LEFT JOIN LATERAL (
|
|
38
|
+
* SELECT row_to_json("__t".*) AS "data"
|
|
39
|
+
* FROM (
|
|
40
|
+
* SELECT "id", "name", "email"
|
|
41
|
+
* FROM "users"
|
|
42
|
+
* WHERE "users"."id" = "tasks"."assignee_id"
|
|
43
|
+
* ) AS "__t"
|
|
44
|
+
* ) AS "__join_assignee"
|
|
45
|
+
* ON true
|
|
46
|
+
* ```
|
|
47
|
+
**/
|
|
48
|
+
_buildLateralJoin(join) {
|
|
49
|
+
const alias = sql.identifier(`__join_${join.alias}`);
|
|
50
|
+
const innerAlias = sql.identifier(`__t`);
|
|
51
|
+
const innerQuery = this.buildSelectQuery(join.params);
|
|
52
|
+
const subquery = sql `SELECT`;
|
|
53
|
+
if (join.type === "many") {
|
|
54
|
+
subquery.append(sql ` COALESCE(json_agg(row_to_json(${innerAlias}.*)), '[]'::json)`);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
subquery.append(sql ` row_to_json(${innerAlias}.*)`);
|
|
58
|
+
}
|
|
59
|
+
subquery.append(sql ` AS ${sql.identifier("data")} FROM (${innerQuery}) AS ${innerAlias}`);
|
|
60
|
+
return sql `LEFT JOIN LATERAL (${subquery}) AS ${alias} ON true`;
|
|
61
|
+
}
|
|
62
|
+
buildSelectQuery(params) {
|
|
63
|
+
const { table, select, distinct, where, order, limit, offset, join } = params;
|
|
64
|
+
const query = sql `SELECT`;
|
|
65
|
+
if (distinct) {
|
|
66
|
+
query.append(sql ` DISTINCT`);
|
|
67
|
+
}
|
|
68
|
+
const selection = this._getSelection(select, join?.map(({ alias }) => alias) ?? []);
|
|
69
|
+
query.append(sql ` ${selection} FROM ${table}`);
|
|
70
|
+
if (join) {
|
|
71
|
+
for (const joinEntry of join) {
|
|
72
|
+
const joinNode = this._buildLateralJoin(joinEntry);
|
|
73
|
+
query.append(sql ` ${joinNode}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (where) {
|
|
77
|
+
query.append(sql ` WHERE ${where}`);
|
|
78
|
+
}
|
|
79
|
+
if (order && order.length > 0) {
|
|
80
|
+
query.append(sql ` ORDER BY ${sql.join(order, ", ")}`);
|
|
81
|
+
}
|
|
82
|
+
if (limit !== undefined) {
|
|
83
|
+
query.append(sql ` LIMIT ${sql.param(limit)}`);
|
|
84
|
+
}
|
|
85
|
+
if (offset !== undefined) {
|
|
86
|
+
query.append(sql ` OFFSET ${sql.param(offset)}`);
|
|
87
|
+
}
|
|
88
|
+
return query;
|
|
89
|
+
}
|
|
90
|
+
buildInsertQuery(params) {
|
|
91
|
+
const { table, columns, values, return: returning } = params;
|
|
92
|
+
const query = sql `INSERT INTO ${table} (${sql.join(columns, ", ")})`;
|
|
93
|
+
const rows = values.map((row) => sql.wrap(sql.join(row, ", ")));
|
|
94
|
+
query.append(sql ` VALUES ${sql.join(rows, ", ")}`);
|
|
95
|
+
if (returning) {
|
|
96
|
+
query.append(sql ` RETURNING ${sql.join(returning, ", ")}`);
|
|
97
|
+
}
|
|
98
|
+
return query;
|
|
99
|
+
}
|
|
100
|
+
buildUpdateQuery(params) {
|
|
101
|
+
const { table, set, where, return: returning } = params;
|
|
102
|
+
const query = sql `UPDATE ${table}`;
|
|
103
|
+
const sets = set.map(([col, val]) => sql `${col} = ${val}`);
|
|
104
|
+
query.append(sql ` SET ${sql.join(sets, ", ")}`);
|
|
105
|
+
if (where) {
|
|
106
|
+
query.append(sql ` WHERE ${where}`);
|
|
107
|
+
}
|
|
108
|
+
if (returning) {
|
|
109
|
+
query.append(sql ` RETURNING ${sql.join(returning, ", ")}`);
|
|
110
|
+
}
|
|
111
|
+
return query;
|
|
112
|
+
}
|
|
113
|
+
buildDeleteQuery(params) {
|
|
114
|
+
const { table, where, return: returning } = params;
|
|
115
|
+
const query = sql `DELETE FROM ${table}`;
|
|
116
|
+
if (where) {
|
|
117
|
+
query.append(sql ` WHERE ${where}`);
|
|
118
|
+
}
|
|
119
|
+
if (returning) {
|
|
120
|
+
query.append(sql ` RETURNING ${sql.join(returning, ", ")}`);
|
|
121
|
+
}
|
|
122
|
+
return query;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/runtime/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { TypedObject, Prettify } from "../utils/index.js";
|
|
2
|
+
import { AnyTableRelations, DefinitionSchema, TableDefinition } from "../definition/index.js";
|
|
3
|
+
import { AnySchema, Schema, SchemaTableRelations } from "./base.js";
|
|
4
|
+
import { AnyTable, Table } from "./table.js";
|
|
5
|
+
export type RuntimeTables<TSchema extends AnySchema> = {
|
|
6
|
+
[K in keyof TSchema["tables"]]: TSchema["tables"][K] extends TableDefinition<infer Name, infer Columns, infer Schema> ? Table<Name, Columns, Schema, SchemaTableRelations<TSchema, Name>> : never;
|
|
7
|
+
};
|
|
8
|
+
export type TableByAlias<TSchema extends AnySchema, TAlias extends string> = TAlias extends keyof TSchema["tables"] ? TSchema["tables"][TAlias] extends TableDefinition<infer Name, infer Columns, infer Schema> ? Table<Name, Columns, Schema, SchemaTableRelations<TSchema, Name>> : never : never;
|
|
9
|
+
export type TableByName<TSchema extends AnySchema, TName extends string> = TSchema["tables"] extends Record<string, infer Def> ? Def extends TableDefinition<TName, infer Columns, infer Schema> ? Table<TName, Columns, Schema, SchemaTableRelations<TSchema, TName>> : never : never;
|
|
10
|
+
export type TableByNameOrAlias<TSchema extends AnySchema, TName extends string> = keyof TSchema["tables"] extends never ? AnyTable : TableByAlias<TSchema, TName> extends never ? TableByName<TSchema, TName> : TableByAlias<TSchema, TName>;
|
|
11
|
+
export declare class SchemaRegistry<TDefinition extends DefinitionSchema = DefinitionSchema> implements TypedObject<Schema<TDefinition>> {
|
|
12
|
+
readonly __type: Schema<TDefinition>;
|
|
13
|
+
private _tables;
|
|
14
|
+
private _relations;
|
|
15
|
+
constructor(definition: TDefinition);
|
|
16
|
+
private _mergeTableRelations;
|
|
17
|
+
private _validateAndTransformSchema;
|
|
18
|
+
private _buildTables;
|
|
19
|
+
private _buildRelations;
|
|
20
|
+
getTable<TName extends string>(aliasOrName: TName): TableByNameOrAlias<this["__type"], TName>;
|
|
21
|
+
hasTable(aliasOrName: string): boolean;
|
|
22
|
+
getTables(): Prettify<RuntimeTables<this["__type"]>>;
|
|
23
|
+
hasRelations(tableNameOrAlias: string): boolean;
|
|
24
|
+
getRelations(tableNameOrAlias: string): AnyTableRelations;
|
|
25
|
+
getRelationTarget(tableNameOrAlias: string, field: string): TableByNameOrAlias<this["__type"], any>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/runtime/registry.ts"],"names":[],"mappings":"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"}
|