@ts-awesome/orm 1.5.2 → 1.5.5
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/operators.d.ts +7 -0
- package/dist/operators.js +15 -1
- package/dist/operators.js.map +1 -1
- package/dist/wrappers.d.ts +160 -52
- package/dist/wrappers.js +74 -55
- package/package.json +2 -2
- package/tests/builder.spec.js +23 -0
- package/tests/builder.spec.ts +26 -1
package/dist/operators.d.ts
CHANGED
|
@@ -17,3 +17,10 @@ export declare function of<X extends TableMetaProvider, R = InstanceType<X>, F e
|
|
|
17
17
|
export declare function of<X extends TableMetaProvider, R = InstanceType<X>, F extends keyof R = keyof R>(_: ITableRef<X>, field: F): IOperandable<R[F]>;
|
|
18
18
|
export declare function alias<T>(expr: T | IOperandable<T>, name: string): IOperandable<T>;
|
|
19
19
|
export declare function cast<R = unknown, T = unknown>(expr: T | IOperandable<T>, type: string): IOperandable<R>;
|
|
20
|
+
export type CaseOperand<T> = {
|
|
21
|
+
when: IOperandable<boolean> | boolean;
|
|
22
|
+
then: IOperandable<T> | T;
|
|
23
|
+
} | {
|
|
24
|
+
else: IOperandable<T> | T;
|
|
25
|
+
};
|
|
26
|
+
export declare function case_<T = unknown>(...args: CaseOperand<T>[]): IOperandable<T>;
|
package/dist/operators.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.cast = exports.alias = exports.of = exports.desc = exports.asc = exports.min = exports.max = exports.count = exports.sum = exports.avg = exports.exists = exports.any = exports.all = exports.not = exports.or = exports.and = void 0;
|
|
3
|
+
exports.case_ = exports.cast = exports.alias = exports.of = exports.desc = exports.asc = exports.min = exports.max = exports.count = exports.sum = exports.avg = exports.exists = exports.any = exports.all = exports.not = exports.or = exports.and = void 0;
|
|
4
4
|
const wrappers_1 = require("./wrappers");
|
|
5
5
|
const symbols_1 = require("./symbols");
|
|
6
6
|
function and(...operands) {
|
|
@@ -76,4 +76,18 @@ function cast(expr, type) {
|
|
|
76
76
|
return new wrappers_1.Operandable('CAST', [expr, type]);
|
|
77
77
|
}
|
|
78
78
|
exports.cast = cast;
|
|
79
|
+
function case_(...args) {
|
|
80
|
+
let count = 0;
|
|
81
|
+
for (const block of args) {
|
|
82
|
+
count += ('else' in block) ? 1 : 0;
|
|
83
|
+
}
|
|
84
|
+
if (count > 1) {
|
|
85
|
+
throw new Error(`CASE can contain only one ELSE block`);
|
|
86
|
+
}
|
|
87
|
+
if (count == 1 && !('else' in args[args.length - 1])) {
|
|
88
|
+
throw new Error(`CASE should have ELSE as last block`);
|
|
89
|
+
}
|
|
90
|
+
return new wrappers_1.Operandable('CASE', args);
|
|
91
|
+
}
|
|
92
|
+
exports.case_ = case_;
|
|
79
93
|
//# sourceMappingURL=operators.js.map
|
package/dist/operators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operators.js","sourceRoot":"","sources":["../src/operators.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"operators.js","sourceRoot":"","sources":["../src/operators.ts"],"names":[],"mappings":"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"}
|
package/dist/wrappers.d.ts
CHANGED
|
@@ -1,59 +1,167 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
import {ElementType, IOperandable} from './interfaces';
|
|
2
|
+
import {IColumnRef} from "./intermediate";
|
|
3
|
+
|
|
4
|
+
declare class ColumnWrapper<T> implements IOperandable<T> {
|
|
5
|
+
constructor(ref: IColumnRef);
|
|
6
|
+
|
|
7
|
+
eq(value: T | IOperandable<T>): boolean;
|
|
8
|
+
neq(value: T | IOperandable<T>): boolean;
|
|
9
|
+
gt(value: T | IOperandable<T>): boolean;
|
|
10
|
+
gte(value: T | IOperandable<T>): boolean;
|
|
11
|
+
lt(value: T | IOperandable<T>): boolean;
|
|
12
|
+
lte(value: T | IOperandable<T>): boolean;
|
|
13
|
+
between(min: T | IOperandable<T>, max: T | IOperandable<T>): boolean;
|
|
14
|
+
in(value: T[] | Iterable<T> | IOperandable<T[]>): boolean;
|
|
15
|
+
has(value: (T extends any[] ? T[number] : T) | IOperandable<T extends any[] ? T[number] : T>): boolean;
|
|
16
|
+
like(value: string): boolean;
|
|
17
|
+
add(value: T | IOperandable<T>): IOperandable<T>;
|
|
18
|
+
sub(value: T | IOperandable<T>): IOperandable<T>;
|
|
19
|
+
mul(value: T | IOperandable<T>): IOperandable<T>;
|
|
20
|
+
div(value: T | IOperandable<T>): IOperandable<T>;
|
|
21
|
+
mod(value: T | IOperandable<T>): IOperandable<T>;
|
|
22
|
+
and(value: T | IOperandable<T>): IOperandable<T>;
|
|
23
|
+
or(value: T | IOperandable<T>): IOperandable<T>;
|
|
24
|
+
xor(value: T | IOperandable<T>): IOperandable<T>;
|
|
21
25
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
|
|
27
|
+
declare class AliasWrapper<T> implements IOperandable<T> {
|
|
28
|
+
constructor(expr: IOperandable<T>, alias: string);
|
|
29
|
+
|
|
30
|
+
eq(value: T | IOperandable<T>): boolean;
|
|
31
|
+
neq(value: T | IOperandable<T>): boolean;
|
|
32
|
+
gt(value: T | IOperandable<T>): boolean;
|
|
33
|
+
gte(value: T | IOperandable<T>): boolean;
|
|
34
|
+
lt(value: T | IOperandable<T>): boolean;
|
|
35
|
+
lte(value: T | IOperandable<T>): boolean;
|
|
36
|
+
between(min: T | IOperandable<T>, max: T | IOperandable<T>): boolean;
|
|
37
|
+
in(value: T[] | Iterable<T> | IOperandable<T[]>): boolean;
|
|
38
|
+
has(value: (T extends any[] ? T[number] : T) | IOperandable<T extends any[] ? T[number] : T>): boolean;
|
|
39
|
+
like(value: string): boolean;
|
|
40
|
+
add(value: T | IOperandable<T>): IOperandable<T>;
|
|
41
|
+
sub(value: T | IOperandable<T>): IOperandable<T>;
|
|
42
|
+
mul(value: T | IOperandable<T>): IOperandable<T>;
|
|
43
|
+
div(value: T | IOperandable<T>): IOperandable<T>;
|
|
44
|
+
mod(value: T | IOperandable<T>): IOperandable<T>;
|
|
45
|
+
and(value: T | IOperandable<T>): IOperandable<T>;
|
|
46
|
+
or(value: T | IOperandable<T>): IOperandable<T>;
|
|
47
|
+
xor(value: T | IOperandable<T>): IOperandable<T>;
|
|
26
48
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
49
|
+
|
|
50
|
+
declare class FunctionCall<T> implements IOperandable<T> {
|
|
51
|
+
constructor(func: string, args: any[]);
|
|
52
|
+
|
|
53
|
+
add(value: IOperandable<T> | T): IOperandable<T>;
|
|
54
|
+
and(value: IOperandable<T> | T): IOperandable<T>;
|
|
55
|
+
between(min: IOperandable<T> | T, max: IOperandable<T> | T): boolean;
|
|
56
|
+
div(value: IOperandable<T> | T): IOperandable<T>;
|
|
57
|
+
eq(value: IOperandable<T> | T): boolean;
|
|
58
|
+
gt(value: IOperandable<T> | T): boolean;
|
|
59
|
+
gte(value: IOperandable<T> | T): boolean;
|
|
60
|
+
has(value: ElementType<T> | IOperandable<ElementType<T>>): boolean;
|
|
61
|
+
in(value: T[] | Iterable<T> | IOperandable<T[]>): boolean;
|
|
62
|
+
like(value: string): boolean;
|
|
63
|
+
lt(value: IOperandable<T> | T): boolean;
|
|
64
|
+
lte(value: IOperandable<T> | T): boolean;
|
|
65
|
+
mod(value: IOperandable<T> | T): IOperandable<T>;
|
|
66
|
+
mul(value: IOperandable<T> | T): IOperandable<T>;
|
|
67
|
+
neq(value: IOperandable<T> | T): boolean;
|
|
68
|
+
or(value: IOperandable<T> | T): IOperandable<T>;
|
|
69
|
+
sub(value: IOperandable<T> | T): IOperandable<T>;
|
|
70
|
+
xor(value: IOperandable<T> | T): IOperandable<T>;
|
|
32
71
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
72
|
+
|
|
73
|
+
declare class Operandable<T> implements IOperandable<T> {
|
|
74
|
+
constructor(operator: string, operands: any[]);
|
|
75
|
+
|
|
76
|
+
add(value: IOperandable<T> | T): IOperandable<T>;
|
|
77
|
+
and(value: IOperandable<T> | T): IOperandable<T>;
|
|
78
|
+
between(min: IOperandable<T> | T, max: IOperandable<T> | T): boolean;
|
|
79
|
+
div(value: IOperandable<T> | T): IOperandable<T>;
|
|
80
|
+
eq(value: IOperandable<T> | T): boolean;
|
|
81
|
+
gt(value: IOperandable<T> | T): boolean;
|
|
82
|
+
gte(value: IOperandable<T> | T): boolean;
|
|
83
|
+
has(value: ElementType<T> | IOperandable<ElementType<T>>): boolean;
|
|
84
|
+
in(value: T[] | Iterable<T> | IOperandable<T[]>): boolean;
|
|
85
|
+
like(value: string): boolean;
|
|
86
|
+
lt(value: IOperandable<T> | T): boolean;
|
|
87
|
+
lte(value: IOperandable<T> | T): boolean;
|
|
88
|
+
mod(value: IOperandable<T> | T): IOperandable<T>;
|
|
89
|
+
mul(value: IOperandable<T> | T): IOperandable<T>;
|
|
90
|
+
neq(value: IOperandable<T> | T): boolean;
|
|
91
|
+
or(value: IOperandable<T> | T): IOperandable<T>;
|
|
92
|
+
sub(value: IOperandable<T> | T): IOperandable<T>;
|
|
93
|
+
xor(value: IOperandable<T> | T): IOperandable<T>;
|
|
37
94
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
95
|
+
|
|
96
|
+
declare class NamedParameter<T> implements IOperandable<T> {
|
|
97
|
+
constructor(name: string);
|
|
98
|
+
|
|
99
|
+
add(value: IOperandable<T> | T): IOperandable<T>;
|
|
100
|
+
and(value: IOperandable<T> | T): IOperandable<T>;
|
|
101
|
+
between(min: IOperandable<T> | T, max: IOperandable<T> | T): boolean;
|
|
102
|
+
div(value: IOperandable<T> | T): IOperandable<T>;
|
|
103
|
+
eq(value: IOperandable<T> | T): boolean;
|
|
104
|
+
gt(value: IOperandable<T> | T): boolean;
|
|
105
|
+
gte(value: IOperandable<T> | T): boolean;
|
|
106
|
+
has(value: ElementType<T> | IOperandable<ElementType<T>>): boolean;
|
|
107
|
+
in(value: T[] | Iterable<T> | IOperandable<T[]>): boolean;
|
|
108
|
+
like(value: string): boolean;
|
|
109
|
+
lt(value: IOperandable<T> | T): boolean;
|
|
110
|
+
lte(value: IOperandable<T> | T): boolean;
|
|
111
|
+
mod(value: IOperandable<T> | T): IOperandable<T>;
|
|
112
|
+
mul(value: IOperandable<T> | T): IOperandable<T>;
|
|
113
|
+
neq(value: IOperandable<T> | T): boolean;
|
|
114
|
+
or(value: IOperandable<T> | T): IOperandable<T>;
|
|
115
|
+
sub(value: IOperandable<T> | T): IOperandable<T>;
|
|
116
|
+
xor(value: IOperandable<T> | T): IOperandable<T>;
|
|
42
117
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
118
|
+
|
|
119
|
+
declare class UnnamedParameter<T> implements IOperandable<T> {
|
|
120
|
+
constructor(value: T);
|
|
121
|
+
|
|
122
|
+
add(value: IOperandable<T> | T): IOperandable<T>;
|
|
123
|
+
and(value: IOperandable<T> | T): IOperandable<T>;
|
|
124
|
+
between(min: IOperandable<T> | T, max: IOperandable<T> | T): boolean;
|
|
125
|
+
div(value: IOperandable<T> | T): IOperandable<T>;
|
|
126
|
+
eq(value: IOperandable<T> | T): boolean;
|
|
127
|
+
gt(value: IOperandable<T> | T): boolean;
|
|
128
|
+
gte(value: IOperandable<T> | T): boolean;
|
|
129
|
+
has(value: ElementType<T> | IOperandable<ElementType<T>>): boolean;
|
|
130
|
+
in(value: T[] | Iterable<T> | IOperandable<T[]>): boolean;
|
|
131
|
+
like(value: string): boolean;
|
|
132
|
+
lt(value: IOperandable<T> | T): boolean;
|
|
133
|
+
lte(value: IOperandable<T> | T): boolean;
|
|
134
|
+
mod(value: IOperandable<T> | T): IOperandable<T>;
|
|
135
|
+
mul(value: IOperandable<T> | T): IOperandable<T>;
|
|
136
|
+
neq(value: IOperandable<T> | T): boolean;
|
|
137
|
+
or(value: IOperandable<T> | T): IOperandable<T>;
|
|
138
|
+
sub(value: IOperandable<T> | T): IOperandable<T>;
|
|
139
|
+
xor(value: IOperandable<T> | T): IOperandable<T>;
|
|
47
140
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
141
|
+
|
|
142
|
+
declare class Constant<T> implements IOperandable<T> {
|
|
143
|
+
constructor(value: T);
|
|
144
|
+
|
|
145
|
+
add(value: IOperandable<T> | T): IOperandable<T>;
|
|
146
|
+
and(value: IOperandable<T> | T): IOperandable<T>;
|
|
147
|
+
between(min: IOperandable<T> | T, max: IOperandable<T> | T): boolean;
|
|
148
|
+
div(value: IOperandable<T> | T): IOperandable<T>;
|
|
149
|
+
eq(value: IOperandable<T> | T): boolean;
|
|
150
|
+
gt(value: IOperandable<T> | T): boolean;
|
|
151
|
+
gte(value: IOperandable<T> | T): boolean;
|
|
152
|
+
has(value: ElementType<T> | IOperandable<ElementType<T>>): boolean;
|
|
153
|
+
in(value: T[] | Iterable<T> | IOperandable<T[]>): boolean;
|
|
154
|
+
like(value: string): boolean;
|
|
155
|
+
lt(value: IOperandable<T> | T): boolean;
|
|
156
|
+
lte(value: IOperandable<T> | T): boolean;
|
|
157
|
+
mod(value: IOperandable<T> | T): IOperandable<T>;
|
|
158
|
+
mul(value: IOperandable<T> | T): IOperandable<T>;
|
|
159
|
+
neq(value: IOperandable<T> | T): boolean;
|
|
160
|
+
or(value: IOperandable<T> | T): IOperandable<T>;
|
|
161
|
+
sub(value: IOperandable<T> | T): IOperandable<T>;
|
|
162
|
+
xor(value: IOperandable<T> | T): IOperandable<T>;
|
|
59
163
|
}
|
|
164
|
+
|
|
165
|
+
declare const SupportedOperations: any;
|
|
166
|
+
|
|
167
|
+
export {ColumnWrapper, FunctionCall, Operandable, NamedParameter, UnnamedParameter, Constant, SupportedOperations, AliasWrapper}
|
package/dist/wrappers.js
CHANGED
|
@@ -1,80 +1,99 @@
|
|
|
1
|
+
|
|
1
2
|
function skipAliasInOperations(op) {
|
|
2
|
-
|
|
3
|
+
return typeof op._alias === 'string' && op._operands ? op._operands[0] : op
|
|
3
4
|
}
|
|
5
|
+
|
|
4
6
|
const SupportedOperations = {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
7
|
+
eq (value) { return new Operandable(value === null ? 'IS' : '=', [this, value === null ? 'NULL' : value])},
|
|
8
|
+
neq (value) { return new Operandable(value === null ? 'IS NOT' : '<>', [this, value === null ? 'NULL' : value])},
|
|
9
|
+
like (value) { return new Operandable('LIKE', [this, value])},
|
|
10
|
+
|
|
11
|
+
in (value) { return new Operandable('IN', [this, value])},
|
|
12
|
+
has (value) { return new Operandable('IN', [value, this])},
|
|
13
|
+
|
|
14
|
+
between(lo,hi) { return new Operandable('BETWEEN', [this, lo,hi])},
|
|
15
|
+
gt (value) { return new Operandable('>', [this, value])},
|
|
16
|
+
gte (value) { return new Operandable('>=', [this, value])},
|
|
17
|
+
lt (value) { return new Operandable('<', [this, value])},
|
|
18
|
+
lte (value) { return new Operandable('<=', [this, value])},
|
|
19
|
+
|
|
20
|
+
add (value) { return new Operandable('+', [this, value])},
|
|
21
|
+
sub (value) { return new Operandable('-', [this, value])},
|
|
22
|
+
mul (value) { return new Operandable('*', [this, value])},
|
|
23
|
+
div (value) { return new Operandable('/', [this, value])},
|
|
24
|
+
mod (value) { return new Operandable('%', [this, value])},
|
|
25
|
+
|
|
26
|
+
and (value) { return new Operandable('&', [this, value])},
|
|
27
|
+
or (value) { return new Operandable('|', [this, value])},
|
|
28
|
+
xor (value) { return new Operandable('^', [this, value])},
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function Operandable(operator, operands){
|
|
32
|
+
this._operator = operator;
|
|
33
|
+
this._operands = operands.map(op => skipAliasInOperations(op));
|
|
27
34
|
}
|
|
28
35
|
Operandable.prototype = SupportedOperations;
|
|
36
|
+
|
|
29
37
|
function FunctionCall(func, args) {
|
|
30
|
-
|
|
31
|
-
|
|
38
|
+
this._func = func;
|
|
39
|
+
this._args = args.map(op => skipAliasInOperations(op));
|
|
32
40
|
}
|
|
33
41
|
FunctionCall.prototype = SupportedOperations;
|
|
42
|
+
|
|
34
43
|
function ColumnWrapper(column) {
|
|
35
|
-
|
|
44
|
+
this._column = column;
|
|
36
45
|
}
|
|
37
46
|
ColumnWrapper.prototype = SupportedOperations;
|
|
47
|
+
|
|
38
48
|
function AliasWrapper(expr, alias) {
|
|
39
|
-
|
|
40
|
-
|
|
49
|
+
this._alias = alias;
|
|
50
|
+
this._operands = [expr];
|
|
41
51
|
}
|
|
42
52
|
AliasWrapper.prototype = SupportedOperations;
|
|
53
|
+
|
|
43
54
|
function NamedParameter(name) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
55
|
+
if (/^p\d+$/.test(name)) {
|
|
56
|
+
throw new Error(`Named parameter ${name} is reserved`);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (!/^[a-zA-Z0-9_]+$/.test(name)) {
|
|
60
|
+
throw new Error(`Named parameter should be valid identifier`);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
this._named = name;
|
|
51
64
|
}
|
|
52
65
|
NamedParameter.prototype = SupportedOperations;
|
|
66
|
+
|
|
53
67
|
function UnnamedParameter(value) {
|
|
54
|
-
|
|
68
|
+
this._value = value;
|
|
55
69
|
}
|
|
56
70
|
UnnamedParameter.prototype = SupportedOperations;
|
|
71
|
+
|
|
72
|
+
|
|
57
73
|
function Constant(value) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
return value == null || ['string', 'number', 'boolean'].indexOf(typeof value) >= 0;
|
|
74
|
+
function check(value) {
|
|
75
|
+
if (Array.isArray(value)) {
|
|
76
|
+
return value.length > 0 && value.every(check);
|
|
63
77
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
78
|
+
return value == null || ['string', 'number', 'boolean'].indexOf(typeof value) >= 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (!check(value)) {
|
|
82
|
+
throw new Error(`Constant expected to be null, number, string, boolean or array of such values. Got ${JSON.stringify(value)}`);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
this._const = value;
|
|
68
86
|
}
|
|
69
87
|
Constant.prototype = SupportedOperations;
|
|
88
|
+
|
|
89
|
+
|
|
70
90
|
module.exports = {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=wrappers.js.map
|
|
91
|
+
SupportedOperations,
|
|
92
|
+
ColumnWrapper,
|
|
93
|
+
FunctionCall,
|
|
94
|
+
NamedParameter,
|
|
95
|
+
UnnamedParameter,
|
|
96
|
+
Constant,
|
|
97
|
+
AliasWrapper,
|
|
98
|
+
Operandable,
|
|
99
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ts-awesome/orm",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.5",
|
|
4
4
|
"description": "TypeScript friendly minimalistic ORM",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
12
|
"build:dev": "tsc --project tsconfig.json",
|
|
13
|
-
"build": "npm run build:dev
|
|
13
|
+
"build": "npm run build:dev ; cp src/wrappers* dist/",
|
|
14
14
|
"lint": "eslint \"src/**/*.ts\"",
|
|
15
15
|
"test": "jest"
|
|
16
16
|
},
|
package/tests/builder.spec.js
CHANGED
|
@@ -526,6 +526,29 @@ describe('Select', () => {
|
|
|
526
526
|
}
|
|
527
527
|
}]);
|
|
528
528
|
});
|
|
529
|
+
it('CASE operator', () => {
|
|
530
|
+
const query = (0, dist_1.Select)(models_1.Person)
|
|
531
|
+
.columns(x => [(0, dist_1.alias)((0, dist_2.case_)({ when: x.age.gte(2), then: 'yes' }, { else: 'no' }), 'dynamic')]);
|
|
532
|
+
expect(query._columns).toStrictEqual([{
|
|
533
|
+
"_alias": "dynamic",
|
|
534
|
+
"_operands": [{
|
|
535
|
+
"_operator": "CASE",
|
|
536
|
+
"_operands": [
|
|
537
|
+
{
|
|
538
|
+
"when": {
|
|
539
|
+
"_operator": ">=",
|
|
540
|
+
"_operands": [
|
|
541
|
+
{ "_column": { "name": "age", "table": "Person" } },
|
|
542
|
+
2
|
|
543
|
+
]
|
|
544
|
+
},
|
|
545
|
+
"then": "yes",
|
|
546
|
+
},
|
|
547
|
+
{ "else": "no" }
|
|
548
|
+
]
|
|
549
|
+
}]
|
|
550
|
+
}]);
|
|
551
|
+
});
|
|
529
552
|
it('intersect operator', () => {
|
|
530
553
|
const query = (0, dist_1.Select)(models_1.Person)
|
|
531
554
|
.columns(['name'])
|
package/tests/builder.spec.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {alias, and, asc, Delete, desc, Insert, max, Select, sum, TableMetadataSymbol, Update, Upsert, of} from '../dist';
|
|
2
2
|
import { Employee, Person, Tag } from './models';
|
|
3
3
|
import { TableRef, readModelMeta } from '../dist/builder';
|
|
4
|
-
import {count, dbField, dbTable, exists} from "../dist";
|
|
4
|
+
import {count, dbField, dbTable, exists, case_} from "../dist";
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
const tableInfo = readModelMeta(Person);
|
|
@@ -567,6 +567,31 @@ describe('Select', () => {
|
|
|
567
567
|
}])
|
|
568
568
|
})
|
|
569
569
|
|
|
570
|
+
it('CASE operator', () => {
|
|
571
|
+
const query = Select(Person)
|
|
572
|
+
.columns(x => [alias(case_({when: x.age.gte(2), then: 'yes'}, {else: 'no'}), 'dynamic')])
|
|
573
|
+
|
|
574
|
+
expect(query._columns).toStrictEqual([{
|
|
575
|
+
"_alias": "dynamic",
|
|
576
|
+
"_operands": [{
|
|
577
|
+
"_operator": "CASE",
|
|
578
|
+
"_operands": [
|
|
579
|
+
{
|
|
580
|
+
"when": {
|
|
581
|
+
"_operator": ">=",
|
|
582
|
+
"_operands": [
|
|
583
|
+
{ "_column": {"name": "age", "table": "Person"}},
|
|
584
|
+
2
|
|
585
|
+
]
|
|
586
|
+
},
|
|
587
|
+
"then": "yes",
|
|
588
|
+
},
|
|
589
|
+
{"else": "no"}
|
|
590
|
+
]
|
|
591
|
+
}]
|
|
592
|
+
}])
|
|
593
|
+
})
|
|
594
|
+
|
|
570
595
|
it ('intersect operator', () => {
|
|
571
596
|
const query = Select(Person)
|
|
572
597
|
.columns(['name'])
|