@sqb/builder 4.1.5 → 4.5.0
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/README.md +2 -2
- package/cjs/classes.ns.js +41 -0
- package/{dist → cjs}/enums.js +7 -0
- package/{dist → cjs}/extensions.js +0 -0
- package/{dist → cjs}/helpers.js +0 -0
- package/cjs/index.js +27 -0
- package/{dist → cjs}/op.initializers.js +42 -42
- package/cjs/package.json +3 -0
- package/{dist/query/DeleteQuery.js → cjs/query/delete-query.js} +13 -11
- package/{dist/query/InsertQuery.js → cjs/query/insert-query.js} +17 -16
- package/{dist/query/Query.js → cjs/query/query.js} +5 -4
- package/{dist/query/ReturningQuery.js → cjs/query/returning-query.js} +9 -8
- package/cjs/query/select-query.js +294 -0
- package/{dist/query/UpdateQuery.js → cjs/query/update-query.js} +18 -15
- package/{dist/Serializable.js → cjs/serializable.js} +0 -0
- package/{dist/SerializeContext.js → cjs/serialize-context.js} +37 -26
- package/cjs/sql-objects/base-field.js +11 -0
- package/{dist/sql-objects/CaseStatement.js → cjs/sql-objects/case-statement.js} +10 -6
- package/cjs/sql-objects/coalesce-statement.js +46 -0
- package/{dist/sql-objects/CountStatement.js → cjs/sql-objects/count-statement.js} +5 -4
- package/cjs/sql-objects/expression.js +10 -0
- package/{dist/sql-objects/FieldExpression.js → cjs/sql-objects/field-expression.js} +5 -4
- package/{dist/sql-objects/GroupColumn.js → cjs/sql-objects/group-column.js} +4 -4
- package/{dist/sql-objects/JoinStatement.js → cjs/sql-objects/join-statement.js} +20 -18
- package/cjs/sql-objects/lower-statement.js +41 -0
- package/cjs/sql-objects/max-statement.js +41 -0
- package/cjs/sql-objects/min-statement.js +41 -0
- package/{dist/sql-objects/Operator.js → cjs/sql-objects/operator.js} +2 -2
- package/{dist/sql-objects/operators/CompOperator.js → cjs/sql-objects/operators/comp-operator.js} +19 -16
- package/{dist/sql-objects/operators/LogicalOperator.js → cjs/sql-objects/operators/logical-operator.js} +14 -13
- package/cjs/sql-objects/operators/op-and.js +9 -0
- package/{dist/sql-objects/operators/OpBetween.js → cjs/sql-objects/operators/op-between.js} +5 -5
- package/cjs/sql-objects/operators/op-eq.js +13 -0
- package/{dist/sql-objects/operators/OpExists.js → cjs/sql-objects/operators/op-exists.js} +7 -7
- package/cjs/sql-objects/operators/op-gt.js +13 -0
- package/cjs/sql-objects/operators/op-gte.js +13 -0
- package/cjs/sql-objects/operators/op-ilike.js +10 -0
- package/cjs/sql-objects/operators/op-in.js +19 -0
- package/cjs/sql-objects/operators/op-is-not.js +13 -0
- package/cjs/sql-objects/operators/op-is.js +13 -0
- package/{dist/sql-objects/operators/OpLike.js → cjs/sql-objects/operators/op-like.js} +7 -7
- package/cjs/sql-objects/operators/op-lt.js +13 -0
- package/cjs/sql-objects/operators/op-lte.js +13 -0
- package/cjs/sql-objects/operators/op-ne.js +13 -0
- package/cjs/sql-objects/operators/op-not-between.js +10 -0
- package/cjs/sql-objects/operators/op-not-exists.js +10 -0
- package/cjs/sql-objects/operators/op-not-ilike.js +10 -0
- package/cjs/sql-objects/operators/op-not-in.js +10 -0
- package/cjs/sql-objects/operators/op-not-like.js +10 -0
- package/cjs/sql-objects/operators/op-or.js +9 -0
- package/{dist/sql-objects/OrderColumn.js → cjs/sql-objects/order-column.js} +5 -4
- package/{dist/sql-objects/ParamExpression.js → cjs/sql-objects/param-expression.js} +7 -4
- package/{dist/sql-objects/RawStatement.js → cjs/sql-objects/raw-statement.js} +5 -4
- package/{dist/sql-objects/ReturningColumn.js → cjs/sql-objects/returning-column.js} +5 -4
- package/cjs/sql-objects/sequence-getter-statement.js +51 -0
- package/cjs/sql-objects/string-agg-statement.js +82 -0
- package/{dist/sql-objects/TableName.js → cjs/sql-objects/table-name.js} +7 -4
- package/cjs/sql-objects/upper-statement.js +41 -0
- package/cjs/sqlobject.initializers.js +129 -0
- package/cjs/typeguards.js +78 -0
- package/{dist → cjs}/types.js +0 -0
- package/esm/classes.ns.d.ts +38 -0
- package/esm/classes.ns.js +38 -0
- package/{dist → esm}/enums.d.ts +7 -0
- package/esm/enums.js +95 -0
- package/{dist → esm}/extensions.d.ts +1 -1
- package/esm/extensions.js +11 -0
- package/{dist → esm}/helpers.d.ts +0 -0
- package/esm/helpers.js +27 -0
- package/esm/index.d.ts +20 -0
- package/esm/index.js +20 -0
- package/{dist → esm}/op.initializers.d.ts +22 -22
- package/esm/op.initializers.js +126 -0
- package/{dist/query/DeleteQuery.d.ts → esm/query/delete-query.d.ts} +6 -6
- package/esm/query/delete-query.js +51 -0
- package/{dist/query/InsertQuery.d.ts → esm/query/insert-query.d.ts} +5 -5
- package/esm/query/insert-query.js +73 -0
- package/{dist/query/Query.d.ts → esm/query/query.d.ts} +2 -2
- package/esm/query/query.js +36 -0
- package/{dist/query/ReturningQuery.d.ts → esm/query/returning-query.d.ts} +3 -3
- package/esm/query/returning-query.js +41 -0
- package/{dist/query/SelectQuery.d.ts → esm/query/select-query.d.ts} +13 -13
- package/{dist/query/SelectQuery.js → esm/query/select-query.js} +41 -34
- package/{dist/query/UpdateQuery.d.ts → esm/query/update-query.d.ts} +6 -6
- package/esm/query/update-query.js +79 -0
- package/{dist/Serializable.d.ts → esm/serializable.d.ts} +2 -2
- package/esm/serializable.js +2 -0
- package/{dist/SerializeContext.d.ts → esm/serialize-context.d.ts} +1 -1
- package/esm/serialize-context.js +145 -0
- package/{dist/sql-objects/BaseField.d.ts → esm/sql-objects/base-field.d.ts} +1 -1
- package/esm/sql-objects/base-field.js +7 -0
- package/{dist/sql-objects/CaseStatement.d.ts → esm/sql-objects/case-statement.d.ts} +6 -6
- package/esm/sql-objects/case-statement.js +85 -0
- package/esm/sql-objects/coalesce-statement.d.ts +22 -0
- package/esm/sql-objects/coalesce-statement.js +42 -0
- package/{dist/sql-objects/CountStatement.d.ts → esm/sql-objects/count-statement.d.ts} +3 -3
- package/esm/sql-objects/count-statement.js +31 -0
- package/{dist/sql-objects/Expression.d.ts → esm/sql-objects/expression.d.ts} +2 -2
- package/esm/sql-objects/expression.js +6 -0
- package/{dist/sql-objects/FieldExpression.d.ts → esm/sql-objects/field-expression.d.ts} +3 -3
- package/esm/sql-objects/field-expression.js +50 -0
- package/{dist/sql-objects/GroupColumn.d.ts → esm/sql-objects/group-column.d.ts} +3 -3
- package/esm/sql-objects/group-column.js +34 -0
- package/{dist/sql-objects/JoinStatement.d.ts → esm/sql-objects/join-statement.d.ts} +7 -7
- package/esm/sql-objects/join-statement.js +79 -0
- package/esm/sql-objects/lower-statement.d.ts +22 -0
- package/esm/sql-objects/lower-statement.js +37 -0
- package/esm/sql-objects/max-statement.d.ts +22 -0
- package/esm/sql-objects/max-statement.js +37 -0
- package/esm/sql-objects/min-statement.d.ts +22 -0
- package/esm/sql-objects/min-statement.js +37 -0
- package/{dist/sql-objects/Operator.d.ts → esm/sql-objects/operator.d.ts} +2 -2
- package/esm/sql-objects/operator.js +3 -0
- package/{dist/sql-objects/operators/CompOperator.d.ts → esm/sql-objects/operators/comp-operator.d.ts} +4 -4
- package/esm/sql-objects/operators/comp-operator.js +86 -0
- package/{dist/sql-objects/operators/LogicalOperator.d.ts → esm/sql-objects/operators/logical-operator.d.ts} +4 -4
- package/esm/sql-objects/operators/logical-operator.js +79 -0
- package/esm/sql-objects/operators/op-and.d.ts +5 -0
- package/esm/sql-objects/operators/op-and.js +5 -0
- package/{dist/sql-objects/operators/OpBetween.d.ts → esm/sql-objects/operators/op-between.d.ts} +4 -4
- package/esm/sql-objects/operators/op-between.js +31 -0
- package/{dist/sql-objects/operators/OpEq.d.ts → esm/sql-objects/operators/op-eq.d.ts} +3 -3
- package/esm/sql-objects/operators/op-eq.js +9 -0
- package/{dist/sql-objects/operators/OpExists.d.ts → esm/sql-objects/operators/op-exists.d.ts} +4 -4
- package/esm/sql-objects/operators/op-exists.js +26 -0
- package/{dist/sql-objects/operators/OpGt.d.ts → esm/sql-objects/operators/op-gt.d.ts} +3 -3
- package/esm/sql-objects/operators/op-gt.js +9 -0
- package/{dist/sql-objects/operators/OpGte.d.ts → esm/sql-objects/operators/op-gte.d.ts} +3 -3
- package/esm/sql-objects/operators/op-gte.js +9 -0
- package/{dist/sql-objects/operators/OpILike.d.ts → esm/sql-objects/operators/op-ilike.d.ts} +2 -2
- package/esm/sql-objects/operators/op-ilike.js +6 -0
- package/{dist/sql-objects/operators/OpIn.d.ts → esm/sql-objects/operators/op-in.d.ts} +3 -3
- package/esm/sql-objects/operators/op-in.js +15 -0
- package/{dist/sql-objects/operators/OpIsNot.d.ts → esm/sql-objects/operators/op-is-not.d.ts} +3 -3
- package/esm/sql-objects/operators/op-is-not.js +9 -0
- package/{dist/sql-objects/operators/OpIs.d.ts → esm/sql-objects/operators/op-is.d.ts} +3 -3
- package/esm/sql-objects/operators/op-is.js +9 -0
- package/{dist/sql-objects/operators/OpLike.d.ts → esm/sql-objects/operators/op-like.d.ts} +4 -4
- package/esm/sql-objects/operators/op-like.js +18 -0
- package/{dist/sql-objects/operators/OpLt.d.ts → esm/sql-objects/operators/op-lt.d.ts} +3 -3
- package/esm/sql-objects/operators/op-lt.js +9 -0
- package/{dist/sql-objects/operators/OpLte.d.ts → esm/sql-objects/operators/op-lte.d.ts} +3 -3
- package/esm/sql-objects/operators/op-lte.js +9 -0
- package/{dist/sql-objects/operators/OpNe.d.ts → esm/sql-objects/operators/op-ne.d.ts} +3 -3
- package/esm/sql-objects/operators/op-ne.js +9 -0
- package/{dist/sql-objects/operators/OpNotBetween.d.ts → esm/sql-objects/operators/op-not-between.d.ts} +2 -2
- package/esm/sql-objects/operators/op-not-between.js +6 -0
- package/{dist/sql-objects/operators/OpNotExists.d.ts → esm/sql-objects/operators/op-not-exists.d.ts} +2 -2
- package/esm/sql-objects/operators/op-not-exists.js +6 -0
- package/{dist/sql-objects/operators/OpNotILike.d.ts → esm/sql-objects/operators/op-not-ilike.d.ts} +2 -2
- package/esm/sql-objects/operators/op-not-ilike.js +6 -0
- package/{dist/sql-objects/operators/OpNotIn.d.ts → esm/sql-objects/operators/op-not-in.d.ts} +2 -2
- package/esm/sql-objects/operators/op-not-in.js +6 -0
- package/{dist/sql-objects/operators/OpNotLike.d.ts → esm/sql-objects/operators/op-not-like.d.ts} +2 -2
- package/esm/sql-objects/operators/op-not-like.js +6 -0
- package/esm/sql-objects/operators/op-or.d.ts +5 -0
- package/esm/sql-objects/operators/op-or.js +5 -0
- package/{dist/sql-objects/OrderColumn.d.ts → esm/sql-objects/order-column.d.ts} +3 -3
- package/esm/sql-objects/order-column.js +39 -0
- package/{dist/sql-objects/ParamExpression.d.ts → esm/sql-objects/param-expression.d.ts} +3 -3
- package/esm/sql-objects/param-expression.js +52 -0
- package/{dist/sql-objects/RawStatement.d.ts → esm/sql-objects/raw-statement.d.ts} +3 -3
- package/esm/sql-objects/raw-statement.js +15 -0
- package/{dist/sql-objects/ReturningColumn.d.ts → esm/sql-objects/returning-column.d.ts} +3 -3
- package/esm/sql-objects/returning-column.js +29 -0
- package/esm/sql-objects/sequence-getter-statement.d.ts +24 -0
- package/esm/sql-objects/sequence-getter-statement.js +47 -0
- package/esm/sql-objects/string-agg-statement.d.ts +31 -0
- package/esm/sql-objects/string-agg-statement.js +78 -0
- package/{dist/sql-objects/TableName.d.ts → esm/sql-objects/table-name.d.ts} +3 -3
- package/esm/sql-objects/table-name.js +30 -0
- package/esm/sql-objects/upper-statement.d.ts +22 -0
- package/esm/sql-objects/upper-statement.js +37 -0
- package/esm/sqlobject.initializers.d.ts +54 -0
- package/esm/sqlobject.initializers.js +101 -0
- package/{dist → esm}/typeguards.d.ts +18 -17
- package/esm/typeguards.js +57 -0
- package/{dist → esm}/types.d.ts +2 -2
- package/esm/types.js +1 -0
- package/package.json +49 -34
- package/dist/classes.d.ts +0 -38
- package/dist/classes.js +0 -41
- package/dist/index.d.ts +0 -20
- package/dist/index.js +0 -27
- package/dist/sql-objects/BaseField.js +0 -11
- package/dist/sql-objects/Expression.js +0 -7
- package/dist/sql-objects/operators/OpAnd.d.ts +0 -5
- package/dist/sql-objects/operators/OpAnd.js +0 -12
- package/dist/sql-objects/operators/OpEq.js +0 -13
- package/dist/sql-objects/operators/OpGt.js +0 -13
- package/dist/sql-objects/operators/OpGte.js +0 -13
- package/dist/sql-objects/operators/OpILike.js +0 -13
- package/dist/sql-objects/operators/OpIn.js +0 -19
- package/dist/sql-objects/operators/OpIs.js +0 -13
- package/dist/sql-objects/operators/OpIsNot.js +0 -13
- package/dist/sql-objects/operators/OpLt.js +0 -13
- package/dist/sql-objects/operators/OpLte.js +0 -13
- package/dist/sql-objects/operators/OpNe.js +0 -13
- package/dist/sql-objects/operators/OpNotBetween.js +0 -13
- package/dist/sql-objects/operators/OpNotExists.js +0 -13
- package/dist/sql-objects/operators/OpNotILike.js +0 -13
- package/dist/sql-objects/operators/OpNotIn.js +0 -13
- package/dist/sql-objects/operators/OpNotLike.js +0 -13
- package/dist/sql-objects/operators/OpOr.d.ts +0 -5
- package/dist/sql-objects/operators/OpOr.js +0 -12
- package/dist/sqlobject.initializers.d.ts +0 -39
- package/dist/sqlobject.initializers.js +0 -90
- package/dist/typeguards.js +0 -73
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { SerializationType } from '../enums.js';
|
|
2
|
+
import { Serializable } from '../serializable.js';
|
|
3
|
+
export class CoalesceStatement extends Serializable {
|
|
4
|
+
_expressions;
|
|
5
|
+
_alias;
|
|
6
|
+
constructor(...expressions) {
|
|
7
|
+
super();
|
|
8
|
+
this._expressions = expressions;
|
|
9
|
+
}
|
|
10
|
+
get _type() {
|
|
11
|
+
return SerializationType.COALESCE_STATEMENT;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Sets alias to case expression.
|
|
15
|
+
*/
|
|
16
|
+
as(alias) {
|
|
17
|
+
this._alias = alias;
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Performs serialization
|
|
22
|
+
*
|
|
23
|
+
* @param {Object} ctx
|
|
24
|
+
* @return {string}
|
|
25
|
+
* @override
|
|
26
|
+
*/
|
|
27
|
+
_serialize(ctx) {
|
|
28
|
+
if (!this._expressions.length)
|
|
29
|
+
return '';
|
|
30
|
+
const q = {
|
|
31
|
+
expressions: [],
|
|
32
|
+
};
|
|
33
|
+
for (const x of this._expressions) {
|
|
34
|
+
q.expressions.push(ctx.anyToSQL(x));
|
|
35
|
+
}
|
|
36
|
+
return ctx.serialize(this._type, q, () => this.__defaultSerialize(ctx, q));
|
|
37
|
+
}
|
|
38
|
+
__defaultSerialize(ctx, o) {
|
|
39
|
+
return 'coalesce(' + o.expressions.join(', ') + ')' +
|
|
40
|
+
(this._alias ? ' ' + this._alias : '');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { SerializationType } from '../enums';
|
|
2
|
-
import { Serializable } from '../
|
|
3
|
-
import { SerializeContext } from '../
|
|
1
|
+
import { SerializationType } from '../enums.js';
|
|
2
|
+
import { Serializable } from '../serializable.js';
|
|
3
|
+
import { SerializeContext } from '../serialize-context.js';
|
|
4
4
|
export declare class CountStatement extends Serializable {
|
|
5
5
|
_alias?: string;
|
|
6
6
|
get _type(): SerializationType;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { SerializationType } from '../enums.js';
|
|
2
|
+
import { Serializable } from '../serializable.js';
|
|
3
|
+
export class CountStatement extends Serializable {
|
|
4
|
+
_alias;
|
|
5
|
+
get _type() {
|
|
6
|
+
return SerializationType.COUNT_STATEMENT;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Sets alias to case expression.
|
|
10
|
+
*/
|
|
11
|
+
as(alias) {
|
|
12
|
+
this._alias = alias;
|
|
13
|
+
return this;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Performs serialization
|
|
17
|
+
*
|
|
18
|
+
* @param {Object} ctx
|
|
19
|
+
* @return {string}
|
|
20
|
+
* @override
|
|
21
|
+
*/
|
|
22
|
+
_serialize(ctx) {
|
|
23
|
+
return ctx.serialize(this._type, undefined, () => this.__defaultSerialize(ctx, undefined));
|
|
24
|
+
}
|
|
25
|
+
// noinspection JSUnusedLocalSymbols
|
|
26
|
+
__defaultSerialize(
|
|
27
|
+
/* eslint-disable-next-line */
|
|
28
|
+
ctx, o) {
|
|
29
|
+
return 'count(*)';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DataType } from '../enums';
|
|
2
|
-
import { Serializable } from '../
|
|
1
|
+
import { DataType } from '../enums.js';
|
|
2
|
+
import { Serializable } from '../serializable.js';
|
|
3
3
|
export declare abstract class Expression extends Serializable {
|
|
4
4
|
_dataType?: DataType;
|
|
5
5
|
_isArray?: boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { DataType, SerializationType } from '../enums';
|
|
2
|
-
import { SerializeContext } from '../
|
|
3
|
-
import { BaseField } from './
|
|
1
|
+
import { DataType, SerializationType } from '../enums.js';
|
|
2
|
+
import { SerializeContext } from '../serialize-context.js';
|
|
3
|
+
import { BaseField } from './base-field.js';
|
|
4
4
|
export declare class FieldExpression extends BaseField {
|
|
5
5
|
_alias?: string;
|
|
6
6
|
constructor(expression: string, dataType?: DataType, isArray?: boolean);
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { SerializationType } from '../enums.js';
|
|
2
|
+
import { BaseField } from './base-field.js';
|
|
3
|
+
const TABLE_COLUMN_PATTERN = /^((?:[a-zA-Z_][\w$_]*\.){0,2}) *([0-9a-zA-Z_][\w$_]*|\*) *(?:as)? *([a-zA-Z_][\w$_]*)?$/;
|
|
4
|
+
export class FieldExpression extends BaseField {
|
|
5
|
+
_alias;
|
|
6
|
+
constructor(arg0, arg1, arg2) {
|
|
7
|
+
super();
|
|
8
|
+
let expression;
|
|
9
|
+
if (typeof arg0 === 'object') {
|
|
10
|
+
expression = arg0.expression;
|
|
11
|
+
this._dataType = arg0.dataType;
|
|
12
|
+
this._isArray = arg0.isArray;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
expression = arg0;
|
|
16
|
+
this._dataType = arg1;
|
|
17
|
+
this._isArray = arg2;
|
|
18
|
+
}
|
|
19
|
+
const m = expression.match(TABLE_COLUMN_PATTERN);
|
|
20
|
+
if (!m)
|
|
21
|
+
throw new TypeError(`${expression} does not match table column format`);
|
|
22
|
+
this._field = m[2];
|
|
23
|
+
if (m[1]) {
|
|
24
|
+
const a = m[1].split(/\./g);
|
|
25
|
+
a.pop();
|
|
26
|
+
this._table = a.pop();
|
|
27
|
+
this._schema = a.pop();
|
|
28
|
+
}
|
|
29
|
+
this._alias = this._field !== '*' ? m[3] : '';
|
|
30
|
+
}
|
|
31
|
+
get _type() {
|
|
32
|
+
return SerializationType.SELECT_COLUMN;
|
|
33
|
+
}
|
|
34
|
+
_serialize(ctx) {
|
|
35
|
+
const o = {
|
|
36
|
+
schema: this._schema,
|
|
37
|
+
table: this._table,
|
|
38
|
+
field: this._field,
|
|
39
|
+
alias: this._alias,
|
|
40
|
+
isReservedWord: !!(this._field && ctx.isReservedWord(this._field))
|
|
41
|
+
};
|
|
42
|
+
return ctx.serialize(this._type, o, () => {
|
|
43
|
+
const prefix = ctx.escapeReserved(this._schema ? this._schema + '.' : '') +
|
|
44
|
+
(this._table ? this._table + '.' : '');
|
|
45
|
+
return prefix +
|
|
46
|
+
(!prefix && o.isReservedWord ? '"' + this._field + '"' : this._field) +
|
|
47
|
+
(this._alias ? ' as ' + this._alias : '');
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { SerializationType } from '../enums';
|
|
2
|
-
import { SerializeContext } from '../
|
|
3
|
-
import { BaseField } from './
|
|
1
|
+
import { SerializationType } from '../enums.js';
|
|
2
|
+
import { SerializeContext } from '../serialize-context.js';
|
|
3
|
+
import { BaseField } from './base-field.js';
|
|
4
4
|
export declare class GroupColumn extends BaseField {
|
|
5
5
|
constructor(value: string);
|
|
6
6
|
get _type(): SerializationType;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { SerializationType } from '../enums.js';
|
|
2
|
+
import { BaseField } from './base-field.js';
|
|
3
|
+
const GROUP_COLUMN_PATTERN = /^((?:[a-zA-Z][\w$]*\.){0,2})([\w$]*)$/;
|
|
4
|
+
export class GroupColumn extends BaseField {
|
|
5
|
+
constructor(value) {
|
|
6
|
+
super();
|
|
7
|
+
const m = value.match(GROUP_COLUMN_PATTERN);
|
|
8
|
+
if (!m)
|
|
9
|
+
throw new TypeError(`"${value}" does not match group column format`);
|
|
10
|
+
this._field = m[2];
|
|
11
|
+
if (m[1]) {
|
|
12
|
+
const a = m[1].split(/\./g);
|
|
13
|
+
a.pop();
|
|
14
|
+
this._table = a.pop();
|
|
15
|
+
this._schema = a.pop();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
get _type() {
|
|
19
|
+
return SerializationType.GROUP_COLUMN;
|
|
20
|
+
}
|
|
21
|
+
_serialize(ctx) {
|
|
22
|
+
const o = {
|
|
23
|
+
schema: this._schema,
|
|
24
|
+
table: this._table,
|
|
25
|
+
field: this._field,
|
|
26
|
+
isReservedWord: !!(this._field && ctx.isReservedWord(this._field))
|
|
27
|
+
};
|
|
28
|
+
return ctx.serialize(this._type, o, () => {
|
|
29
|
+
return (this._schema ? this._schema + '.' : '') +
|
|
30
|
+
(this._table ? this._table + '.' : '') +
|
|
31
|
+
(o.isReservedWord ? '"' + this._field + '"' : this._field);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { JoinType, SerializationType } from '../enums';
|
|
2
|
-
import { SelectQuery } from '../query/
|
|
3
|
-
import { Serializable } from '../
|
|
4
|
-
import { SerializeContext } from '../
|
|
5
|
-
import { LogicalOperator } from './operators/
|
|
6
|
-
import { RawStatement } from './
|
|
7
|
-
import { TableName } from './
|
|
1
|
+
import { JoinType, SerializationType } from '../enums.js';
|
|
2
|
+
import { SelectQuery } from '../query/select-query.js';
|
|
3
|
+
import { Serializable } from '../serializable.js';
|
|
4
|
+
import { SerializeContext } from '../serialize-context.js';
|
|
5
|
+
import { LogicalOperator } from './operators/logical-operator.js';
|
|
6
|
+
import { RawStatement } from './raw-statement.js';
|
|
7
|
+
import { TableName } from './table-name.js';
|
|
8
8
|
export declare class JoinStatement extends Serializable {
|
|
9
9
|
_joinType: JoinType;
|
|
10
10
|
_table: TableName | SelectQuery | RawStatement;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { JoinType, SerializationType } from '../enums.js';
|
|
2
|
+
import { Serializable } from '../serializable.js';
|
|
3
|
+
import { isRawStatement, isSelectQuery, isTableName } from '../typeguards.js';
|
|
4
|
+
import { OpAnd } from './operators/op-and.js';
|
|
5
|
+
import { TableName } from './table-name.js';
|
|
6
|
+
export class JoinStatement extends Serializable {
|
|
7
|
+
_joinType;
|
|
8
|
+
_table;
|
|
9
|
+
_conditions = new OpAnd();
|
|
10
|
+
constructor(joinType, table) {
|
|
11
|
+
super();
|
|
12
|
+
// noinspection SuspiciousTypeOfGuard
|
|
13
|
+
if (!(isSelectQuery(table) || isRawStatement(table) || isTableName(table) ||
|
|
14
|
+
typeof table === 'string'))
|
|
15
|
+
throw new TypeError('Table name, select query or raw object required for Join');
|
|
16
|
+
this._joinType = joinType;
|
|
17
|
+
this._table = typeof table === 'string' ? new TableName(table) : table;
|
|
18
|
+
}
|
|
19
|
+
get _type() {
|
|
20
|
+
return SerializationType.JOIN;
|
|
21
|
+
}
|
|
22
|
+
on(...conditions) {
|
|
23
|
+
this._conditions.add(...conditions);
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
_serialize(ctx) {
|
|
27
|
+
const o = {
|
|
28
|
+
joinType: this._joinType,
|
|
29
|
+
table: this._table._serialize(ctx),
|
|
30
|
+
conditions: this.__serializeConditions(ctx, this)
|
|
31
|
+
};
|
|
32
|
+
return ctx.serialize(this._type, o, () => {
|
|
33
|
+
let out;
|
|
34
|
+
switch (this._joinType) {
|
|
35
|
+
case JoinType.LEFT:
|
|
36
|
+
out = 'left join';
|
|
37
|
+
break;
|
|
38
|
+
case JoinType.LEFT_OUTER:
|
|
39
|
+
out = 'left outer join';
|
|
40
|
+
break;
|
|
41
|
+
case JoinType.RIGHT:
|
|
42
|
+
out = 'right join';
|
|
43
|
+
break;
|
|
44
|
+
case JoinType.RIGHT_OUTER:
|
|
45
|
+
out = 'right outer join';
|
|
46
|
+
break;
|
|
47
|
+
case JoinType.OUTER:
|
|
48
|
+
out = 'outer join';
|
|
49
|
+
break;
|
|
50
|
+
case JoinType.FULL_OUTER:
|
|
51
|
+
out = 'full outer join';
|
|
52
|
+
break;
|
|
53
|
+
default:
|
|
54
|
+
out = 'inner join';
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
const lf = o.table.length > 40;
|
|
58
|
+
if (isSelectQuery(this._table)) {
|
|
59
|
+
const alias = this._table._alias;
|
|
60
|
+
if (!alias)
|
|
61
|
+
throw new Error('Alias required for sub-select in Join');
|
|
62
|
+
out += ' (' + (lf ? '\n\t' : '') + o.table + (lf ? '\n\b' : '') + ')' +
|
|
63
|
+
' ' + alias;
|
|
64
|
+
}
|
|
65
|
+
else
|
|
66
|
+
out += ' ' + o.table;
|
|
67
|
+
if (o.conditions)
|
|
68
|
+
out += ' ' + o.conditions;
|
|
69
|
+
return out + (lf ? '\b' : '');
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
__serializeConditions(ctx, join) {
|
|
73
|
+
if (join._conditions._items.length) {
|
|
74
|
+
const s = join._conditions._serialize(ctx);
|
|
75
|
+
return ctx.serialize(SerializationType.JOIN_CONDITIONS, s, () => s ? 'on ' + s : '');
|
|
76
|
+
}
|
|
77
|
+
return '';
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SerializationType } from '../enums.js';
|
|
2
|
+
import { Serializable } from '../serializable.js';
|
|
3
|
+
import { SerializeContext } from '../serialize-context.js';
|
|
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,37 @@
|
|
|
1
|
+
import { SerializationType } from '../enums.js';
|
|
2
|
+
import { Serializable } from '../serializable.js';
|
|
3
|
+
export class LowerStatement extends Serializable {
|
|
4
|
+
_expression;
|
|
5
|
+
_alias;
|
|
6
|
+
constructor(expression) {
|
|
7
|
+
super();
|
|
8
|
+
this._expression = expression;
|
|
9
|
+
}
|
|
10
|
+
get _type() {
|
|
11
|
+
return SerializationType.LOWER_STATEMENT;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Sets alias to case expression.
|
|
15
|
+
*/
|
|
16
|
+
as(alias) {
|
|
17
|
+
this._alias = alias;
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Performs serialization
|
|
22
|
+
*
|
|
23
|
+
* @param {Object} ctx
|
|
24
|
+
* @return {string}
|
|
25
|
+
* @override
|
|
26
|
+
*/
|
|
27
|
+
_serialize(ctx) {
|
|
28
|
+
if (!this._expression)
|
|
29
|
+
return '';
|
|
30
|
+
const q = ctx.anyToSQL(this._expression);
|
|
31
|
+
return ctx.serialize(this._type, q, () => this.__defaultSerialize(ctx, q));
|
|
32
|
+
}
|
|
33
|
+
__defaultSerialize(ctx, o) {
|
|
34
|
+
return 'lower(' + o + ')' +
|
|
35
|
+
(this._alias ? ' ' + this._alias : '');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SerializationType } from '../enums.js';
|
|
2
|
+
import { Serializable } from '../serializable.js';
|
|
3
|
+
import { SerializeContext } from '../serialize-context.js';
|
|
4
|
+
export declare class MaxStatement 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,37 @@
|
|
|
1
|
+
import { SerializationType } from '../enums.js';
|
|
2
|
+
import { Serializable } from '../serializable.js';
|
|
3
|
+
export class MaxStatement extends Serializable {
|
|
4
|
+
_expression;
|
|
5
|
+
_alias;
|
|
6
|
+
constructor(expression) {
|
|
7
|
+
super();
|
|
8
|
+
this._expression = expression;
|
|
9
|
+
}
|
|
10
|
+
get _type() {
|
|
11
|
+
return SerializationType.MAX_STATEMENT;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Sets alias to case expression.
|
|
15
|
+
*/
|
|
16
|
+
as(alias) {
|
|
17
|
+
this._alias = alias;
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Performs serialization
|
|
22
|
+
*
|
|
23
|
+
* @param {Object} ctx
|
|
24
|
+
* @return {string}
|
|
25
|
+
* @override
|
|
26
|
+
*/
|
|
27
|
+
_serialize(ctx) {
|
|
28
|
+
if (!this._expression)
|
|
29
|
+
return '';
|
|
30
|
+
const q = ctx.anyToSQL(this._expression);
|
|
31
|
+
return ctx.serialize(this._type, q, () => this.__defaultSerialize(ctx, q));
|
|
32
|
+
}
|
|
33
|
+
__defaultSerialize(ctx, o) {
|
|
34
|
+
return 'max(' + o + ')' +
|
|
35
|
+
(this._alias ? ' ' + this._alias : '');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SerializationType } from '../enums.js';
|
|
2
|
+
import { Serializable } from '../serializable.js';
|
|
3
|
+
import { SerializeContext } from '../serialize-context.js';
|
|
4
|
+
export declare class MinStatement 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,37 @@
|
|
|
1
|
+
import { SerializationType } from '../enums.js';
|
|
2
|
+
import { Serializable } from '../serializable.js';
|
|
3
|
+
export class MinStatement extends Serializable {
|
|
4
|
+
_expression;
|
|
5
|
+
_alias;
|
|
6
|
+
constructor(expression) {
|
|
7
|
+
super();
|
|
8
|
+
this._expression = expression;
|
|
9
|
+
}
|
|
10
|
+
get _type() {
|
|
11
|
+
return SerializationType.MIN_STATEMENT;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Sets alias to case expression.
|
|
15
|
+
*/
|
|
16
|
+
as(alias) {
|
|
17
|
+
this._alias = alias;
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Performs serialization
|
|
22
|
+
*
|
|
23
|
+
* @param {Object} ctx
|
|
24
|
+
* @return {string}
|
|
25
|
+
* @override
|
|
26
|
+
*/
|
|
27
|
+
_serialize(ctx) {
|
|
28
|
+
if (!this._expression)
|
|
29
|
+
return '';
|
|
30
|
+
const q = ctx.anyToSQL(this._expression);
|
|
31
|
+
return ctx.serialize(this._type, q, () => this.__defaultSerialize(ctx, q));
|
|
32
|
+
}
|
|
33
|
+
__defaultSerialize(ctx, o) {
|
|
34
|
+
return 'min(' + o + ')' +
|
|
35
|
+
(this._alias ? ' ' + this._alias : '');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { OperatorType } from '../enums';
|
|
2
|
-
import { Serializable } from '../
|
|
1
|
+
import { OperatorType } from '../enums.js';
|
|
2
|
+
import { Serializable } from '../serializable.js';
|
|
3
3
|
export declare abstract class Operator extends Serializable {
|
|
4
4
|
abstract _operatorType: OperatorType;
|
|
5
5
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { SerializationType } from '../../enums';
|
|
2
|
-
import { Serializable } from '../../
|
|
3
|
-
import { SerializeContext } from '../../
|
|
4
|
-
import { Operator } from '../
|
|
1
|
+
import { SerializationType } from '../../enums.js';
|
|
2
|
+
import { Serializable } from '../../serializable.js';
|
|
3
|
+
import { SerializeContext } from '../../serialize-context.js';
|
|
4
|
+
import { Operator } from '../operator.js';
|
|
5
5
|
export declare abstract class CompOperator extends Operator {
|
|
6
6
|
_left: Serializable | string;
|
|
7
7
|
_right?: any | Serializable;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { SerializationType } from '../../enums.js';
|
|
2
|
+
import { Serializable } from '../../serializable.js';
|
|
3
|
+
import { Param } from '../../sqlobject.initializers.js';
|
|
4
|
+
import { FieldExpression } from '../field-expression.js';
|
|
5
|
+
import { Operator } from '../operator.js';
|
|
6
|
+
import { ParamExpression } from '../param-expression.js';
|
|
7
|
+
const EXPRESSION_PATTERN = /^([\w\\.$]+)(\[])?/;
|
|
8
|
+
export class CompOperator extends Operator {
|
|
9
|
+
_left;
|
|
10
|
+
_right;
|
|
11
|
+
_symbol;
|
|
12
|
+
_isArray;
|
|
13
|
+
constructor(left, right) {
|
|
14
|
+
super();
|
|
15
|
+
if (typeof left === 'string') {
|
|
16
|
+
const m = left.match(EXPRESSION_PATTERN);
|
|
17
|
+
if (!m)
|
|
18
|
+
throw new TypeError(`"${left}" is not a valid expression definition`);
|
|
19
|
+
this._left = m[1];
|
|
20
|
+
this._isArray = !!m[2];
|
|
21
|
+
}
|
|
22
|
+
else
|
|
23
|
+
this._left = left;
|
|
24
|
+
this._right = right;
|
|
25
|
+
}
|
|
26
|
+
get _type() {
|
|
27
|
+
return SerializationType.COMPARISON_EXPRESSION;
|
|
28
|
+
}
|
|
29
|
+
_serialize(ctx) {
|
|
30
|
+
const left = this.__serializeItem(ctx, this._left);
|
|
31
|
+
if (this._isArray)
|
|
32
|
+
left.isArray = true;
|
|
33
|
+
const right = this.__serializeItem(ctx, this._right, true);
|
|
34
|
+
const o = {
|
|
35
|
+
operatorType: this._operatorType,
|
|
36
|
+
symbol: this._symbol,
|
|
37
|
+
left,
|
|
38
|
+
right
|
|
39
|
+
};
|
|
40
|
+
return this.__serialize(ctx, o);
|
|
41
|
+
}
|
|
42
|
+
__serializeItem(ctx, x, isRight) {
|
|
43
|
+
if (ctx.strictParams && !(x instanceof Serializable) &&
|
|
44
|
+
(typeof x !== 'string' || isRight)) {
|
|
45
|
+
ctx.strictParamGenId = ctx.strictParamGenId || 0;
|
|
46
|
+
const name = 'strictParam$' + ++ctx.strictParamGenId;
|
|
47
|
+
ctx.params = ctx.params || {};
|
|
48
|
+
ctx.params[name] = x;
|
|
49
|
+
x = Param(name);
|
|
50
|
+
}
|
|
51
|
+
if (x instanceof Serializable) {
|
|
52
|
+
const expression = ctx.anyToSQL(x);
|
|
53
|
+
const result = {
|
|
54
|
+
expression
|
|
55
|
+
};
|
|
56
|
+
if (x instanceof FieldExpression) {
|
|
57
|
+
result.dataType = result._dataType;
|
|
58
|
+
result.isArray = x._isArray;
|
|
59
|
+
}
|
|
60
|
+
if (x instanceof ParamExpression) {
|
|
61
|
+
let value = ctx.params ? ctx.params[x._name] : undefined;
|
|
62
|
+
if (x._isArray && value != null)
|
|
63
|
+
value = [value];
|
|
64
|
+
result.value = value;
|
|
65
|
+
result.isArray = x._isArray || Array.isArray(value);
|
|
66
|
+
result.isParam = true;
|
|
67
|
+
}
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
const result = {
|
|
72
|
+
expression: (isRight || typeof x !== 'string') ?
|
|
73
|
+
ctx.anyToSQL(x) : x
|
|
74
|
+
};
|
|
75
|
+
if (isRight || typeof x !== 'string')
|
|
76
|
+
result.isArray = Array.isArray(x);
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
__serialize(ctx, o) {
|
|
81
|
+
return ctx.serialize(this._type, o, (_ctx, _o) => this.__defaultSerialize(_ctx, _o));
|
|
82
|
+
}
|
|
83
|
+
__defaultSerialize(ctx, o) {
|
|
84
|
+
return o.left.expression + ' ' + o.symbol + ' ' + o.right.expression;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { SerializationType } from '../../enums';
|
|
2
|
-
import { Serializable } from '../../
|
|
3
|
-
import { SerializeContext } from '../../
|
|
4
|
-
import { Operator } from '../
|
|
1
|
+
import { SerializationType } from '../../enums.js';
|
|
2
|
+
import { Serializable } from '../../serializable.js';
|
|
3
|
+
import { SerializeContext } from '../../serialize-context.js';
|
|
4
|
+
import { Operator } from '../operator.js';
|
|
5
5
|
export declare const WrapOps: {};
|
|
6
6
|
export declare abstract class LogicalOperator extends Operator {
|
|
7
7
|
_items: Serializable[];
|