@sqb/builder 4.1.4 → 4.2.1
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/SerializeContext.js +4 -3
- package/dist/enums.d.ts +4 -0
- package/dist/enums.js +4 -0
- package/dist/query/InsertQuery.js +2 -3
- package/dist/query/SelectQuery.d.ts +4 -4
- package/dist/query/SelectQuery.js +3 -2
- package/dist/query/UpdateQuery.js +1 -1
- package/dist/sql-objects/CoalesceStatement.d.ts +22 -0
- package/dist/sql-objects/CoalesceStatement.js +44 -0
- package/dist/sql-objects/LowerStatement.d.ts +22 -0
- package/dist/sql-objects/LowerStatement.js +39 -0
- package/dist/sql-objects/StringAggStatement.d.ts +31 -0
- package/dist/sql-objects/StringAggStatement.js +78 -0
- package/dist/sql-objects/UpperStatement.d.ts +22 -0
- package/dist/sql-objects/UpperStatement.js +39 -0
- package/dist/sql-objects/operators/CompOperator.js +2 -3
- package/dist/sql-objects/operators/LogicalOperator.js +3 -2
- package/dist/sqlobject.initializers.d.ts +8 -0
- package/dist/sqlobject.initializers.js +21 -1
- package/dist/typeguards.d.ts +1 -0
- package/dist/typeguards.js +6 -1
- package/package.json +3 -2
package/dist/SerializeContext.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.SerializeContext = void 0;
|
|
|
4
4
|
const enums_1 = require("./enums");
|
|
5
5
|
const extensions_1 = require("./extensions");
|
|
6
6
|
const Serializable_1 = require("./Serializable");
|
|
7
|
+
const typeguards_1 = require("./typeguards");
|
|
7
8
|
class SerializeContext {
|
|
8
9
|
constructor(opts) {
|
|
9
10
|
this.reservedWords = [
|
|
@@ -52,11 +53,11 @@ class SerializeContext {
|
|
|
52
53
|
return this.serialize(enums_1.SerializationType.ARRAY, vv, () => '(' + v.join(',')) + ')';
|
|
53
54
|
}
|
|
54
55
|
if (typeof v === 'object') {
|
|
55
|
-
if (
|
|
56
|
+
if ((0, typeguards_1.isSerializable)(v)) {
|
|
56
57
|
const s = v._serialize(this);
|
|
57
|
-
return s ? (
|
|
58
|
+
return s ? ((0, typeguards_1.isQuery)(v) || (0, typeguards_1.isLogicalOperator)(v) ? '(' + s + ')' : s) :
|
|
58
59
|
/* istanbul ignore next */
|
|
59
|
-
'
|
|
60
|
+
'';
|
|
60
61
|
}
|
|
61
62
|
if (v instanceof Date) {
|
|
62
63
|
return this.serialize(enums_1.SerializationType.DATE_VALUE, v, () => this.dateToSQL(v));
|
package/dist/enums.d.ts
CHANGED
|
@@ -29,6 +29,10 @@ export declare enum SerializationType {
|
|
|
29
29
|
JOIN_CONDITIONS = "join_conditions",
|
|
30
30
|
RAW = "raw",
|
|
31
31
|
CASE_STATEMENT = "case_expression",
|
|
32
|
+
COALESCE_STATEMENT = "coalesce_expression",
|
|
33
|
+
LOWER_STATEMENT = "lower_expression",
|
|
34
|
+
UPPER_STATEMENT = "upper_expression",
|
|
35
|
+
STRINGAGG_STATEMENT = "StringAGG_expression",
|
|
32
36
|
COUNT_STATEMENT = "count_expression",
|
|
33
37
|
CONDITIONS_BLOCK = "conditions_block",
|
|
34
38
|
COMPARISON_EXPRESSION = "comparison_expression",
|
package/dist/enums.js
CHANGED
|
@@ -34,6 +34,10 @@ var SerializationType;
|
|
|
34
34
|
SerializationType["JOIN_CONDITIONS"] = "join_conditions";
|
|
35
35
|
SerializationType["RAW"] = "raw";
|
|
36
36
|
SerializationType["CASE_STATEMENT"] = "case_expression";
|
|
37
|
+
SerializationType["COALESCE_STATEMENT"] = "coalesce_expression";
|
|
38
|
+
SerializationType["LOWER_STATEMENT"] = "lower_expression";
|
|
39
|
+
SerializationType["UPPER_STATEMENT"] = "upper_expression";
|
|
40
|
+
SerializationType["STRINGAGG_STATEMENT"] = "StringAGG_expression";
|
|
37
41
|
SerializationType["COUNT_STATEMENT"] = "count_expression";
|
|
38
42
|
SerializationType["CONDITIONS_BLOCK"] = "conditions_block";
|
|
39
43
|
SerializationType["COMPARISON_EXPRESSION"] = "comparison_expression";
|
|
@@ -66,9 +66,8 @@ class InsertQuery extends ReturningQuery_1.ReturningQuery {
|
|
|
66
66
|
const arr = [];
|
|
67
67
|
const allValues = this._input;
|
|
68
68
|
for (const n of Object.keys(allValues)) {
|
|
69
|
-
const s = ctx.anyToSQL(allValues[n]);
|
|
70
|
-
|
|
71
|
-
arr.push((0, typeguards_1.isSelectQuery)(allValues[n]) ? '(' + s + ')' : s);
|
|
69
|
+
const s = ctx.anyToSQL(allValues[n]) || 'null';
|
|
70
|
+
arr.push(s);
|
|
72
71
|
}
|
|
73
72
|
return ctx.serialize(enums_1.SerializationType.INSERT_QUERY_VALUES, arr, () => (0, helpers_1.printArray)(arr));
|
|
74
73
|
}
|
|
@@ -12,8 +12,8 @@ export declare class SelectQuery extends Query {
|
|
|
12
12
|
_columns?: Serializable[];
|
|
13
13
|
_joins?: JoinStatement[];
|
|
14
14
|
_where?: LogicalOperator;
|
|
15
|
-
_groupBy?: (GroupColumn |
|
|
16
|
-
_orderBy?: (OrderColumn |
|
|
15
|
+
_groupBy?: (GroupColumn | Serializable)[];
|
|
16
|
+
_orderBy?: (OrderColumn | Serializable)[];
|
|
17
17
|
_limit?: number;
|
|
18
18
|
_offset?: number;
|
|
19
19
|
_alias?: string;
|
|
@@ -39,11 +39,11 @@ export declare class SelectQuery extends Query {
|
|
|
39
39
|
/**
|
|
40
40
|
* Defines "where" part of query
|
|
41
41
|
*/
|
|
42
|
-
groupBy(...field: (string |
|
|
42
|
+
groupBy(...field: (string | Serializable)[]): this;
|
|
43
43
|
/**
|
|
44
44
|
* Defines "order by" part of query.
|
|
45
45
|
*/
|
|
46
|
-
orderBy(...field: (string |
|
|
46
|
+
orderBy(...field: (string | Serializable)[]): this;
|
|
47
47
|
/**
|
|
48
48
|
* Sets alias for sub-select queries
|
|
49
49
|
*/
|
|
@@ -183,12 +183,13 @@ class SelectQuery extends Query_1.Query {
|
|
|
183
183
|
const arr = [];
|
|
184
184
|
if (this._columns)
|
|
185
185
|
for (const t of this._columns) {
|
|
186
|
-
const s =
|
|
186
|
+
const s = ctx.anyToSQL(t);
|
|
187
|
+
// t._serialize(ctx);
|
|
187
188
|
if (s) {
|
|
188
189
|
if (t instanceof SelectQuery) {
|
|
189
190
|
if (!t._alias)
|
|
190
191
|
throw new TypeError('Alias required for sub-select in columns');
|
|
191
|
-
arr.push(
|
|
192
|
+
arr.push(s + ' ' + t._alias);
|
|
192
193
|
}
|
|
193
194
|
else
|
|
194
195
|
arr.push(s);
|
|
@@ -56,7 +56,7 @@ class UpdateQuery extends ReturningQuery_1.ReturningQuery {
|
|
|
56
56
|
const value = ctx.anyToSQL(allValues[n]);
|
|
57
57
|
arr.push({
|
|
58
58
|
field: n,
|
|
59
|
-
value
|
|
59
|
+
value
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
return ctx.serialize(enums_1.SerializationType.UPDATE_QUERY_VALUES, arr, () => {
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SerializationType } from '../enums';
|
|
2
|
+
import { Serializable } from '../Serializable';
|
|
3
|
+
import { SerializeContext } from '../SerializeContext';
|
|
4
|
+
export declare class CoalesceStatement extends Serializable {
|
|
5
|
+
_expressions: any[];
|
|
6
|
+
_alias?: string;
|
|
7
|
+
constructor(...expressions: any[]);
|
|
8
|
+
get _type(): SerializationType;
|
|
9
|
+
/**
|
|
10
|
+
* Sets alias to case expression.
|
|
11
|
+
*/
|
|
12
|
+
as(alias: string): this;
|
|
13
|
+
/**
|
|
14
|
+
* Performs serialization
|
|
15
|
+
*
|
|
16
|
+
* @param {Object} ctx
|
|
17
|
+
* @return {string}
|
|
18
|
+
* @override
|
|
19
|
+
*/
|
|
20
|
+
_serialize(ctx: SerializeContext): string;
|
|
21
|
+
protected __defaultSerialize(ctx: SerializeContext, o: any): string;
|
|
22
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CoalesceStatement = void 0;
|
|
4
|
+
const enums_1 = require("../enums");
|
|
5
|
+
const Serializable_1 = require("../Serializable");
|
|
6
|
+
class CoalesceStatement extends Serializable_1.Serializable {
|
|
7
|
+
constructor(...expressions) {
|
|
8
|
+
super();
|
|
9
|
+
this._expressions = expressions;
|
|
10
|
+
}
|
|
11
|
+
get _type() {
|
|
12
|
+
return enums_1.SerializationType.COALESCE_STATEMENT;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Sets alias to case expression.
|
|
16
|
+
*/
|
|
17
|
+
as(alias) {
|
|
18
|
+
this._alias = alias;
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Performs serialization
|
|
23
|
+
*
|
|
24
|
+
* @param {Object} ctx
|
|
25
|
+
* @return {string}
|
|
26
|
+
* @override
|
|
27
|
+
*/
|
|
28
|
+
_serialize(ctx) {
|
|
29
|
+
if (!this._expressions.length)
|
|
30
|
+
return '';
|
|
31
|
+
const q = {
|
|
32
|
+
expressions: [],
|
|
33
|
+
};
|
|
34
|
+
for (const x of this._expressions) {
|
|
35
|
+
q.expressions.push(ctx.anyToSQL(x));
|
|
36
|
+
}
|
|
37
|
+
return ctx.serialize(this._type, q, () => this.__defaultSerialize(ctx, q));
|
|
38
|
+
}
|
|
39
|
+
__defaultSerialize(ctx, o) {
|
|
40
|
+
return 'coalesce(' + o.expressions.join(', ') + ')' +
|
|
41
|
+
(this._alias ? ' ' + this._alias : '');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.CoalesceStatement = CoalesceStatement;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SerializationType } from '../enums';
|
|
2
|
+
import { Serializable } from '../Serializable';
|
|
3
|
+
import { SerializeContext } from '../SerializeContext';
|
|
4
|
+
export declare class LowerStatement extends Serializable {
|
|
5
|
+
_expression: any;
|
|
6
|
+
_alias?: string;
|
|
7
|
+
constructor(expression: any);
|
|
8
|
+
get _type(): SerializationType;
|
|
9
|
+
/**
|
|
10
|
+
* Sets alias to case expression.
|
|
11
|
+
*/
|
|
12
|
+
as(alias: string): this;
|
|
13
|
+
/**
|
|
14
|
+
* Performs serialization
|
|
15
|
+
*
|
|
16
|
+
* @param {Object} ctx
|
|
17
|
+
* @return {string}
|
|
18
|
+
* @override
|
|
19
|
+
*/
|
|
20
|
+
_serialize(ctx: SerializeContext): string;
|
|
21
|
+
protected __defaultSerialize(ctx: SerializeContext, o: any): string;
|
|
22
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LowerStatement = void 0;
|
|
4
|
+
const enums_1 = require("../enums");
|
|
5
|
+
const Serializable_1 = require("../Serializable");
|
|
6
|
+
class LowerStatement extends Serializable_1.Serializable {
|
|
7
|
+
constructor(expression) {
|
|
8
|
+
super();
|
|
9
|
+
this._expression = expression;
|
|
10
|
+
}
|
|
11
|
+
get _type() {
|
|
12
|
+
return enums_1.SerializationType.LOWER_STATEMENT;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Sets alias to case expression.
|
|
16
|
+
*/
|
|
17
|
+
as(alias) {
|
|
18
|
+
this._alias = alias;
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Performs serialization
|
|
23
|
+
*
|
|
24
|
+
* @param {Object} ctx
|
|
25
|
+
* @return {string}
|
|
26
|
+
* @override
|
|
27
|
+
*/
|
|
28
|
+
_serialize(ctx) {
|
|
29
|
+
if (!this._expression)
|
|
30
|
+
return '';
|
|
31
|
+
const q = ctx.anyToSQL(this._expression);
|
|
32
|
+
return ctx.serialize(this._type, q, () => this.__defaultSerialize(ctx, q));
|
|
33
|
+
}
|
|
34
|
+
__defaultSerialize(ctx, o) {
|
|
35
|
+
return 'lower(' + o + ')' +
|
|
36
|
+
(this._alias ? ' ' + this._alias : '');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.LowerStatement = LowerStatement;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { SerializationType } from '../enums';
|
|
2
|
+
import { Serializable } from '../Serializable';
|
|
3
|
+
import { SerializeContext } from '../SerializeContext';
|
|
4
|
+
import { OrderColumn } from './OrderColumn';
|
|
5
|
+
export declare class StringAGGStatement extends Serializable {
|
|
6
|
+
_field: Serializable;
|
|
7
|
+
_delimiter: string;
|
|
8
|
+
_orderBy?: (OrderColumn | Serializable)[];
|
|
9
|
+
_alias?: string;
|
|
10
|
+
constructor(field: string | Serializable, delimiter?: string);
|
|
11
|
+
get _type(): SerializationType;
|
|
12
|
+
delimiter(value: string): this;
|
|
13
|
+
/**
|
|
14
|
+
* Defines "order by" part of StringAGG.
|
|
15
|
+
*/
|
|
16
|
+
orderBy(...field: (string | Serializable)[]): this;
|
|
17
|
+
/**
|
|
18
|
+
* Sets alias to case expression.
|
|
19
|
+
*/
|
|
20
|
+
as(alias: string): this;
|
|
21
|
+
/**
|
|
22
|
+
* Performs serialization
|
|
23
|
+
*
|
|
24
|
+
* @param {Object} ctx
|
|
25
|
+
* @return {string}
|
|
26
|
+
* @override
|
|
27
|
+
*/
|
|
28
|
+
_serialize(ctx: SerializeContext): string;
|
|
29
|
+
protected __serializeOrderColumns(ctx: SerializeContext): string;
|
|
30
|
+
protected __defaultSerialize(ctx: SerializeContext, o: any): string;
|
|
31
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StringAGGStatement = void 0;
|
|
4
|
+
const enums_1 = require("../enums");
|
|
5
|
+
const helpers_1 = require("../helpers");
|
|
6
|
+
const Serializable_1 = require("../Serializable");
|
|
7
|
+
const FieldExpression_1 = require("./FieldExpression");
|
|
8
|
+
const OrderColumn_1 = require("./OrderColumn");
|
|
9
|
+
class StringAGGStatement extends Serializable_1.Serializable {
|
|
10
|
+
constructor(field, delimiter) {
|
|
11
|
+
super();
|
|
12
|
+
this._field = typeof field === 'string' ? new FieldExpression_1.FieldExpression(field) : field;
|
|
13
|
+
this._delimiter = delimiter || ',';
|
|
14
|
+
}
|
|
15
|
+
get _type() {
|
|
16
|
+
return enums_1.SerializationType.STRINGAGG_STATEMENT;
|
|
17
|
+
}
|
|
18
|
+
delimiter(value) {
|
|
19
|
+
this._delimiter = value;
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Defines "order by" part of StringAGG.
|
|
24
|
+
*/
|
|
25
|
+
orderBy(...field) {
|
|
26
|
+
this._orderBy = this._orderBy || [];
|
|
27
|
+
for (const arg of field) {
|
|
28
|
+
if (!arg)
|
|
29
|
+
continue;
|
|
30
|
+
this._orderBy.push(typeof arg === 'string' ? new OrderColumn_1.OrderColumn(arg) : arg);
|
|
31
|
+
}
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Sets alias to case expression.
|
|
36
|
+
*/
|
|
37
|
+
as(alias) {
|
|
38
|
+
this._alias = alias;
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Performs serialization
|
|
43
|
+
*
|
|
44
|
+
* @param {Object} ctx
|
|
45
|
+
* @return {string}
|
|
46
|
+
* @override
|
|
47
|
+
*/
|
|
48
|
+
_serialize(ctx) {
|
|
49
|
+
const q = {
|
|
50
|
+
field: ctx.anyToSQL(this._field),
|
|
51
|
+
delimiter: this._delimiter,
|
|
52
|
+
orderBy: this.__serializeOrderColumns(ctx),
|
|
53
|
+
alias: this._alias
|
|
54
|
+
};
|
|
55
|
+
return ctx.serialize(this._type, q, () => this.__defaultSerialize(ctx, q));
|
|
56
|
+
}
|
|
57
|
+
__serializeOrderColumns(ctx) {
|
|
58
|
+
const arr = [];
|
|
59
|
+
if (this._orderBy)
|
|
60
|
+
for (const t of this._orderBy) {
|
|
61
|
+
const s = t._serialize(ctx);
|
|
62
|
+
/* istanbul ignore else */
|
|
63
|
+
if (s)
|
|
64
|
+
arr.push(s);
|
|
65
|
+
}
|
|
66
|
+
return ctx.serialize(enums_1.SerializationType.SELECT_QUERY_ORDERBY, arr, () => {
|
|
67
|
+
const s = (0, helpers_1.printArray)(arr);
|
|
68
|
+
return s ? 'order by ' + s : '';
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
__defaultSerialize(ctx, o) {
|
|
72
|
+
return 'string_agg(' + o.field +
|
|
73
|
+
',\'' + o.delimiter + '\'' +
|
|
74
|
+
(o.orderBy ? ' ' + o.orderBy : '') + ')' +
|
|
75
|
+
(o.alias ? ' ' + o.alias : '');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.StringAGGStatement = StringAGGStatement;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SerializationType } from '../enums';
|
|
2
|
+
import { Serializable } from '../Serializable';
|
|
3
|
+
import { SerializeContext } from '../SerializeContext';
|
|
4
|
+
export declare class UpperStatement extends Serializable {
|
|
5
|
+
_expression: any;
|
|
6
|
+
_alias?: string;
|
|
7
|
+
constructor(expression: any);
|
|
8
|
+
get _type(): SerializationType;
|
|
9
|
+
/**
|
|
10
|
+
* Sets alias to case expression.
|
|
11
|
+
*/
|
|
12
|
+
as(alias: string): this;
|
|
13
|
+
/**
|
|
14
|
+
* Performs serialization
|
|
15
|
+
*
|
|
16
|
+
* @param {Object} ctx
|
|
17
|
+
* @return {string}
|
|
18
|
+
* @override
|
|
19
|
+
*/
|
|
20
|
+
_serialize(ctx: SerializeContext): string;
|
|
21
|
+
protected __defaultSerialize(ctx: SerializeContext, o: any): string;
|
|
22
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UpperStatement = void 0;
|
|
4
|
+
const enums_1 = require("../enums");
|
|
5
|
+
const Serializable_1 = require("../Serializable");
|
|
6
|
+
class UpperStatement extends Serializable_1.Serializable {
|
|
7
|
+
constructor(expression) {
|
|
8
|
+
super();
|
|
9
|
+
this._expression = expression;
|
|
10
|
+
}
|
|
11
|
+
get _type() {
|
|
12
|
+
return enums_1.SerializationType.UPPER_STATEMENT;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Sets alias to case expression.
|
|
16
|
+
*/
|
|
17
|
+
as(alias) {
|
|
18
|
+
this._alias = alias;
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Performs serialization
|
|
23
|
+
*
|
|
24
|
+
* @param {Object} ctx
|
|
25
|
+
* @return {string}
|
|
26
|
+
* @override
|
|
27
|
+
*/
|
|
28
|
+
_serialize(ctx) {
|
|
29
|
+
if (!this._expression)
|
|
30
|
+
return '';
|
|
31
|
+
const q = ctx.anyToSQL(this._expression);
|
|
32
|
+
return ctx.serialize(this._type, q, () => this.__defaultSerialize(ctx, q));
|
|
33
|
+
}
|
|
34
|
+
__defaultSerialize(ctx, o) {
|
|
35
|
+
return 'upper(' + o + ')' +
|
|
36
|
+
(this._alias ? ' ' + this._alias : '');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.UpperStatement = UpperStatement;
|
|
@@ -4,7 +4,6 @@ exports.CompOperator = void 0;
|
|
|
4
4
|
const enums_1 = require("../../enums");
|
|
5
5
|
const Serializable_1 = require("../../Serializable");
|
|
6
6
|
const sqlobject_initializers_1 = require("../../sqlobject.initializers");
|
|
7
|
-
const typeguards_1 = require("../../typeguards");
|
|
8
7
|
const FieldExpression_1 = require("../FieldExpression");
|
|
9
8
|
const Operator_1 = require("../Operator");
|
|
10
9
|
const ParamExpression_1 = require("../ParamExpression");
|
|
@@ -49,9 +48,9 @@ class CompOperator extends Operator_1.Operator {
|
|
|
49
48
|
x = (0, sqlobject_initializers_1.Param)(name);
|
|
50
49
|
}
|
|
51
50
|
if (x instanceof Serializable_1.Serializable) {
|
|
52
|
-
const expression =
|
|
51
|
+
const expression = ctx.anyToSQL(x);
|
|
53
52
|
const result = {
|
|
54
|
-
expression
|
|
53
|
+
expression
|
|
55
54
|
};
|
|
56
55
|
if (x instanceof FieldExpression_1.FieldExpression) {
|
|
57
56
|
result.dataType = result._dataType;
|
|
@@ -43,16 +43,17 @@ class LogicalOperator extends Operator_1.Operator {
|
|
|
43
43
|
_serialize(ctx) {
|
|
44
44
|
const arr = [];
|
|
45
45
|
for (const t of this._items) {
|
|
46
|
-
const s =
|
|
46
|
+
const s = ctx.anyToSQL(t);
|
|
47
47
|
/* istanbul ignore else */
|
|
48
48
|
if (s)
|
|
49
|
-
arr.push(
|
|
49
|
+
arr.push(s);
|
|
50
50
|
}
|
|
51
51
|
return ctx.serialize(enums_1.SerializationType.LOGICAL_EXPRESSION, arr, () => {
|
|
52
52
|
const s = (0, helpers_1.printArray)(arr, ' ' + String(this._operatorType));
|
|
53
53
|
return (s.indexOf('\n') > 0) ? s.replace('\n', '\n\t') + '\b' : s;
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
|
+
// noinspection JSMethodCanBeStatic
|
|
56
57
|
_wrapObject(obj) {
|
|
57
58
|
const result = [];
|
|
58
59
|
for (const n of Object.getOwnPropertyNames(obj)) {
|
|
@@ -5,11 +5,15 @@ import { SelectQuery } from './query/SelectQuery';
|
|
|
5
5
|
import { UpdateQuery } from './query/UpdateQuery';
|
|
6
6
|
import { Serializable } from './Serializable';
|
|
7
7
|
import { CaseStatement } from './sql-objects/CaseStatement';
|
|
8
|
+
import { CoalesceStatement } from './sql-objects/CoalesceStatement';
|
|
8
9
|
import { CountStatement } from './sql-objects/CountStatement';
|
|
9
10
|
import { FieldExpression } from './sql-objects/FieldExpression';
|
|
10
11
|
import { JoinStatement } from './sql-objects/JoinStatement';
|
|
12
|
+
import { LowerStatement } from './sql-objects/LowerStatement';
|
|
11
13
|
import { ParamExpression } from './sql-objects/ParamExpression';
|
|
12
14
|
import { RawStatement } from './sql-objects/RawStatement';
|
|
15
|
+
import { StringAGGStatement } from './sql-objects/StringAggStatement';
|
|
16
|
+
import { UpperStatement } from './sql-objects/UpperStatement';
|
|
13
17
|
export declare function Raw(text: string): RawStatement;
|
|
14
18
|
export declare function Select(...column: (string | string[] | Serializable)[]): SelectQuery;
|
|
15
19
|
export declare function Insert(tableName: string | RawStatement, input: any): InsertQuery;
|
|
@@ -24,6 +28,10 @@ export declare function RightOuterJoin(table: string | SelectQuery | RawStatemen
|
|
|
24
28
|
export declare function OuterJoin(table: string | SelectQuery | RawStatement): JoinStatement;
|
|
25
29
|
export declare function FullOuterJoin(table: string | SelectQuery | RawStatement): JoinStatement;
|
|
26
30
|
export declare function Case(): CaseStatement;
|
|
31
|
+
export declare function Coalesce(...expressions: any[]): CoalesceStatement;
|
|
32
|
+
export declare function Lower(expression: any): LowerStatement;
|
|
33
|
+
export declare function Upper(expression: any): UpperStatement;
|
|
34
|
+
export declare function StringAGG(field: any): StringAGGStatement;
|
|
27
35
|
export declare function Count(): CountStatement;
|
|
28
36
|
export declare function Param(name: string, dataType?: DataType, isArray?: boolean): ParamExpression;
|
|
29
37
|
export declare function Param(args: {
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Field = exports.Param = exports.Count = exports.Case = exports.FullOuterJoin = exports.OuterJoin = exports.RightOuterJoin = exports.RightJoin = exports.LeftOuterJoin = exports.LeftJoin = exports.InnerJoin = exports.Join = exports.Delete = exports.Update = exports.Insert = exports.Select = exports.Raw = void 0;
|
|
3
|
+
exports.Field = exports.Param = exports.Count = exports.StringAGG = exports.Upper = exports.Lower = exports.Coalesce = exports.Case = exports.FullOuterJoin = exports.OuterJoin = exports.RightOuterJoin = exports.RightJoin = exports.LeftOuterJoin = exports.LeftJoin = exports.InnerJoin = exports.Join = exports.Delete = exports.Update = exports.Insert = exports.Select = exports.Raw = void 0;
|
|
4
4
|
const enums_1 = require("./enums");
|
|
5
5
|
const DeleteQuery_1 = require("./query/DeleteQuery");
|
|
6
6
|
const InsertQuery_1 = require("./query/InsertQuery");
|
|
7
7
|
const SelectQuery_1 = require("./query/SelectQuery");
|
|
8
8
|
const UpdateQuery_1 = require("./query/UpdateQuery");
|
|
9
9
|
const CaseStatement_1 = require("./sql-objects/CaseStatement");
|
|
10
|
+
const CoalesceStatement_1 = require("./sql-objects/CoalesceStatement");
|
|
10
11
|
const CountStatement_1 = require("./sql-objects/CountStatement");
|
|
11
12
|
const FieldExpression_1 = require("./sql-objects/FieldExpression");
|
|
12
13
|
const JoinStatement_1 = require("./sql-objects/JoinStatement");
|
|
14
|
+
const LowerStatement_1 = require("./sql-objects/LowerStatement");
|
|
13
15
|
const ParamExpression_1 = require("./sql-objects/ParamExpression");
|
|
14
16
|
const RawStatement_1 = require("./sql-objects/RawStatement");
|
|
17
|
+
const StringAggStatement_1 = require("./sql-objects/StringAggStatement");
|
|
18
|
+
const UpperStatement_1 = require("./sql-objects/UpperStatement");
|
|
15
19
|
function Raw(text) {
|
|
16
20
|
return new RawStatement_1.RawStatement(text);
|
|
17
21
|
}
|
|
@@ -68,6 +72,22 @@ function Case() {
|
|
|
68
72
|
return new CaseStatement_1.CaseStatement();
|
|
69
73
|
}
|
|
70
74
|
exports.Case = Case;
|
|
75
|
+
function Coalesce(...expressions) {
|
|
76
|
+
return new CoalesceStatement_1.CoalesceStatement(...expressions);
|
|
77
|
+
}
|
|
78
|
+
exports.Coalesce = Coalesce;
|
|
79
|
+
function Lower(expression) {
|
|
80
|
+
return new LowerStatement_1.LowerStatement(expression);
|
|
81
|
+
}
|
|
82
|
+
exports.Lower = Lower;
|
|
83
|
+
function Upper(expression) {
|
|
84
|
+
return new UpperStatement_1.UpperStatement(expression);
|
|
85
|
+
}
|
|
86
|
+
exports.Upper = Upper;
|
|
87
|
+
function StringAGG(field) {
|
|
88
|
+
return new StringAggStatement_1.StringAGGStatement(field);
|
|
89
|
+
}
|
|
90
|
+
exports.StringAGG = StringAGG;
|
|
71
91
|
function Count() {
|
|
72
92
|
return new CountStatement_1.CountStatement();
|
|
73
93
|
}
|
package/dist/typeguards.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ import type { RawStatement } from './sql-objects/RawStatement';
|
|
|
16
16
|
import type { ReturningColumn } from './sql-objects/ReturningColumn';
|
|
17
17
|
import type { TableName } from './sql-objects/TableName';
|
|
18
18
|
export declare function isSerializable(value: any): value is Serializable;
|
|
19
|
+
export declare function isQuery(value: any): value is Serializable;
|
|
19
20
|
export declare function isRawStatement(value: any): value is RawStatement;
|
|
20
21
|
export declare function isSelectQuery(value: any): value is SelectQuery;
|
|
21
22
|
export declare function isInsertQuery(value: any): value is InsertQuery;
|
package/dist/typeguards.js
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isTableName = exports.isReturningColumn = exports.isGroupColumn = exports.isOrderColumn = exports.isSelectColumn = exports.isCompOperator = exports.isLogicalOperator = exports.isParamExpression = exports.isCountStatement = exports.isCaseStatement = exports.isJoinStatement = exports.isDeleteQuery = exports.isIUpdateQuery = exports.isInsertQuery = exports.isSelectQuery = exports.isRawStatement = exports.isSerializable = void 0;
|
|
3
|
+
exports.isTableName = exports.isReturningColumn = exports.isGroupColumn = exports.isOrderColumn = exports.isSelectColumn = exports.isCompOperator = exports.isLogicalOperator = exports.isParamExpression = exports.isCountStatement = exports.isCaseStatement = exports.isJoinStatement = exports.isDeleteQuery = exports.isIUpdateQuery = exports.isInsertQuery = exports.isSelectQuery = exports.isRawStatement = exports.isQuery = exports.isSerializable = void 0;
|
|
4
4
|
const enums_1 = require("./enums");
|
|
5
|
+
const Query_1 = require("./query/Query");
|
|
5
6
|
const Serializable_1 = require("./Serializable");
|
|
6
7
|
function isSerializable(value) {
|
|
7
8
|
return value instanceof Serializable_1.Serializable;
|
|
8
9
|
}
|
|
9
10
|
exports.isSerializable = isSerializable;
|
|
11
|
+
function isQuery(value) {
|
|
12
|
+
return value instanceof Query_1.Query;
|
|
13
|
+
}
|
|
14
|
+
exports.isQuery = isQuery;
|
|
10
15
|
function isRawStatement(value) {
|
|
11
16
|
return isSerializable(value) && value._type === enums_1.SerializationType.RAW;
|
|
12
17
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sqb/builder",
|
|
3
3
|
"description": "Extensible multi-dialect SQL query builder written with TypeScript",
|
|
4
|
-
"version": "4.1
|
|
4
|
+
"version": "4.2.1",
|
|
5
5
|
"author": "Panates",
|
|
6
6
|
"private": false,
|
|
7
7
|
"contributors": [
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"repository": {
|
|
12
12
|
"type": "git",
|
|
13
|
-
"url": "https://github.com/sqbjs/sqb.git"
|
|
13
|
+
"url": "https://github.com/sqbjs/sqb.git",
|
|
14
|
+
"directory": "packages/builder"
|
|
14
15
|
},
|
|
15
16
|
"keywords": [
|
|
16
17
|
"javascript",
|