@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.
Files changed (201) hide show
  1. package/dist/client/base.d.ts +9 -0
  2. package/dist/client/base.d.ts.map +1 -0
  3. package/dist/client/base.js +13 -0
  4. package/dist/client/base.js.map +1 -0
  5. package/dist/client/database.d.ts +5 -0
  6. package/dist/client/database.d.ts.map +1 -0
  7. package/dist/client/database.js +8 -0
  8. package/dist/client/database.js.map +1 -0
  9. package/dist/client/model.d.ts +19 -0
  10. package/dist/client/model.d.ts.map +1 -0
  11. package/dist/client/model.js +12 -0
  12. package/dist/client/model.js.map +1 -0
  13. package/dist/definition/base.d.ts +49 -0
  14. package/dist/definition/base.d.ts.map +1 -0
  15. package/dist/definition/base.js +54 -0
  16. package/dist/definition/base.js.map +1 -0
  17. package/dist/definition/column.d.ts +74 -0
  18. package/dist/definition/column.d.ts.map +1 -0
  19. package/dist/definition/column.js +94 -0
  20. package/dist/definition/column.js.map +1 -0
  21. package/dist/definition/constraint.d.ts +69 -0
  22. package/dist/definition/constraint.d.ts.map +1 -0
  23. package/dist/definition/constraint.js +79 -0
  24. package/dist/definition/constraint.js.map +1 -0
  25. package/dist/definition/domain.d.ts +39 -0
  26. package/dist/definition/domain.d.ts.map +1 -0
  27. package/dist/definition/domain.js +48 -0
  28. package/dist/definition/domain.js.map +1 -0
  29. package/dist/definition/index.d.ts +11 -0
  30. package/dist/definition/index.d.ts.map +1 -0
  31. package/dist/definition/index.js +11 -0
  32. package/dist/definition/index.js.map +1 -0
  33. package/dist/definition/indexes.d.ts +64 -0
  34. package/dist/definition/indexes.d.ts.map +1 -0
  35. package/dist/definition/indexes.js +84 -0
  36. package/dist/definition/indexes.js.map +1 -0
  37. package/dist/definition/namespace.d.ts +14 -0
  38. package/dist/definition/namespace.d.ts.map +1 -0
  39. package/dist/definition/namespace.js +15 -0
  40. package/dist/definition/namespace.js.map +1 -0
  41. package/dist/definition/relations.d.ts +53 -0
  42. package/dist/definition/relations.d.ts.map +1 -0
  43. package/dist/definition/relations.js +40 -0
  44. package/dist/definition/relations.js.map +1 -0
  45. package/dist/definition/schema.d.ts +14 -0
  46. package/dist/definition/schema.d.ts.map +1 -0
  47. package/dist/definition/schema.js +15 -0
  48. package/dist/definition/schema.js.map +1 -0
  49. package/dist/definition/sequence.d.ts +32 -0
  50. package/dist/definition/sequence.d.ts.map +1 -0
  51. package/dist/definition/sequence.js +59 -0
  52. package/dist/definition/sequence.js.map +1 -0
  53. package/dist/definition/table.d.ts +66 -0
  54. package/dist/definition/table.d.ts.map +1 -0
  55. package/dist/definition/table.js +59 -0
  56. package/dist/definition/table.js.map +1 -0
  57. package/dist/definition/view.d.ts +9 -0
  58. package/dist/definition/view.d.ts.map +1 -0
  59. package/dist/definition/view.js +11 -0
  60. package/dist/definition/view.js.map +1 -0
  61. package/dist/driver/codec.d.ts +13 -0
  62. package/dist/driver/codec.d.ts.map +1 -0
  63. package/dist/driver/codec.js +15 -0
  64. package/dist/driver/codec.js.map +1 -0
  65. package/dist/driver/index.d.ts +3 -0
  66. package/dist/driver/index.d.ts.map +1 -0
  67. package/dist/driver/index.js +2 -0
  68. package/dist/driver/index.js.map +1 -0
  69. package/dist/driver/session.d.ts +23 -0
  70. package/dist/driver/session.d.ts.map +1 -0
  71. package/dist/driver/session.js +2 -0
  72. package/dist/driver/session.js.map +1 -0
  73. package/dist/execution/column.d.ts +17 -0
  74. package/dist/execution/column.d.ts.map +1 -0
  75. package/dist/execution/column.js +23 -0
  76. package/dist/execution/column.js.map +1 -0
  77. package/dist/execution/context.d.ts +19 -0
  78. package/dist/execution/context.d.ts.map +1 -0
  79. package/dist/execution/context.js +14 -0
  80. package/dist/execution/context.js.map +1 -0
  81. package/dist/execution/dialect.d.ts +75 -0
  82. package/dist/execution/dialect.d.ts.map +1 -0
  83. package/dist/execution/dialect.js +123 -0
  84. package/dist/execution/dialect.js.map +1 -0
  85. package/dist/execution/index.d.ts +8 -0
  86. package/dist/execution/index.d.ts.map +1 -0
  87. package/dist/execution/index.js +7 -0
  88. package/dist/execution/index.js.map +1 -0
  89. package/dist/execution/operation.d.ts +140 -0
  90. package/dist/execution/operation.d.ts.map +1 -0
  91. package/dist/execution/operation.js +303 -0
  92. package/dist/execution/operation.js.map +1 -0
  93. package/dist/execution/schema.d.ts +38 -0
  94. package/dist/execution/schema.d.ts.map +1 -0
  95. package/dist/execution/schema.js +104 -0
  96. package/dist/execution/schema.js.map +1 -0
  97. package/dist/execution/table.d.ts +107 -0
  98. package/dist/execution/table.d.ts.map +1 -0
  99. package/dist/execution/table.js +46 -0
  100. package/dist/execution/table.js.map +1 -0
  101. package/dist/execution/thenable.d.ts +7 -0
  102. package/dist/execution/thenable.d.ts.map +1 -0
  103. package/dist/execution/thenable.js +12 -0
  104. package/dist/execution/thenable.js.map +1 -0
  105. package/dist/execution/types.d.ts +42 -0
  106. package/dist/execution/types.d.ts.map +1 -0
  107. package/dist/execution/types.js +2 -0
  108. package/dist/execution/types.js.map +1 -0
  109. package/dist/index.d.ts +4 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +4 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/runtime/base.d.ts +29 -0
  114. package/dist/runtime/base.d.ts.map +1 -0
  115. package/dist/runtime/base.js +3 -0
  116. package/dist/runtime/base.js.map +1 -0
  117. package/dist/runtime/column.d.ts +18 -0
  118. package/dist/runtime/column.d.ts.map +1 -0
  119. package/dist/runtime/column.js +24 -0
  120. package/dist/runtime/column.js.map +1 -0
  121. package/dist/runtime/context.d.ts +21 -0
  122. package/dist/runtime/context.d.ts.map +1 -0
  123. package/dist/runtime/context.js +14 -0
  124. package/dist/runtime/context.js.map +1 -0
  125. package/dist/runtime/dialect.d.ts +42 -0
  126. package/dist/runtime/dialect.d.ts.map +1 -0
  127. package/dist/runtime/dialect.js +2 -0
  128. package/dist/runtime/dialect.js.map +1 -0
  129. package/dist/runtime/executor.d.ts +12 -0
  130. package/dist/runtime/executor.d.ts.map +1 -0
  131. package/dist/runtime/executor.js +18 -0
  132. package/dist/runtime/executor.js.map +1 -0
  133. package/dist/runtime/index.d.ts +10 -0
  134. package/dist/runtime/index.d.ts.map +1 -0
  135. package/dist/runtime/index.js +8 -0
  136. package/dist/runtime/index.js.map +1 -0
  137. package/dist/runtime/operation.d.ts +82 -0
  138. package/dist/runtime/operation.d.ts.map +1 -0
  139. package/dist/runtime/operation.js +236 -0
  140. package/dist/runtime/operation.js.map +1 -0
  141. package/dist/runtime/query.d.ts +77 -0
  142. package/dist/runtime/query.d.ts.map +1 -0
  143. package/dist/runtime/query.js +125 -0
  144. package/dist/runtime/query.js.map +1 -0
  145. package/dist/runtime/registry.d.ts +27 -0
  146. package/dist/runtime/registry.d.ts.map +1 -0
  147. package/dist/runtime/registry.js +106 -0
  148. package/dist/runtime/registry.js.map +1 -0
  149. package/dist/runtime/session.d.ts +23 -0
  150. package/dist/runtime/session.d.ts.map +1 -0
  151. package/dist/runtime/session.js +2 -0
  152. package/dist/runtime/session.js.map +1 -0
  153. package/dist/runtime/table.d.ts +34 -0
  154. package/dist/runtime/table.d.ts.map +1 -0
  155. package/dist/runtime/table.js +46 -0
  156. package/dist/runtime/table.js.map +1 -0
  157. package/dist/sql/expressions.d.ts +25 -0
  158. package/dist/sql/expressions.d.ts.map +1 -0
  159. package/dist/sql/expressions.js +79 -0
  160. package/dist/sql/expressions.js.map +1 -0
  161. package/dist/sql/index.d.ts +4 -0
  162. package/dist/sql/index.d.ts.map +1 -0
  163. package/dist/sql/index.js +4 -0
  164. package/dist/sql/index.js.map +1 -0
  165. package/dist/sql/nodes.d.ts +49 -0
  166. package/dist/sql/nodes.d.ts.map +1 -0
  167. package/dist/sql/nodes.js +102 -0
  168. package/dist/sql/nodes.js.map +1 -0
  169. package/dist/sql/tag.d.ts +13 -0
  170. package/dist/sql/tag.d.ts.map +1 -0
  171. package/dist/sql/tag.js +32 -0
  172. package/dist/sql/tag.js.map +1 -0
  173. package/dist/sql/utils.d.ts +7 -0
  174. package/dist/sql/utils.d.ts.map +1 -0
  175. package/dist/sql/utils.js +15 -0
  176. package/dist/sql/utils.js.map +1 -0
  177. package/dist/types/index.d.ts +3 -0
  178. package/dist/types/index.d.ts.map +1 -0
  179. package/dist/types/index.js +2 -0
  180. package/dist/types/index.js.map +1 -0
  181. package/dist/types/object.d.ts +29 -0
  182. package/dist/types/object.d.ts.map +1 -0
  183. package/dist/types/object.js +2 -0
  184. package/dist/types/object.js.map +1 -0
  185. package/dist/types/prettify.d.ts +5 -0
  186. package/dist/types/prettify.d.ts.map +1 -0
  187. package/dist/types/prettify.js +3 -0
  188. package/dist/types/prettify.js.map +1 -0
  189. package/dist/utils/index.d.ts +3 -0
  190. package/dist/utils/index.d.ts.map +1 -0
  191. package/dist/utils/index.js +2 -0
  192. package/dist/utils/index.js.map +1 -0
  193. package/dist/utils/thenable.d.ts +7 -0
  194. package/dist/utils/thenable.d.ts.map +1 -0
  195. package/dist/utils/thenable.js +12 -0
  196. package/dist/utils/thenable.js.map +1 -0
  197. package/dist/utils/types.d.ts +46 -0
  198. package/dist/utils/types.d.ts.map +1 -0
  199. package/dist/utils/types.js +2 -0
  200. package/dist/utils/types.js.map +1 -0
  201. 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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"}