rado 0.1.63 → 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.
- package/dist/define/Cursor.js +8 -0
- package/dist/define/Expr.d.ts +9 -8
- package/dist/define/Expr.js +44 -41
- package/dist/define/Ops.d.ts +2 -0
- package/dist/define/Ops.js +8 -0
- package/dist/define/Query.d.ts +1 -1
- package/dist/lib/Formatter.js +15 -9
- package/package.json +1 -1
package/dist/define/Cursor.js
CHANGED
|
@@ -117,6 +117,8 @@ function addWhere(query, where) {
|
|
|
117
117
|
}
|
|
118
118
|
leftJoin(that, ...on) {
|
|
119
119
|
const query = this.query();
|
|
120
|
+
if (!query.from)
|
|
121
|
+
throw new Error("No from clause");
|
|
120
122
|
return new SelectMultiple({
|
|
121
123
|
...query,
|
|
122
124
|
from: Target.Join(
|
|
@@ -129,6 +131,8 @@ function addWhere(query, where) {
|
|
|
129
131
|
}
|
|
130
132
|
innerJoin(that, ...on) {
|
|
131
133
|
const query = this.query();
|
|
134
|
+
if (!query.from)
|
|
135
|
+
throw new Error("No from clause");
|
|
132
136
|
return new SelectMultiple({
|
|
133
137
|
...query,
|
|
134
138
|
from: Target.Join(
|
|
@@ -196,6 +200,8 @@ function addWhere(query, where) {
|
|
|
196
200
|
}
|
|
197
201
|
leftJoin(that, ...on) {
|
|
198
202
|
const query = this.query();
|
|
203
|
+
if (!query.from)
|
|
204
|
+
throw new Error("No from clause");
|
|
199
205
|
return new SelectSingle({
|
|
200
206
|
...query,
|
|
201
207
|
from: Target.Join(
|
|
@@ -208,6 +214,8 @@ function addWhere(query, where) {
|
|
|
208
214
|
}
|
|
209
215
|
innerJoin(that, ...on) {
|
|
210
216
|
const query = this.query();
|
|
217
|
+
if (!query.from)
|
|
218
|
+
throw new Error("No from clause");
|
|
211
219
|
return new SelectSingle({
|
|
212
220
|
...query,
|
|
213
221
|
from: Target.Join(
|
package/dist/define/Expr.d.ts
CHANGED
|
@@ -139,27 +139,28 @@ export declare class Expr<T> {
|
|
|
139
139
|
not(): Expr<boolean>;
|
|
140
140
|
or(this: Expr<boolean>, that: EV<boolean>): Expr<boolean>;
|
|
141
141
|
and(this: Expr<boolean>, that: EV<boolean>): Expr<boolean>;
|
|
142
|
+
is(that: EV<T> | Cursor.SelectSingle<T>): Expr<boolean>;
|
|
143
|
+
isNot(that: EV<T>): Expr<boolean>;
|
|
142
144
|
isNull(): Expr<boolean>;
|
|
143
145
|
isNotNull(): Expr<boolean>;
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
isIn(that: EV<Array<T>> | Cursor.SelectMultiple<T>): Expr<boolean>;
|
|
147
|
+
isNotIn(that: EV<Array<T>> | Cursor.SelectMultiple<T>): Expr<boolean>;
|
|
148
|
+
isGreater(that: EV<any>): Expr<boolean>;
|
|
149
|
+
isGreaterOrEqual(that: EV<any>): Expr<boolean>;
|
|
150
|
+
isLess(that: EV<any>): Expr<boolean>;
|
|
151
|
+
isLessOrEqual(that: EV<any>): Expr<boolean>;
|
|
148
152
|
add(this: Expr<number>, that: EV<number>): Expr<number>;
|
|
149
153
|
substract(this: Expr<number>, that: EV<number>): Expr<number>;
|
|
150
154
|
multiply(this: Expr<number>, that: EV<number>): Expr<number>;
|
|
151
155
|
remainder(this: Expr<number>, that: EV<number>): Expr<number>;
|
|
152
156
|
divide(this: Expr<number>, that: EV<number>): Expr<number>;
|
|
153
|
-
greater(that: EV<any>): Expr<boolean>;
|
|
154
|
-
greaterOrEqual(that: EV<any>): Expr<boolean>;
|
|
155
|
-
less(that: EV<any>): Expr<boolean>;
|
|
156
|
-
lessOrEqual(that: EV<any>): Expr<boolean>;
|
|
157
157
|
concat(this: Expr<string>, that: EV<string>): Expr<string>;
|
|
158
158
|
like(this: Expr<string>, that: EV<string>): Expr<boolean>;
|
|
159
159
|
glob(this: Expr<string>, that: EV<string>): Expr<boolean>;
|
|
160
160
|
match(this: Expr<string>, that: EV<string>): Expr<boolean>;
|
|
161
161
|
with<X extends Selection>(that: X): Selection.With<T, X>;
|
|
162
162
|
at<T>(this: Expr<Array<T>>, index: number): Expr<T | null>;
|
|
163
|
+
includes<T>(this: Expr<Array<T>>, value: EV<T>): Expr<boolean>;
|
|
163
164
|
filter<T>(this: Expr<Array<T>>, fn: (cursor: Fields<T>) => Expr<boolean>): Expr<Array<T>>;
|
|
164
165
|
map<T, X extends Selection>(this: Expr<Array<T>>, fn: (cursor: Fields<T>) => X): Expr<Array<Selection.Infer<X>>>;
|
|
165
166
|
sure(): Expr<NonNullable<T>>;
|
package/dist/define/Expr.js
CHANGED
|
@@ -151,7 +151,7 @@ var _Expr = class {
|
|
|
151
151
|
return { expr: this.expr, order: OrderDirection.Desc };
|
|
152
152
|
}
|
|
153
153
|
not() {
|
|
154
|
-
return
|
|
154
|
+
return new _Expr(ExprData.UnOp("Not" /* Not */, this.expr));
|
|
155
155
|
}
|
|
156
156
|
or(that) {
|
|
157
157
|
const a = this.expr;
|
|
@@ -171,66 +171,72 @@ var _Expr = class {
|
|
|
171
171
|
return new _Expr(b);
|
|
172
172
|
return new _Expr(ExprData.BinOp("And" /* And */, a, b));
|
|
173
173
|
}
|
|
174
|
+
is(that) {
|
|
175
|
+
if (that === null || that instanceof _Expr && isConstant(that.expr, null))
|
|
176
|
+
return this.isNull();
|
|
177
|
+
return new _Expr(ExprData.BinOp("Equals" /* Equals */, this.expr, toExpr(that)));
|
|
178
|
+
}
|
|
179
|
+
isNot(that) {
|
|
180
|
+
if (that === null || that instanceof _Expr && isConstant(that.expr, null))
|
|
181
|
+
return this.isNotNull();
|
|
182
|
+
return new _Expr(
|
|
183
|
+
ExprData.BinOp("NotEquals" /* NotEquals */, this.expr, toExpr(that))
|
|
184
|
+
);
|
|
185
|
+
}
|
|
174
186
|
isNull() {
|
|
175
|
-
return
|
|
187
|
+
return new _Expr(ExprData.UnOp("IsNull" /* IsNull */, this.expr));
|
|
176
188
|
}
|
|
177
189
|
isNotNull() {
|
|
178
190
|
return this.isNull().not();
|
|
179
191
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
return this.isNotNull();
|
|
183
|
-
return binop(this, "NotEquals" /* NotEquals */, that);
|
|
192
|
+
isIn(that) {
|
|
193
|
+
return new _Expr(ExprData.BinOp("In" /* In */, this.expr, toExpr(that)));
|
|
184
194
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
195
|
+
isNotIn(that) {
|
|
196
|
+
return new _Expr(ExprData.BinOp("NotIn" /* NotIn */, this.expr, toExpr(that)));
|
|
197
|
+
}
|
|
198
|
+
isGreater(that) {
|
|
199
|
+
return new _Expr(ExprData.BinOp("Greater" /* Greater */, this.expr, toExpr(that)));
|
|
189
200
|
}
|
|
190
|
-
|
|
191
|
-
return
|
|
201
|
+
isGreaterOrEqual(that) {
|
|
202
|
+
return new _Expr(
|
|
203
|
+
ExprData.BinOp("GreaterOrEqual" /* GreaterOrEqual */, this.expr, toExpr(that))
|
|
204
|
+
);
|
|
192
205
|
}
|
|
193
|
-
|
|
194
|
-
return
|
|
206
|
+
isLess(that) {
|
|
207
|
+
return new _Expr(ExprData.BinOp("Less" /* Less */, this.expr, toExpr(that)));
|
|
208
|
+
}
|
|
209
|
+
isLessOrEqual(that) {
|
|
210
|
+
return new _Expr(
|
|
211
|
+
ExprData.BinOp("LessOrEqual" /* LessOrEqual */, this.expr, toExpr(that))
|
|
212
|
+
);
|
|
195
213
|
}
|
|
196
214
|
add(that) {
|
|
197
|
-
return
|
|
215
|
+
return new _Expr(ExprData.BinOp("Add" /* Add */, this.expr, toExpr(that)));
|
|
198
216
|
}
|
|
199
217
|
substract(that) {
|
|
200
|
-
return
|
|
218
|
+
return new _Expr(ExprData.BinOp("Subt" /* Subt */, this.expr, toExpr(that)));
|
|
201
219
|
}
|
|
202
220
|
multiply(that) {
|
|
203
|
-
return
|
|
221
|
+
return new _Expr(ExprData.BinOp("Mult" /* Mult */, this.expr, toExpr(that)));
|
|
204
222
|
}
|
|
205
223
|
remainder(that) {
|
|
206
|
-
return
|
|
224
|
+
return new _Expr(ExprData.BinOp("Mod" /* Mod */, this.expr, toExpr(that)));
|
|
207
225
|
}
|
|
208
226
|
divide(that) {
|
|
209
|
-
return
|
|
210
|
-
}
|
|
211
|
-
greater(that) {
|
|
212
|
-
return binop(this, "Greater" /* Greater */, that);
|
|
213
|
-
}
|
|
214
|
-
greaterOrEqual(that) {
|
|
215
|
-
return binop(this, "GreaterOrEqual" /* GreaterOrEqual */, that);
|
|
216
|
-
}
|
|
217
|
-
less(that) {
|
|
218
|
-
return binop(this, "Less" /* Less */, that);
|
|
219
|
-
}
|
|
220
|
-
lessOrEqual(that) {
|
|
221
|
-
return binop(this, "LessOrEqual" /* LessOrEqual */, that);
|
|
227
|
+
return new _Expr(ExprData.BinOp("Div" /* Div */, this.expr, toExpr(that)));
|
|
222
228
|
}
|
|
223
229
|
concat(that) {
|
|
224
|
-
return
|
|
230
|
+
return new _Expr(ExprData.BinOp("Concat" /* Concat */, this.expr, toExpr(that)));
|
|
225
231
|
}
|
|
226
232
|
like(that) {
|
|
227
|
-
return
|
|
233
|
+
return new _Expr(ExprData.BinOp("Like" /* Like */, this.expr, toExpr(that)));
|
|
228
234
|
}
|
|
229
235
|
glob(that) {
|
|
230
|
-
return
|
|
236
|
+
return new _Expr(ExprData.BinOp("Glob" /* Glob */, this.expr, toExpr(that)));
|
|
231
237
|
}
|
|
232
238
|
match(that) {
|
|
233
|
-
return
|
|
239
|
+
return new _Expr(ExprData.BinOp("Match" /* Match */, this.expr, toExpr(that)));
|
|
234
240
|
}
|
|
235
241
|
with(that) {
|
|
236
242
|
return new _Expr(
|
|
@@ -240,6 +246,9 @@ var _Expr = class {
|
|
|
240
246
|
at(index) {
|
|
241
247
|
return this.get(`[${Number(index)}]`);
|
|
242
248
|
}
|
|
249
|
+
includes(value) {
|
|
250
|
+
return _Expr.create(value).isIn(this);
|
|
251
|
+
}
|
|
243
252
|
filter(fn) {
|
|
244
253
|
const alias = `__${Math.random().toString(36).slice(2, 9)}`;
|
|
245
254
|
const target = Target.Expr(this.expr, alias);
|
|
@@ -269,12 +278,6 @@ var _Expr = class {
|
|
|
269
278
|
};
|
|
270
279
|
var Expr = _Expr;
|
|
271
280
|
__publicField(Expr, "NULL", toExpr(null));
|
|
272
|
-
function unop(self, type) {
|
|
273
|
-
return new Expr(ExprData.UnOp(type, self.expr));
|
|
274
|
-
}
|
|
275
|
-
function binop(self, type, that) {
|
|
276
|
-
return new Expr(ExprData.BinOp(type, self.expr, toExpr(that)));
|
|
277
|
-
}
|
|
278
281
|
export {
|
|
279
282
|
BinOpType,
|
|
280
283
|
Expr,
|
package/dist/define/Ops.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Cursor } from './Cursor';
|
|
2
|
+
import { Selection } from './Selection';
|
|
2
3
|
import { Table } from './Table';
|
|
4
|
+
export declare function select<X extends Selection>(selection: X): Cursor.SelectMultiple<Selection.Infer<X>>;
|
|
3
5
|
export declare function from<Row>(source: Table<Row> | Cursor.SelectMultiple<Row>): Cursor.SelectMultiple<Row>;
|
|
4
6
|
export declare function update<Row>(table: Table<Row>): Cursor.Update<Row>;
|
|
5
7
|
export declare function insertInto<Row>(table: Table<Row>): Cursor.Insert<Row>;
|
package/dist/define/Ops.js
CHANGED
|
@@ -4,6 +4,13 @@ import { ExprData } from "./Expr.js";
|
|
|
4
4
|
import { Query } from "./Query.js";
|
|
5
5
|
import { Schema } from "./Schema.js";
|
|
6
6
|
import { Target } from "./Target.js";
|
|
7
|
+
function select(selection) {
|
|
8
|
+
return new Cursor.SelectMultiple(
|
|
9
|
+
Query.Select({
|
|
10
|
+
selection: ExprData.create(selection)
|
|
11
|
+
})
|
|
12
|
+
);
|
|
13
|
+
}
|
|
7
14
|
function from(source) {
|
|
8
15
|
const target = "schema" in source ? Target.Table(source.schema()) : Target.Query(source.query());
|
|
9
16
|
return new Cursor.SelectMultiple(
|
|
@@ -32,5 +39,6 @@ export {
|
|
|
32
39
|
deleteFrom,
|
|
33
40
|
from,
|
|
34
41
|
insertInto,
|
|
42
|
+
select,
|
|
35
43
|
update
|
|
36
44
|
};
|
package/dist/define/Query.d.ts
CHANGED
|
@@ -40,7 +40,7 @@ export declare namespace Query {
|
|
|
40
40
|
interface Select extends QueryBase {
|
|
41
41
|
type: QueryType.Select;
|
|
42
42
|
selection: ExprData;
|
|
43
|
-
from
|
|
43
|
+
from?: Target;
|
|
44
44
|
}
|
|
45
45
|
function Select(select: Omit<Select, 'type'>): Query.Select;
|
|
46
46
|
interface Update extends QueryBase {
|
package/dist/lib/Formatter.js
CHANGED
|
@@ -83,8 +83,10 @@ var Formatter = class {
|
|
|
83
83
|
query.selection,
|
|
84
84
|
topLevel ? formatAsResultObject : void 0
|
|
85
85
|
);
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
if (query.from) {
|
|
87
|
+
stmt.addLine("FROM").space();
|
|
88
|
+
this.formatTarget(ctx, query.from);
|
|
89
|
+
}
|
|
88
90
|
this.formatWhere(ctx, query.where);
|
|
89
91
|
this.formatGroupBy(ctx, query.groupBy);
|
|
90
92
|
this.formatHaving(ctx, query.having);
|
|
@@ -321,8 +323,6 @@ var Formatter = class {
|
|
|
321
323
|
throw new TypeError(`Expected boolean for column ${column.name}`);
|
|
322
324
|
return stmt.raw(this.escapeValue(columnValue));
|
|
323
325
|
case ColumnType.Json:
|
|
324
|
-
if (typeof columnValue !== "object")
|
|
325
|
-
throw new TypeError(`Expected object for column ${column.name}`);
|
|
326
326
|
return stmt.value(JSON.stringify(columnValue));
|
|
327
327
|
}
|
|
328
328
|
}
|
|
@@ -390,12 +390,15 @@ var Formatter = class {
|
|
|
390
390
|
return stmt;
|
|
391
391
|
}
|
|
392
392
|
formatLimit(ctx, { limit, offset, singleResult }) {
|
|
393
|
-
const { stmt } = ctx;
|
|
393
|
+
const { stmt, forceInline } = ctx;
|
|
394
394
|
if (!limit && !offset && !singleResult)
|
|
395
395
|
return stmt;
|
|
396
|
-
stmt.newline().raw("LIMIT")
|
|
397
|
-
|
|
398
|
-
|
|
396
|
+
stmt.newline().raw("LIMIT");
|
|
397
|
+
this.formatValue(ctx, singleResult ? 1 : limit);
|
|
398
|
+
if (offset && offset > 0) {
|
|
399
|
+
stmt.raw("OFFSET");
|
|
400
|
+
this.formatValue(ctx, offset);
|
|
401
|
+
}
|
|
399
402
|
return stmt;
|
|
400
403
|
}
|
|
401
404
|
formatSelection(ctx, selection, formatSubject) {
|
|
@@ -441,7 +444,8 @@ var Formatter = class {
|
|
|
441
444
|
case TargetType.Table:
|
|
442
445
|
const column = expr.target.table.columns[field];
|
|
443
446
|
const asBoolean = column?.type === ColumnType.Boolean && ctx.formatAsJson;
|
|
444
|
-
const
|
|
447
|
+
const jsonColumn = column?.type === ColumnType.Json;
|
|
448
|
+
const asJson = jsonColumn && ctx.formatAsJson;
|
|
445
449
|
if (asJson) {
|
|
446
450
|
stmt.raw("json");
|
|
447
451
|
stmt.openParenthesis();
|
|
@@ -456,6 +460,8 @@ var Formatter = class {
|
|
|
456
460
|
stmt.add(`, 'true', 'false'))`);
|
|
457
461
|
if (asJson)
|
|
458
462
|
stmt.closeParenthesis();
|
|
463
|
+
if (jsonColumn && !asJson)
|
|
464
|
+
stmt.raw("->>'$'");
|
|
459
465
|
return stmt;
|
|
460
466
|
}
|
|
461
467
|
default:
|