rado 0.1.53 → 0.1.55

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 (150) hide show
  1. package/dist/define/Column.d.ts +58 -58
  2. package/dist/define/Cursor.d.ts +86 -85
  3. package/dist/define/Cursor.js +3 -0
  4. package/dist/define/Expr.d.ts +154 -154
  5. package/dist/define/Fields.d.ts +13 -13
  6. package/dist/define/Functions.d.ts +5 -5
  7. package/dist/define/Id.d.ts +3 -3
  8. package/dist/define/Index.d.ts +17 -17
  9. package/dist/define/Ops.d.ts +7 -7
  10. package/dist/define/OrderBy.d.ts +9 -9
  11. package/dist/define/Param.d.ts +15 -15
  12. package/dist/define/Query.d.ts +109 -109
  13. package/dist/define/Schema.d.ts +18 -18
  14. package/dist/define/Selection.d.ts +20 -20
  15. package/dist/define/Table.d.ts +62 -62
  16. package/dist/define/Target.d.ts +38 -38
  17. package/dist/define/Update.d.ts +4 -4
  18. package/dist/driver/better-sqlite3.d.ts +15 -15
  19. package/dist/driver/bun-sqlite.d.ts +18 -18
  20. package/dist/driver/sql.js.d.ts +15 -15
  21. package/dist/driver/sqlite3.d.ts +18 -18
  22. package/dist/index.d.ts +21 -21
  23. package/dist/lib/Driver.d.ts +110 -110
  24. package/dist/lib/Driver.js +2 -2
  25. package/dist/lib/Formatter.d.ts +78 -78
  26. package/dist/lib/Formatter.js +5 -7
  27. package/dist/lib/Sanitizer.d.ts +5 -5
  28. package/dist/lib/SqlError.d.ts +3 -3
  29. package/dist/lib/Statement.d.ts +33 -33
  30. package/dist/sqlite/SqliteFormatter.d.ts +11 -11
  31. package/dist/sqlite/SqliteFunctions.d.ts +165 -165
  32. package/dist/sqlite/SqliteSchema.d.ts +25 -25
  33. package/dist/sqlite.d.ts +2 -2
  34. package/package.json +60 -60
  35. package/dist/CPU.20230126.092143.12244.0.001.cpuprofile +0 -1
  36. package/dist/Column.d.ts +0 -54
  37. package/dist/Column.js +0 -63
  38. package/dist/Cursor.d.ts +0 -77
  39. package/dist/Cursor.js +0 -221
  40. package/dist/Driver.d.ts +0 -89
  41. package/dist/Driver.js +0 -262
  42. package/dist/Expr.d.ts +0 -149
  43. package/dist/Expr.js +0 -284
  44. package/dist/Fields.d.ts +0 -11
  45. package/dist/Fields.js +0 -0
  46. package/dist/Formatter.d.ts +0 -55
  47. package/dist/Formatter.js +0 -496
  48. package/dist/Functions.d.ts +0 -7
  49. package/dist/Functions.js +0 -11
  50. package/dist/Id.d.ts +0 -3
  51. package/dist/Id.js +0 -0
  52. package/dist/Ops.d.ts +0 -8
  53. package/dist/Ops.js +0 -45
  54. package/dist/OrderBy.d.ts +0 -9
  55. package/dist/OrderBy.js +0 -9
  56. package/dist/Param.d.ts +0 -15
  57. package/dist/Param.js +0 -18
  58. package/dist/Query.d.ts +0 -107
  59. package/dist/Query.js +0 -74
  60. package/dist/Sanitizer.d.ts +0 -4
  61. package/dist/Sanitizer.js +0 -0
  62. package/dist/Schema.d.ts +0 -23
  63. package/dist/Schema.js +0 -60
  64. package/dist/Selection.d.ts +0 -20
  65. package/dist/Selection.js +0 -7
  66. package/dist/Statement.d.ts +0 -57
  67. package/dist/Statement.js +0 -184
  68. package/dist/Table.d.ts +0 -56
  69. package/dist/Table.js +0 -104
  70. package/dist/Target.d.ts +0 -30
  71. package/dist/Target.js +0 -37
  72. package/dist/Update.d.ts +0 -4
  73. package/dist/Update.js +0 -0
  74. package/dist/lib/Column.d.ts +0 -57
  75. package/dist/lib/Column.js +0 -63
  76. package/dist/lib/Cursor.d.ts +0 -79
  77. package/dist/lib/Cursor.js +0 -231
  78. package/dist/lib/Expr.d.ts +0 -154
  79. package/dist/lib/Expr.js +0 -284
  80. package/dist/lib/Fields.d.ts +0 -13
  81. package/dist/lib/Fields.js +0 -0
  82. package/dist/lib/Functions.d.ts +0 -5
  83. package/dist/lib/Functions.js +0 -11
  84. package/dist/lib/Id.d.ts +0 -3
  85. package/dist/lib/Id.js +0 -0
  86. package/dist/lib/Index.d.ts +0 -17
  87. package/dist/lib/Index.js +0 -20
  88. package/dist/lib/Ops.d.ts +0 -8
  89. package/dist/lib/Ops.js +0 -45
  90. package/dist/lib/OrderBy.d.ts +0 -9
  91. package/dist/lib/OrderBy.js +0 -9
  92. package/dist/lib/Param.d.ts +0 -20
  93. package/dist/lib/Param.js +0 -27
  94. package/dist/lib/Query.d.ts +0 -109
  95. package/dist/lib/Query.js +0 -74
  96. package/dist/lib/Schema.d.ts +0 -18
  97. package/dist/lib/Schema.js +0 -67
  98. package/dist/lib/Selection.d.ts +0 -20
  99. package/dist/lib/Selection.js +0 -7
  100. package/dist/lib/Table.d.ts +0 -62
  101. package/dist/lib/Table.js +0 -130
  102. package/dist/lib/Target.d.ts +0 -30
  103. package/dist/lib/Target.js +0 -37
  104. package/dist/lib/Update.d.ts +0 -4
  105. package/dist/lib/Update.js +0 -0
  106. package/dist/sqlite/index.d.ts +0 -2
  107. package/dist/sqlite/index.js +0 -3
  108. package/dist/src/driver/better-sqlite3.js +0 -49
  109. package/dist/src/driver/sql.js.js +0 -66
  110. package/dist/src/driver/sqlite3.js +0 -87
  111. package/dist/src/index.js +0 -24
  112. package/dist/src/lib/Column.js +0 -63
  113. package/dist/src/lib/Cursor.js +0 -231
  114. package/dist/src/lib/Driver.js +0 -316
  115. package/dist/src/lib/Expr.js +0 -284
  116. package/dist/src/lib/Fields.js +0 -0
  117. package/dist/src/lib/Formatter.js +0 -625
  118. package/dist/src/lib/Functions.js +0 -11
  119. package/dist/src/lib/Id.js +0 -0
  120. package/dist/src/lib/Index.js +0 -20
  121. package/dist/src/lib/Ops.js +0 -45
  122. package/dist/src/lib/OrderBy.js +0 -9
  123. package/dist/src/lib/Param.js +0 -27
  124. package/dist/src/lib/Query.js +0 -74
  125. package/dist/src/lib/Sanitizer.js +0 -0
  126. package/dist/src/lib/Schema.js +0 -67
  127. package/dist/src/lib/Selection.js +0 -7
  128. package/dist/src/lib/Statement.js +0 -103
  129. package/dist/src/lib/Table.js +0 -130
  130. package/dist/src/lib/Target.js +0 -37
  131. package/dist/src/lib/Update.js +0 -0
  132. package/dist/src/sqlite/SqliteFormatter.js +0 -67
  133. package/dist/src/sqlite/SqliteFunctions.js +0 -146
  134. package/dist/src/sqlite/SqliteSchema.js +0 -47
  135. package/dist/src/sqlite.js +0 -3
  136. package/dist/test/DbSuite.js +0 -28
  137. package/dist/test/TSTestTypes.js +0 -6
  138. package/dist/test/TestBasic.js +0 -172
  139. package/dist/test/TestExtend.js +0 -68
  140. package/dist/test/TestFts5.js +0 -34
  141. package/dist/test/TestFunctions.js +0 -28
  142. package/dist/test/TestJoins.js +0 -34
  143. package/dist/test/TestJson.js +0 -33
  144. package/dist/test/TestPrepare.js +0 -27
  145. package/dist/test/TestRawSql.js +0 -31
  146. package/dist/test/TestSchema.js +0 -69
  147. package/dist/test/TestSubQueries.js +0 -79
  148. package/dist/test/TestTransaction.js +0 -54
  149. package/dist/test/TestUpdate.js +0 -95
  150. package/dist/test/index.js +0 -14
package/dist/Formatter.js DELETED
@@ -1,496 +0,0 @@
1
- // src/Formatter.ts
2
- import { ColumnType } from "./Column.js";
3
- import { BinOp, ExprData, ExprType, UnOp } from "./Expr.js";
4
- import { OrderDirection } from "./OrderBy.js";
5
- import { ParamType } from "./Param.js";
6
- import { Query, QueryType } from "./Query.js";
7
- import {
8
- Statement,
9
- call,
10
- identifier,
11
- newline,
12
- parenthesis,
13
- raw,
14
- separated,
15
- value
16
- } from "./Statement.js";
17
- import { Target, TargetType } from "./Target.js";
18
- var binOps = {
19
- [BinOp.Add]: "+",
20
- [BinOp.Subt]: "-",
21
- [BinOp.Mult]: "*",
22
- [BinOp.Mod]: "%",
23
- [BinOp.Div]: "/",
24
- [BinOp.Greater]: ">",
25
- [BinOp.GreaterOrEqual]: ">=",
26
- [BinOp.Less]: "<",
27
- [BinOp.LessOrEqual]: "<=",
28
- [BinOp.Equals]: "=",
29
- [BinOp.NotEquals]: "!=",
30
- [BinOp.And]: "and",
31
- [BinOp.Or]: "or",
32
- [BinOp.Like]: "like",
33
- [BinOp.Glob]: "glob",
34
- [BinOp.Match]: "match",
35
- [BinOp.In]: "in",
36
- [BinOp.NotIn]: "not in",
37
- [BinOp.Concat]: "||"
38
- };
39
- var joins = {
40
- left: "left",
41
- inner: "inner"
42
- };
43
- var Formatter = class {
44
- constructor() {
45
- }
46
- formatAccess(on, field, formatAsJson) {
47
- return formatAsJson ? this.formatJsonAccess(on, field) : this.formatSqlAccess(on, field);
48
- }
49
- compile(query, formatInline = false) {
50
- const result = this.format(query, {
51
- formatSubject: (select) => call("json_object", raw("'result'"), select),
52
- nameResult: "result"
53
- }).compile(this, formatInline);
54
- return result;
55
- }
56
- format(query, ctx = {}) {
57
- switch (query.type) {
58
- case QueryType.Select:
59
- return this.formatSelect(query, ctx);
60
- case QueryType.Insert:
61
- return this.formatInsert(query, ctx);
62
- case QueryType.Update:
63
- return this.formatUpdate(query, ctx);
64
- case QueryType.Delete:
65
- return this.formatDelete(query, ctx);
66
- case QueryType.CreateTable:
67
- return this.formatCreateTable(query, ctx);
68
- case QueryType.CreateIndex:
69
- return this.formatCreateIndex(query, ctx);
70
- case QueryType.DropIndex:
71
- return this.formatDropIndex(query, ctx);
72
- case QueryType.AlterTable:
73
- return this.formatAlterTable(query, ctx);
74
- case QueryType.Transaction:
75
- return this.formatTransaction(query, ctx);
76
- case QueryType.Batch:
77
- return this.formatBatch(query.queries, ctx);
78
- case QueryType.Raw:
79
- return this.formatRaw(query, ctx);
80
- }
81
- }
82
- formatSelect(query, ctx) {
83
- return raw("select").add(this.formatSelection(query.selection, ctx)).addLine("from").add(this.formatTarget(query.from, ctx)).add(this.formatWhere(query.where, ctx)).add(this.formatGroupBy(query.groupBy, ctx)).add(this.formatHaving(query.having, ctx)).add(this.formatOrderBy(query.orderBy, ctx)).add(this.formatLimit(query, ctx));
84
- }
85
- formatInsert(query, ctx) {
86
- const columns = Object.values(query.into.columns);
87
- return raw("insert into").addCall(
88
- query.into.name,
89
- ...columns.map((column) => this.formatString(column.name))
90
- ).add("values").addSeparated(
91
- query.data.map((row) => this.formatInsertRow(query.into.columns, row))
92
- ).addIf(
93
- query.selection,
94
- () => raw("returning").add(this.formatSelection(query.selection, ctx))
95
- );
96
- }
97
- formatUpdate(query, ctx) {
98
- const data = query.set || {};
99
- return raw("update").addIdentifier(query.table.name).add("set").addSeparated(
100
- Object.keys(data).map((key) => {
101
- const column = query.table.columns[key];
102
- const exprData = data[key];
103
- return identifier(key).add("=").add(
104
- this.formatExpr(ExprData.create(data[key]), {
105
- ...ctx,
106
- formatAsJson: true
107
- })
108
- );
109
- })
110
- ).add(this.formatWhere(query.where, ctx)).add(this.formatLimit(query, ctx));
111
- }
112
- formatDelete(query, ctx) {
113
- return raw("delete from").addIdentifier(query.table.name).add(this.formatWhere(query.where, ctx)).add(this.formatLimit(query, ctx));
114
- }
115
- formatCreateTable(query, ctx) {
116
- return raw("create table").addIf(query.ifNotExists, "if not exists").addCall(
117
- query.table.name,
118
- ...Object.values(query.table.columns).map((column) => {
119
- return this.formatColumn(column);
120
- })
121
- );
122
- }
123
- formatCreateIndex(query, ctx = {}) {
124
- return raw("create index").addIf(query.ifNotExists, "if not exists").addIdentifier(query.index.name).add("on").addIdentifier(query.table.name).parenthesis(
125
- separated(
126
- query.index.on.map(
127
- (expr) => this.formatExprValue(expr, { ...ctx, skipTableName: true })
128
- )
129
- )
130
- ).add(this.formatWhere(query.where, ctx));
131
- }
132
- formatDropIndex(query, ctx) {
133
- return raw("drop index").addIf(query.ifExists, "if exists").addIdentifier(query.name);
134
- }
135
- formatAlterTable(query, ctx) {
136
- let stmt = raw("alter table").addIdentifier(query.table.name);
137
- if (query.addColumn) {
138
- stmt = stmt.add("add column").add(this.formatColumn(query.addColumn));
139
- } else if (query.dropColumn) {
140
- stmt = stmt.add("drop column").addIdentifier(query.dropColumn);
141
- } else if (query.alterColumn) {
142
- throw new Error(`Not available in this formatter: alter column`);
143
- }
144
- return stmt;
145
- }
146
- formatTransaction({ op, id }, ctx) {
147
- switch (op) {
148
- case Query.TransactionOperation.Begin:
149
- return raw("savepoint").addIdentifier(id);
150
- case Query.TransactionOperation.Commit:
151
- return raw("release").addIdentifier(id);
152
- case Query.TransactionOperation.Rollback:
153
- return raw("rollback to").addIdentifier(id);
154
- }
155
- }
156
- formatBatch(queries, ctx) {
157
- return separated(
158
- queries.map((query) => this.format(query, ctx)),
159
- "; "
160
- );
161
- }
162
- formatRaw({ strings, params }, ctx) {
163
- return Statement.tag(strings, ...params);
164
- }
165
- formatColumn(column) {
166
- return identifier(column.name).add(this.formatType(column.type)).addIf(column.unique, "unique").addIf(column.autoIncrement, "autoincrement").addIf(column.primaryKey, "primary key").addIf(!column.nullable, "not null").addIf(
167
- column.defaultValue !== void 0,
168
- raw("default").add(this.formatInlineValue(column.defaultValue))
169
- ).addIf(column.references, () => {
170
- return this.formatContraintReference(column.references);
171
- });
172
- }
173
- formatContraintReference(reference) {
174
- if (reference.type !== ExprType.Field || reference.expr.type !== ExprType.Row)
175
- throw new Error("not supported");
176
- const from = reference.expr.target;
177
- return raw("references").addIdentifier(Target.source(from).name).parenthesis(identifier(reference.field));
178
- }
179
- formatType(type) {
180
- switch (type) {
181
- case ColumnType.String:
182
- return raw("text");
183
- case ColumnType.Json:
184
- return raw("json");
185
- case ColumnType.Number:
186
- return raw("numeric");
187
- case ColumnType.Boolean:
188
- return raw("boolean");
189
- case ColumnType.Integer:
190
- return raw("integer");
191
- }
192
- }
193
- formatInsertRow(columns, row) {
194
- return parenthesis(
195
- separated(
196
- Object.entries(columns).map(([property, column]) => {
197
- const columnValue = row[property];
198
- return this.formatColumnValue(column, columnValue);
199
- })
200
- )
201
- );
202
- }
203
- formatColumnValue(column, columnValue) {
204
- const isNull = columnValue === void 0 || columnValue === null;
205
- const isOptional = column.nullable || column.autoIncrement || column.primaryKey || column.defaultValue;
206
- if (isNull) {
207
- if (!isOptional)
208
- throw new TypeError(`Expected value for column ${column.name}`);
209
- return raw("null");
210
- }
211
- switch (column.type) {
212
- case ColumnType.String:
213
- if (typeof columnValue !== "string")
214
- throw new TypeError(`Expected string for column ${column.name}`);
215
- return value(columnValue);
216
- case ColumnType.Integer:
217
- case ColumnType.Number:
218
- if (typeof columnValue !== "number")
219
- throw new TypeError(`Expected number for column ${column.name}`);
220
- return value(columnValue);
221
- case ColumnType.Boolean:
222
- if (typeof columnValue !== "boolean")
223
- throw new TypeError(`Expected boolean for column ${column.name}`);
224
- return value(columnValue);
225
- case ColumnType.Json:
226
- if (typeof columnValue !== "object")
227
- throw new TypeError(`Expected object for column ${column.name}`);
228
- return value(JSON.stringify(columnValue));
229
- }
230
- }
231
- formatTarget(target, ctx) {
232
- switch (target.type) {
233
- case TargetType.Table:
234
- return identifier(target.table.name).addIf(
235
- target.table.alias,
236
- () => raw("as").addIdentifier(target.table.alias)
237
- );
238
- case TargetType.Join:
239
- const { left, right, joinType } = target;
240
- return this.formatTarget(left, ctx).addLine(joins[joinType]).add("join").add(this.formatTarget(right, ctx)).add("on").add(this.formatExprValue(target.on, ctx));
241
- default:
242
- throw new Error(`Cannot format target of type ${target.type}`);
243
- }
244
- }
245
- formatWhere(expr, ctx) {
246
- if (!expr)
247
- return;
248
- return newline().raw("where").add(this.formatExprValue(expr, ctx));
249
- }
250
- formatHaving(expr, ctx) {
251
- if (!expr)
252
- return;
253
- return newline().raw("having").add(this.formatExprValue(expr, ctx));
254
- }
255
- formatGroupBy(groupBy, ctx) {
256
- if (!groupBy)
257
- return;
258
- return newline().raw("group by").addSeparated(groupBy.map((expr) => this.formatExprValue(expr, ctx)));
259
- }
260
- formatOrderBy(orderBy, ctx) {
261
- if (!orderBy)
262
- return;
263
- return newline().raw("order by").addSeparated(
264
- orderBy.map(
265
- ({ expr, order }) => this.formatExprValue(expr, ctx).add(
266
- order === OrderDirection.Asc ? "asc" : "desc"
267
- )
268
- )
269
- );
270
- }
271
- formatLimit({ limit, offset, singleResult }, ctx) {
272
- if (!limit && !offset && !singleResult)
273
- return;
274
- return newline().raw("limit").addValue(singleResult ? 1 : limit).addIf(offset && offset > 0, raw("offset").addValue(offset));
275
- }
276
- formatSelection(selection, ctx) {
277
- const { formatSubject } = ctx;
278
- const subject = this.formatExpr(selection, {
279
- ...ctx,
280
- formatSubject: void 0,
281
- formatAsJson: true
282
- });
283
- return (formatSubject ? formatSubject(subject) : subject).addIf(
284
- ctx.nameResult,
285
- raw("as").addIdentifier(ctx.nameResult)
286
- );
287
- }
288
- formatExprValue(expr, ctx) {
289
- return this.formatExpr(expr, { ...ctx, formatAsJson: false });
290
- }
291
- formatIn(expr, ctx) {
292
- switch (expr.type) {
293
- case ExprType.Field:
294
- return this.formatUnwrapArray(this.formatExprValue(expr, ctx));
295
- default:
296
- return this.formatExprValue(expr, ctx);
297
- }
298
- }
299
- formatUnwrapArray(stmt) {
300
- return parenthesis(raw("select value from").addCall("json_each", stmt));
301
- }
302
- retrieveField(expr, field) {
303
- switch (expr.type) {
304
- case ExprType.Record:
305
- return expr.fields[field];
306
- case ExprType.Merge:
307
- return this.retrieveField(expr.a, field) || this.retrieveField(expr.b, field);
308
- default:
309
- return void 0;
310
- }
311
- }
312
- formatField(expr, field, ctx) {
313
- const fieldExpr = this.retrieveField(expr, field);
314
- if (fieldExpr)
315
- return this.formatExpr(fieldExpr, ctx);
316
- switch (expr.type) {
317
- case ExprType.Row:
318
- switch (expr.target.type) {
319
- case TargetType.Table:
320
- const selection = ctx.skipTableName ? identifier(field) : identifier(expr.target.table.alias || expr.target.table.name).raw(".").identifier(field);
321
- const column = expr.target.table.columns[field];
322
- switch (column?.type) {
323
- case ColumnType.Json:
324
- return call("json", selection);
325
- default:
326
- return selection;
327
- }
328
- }
329
- default:
330
- return this.formatAccess(
331
- this.formatExpr(expr, { ...ctx, formatAsJson: true }),
332
- field,
333
- ctx.formatAsJson
334
- );
335
- }
336
- }
337
- formatString(input) {
338
- return raw(this.escapeValue(String(input)));
339
- }
340
- formatInlineValue(rawValue) {
341
- switch (true) {
342
- case (rawValue === null || rawValue === void 0):
343
- return raw("null");
344
- case typeof rawValue === "boolean":
345
- return rawValue ? raw("true") : raw("false");
346
- case (typeof rawValue === "string" || typeof rawValue === "number"):
347
- return this.formatString(rawValue);
348
- default:
349
- return this.formatString(JSON.stringify(rawValue));
350
- }
351
- }
352
- formatValue(rawValue, formatAsJson) {
353
- switch (true) {
354
- case (rawValue === null || rawValue === void 0):
355
- return raw("null");
356
- case (!formatAsJson && typeof rawValue === "boolean"):
357
- return rawValue ? raw("1") : raw("0");
358
- case Array.isArray(rawValue):
359
- const res = parenthesis(
360
- separated(rawValue.map((v) => this.formatValue(v, false)))
361
- );
362
- return formatAsJson ? raw("json_array").concat(res) : res;
363
- case (typeof rawValue === "string" || typeof rawValue === "number"):
364
- return value(rawValue);
365
- default:
366
- const expr = this.formatString(JSON.stringify(rawValue));
367
- if (formatAsJson)
368
- return call("json", expr);
369
- return expr;
370
- }
371
- }
372
- formatExpr(expr, ctx) {
373
- switch (expr.type) {
374
- case ExprType.UnOp:
375
- switch (expr.op) {
376
- case UnOp.IsNull:
377
- return this.formatExprValue(expr.expr, ctx).add("is null");
378
- case UnOp.Not:
379
- return raw("not").addParenthesis(
380
- this.formatExprValue(expr.expr, ctx)
381
- );
382
- }
383
- case ExprType.BinOp:
384
- return parenthesis(
385
- this.formatExprValue(expr.a, ctx).add(binOps[expr.op]).add(
386
- expr.op === BinOp.In || expr.op === BinOp.NotIn ? this.formatIn(expr.b, ctx) : this.formatExprValue(expr.b, ctx)
387
- )
388
- );
389
- case ExprType.Param:
390
- switch (expr.param.type) {
391
- case ParamType.Value:
392
- return this.formatValue(expr.param.value, ctx.formatAsJson);
393
- case ParamType.Named:
394
- throw new Error("todo");
395
- }
396
- case ExprType.Field:
397
- return this.formatField(expr.expr, expr.field, ctx);
398
- case ExprType.Call: {
399
- if (expr.method === "cast") {
400
- const [e, type] = expr.params;
401
- const typeName = type.type === ExprType.Param && type.param.type === ParamType.Value && type.param.value;
402
- return raw("cast").parenthesis(
403
- this.formatExprValue(e, ctx).add("as").add(this.formatString(typeName))
404
- );
405
- } else {
406
- const params = expr.params.map(
407
- (expr2) => this.formatExprValue(expr2, ctx)
408
- );
409
- return call(expr.method, ...params);
410
- }
411
- }
412
- case ExprType.Query:
413
- if (!ctx.formatAsJson)
414
- return parenthesis(this.format(expr.query, ctx));
415
- const subQuery = this.format(expr.query, { ...ctx, nameResult: "result" });
416
- if (expr.query.singleResult)
417
- return call("json", parenthesis(subQuery));
418
- return parenthesis(
419
- raw("select json_group_array(json(result))").newline().raw("from ").parenthesis(subQuery)
420
- );
421
- case ExprType.Row:
422
- switch (expr.target.type) {
423
- case TargetType.Table:
424
- const table = Target.source(expr.target);
425
- if (!table)
426
- throw new Error(`Cannot select empty target`);
427
- return this.formatExpr(
428
- ExprData.Record(
429
- Object.fromEntries(
430
- Object.entries(table.columns).map(([key, column]) => [
431
- key,
432
- ExprData.Field(ExprData.Row(expr.target), column.name)
433
- ])
434
- )
435
- ),
436
- ctx
437
- );
438
- case TargetType.Each:
439
- return identifier(expr.target.alias).raw(".value");
440
- default:
441
- throw new Error(`Cannot select from ${expr.target.type}`);
442
- }
443
- case ExprType.Merge:
444
- return call(
445
- "json_patch",
446
- this.formatExpr(expr.a, { ...ctx, formatAsJson: true }),
447
- this.formatExpr(expr.b, { ...ctx, formatAsJson: true })
448
- );
449
- case ExprType.Record:
450
- return call(
451
- "json_object",
452
- ...Object.entries(expr.fields).map(([key, value2]) => {
453
- return this.formatString(key).raw(", ").concat(this.formatExpr(value2, { ...ctx, formatAsJson: true }));
454
- })
455
- );
456
- case ExprType.Filter: {
457
- const { target, condition } = expr;
458
- switch (target.type) {
459
- case TargetType.Each:
460
- return parenthesis(
461
- raw("select json_group_array(json(result)) from").addParenthesis(
462
- raw("select value as result").add("from").addCall(
463
- "json_each",
464
- this.formatExpr(target.expr, { ...ctx, formatAsJson: true })
465
- ).add("as").addIdentifier(target.alias).add("where").add(this.formatExprValue(condition, ctx))
466
- )
467
- );
468
- default:
469
- throw new Error("todo");
470
- }
471
- }
472
- case ExprType.Map: {
473
- const { target, result } = expr;
474
- switch (target.type) {
475
- case TargetType.Each:
476
- return parenthesis(
477
- raw("select json_group_array(json(result)) from").addParenthesis(
478
- raw("select").add(this.formatExpr(result, { ...ctx, formatAsJson: true })).add("as").addIdentifier("result").add("from").addCall(
479
- "json_each",
480
- this.formatExpr(target.expr, { ...ctx, formatAsJson: true })
481
- ).add("as").addIdentifier(target.alias)
482
- )
483
- );
484
- default:
485
- throw new Error("todo");
486
- }
487
- }
488
- default:
489
- console.log(expr);
490
- throw new Error("todo");
491
- }
492
- }
493
- };
494
- export {
495
- Formatter
496
- };
@@ -1,7 +0,0 @@
1
- import { EV, Expr } from './Expr';
2
- export declare const Functions: Functions;
3
- /** These will have to be supported in every driver */
4
- export type Functions = {
5
- count(x?: Expr<any>): Expr<number>;
6
- iif<T>(x: EV<boolean>, y: EV<T>, z: EV<T>): Expr<T>;
7
- };
package/dist/Functions.js DELETED
@@ -1,11 +0,0 @@
1
- // src/Functions.ts
2
- import { Expr, ExprData } from "./Expr.js";
3
- function get(_, method) {
4
- return (...args) => {
5
- return new Expr(ExprData.Call(method, args.map(ExprData.create)));
6
- };
7
- }
8
- var Functions = new Proxy({}, { get });
9
- export {
10
- Functions
11
- };
package/dist/Id.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export type Id<T extends {
2
- id: any;
3
- }> = T['id'];
package/dist/Id.js DELETED
File without changes
package/dist/Ops.d.ts DELETED
@@ -1,8 +0,0 @@
1
- import { Cursor } from './Cursor';
2
- import { Table } from './Table';
3
- export declare function selectAll<Row>(table: Table<Row>): Cursor.SelectMultiple<Row>;
4
- export declare function selectFirst<Row>(table: Table<Row>): Cursor.SelectSingle<Row>;
5
- export declare function update<Row>(table: Table<Row>): Cursor.Update<Row>;
6
- export declare function insertInto<Row>(table: Table<Row>): Cursor.Insert<Row>;
7
- export declare function deleteFrom<Row>(table: Table<Row>): Cursor.Delete<Row>;
8
- export declare function create(...tables: Array<Table<any>>): Cursor.Batch;
package/dist/Ops.js DELETED
@@ -1,45 +0,0 @@
1
- // src/Ops.ts
2
- import { Cursor } from "./Cursor.js";
3
- import { ExprData } from "./Expr.js";
4
- import { Query } from "./Query.js";
5
- import { Schema } from "./Schema.js";
6
- import { Target } from "./Target.js";
7
- function selectAll(table) {
8
- return new Cursor.SelectMultiple(
9
- Query.Select({
10
- from: Target.Table(table.schema()),
11
- selection: ExprData.Row(Target.Table(table.schema()))
12
- })
13
- );
14
- }
15
- function selectFirst(table) {
16
- return new Cursor.SelectSingle(
17
- Query.Select({
18
- from: Target.Table(table.schema()),
19
- selection: ExprData.Row(Target.Table(table.schema())),
20
- singleResult: true
21
- })
22
- );
23
- }
24
- function update(table) {
25
- return new Cursor.Update(Query.Update({ table: table.schema() }));
26
- }
27
- function insertInto(table) {
28
- return new Cursor.Insert(table.schema());
29
- }
30
- function deleteFrom(table) {
31
- return new Cursor.Delete(Query.Delete({ table: table.schema() }));
32
- }
33
- function create(...tables) {
34
- return new Cursor.Batch(
35
- tables.flatMap((table) => Schema.create(table.schema()).queries)
36
- );
37
- }
38
- export {
39
- create,
40
- deleteFrom,
41
- insertInto,
42
- selectAll,
43
- selectFirst,
44
- update
45
- };
package/dist/OrderBy.d.ts DELETED
@@ -1,9 +0,0 @@
1
- import { ExprData } from './Expr';
2
- export declare enum OrderDirection {
3
- Asc = "Asc",
4
- Desc = "Desc"
5
- }
6
- export type OrderBy = {
7
- expr: ExprData;
8
- order: OrderDirection;
9
- };
package/dist/OrderBy.js DELETED
@@ -1,9 +0,0 @@
1
- // src/OrderBy.ts
2
- var OrderDirection = /* @__PURE__ */ ((OrderDirection2) => {
3
- OrderDirection2["Asc"] = "Asc";
4
- OrderDirection2["Desc"] = "Desc";
5
- return OrderDirection2;
6
- })(OrderDirection || {});
7
- export {
8
- OrderDirection
9
- };
package/dist/Param.d.ts DELETED
@@ -1,15 +0,0 @@
1
- export declare enum ParamType {
2
- Value = "Value",
3
- Named = "Named"
4
- }
5
- export type ParamData = {
6
- type: ParamType.Value;
7
- value: any;
8
- } | {
9
- type: ParamType.Named;
10
- name: string;
11
- };
12
- export declare const ParamData: {
13
- Value(value: any): ParamData;
14
- Named(name: string): ParamData;
15
- };
package/dist/Param.js DELETED
@@ -1,18 +0,0 @@
1
- // src/Param.ts
2
- var ParamType = /* @__PURE__ */ ((ParamType2) => {
3
- ParamType2["Value"] = "Value";
4
- ParamType2["Named"] = "Named";
5
- return ParamType2;
6
- })(ParamType || {});
7
- var ParamData = {
8
- Value(value) {
9
- return { type: "Value" /* Value */, value };
10
- },
11
- Named(name) {
12
- return { type: "Named" /* Named */, name };
13
- }
14
- };
15
- export {
16
- ParamData,
17
- ParamType
18
- };