rado 0.1.62 → 0.1.64

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 (151) hide show
  1. package/dist/define/Column.d.ts +58 -58
  2. package/dist/define/Cursor.d.ts +87 -87
  3. package/dist/define/Cursor.js +8 -0
  4. package/dist/define/Expr.d.ts +173 -172
  5. package/dist/define/Expr.js +44 -41
  6. package/dist/define/Fields.d.ts +13 -13
  7. package/dist/define/Functions.d.ts +5 -5
  8. package/dist/define/Id.d.ts +3 -3
  9. package/dist/define/Index.d.ts +17 -17
  10. package/dist/define/Ops.d.ts +9 -7
  11. package/dist/define/Ops.js +8 -0
  12. package/dist/define/OrderBy.d.ts +9 -9
  13. package/dist/define/Param.d.ts +15 -15
  14. package/dist/define/Query.d.ts +109 -109
  15. package/dist/define/Schema.d.ts +18 -18
  16. package/dist/define/Selection.d.ts +20 -20
  17. package/dist/define/Table.d.ts +62 -62
  18. package/dist/define/Target.d.ts +38 -38
  19. package/dist/define/Update.d.ts +4 -4
  20. package/dist/driver/better-sqlite3.d.ts +15 -15
  21. package/dist/driver/bun-sqlite.d.ts +18 -18
  22. package/dist/driver/sql.js.d.ts +15 -15
  23. package/dist/driver/sqlite3.d.ts +18 -18
  24. package/dist/index.d.ts +21 -21
  25. package/dist/lib/Driver.d.ts +110 -110
  26. package/dist/lib/Formatter.d.ts +81 -81
  27. package/dist/lib/Formatter.js +18 -12
  28. package/dist/lib/Sanitizer.d.ts +5 -5
  29. package/dist/lib/SqlError.d.ts +3 -3
  30. package/dist/lib/Statement.d.ts +33 -33
  31. package/dist/sqlite/SqliteFormatter.d.ts +11 -11
  32. package/dist/sqlite/SqliteFunctions.d.ts +165 -165
  33. package/dist/sqlite/SqliteSchema.d.ts +25 -25
  34. package/dist/sqlite.d.ts +2 -2
  35. package/package.json +60 -60
  36. package/dist/CPU.20230126.092143.12244.0.001.cpuprofile +0 -1
  37. package/dist/Column.d.ts +0 -54
  38. package/dist/Column.js +0 -63
  39. package/dist/Cursor.d.ts +0 -77
  40. package/dist/Cursor.js +0 -221
  41. package/dist/Driver.d.ts +0 -89
  42. package/dist/Driver.js +0 -262
  43. package/dist/Expr.d.ts +0 -149
  44. package/dist/Expr.js +0 -284
  45. package/dist/Fields.d.ts +0 -11
  46. package/dist/Fields.js +0 -0
  47. package/dist/Formatter.d.ts +0 -55
  48. package/dist/Formatter.js +0 -496
  49. package/dist/Functions.d.ts +0 -7
  50. package/dist/Functions.js +0 -11
  51. package/dist/Id.d.ts +0 -3
  52. package/dist/Id.js +0 -0
  53. package/dist/Ops.d.ts +0 -8
  54. package/dist/Ops.js +0 -45
  55. package/dist/OrderBy.d.ts +0 -9
  56. package/dist/OrderBy.js +0 -9
  57. package/dist/Param.d.ts +0 -15
  58. package/dist/Param.js +0 -18
  59. package/dist/Query.d.ts +0 -107
  60. package/dist/Query.js +0 -74
  61. package/dist/Sanitizer.d.ts +0 -4
  62. package/dist/Sanitizer.js +0 -0
  63. package/dist/Schema.d.ts +0 -23
  64. package/dist/Schema.js +0 -60
  65. package/dist/Selection.d.ts +0 -20
  66. package/dist/Selection.js +0 -7
  67. package/dist/Statement.d.ts +0 -57
  68. package/dist/Statement.js +0 -184
  69. package/dist/Table.d.ts +0 -56
  70. package/dist/Table.js +0 -104
  71. package/dist/Target.d.ts +0 -30
  72. package/dist/Target.js +0 -37
  73. package/dist/Update.d.ts +0 -4
  74. package/dist/Update.js +0 -0
  75. package/dist/lib/Column.d.ts +0 -57
  76. package/dist/lib/Column.js +0 -63
  77. package/dist/lib/Cursor.d.ts +0 -79
  78. package/dist/lib/Cursor.js +0 -231
  79. package/dist/lib/Expr.d.ts +0 -154
  80. package/dist/lib/Expr.js +0 -284
  81. package/dist/lib/Fields.d.ts +0 -13
  82. package/dist/lib/Fields.js +0 -0
  83. package/dist/lib/Functions.d.ts +0 -5
  84. package/dist/lib/Functions.js +0 -11
  85. package/dist/lib/Id.d.ts +0 -3
  86. package/dist/lib/Id.js +0 -0
  87. package/dist/lib/Index.d.ts +0 -17
  88. package/dist/lib/Index.js +0 -20
  89. package/dist/lib/Ops.d.ts +0 -8
  90. package/dist/lib/Ops.js +0 -45
  91. package/dist/lib/OrderBy.d.ts +0 -9
  92. package/dist/lib/OrderBy.js +0 -9
  93. package/dist/lib/Param.d.ts +0 -20
  94. package/dist/lib/Param.js +0 -27
  95. package/dist/lib/Query.d.ts +0 -109
  96. package/dist/lib/Query.js +0 -74
  97. package/dist/lib/Schema.d.ts +0 -18
  98. package/dist/lib/Schema.js +0 -67
  99. package/dist/lib/Selection.d.ts +0 -20
  100. package/dist/lib/Selection.js +0 -7
  101. package/dist/lib/Table.d.ts +0 -62
  102. package/dist/lib/Table.js +0 -130
  103. package/dist/lib/Target.d.ts +0 -30
  104. package/dist/lib/Target.js +0 -37
  105. package/dist/lib/Update.d.ts +0 -4
  106. package/dist/lib/Update.js +0 -0
  107. package/dist/sqlite/index.d.ts +0 -2
  108. package/dist/sqlite/index.js +0 -3
  109. package/dist/src/driver/better-sqlite3.js +0 -49
  110. package/dist/src/driver/sql.js.js +0 -66
  111. package/dist/src/driver/sqlite3.js +0 -87
  112. package/dist/src/index.js +0 -24
  113. package/dist/src/lib/Column.js +0 -63
  114. package/dist/src/lib/Cursor.js +0 -231
  115. package/dist/src/lib/Driver.js +0 -316
  116. package/dist/src/lib/Expr.js +0 -284
  117. package/dist/src/lib/Fields.js +0 -0
  118. package/dist/src/lib/Formatter.js +0 -625
  119. package/dist/src/lib/Functions.js +0 -11
  120. package/dist/src/lib/Id.js +0 -0
  121. package/dist/src/lib/Index.js +0 -20
  122. package/dist/src/lib/Ops.js +0 -45
  123. package/dist/src/lib/OrderBy.js +0 -9
  124. package/dist/src/lib/Param.js +0 -27
  125. package/dist/src/lib/Query.js +0 -74
  126. package/dist/src/lib/Sanitizer.js +0 -0
  127. package/dist/src/lib/Schema.js +0 -67
  128. package/dist/src/lib/Selection.js +0 -7
  129. package/dist/src/lib/Statement.js +0 -103
  130. package/dist/src/lib/Table.js +0 -130
  131. package/dist/src/lib/Target.js +0 -37
  132. package/dist/src/lib/Update.js +0 -0
  133. package/dist/src/sqlite/SqliteFormatter.js +0 -67
  134. package/dist/src/sqlite/SqliteFunctions.js +0 -146
  135. package/dist/src/sqlite/SqliteSchema.js +0 -47
  136. package/dist/src/sqlite.js +0 -3
  137. package/dist/test/DbSuite.js +0 -28
  138. package/dist/test/TSTestTypes.js +0 -6
  139. package/dist/test/TestBasic.js +0 -172
  140. package/dist/test/TestExtend.js +0 -68
  141. package/dist/test/TestFts5.js +0 -34
  142. package/dist/test/TestFunctions.js +0 -28
  143. package/dist/test/TestJoins.js +0 -34
  144. package/dist/test/TestJson.js +0 -33
  145. package/dist/test/TestPrepare.js +0 -27
  146. package/dist/test/TestRawSql.js +0 -31
  147. package/dist/test/TestSchema.js +0 -69
  148. package/dist/test/TestSubQueries.js +0 -79
  149. package/dist/test/TestTransaction.js +0 -54
  150. package/dist/test/TestUpdate.js +0 -95
  151. 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
- };