rado 0.1.16 → 0.1.18
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/lib/Formatter.js
CHANGED
|
@@ -80,22 +80,22 @@ var Formatter = class {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
formatSelect(query, ctx) {
|
|
83
|
-
return raw("
|
|
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
84
|
}
|
|
85
85
|
formatInsert(query, ctx) {
|
|
86
86
|
const columns = Object.values(query.into.columns);
|
|
87
|
-
return raw("
|
|
87
|
+
return raw("INSERT INTO").addIdentifier(query.into.name).addIf(query.into.alias, () => raw("AS").addIdentifier(query.into.alias)).parenthesis(
|
|
88
88
|
separated(columns.map((column) => this.formatString(column.name)))
|
|
89
|
-
).add("
|
|
89
|
+
).add("VALUES").addSeparated(
|
|
90
90
|
query.data.map((row) => this.formatInsertRow(query.into.columns, row))
|
|
91
91
|
).addIf(
|
|
92
92
|
query.selection,
|
|
93
|
-
() => raw("
|
|
93
|
+
() => raw("RETURNING").add(this.formatSelection(query.selection, ctx))
|
|
94
94
|
);
|
|
95
95
|
}
|
|
96
96
|
formatUpdate(query, ctx) {
|
|
97
97
|
const data = query.set || {};
|
|
98
|
-
return raw("
|
|
98
|
+
return raw("UPDATE").addIdentifier(query.table.name).add("SET").addSeparated(
|
|
99
99
|
Object.keys(data).map((key) => {
|
|
100
100
|
const column = query.table.columns[key];
|
|
101
101
|
const exprData = data[key];
|
|
@@ -109,10 +109,10 @@ var Formatter = class {
|
|
|
109
109
|
).add(this.formatWhere(query.where, ctx)).add(this.formatLimit(query, ctx));
|
|
110
110
|
}
|
|
111
111
|
formatDelete(query, ctx) {
|
|
112
|
-
return raw("
|
|
112
|
+
return raw("DELETE FROM").addIdentifier(query.table.name).add(this.formatWhere(query.where, ctx)).add(this.formatLimit(query, ctx));
|
|
113
113
|
}
|
|
114
114
|
formatCreateTable(query, ctx) {
|
|
115
|
-
return raw("
|
|
115
|
+
return raw("CREATE TABLE").addIf(query.ifNotExists, "IF NOT EXISTS").addCall(
|
|
116
116
|
query.table.name,
|
|
117
117
|
...Object.values(query.table.columns).map((column) => {
|
|
118
118
|
return this.formatColumn(column);
|
|
@@ -120,7 +120,7 @@ var Formatter = class {
|
|
|
120
120
|
);
|
|
121
121
|
}
|
|
122
122
|
formatCreateIndex(query, ctx = {}) {
|
|
123
|
-
return raw("
|
|
123
|
+
return raw("CREATE").addIf(query.index.unique, "UNIQUE").add("INDEX").addIf(query.ifNotExists, "IF NOT EXISTS").addIdentifier(query.index.name).add("ON").addIdentifier(query.table.name).parenthesis(
|
|
124
124
|
separated(
|
|
125
125
|
query.index.on.map(
|
|
126
126
|
(expr) => this.formatExprValue(expr, {
|
|
@@ -133,14 +133,14 @@ var Formatter = class {
|
|
|
133
133
|
).add(this.formatWhere(query.where, ctx));
|
|
134
134
|
}
|
|
135
135
|
formatDropIndex(query, ctx) {
|
|
136
|
-
return raw("
|
|
136
|
+
return raw("DROP INDEX").addIf(query.ifExists, "IF EXISTS").addIdentifier(query.name);
|
|
137
137
|
}
|
|
138
138
|
formatAlterTable(query, ctx) {
|
|
139
|
-
let stmt = raw("
|
|
139
|
+
let stmt = raw("ALTER TABLE").addIdentifier(query.table.name);
|
|
140
140
|
if (query.addColumn) {
|
|
141
|
-
stmt = stmt.add("
|
|
141
|
+
stmt = stmt.add("ADD COLUMN").add(this.formatColumn(query.addColumn));
|
|
142
142
|
} else if (query.dropColumn) {
|
|
143
|
-
stmt = stmt.add("
|
|
143
|
+
stmt = stmt.add("DROP COLUMN").addIdentifier(query.dropColumn);
|
|
144
144
|
} else if (query.alterColumn) {
|
|
145
145
|
throw new Error(`Not available in this formatter: alter column`);
|
|
146
146
|
}
|
|
@@ -149,11 +149,11 @@ var Formatter = class {
|
|
|
149
149
|
formatTransaction({ op, id }, ctx) {
|
|
150
150
|
switch (op) {
|
|
151
151
|
case Query.TransactionOperation.Begin:
|
|
152
|
-
return raw("
|
|
152
|
+
return raw("SAVEPOINT").addIdentifier(id);
|
|
153
153
|
case Query.TransactionOperation.Commit:
|
|
154
|
-
return raw("
|
|
154
|
+
return raw("RELEASE").addIdentifier(id);
|
|
155
155
|
case Query.TransactionOperation.Rollback:
|
|
156
|
-
return raw("
|
|
156
|
+
return raw("ROLLBACK TO").addIdentifier(id);
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
159
|
formatBatch(queries, ctx) {
|
|
@@ -166,9 +166,9 @@ var Formatter = class {
|
|
|
166
166
|
return Statement.tag(strings, ...params);
|
|
167
167
|
}
|
|
168
168
|
formatColumn(column) {
|
|
169
|
-
return identifier(column.name).add(this.formatType(column.type)).addIf(column.unique, "
|
|
169
|
+
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(
|
|
170
170
|
column.defaultValue !== void 0,
|
|
171
|
-
raw("
|
|
171
|
+
raw("DEFAULT").add(this.formatInlineValue(column.defaultValue))
|
|
172
172
|
).addIf(column.references, () => {
|
|
173
173
|
return this.formatContraintReference(column.references);
|
|
174
174
|
});
|
|
@@ -177,20 +177,20 @@ var Formatter = class {
|
|
|
177
177
|
if (reference.type !== ExprType.Field || reference.expr.type !== ExprType.Row)
|
|
178
178
|
throw new Error("not supported");
|
|
179
179
|
const from = reference.expr.target;
|
|
180
|
-
return raw("
|
|
180
|
+
return raw("REFERENCES").addIdentifier(Target.source(from).name).parenthesis(identifier(reference.field));
|
|
181
181
|
}
|
|
182
182
|
formatType(type) {
|
|
183
183
|
switch (type) {
|
|
184
184
|
case ColumnType.String:
|
|
185
|
-
return raw("
|
|
185
|
+
return raw("TEXT");
|
|
186
186
|
case ColumnType.Json:
|
|
187
|
-
return raw("
|
|
187
|
+
return raw("JSON");
|
|
188
188
|
case ColumnType.Number:
|
|
189
|
-
return raw("
|
|
189
|
+
return raw("NUMERIC");
|
|
190
190
|
case ColumnType.Boolean:
|
|
191
|
-
return raw("
|
|
191
|
+
return raw("BOOLEAN");
|
|
192
192
|
case ColumnType.Integer:
|
|
193
|
-
return raw("
|
|
193
|
+
return raw("INTEGER");
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
formatInsertRow(columns, row) {
|
|
@@ -209,7 +209,7 @@ var Formatter = class {
|
|
|
209
209
|
if (isNull) {
|
|
210
210
|
if (!isOptional)
|
|
211
211
|
throw new TypeError(`Expected value for column ${column.name}`);
|
|
212
|
-
return raw("
|
|
212
|
+
return raw("NULL");
|
|
213
213
|
}
|
|
214
214
|
switch (column.type) {
|
|
215
215
|
case ColumnType.String:
|
|
@@ -236,11 +236,11 @@ var Formatter = class {
|
|
|
236
236
|
case TargetType.Table:
|
|
237
237
|
return identifier(target.table.name).addIf(
|
|
238
238
|
target.table.alias,
|
|
239
|
-
() => raw("
|
|
239
|
+
() => raw("AS").addIdentifier(target.table.alias)
|
|
240
240
|
);
|
|
241
241
|
case TargetType.Join:
|
|
242
242
|
const { left, right, joinType } = target;
|
|
243
|
-
return this.formatTarget(left, ctx).addLine(joins[joinType]).add("
|
|
243
|
+
return this.formatTarget(left, ctx).addLine(joins[joinType]).add("JOIN").add(this.formatTarget(right, ctx)).add("ON").add(this.formatExprValue(target.on, ctx));
|
|
244
244
|
default:
|
|
245
245
|
throw new Error(`Cannot format target of type ${target.type}`);
|
|
246
246
|
}
|
|
@@ -248,25 +248,25 @@ var Formatter = class {
|
|
|
248
248
|
formatWhere(expr, ctx) {
|
|
249
249
|
if (!expr)
|
|
250
250
|
return;
|
|
251
|
-
return newline().raw("
|
|
251
|
+
return newline().raw("WHERE").add(this.formatExprValue(expr, ctx));
|
|
252
252
|
}
|
|
253
253
|
formatHaving(expr, ctx) {
|
|
254
254
|
if (!expr)
|
|
255
255
|
return;
|
|
256
|
-
return newline().raw("
|
|
256
|
+
return newline().raw("HAVING").add(this.formatExprValue(expr, ctx));
|
|
257
257
|
}
|
|
258
258
|
formatGroupBy(groupBy, ctx) {
|
|
259
259
|
if (!groupBy)
|
|
260
260
|
return;
|
|
261
|
-
return newline().raw("
|
|
261
|
+
return newline().raw("GROUP BY").addSeparated(groupBy.map((expr) => this.formatExprValue(expr, ctx)));
|
|
262
262
|
}
|
|
263
263
|
formatOrderBy(orderBy, ctx) {
|
|
264
264
|
if (!orderBy)
|
|
265
265
|
return;
|
|
266
|
-
return newline().raw("
|
|
266
|
+
return newline().raw("ORDER BY").addSeparated(
|
|
267
267
|
orderBy.map(
|
|
268
268
|
({ expr, order }) => this.formatExprValue(expr, ctx).add(
|
|
269
|
-
order === OrderDirection.Asc ? "
|
|
269
|
+
order === OrderDirection.Asc ? "ASC" : "DESC"
|
|
270
270
|
)
|
|
271
271
|
)
|
|
272
272
|
);
|
|
@@ -274,7 +274,7 @@ var Formatter = class {
|
|
|
274
274
|
formatLimit({ limit, offset, singleResult }, ctx) {
|
|
275
275
|
if (!limit && !offset && !singleResult)
|
|
276
276
|
return;
|
|
277
|
-
return newline().raw("
|
|
277
|
+
return newline().raw("LIMIT").addValue(singleResult ? 1 : limit).addIf(offset && offset > 0, raw("OFFSET").addValue(offset));
|
|
278
278
|
}
|
|
279
279
|
formatSelection(selection, ctx) {
|
|
280
280
|
const { formatSubject } = ctx;
|
|
@@ -285,7 +285,7 @@ var Formatter = class {
|
|
|
285
285
|
});
|
|
286
286
|
return (formatSubject ? formatSubject(subject) : subject).addIf(
|
|
287
287
|
ctx.nameResult,
|
|
288
|
-
raw("
|
|
288
|
+
raw("AS").addIdentifier(ctx.nameResult)
|
|
289
289
|
);
|
|
290
290
|
}
|
|
291
291
|
formatExprValue(expr, ctx) {
|
|
@@ -300,7 +300,7 @@ var Formatter = class {
|
|
|
300
300
|
}
|
|
301
301
|
}
|
|
302
302
|
formatUnwrapArray(stmt) {
|
|
303
|
-
return parenthesis(raw("
|
|
303
|
+
return parenthesis(raw("SELECT value FROM").addCall("json_each", stmt));
|
|
304
304
|
}
|
|
305
305
|
retrieveField(expr, field) {
|
|
306
306
|
switch (expr.type) {
|
|
@@ -324,14 +324,15 @@ var Formatter = class {
|
|
|
324
324
|
const column = expr.target.table.columns[field];
|
|
325
325
|
switch (column?.type) {
|
|
326
326
|
case ColumnType.Json:
|
|
327
|
-
|
|
327
|
+
if (ctx.formatAsJson)
|
|
328
|
+
return call("json", selection);
|
|
328
329
|
default:
|
|
329
330
|
return selection;
|
|
330
331
|
}
|
|
331
332
|
}
|
|
332
333
|
default:
|
|
333
334
|
return this.formatAccess(
|
|
334
|
-
this.formatExpr(expr,
|
|
335
|
+
this.formatExpr(expr, ctx),
|
|
335
336
|
field,
|
|
336
337
|
ctx.formatAsJson
|
|
337
338
|
);
|
|
@@ -343,9 +344,9 @@ var Formatter = class {
|
|
|
343
344
|
formatInlineValue(rawValue) {
|
|
344
345
|
switch (true) {
|
|
345
346
|
case (rawValue === null || rawValue === void 0):
|
|
346
|
-
return raw("
|
|
347
|
+
return raw("NULL");
|
|
347
348
|
case typeof rawValue === "boolean":
|
|
348
|
-
return rawValue ? raw("
|
|
349
|
+
return rawValue ? raw("TRUE") : raw("FALSE");
|
|
349
350
|
case (typeof rawValue === "string" || typeof rawValue === "number"):
|
|
350
351
|
return this.formatString(rawValue);
|
|
351
352
|
default:
|
|
@@ -356,7 +357,7 @@ var Formatter = class {
|
|
|
356
357
|
const { formatAsJson, forceInline } = ctx;
|
|
357
358
|
switch (true) {
|
|
358
359
|
case (rawValue === null || rawValue === void 0):
|
|
359
|
-
return raw("
|
|
360
|
+
return raw("NULL");
|
|
360
361
|
case (!formatAsJson && typeof rawValue === "boolean"):
|
|
361
362
|
return rawValue ? raw("1") : raw("0");
|
|
362
363
|
case Array.isArray(rawValue):
|
|
@@ -384,9 +385,9 @@ var Formatter = class {
|
|
|
384
385
|
case ExprType.UnOp:
|
|
385
386
|
switch (expr.op) {
|
|
386
387
|
case UnOp.IsNull:
|
|
387
|
-
return this.formatExprValue(expr.expr, ctx).add("
|
|
388
|
+
return this.formatExprValue(expr.expr, ctx).add("IS NULL");
|
|
388
389
|
case UnOp.Not:
|
|
389
|
-
return raw("
|
|
390
|
+
return raw("NOT").addParenthesis(
|
|
390
391
|
this.formatExprValue(expr.expr, ctx)
|
|
391
392
|
);
|
|
392
393
|
}
|
|
@@ -426,7 +427,7 @@ var Formatter = class {
|
|
|
426
427
|
if (expr.query.singleResult)
|
|
427
428
|
return call("json", parenthesis(subQuery));
|
|
428
429
|
return parenthesis(
|
|
429
|
-
raw("
|
|
430
|
+
raw("SELECT json_group_array(json(result))").newline().raw("FROM").addParenthesis(subQuery)
|
|
430
431
|
);
|
|
431
432
|
case ExprType.Row:
|
|
432
433
|
switch (expr.target.type) {
|
|
@@ -468,11 +469,11 @@ var Formatter = class {
|
|
|
468
469
|
switch (target.type) {
|
|
469
470
|
case TargetType.Each:
|
|
470
471
|
return parenthesis(
|
|
471
|
-
raw("
|
|
472
|
-
raw("
|
|
472
|
+
raw("SELECT json_group_array(json(result)) FROM").addParenthesis(
|
|
473
|
+
raw("SELECT value AS result").add("FROM").addCall(
|
|
473
474
|
"json_each",
|
|
474
475
|
this.formatExpr(target.expr, { ...ctx, formatAsJson: true })
|
|
475
|
-
).add("
|
|
476
|
+
).add("AS").addIdentifier(target.alias).add("WHERE").add(this.formatExprValue(condition, ctx))
|
|
476
477
|
)
|
|
477
478
|
);
|
|
478
479
|
default:
|
|
@@ -484,11 +485,11 @@ var Formatter = class {
|
|
|
484
485
|
switch (target.type) {
|
|
485
486
|
case TargetType.Each:
|
|
486
487
|
return parenthesis(
|
|
487
|
-
raw("
|
|
488
|
-
raw("
|
|
488
|
+
raw("SELECT json_group_array(json(result)) FROM").addParenthesis(
|
|
489
|
+
raw("SELECT").add(this.formatExpr(result, { ...ctx, formatAsJson: true })).add("AS").addIdentifier("result").add("FROM").addCall(
|
|
489
490
|
"json_each",
|
|
490
491
|
this.formatExpr(target.expr, { ...ctx, formatAsJson: true })
|
|
491
|
-
).add("
|
|
492
|
+
).add("AS").addIdentifier(target.alias)
|
|
492
493
|
)
|
|
493
494
|
);
|
|
494
495
|
default:
|
|
@@ -49,7 +49,7 @@ var SqliteFormatter = class extends Formatter {
|
|
|
49
49
|
throw new Error("not implemented");
|
|
50
50
|
if (from.target.type !== TargetType.Table)
|
|
51
51
|
throw new Error("not implemented");
|
|
52
|
-
return identifier(from.target.table.alias || from.target.table.name).raw("
|
|
52
|
+
return identifier(from.target.table.alias || from.target.table.name).raw(" MATCH ").concat(this.formatExprValue(query, ctx));
|
|
53
53
|
}
|
|
54
54
|
default:
|
|
55
55
|
return super.formatExpr(expr, ctx);
|
|
@@ -26,9 +26,9 @@ var SqliteSchema;
|
|
|
26
26
|
function columnInstruction(column) {
|
|
27
27
|
return [
|
|
28
28
|
column.name,
|
|
29
|
-
identifier(column.name).add(column.type
|
|
29
|
+
identifier(column.name).add(column.type).addIf(column.pk === 1, "PRIMARY KEY").addIf(column.notnull === 1, "NOT NULL").addIf(
|
|
30
30
|
column.dflt_value !== null,
|
|
31
|
-
raw("
|
|
31
|
+
raw("DEFAULT").add(column.dflt_value)
|
|
32
32
|
).compile(formatter)[0]
|
|
33
33
|
];
|
|
34
34
|
}
|