@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.
Files changed (208) hide show
  1. package/README.md +2 -2
  2. package/cjs/classes.ns.js +41 -0
  3. package/{dist → cjs}/enums.js +7 -0
  4. package/{dist → cjs}/extensions.js +0 -0
  5. package/{dist → cjs}/helpers.js +0 -0
  6. package/cjs/index.js +27 -0
  7. package/{dist → cjs}/op.initializers.js +42 -42
  8. package/cjs/package.json +3 -0
  9. package/{dist/query/DeleteQuery.js → cjs/query/delete-query.js} +13 -11
  10. package/{dist/query/InsertQuery.js → cjs/query/insert-query.js} +17 -16
  11. package/{dist/query/Query.js → cjs/query/query.js} +5 -4
  12. package/{dist/query/ReturningQuery.js → cjs/query/returning-query.js} +9 -8
  13. package/cjs/query/select-query.js +294 -0
  14. package/{dist/query/UpdateQuery.js → cjs/query/update-query.js} +18 -15
  15. package/{dist/Serializable.js → cjs/serializable.js} +0 -0
  16. package/{dist/SerializeContext.js → cjs/serialize-context.js} +37 -26
  17. package/cjs/sql-objects/base-field.js +11 -0
  18. package/{dist/sql-objects/CaseStatement.js → cjs/sql-objects/case-statement.js} +10 -6
  19. package/cjs/sql-objects/coalesce-statement.js +46 -0
  20. package/{dist/sql-objects/CountStatement.js → cjs/sql-objects/count-statement.js} +5 -4
  21. package/cjs/sql-objects/expression.js +10 -0
  22. package/{dist/sql-objects/FieldExpression.js → cjs/sql-objects/field-expression.js} +5 -4
  23. package/{dist/sql-objects/GroupColumn.js → cjs/sql-objects/group-column.js} +4 -4
  24. package/{dist/sql-objects/JoinStatement.js → cjs/sql-objects/join-statement.js} +20 -18
  25. package/cjs/sql-objects/lower-statement.js +41 -0
  26. package/cjs/sql-objects/max-statement.js +41 -0
  27. package/cjs/sql-objects/min-statement.js +41 -0
  28. package/{dist/sql-objects/Operator.js → cjs/sql-objects/operator.js} +2 -2
  29. package/{dist/sql-objects/operators/CompOperator.js → cjs/sql-objects/operators/comp-operator.js} +19 -16
  30. package/{dist/sql-objects/operators/LogicalOperator.js → cjs/sql-objects/operators/logical-operator.js} +14 -13
  31. package/cjs/sql-objects/operators/op-and.js +9 -0
  32. package/{dist/sql-objects/operators/OpBetween.js → cjs/sql-objects/operators/op-between.js} +5 -5
  33. package/cjs/sql-objects/operators/op-eq.js +13 -0
  34. package/{dist/sql-objects/operators/OpExists.js → cjs/sql-objects/operators/op-exists.js} +7 -7
  35. package/cjs/sql-objects/operators/op-gt.js +13 -0
  36. package/cjs/sql-objects/operators/op-gte.js +13 -0
  37. package/cjs/sql-objects/operators/op-ilike.js +10 -0
  38. package/cjs/sql-objects/operators/op-in.js +19 -0
  39. package/cjs/sql-objects/operators/op-is-not.js +13 -0
  40. package/cjs/sql-objects/operators/op-is.js +13 -0
  41. package/{dist/sql-objects/operators/OpLike.js → cjs/sql-objects/operators/op-like.js} +7 -7
  42. package/cjs/sql-objects/operators/op-lt.js +13 -0
  43. package/cjs/sql-objects/operators/op-lte.js +13 -0
  44. package/cjs/sql-objects/operators/op-ne.js +13 -0
  45. package/cjs/sql-objects/operators/op-not-between.js +10 -0
  46. package/cjs/sql-objects/operators/op-not-exists.js +10 -0
  47. package/cjs/sql-objects/operators/op-not-ilike.js +10 -0
  48. package/cjs/sql-objects/operators/op-not-in.js +10 -0
  49. package/cjs/sql-objects/operators/op-not-like.js +10 -0
  50. package/cjs/sql-objects/operators/op-or.js +9 -0
  51. package/{dist/sql-objects/OrderColumn.js → cjs/sql-objects/order-column.js} +5 -4
  52. package/{dist/sql-objects/ParamExpression.js → cjs/sql-objects/param-expression.js} +7 -4
  53. package/{dist/sql-objects/RawStatement.js → cjs/sql-objects/raw-statement.js} +5 -4
  54. package/{dist/sql-objects/ReturningColumn.js → cjs/sql-objects/returning-column.js} +5 -4
  55. package/cjs/sql-objects/sequence-getter-statement.js +51 -0
  56. package/cjs/sql-objects/string-agg-statement.js +82 -0
  57. package/{dist/sql-objects/TableName.js → cjs/sql-objects/table-name.js} +7 -4
  58. package/cjs/sql-objects/upper-statement.js +41 -0
  59. package/cjs/sqlobject.initializers.js +129 -0
  60. package/cjs/typeguards.js +78 -0
  61. package/{dist → cjs}/types.js +0 -0
  62. package/esm/classes.ns.d.ts +38 -0
  63. package/esm/classes.ns.js +38 -0
  64. package/{dist → esm}/enums.d.ts +7 -0
  65. package/esm/enums.js +95 -0
  66. package/{dist → esm}/extensions.d.ts +1 -1
  67. package/esm/extensions.js +11 -0
  68. package/{dist → esm}/helpers.d.ts +0 -0
  69. package/esm/helpers.js +27 -0
  70. package/esm/index.d.ts +20 -0
  71. package/esm/index.js +20 -0
  72. package/{dist → esm}/op.initializers.d.ts +22 -22
  73. package/esm/op.initializers.js +126 -0
  74. package/{dist/query/DeleteQuery.d.ts → esm/query/delete-query.d.ts} +6 -6
  75. package/esm/query/delete-query.js +51 -0
  76. package/{dist/query/InsertQuery.d.ts → esm/query/insert-query.d.ts} +5 -5
  77. package/esm/query/insert-query.js +73 -0
  78. package/{dist/query/Query.d.ts → esm/query/query.d.ts} +2 -2
  79. package/esm/query/query.js +36 -0
  80. package/{dist/query/ReturningQuery.d.ts → esm/query/returning-query.d.ts} +3 -3
  81. package/esm/query/returning-query.js +41 -0
  82. package/{dist/query/SelectQuery.d.ts → esm/query/select-query.d.ts} +13 -13
  83. package/{dist/query/SelectQuery.js → esm/query/select-query.js} +41 -34
  84. package/{dist/query/UpdateQuery.d.ts → esm/query/update-query.d.ts} +6 -6
  85. package/esm/query/update-query.js +79 -0
  86. package/{dist/Serializable.d.ts → esm/serializable.d.ts} +2 -2
  87. package/esm/serializable.js +2 -0
  88. package/{dist/SerializeContext.d.ts → esm/serialize-context.d.ts} +1 -1
  89. package/esm/serialize-context.js +145 -0
  90. package/{dist/sql-objects/BaseField.d.ts → esm/sql-objects/base-field.d.ts} +1 -1
  91. package/esm/sql-objects/base-field.js +7 -0
  92. package/{dist/sql-objects/CaseStatement.d.ts → esm/sql-objects/case-statement.d.ts} +6 -6
  93. package/esm/sql-objects/case-statement.js +85 -0
  94. package/esm/sql-objects/coalesce-statement.d.ts +22 -0
  95. package/esm/sql-objects/coalesce-statement.js +42 -0
  96. package/{dist/sql-objects/CountStatement.d.ts → esm/sql-objects/count-statement.d.ts} +3 -3
  97. package/esm/sql-objects/count-statement.js +31 -0
  98. package/{dist/sql-objects/Expression.d.ts → esm/sql-objects/expression.d.ts} +2 -2
  99. package/esm/sql-objects/expression.js +6 -0
  100. package/{dist/sql-objects/FieldExpression.d.ts → esm/sql-objects/field-expression.d.ts} +3 -3
  101. package/esm/sql-objects/field-expression.js +50 -0
  102. package/{dist/sql-objects/GroupColumn.d.ts → esm/sql-objects/group-column.d.ts} +3 -3
  103. package/esm/sql-objects/group-column.js +34 -0
  104. package/{dist/sql-objects/JoinStatement.d.ts → esm/sql-objects/join-statement.d.ts} +7 -7
  105. package/esm/sql-objects/join-statement.js +79 -0
  106. package/esm/sql-objects/lower-statement.d.ts +22 -0
  107. package/esm/sql-objects/lower-statement.js +37 -0
  108. package/esm/sql-objects/max-statement.d.ts +22 -0
  109. package/esm/sql-objects/max-statement.js +37 -0
  110. package/esm/sql-objects/min-statement.d.ts +22 -0
  111. package/esm/sql-objects/min-statement.js +37 -0
  112. package/{dist/sql-objects/Operator.d.ts → esm/sql-objects/operator.d.ts} +2 -2
  113. package/esm/sql-objects/operator.js +3 -0
  114. package/{dist/sql-objects/operators/CompOperator.d.ts → esm/sql-objects/operators/comp-operator.d.ts} +4 -4
  115. package/esm/sql-objects/operators/comp-operator.js +86 -0
  116. package/{dist/sql-objects/operators/LogicalOperator.d.ts → esm/sql-objects/operators/logical-operator.d.ts} +4 -4
  117. package/esm/sql-objects/operators/logical-operator.js +79 -0
  118. package/esm/sql-objects/operators/op-and.d.ts +5 -0
  119. package/esm/sql-objects/operators/op-and.js +5 -0
  120. package/{dist/sql-objects/operators/OpBetween.d.ts → esm/sql-objects/operators/op-between.d.ts} +4 -4
  121. package/esm/sql-objects/operators/op-between.js +31 -0
  122. package/{dist/sql-objects/operators/OpEq.d.ts → esm/sql-objects/operators/op-eq.d.ts} +3 -3
  123. package/esm/sql-objects/operators/op-eq.js +9 -0
  124. package/{dist/sql-objects/operators/OpExists.d.ts → esm/sql-objects/operators/op-exists.d.ts} +4 -4
  125. package/esm/sql-objects/operators/op-exists.js +26 -0
  126. package/{dist/sql-objects/operators/OpGt.d.ts → esm/sql-objects/operators/op-gt.d.ts} +3 -3
  127. package/esm/sql-objects/operators/op-gt.js +9 -0
  128. package/{dist/sql-objects/operators/OpGte.d.ts → esm/sql-objects/operators/op-gte.d.ts} +3 -3
  129. package/esm/sql-objects/operators/op-gte.js +9 -0
  130. package/{dist/sql-objects/operators/OpILike.d.ts → esm/sql-objects/operators/op-ilike.d.ts} +2 -2
  131. package/esm/sql-objects/operators/op-ilike.js +6 -0
  132. package/{dist/sql-objects/operators/OpIn.d.ts → esm/sql-objects/operators/op-in.d.ts} +3 -3
  133. package/esm/sql-objects/operators/op-in.js +15 -0
  134. package/{dist/sql-objects/operators/OpIsNot.d.ts → esm/sql-objects/operators/op-is-not.d.ts} +3 -3
  135. package/esm/sql-objects/operators/op-is-not.js +9 -0
  136. package/{dist/sql-objects/operators/OpIs.d.ts → esm/sql-objects/operators/op-is.d.ts} +3 -3
  137. package/esm/sql-objects/operators/op-is.js +9 -0
  138. package/{dist/sql-objects/operators/OpLike.d.ts → esm/sql-objects/operators/op-like.d.ts} +4 -4
  139. package/esm/sql-objects/operators/op-like.js +18 -0
  140. package/{dist/sql-objects/operators/OpLt.d.ts → esm/sql-objects/operators/op-lt.d.ts} +3 -3
  141. package/esm/sql-objects/operators/op-lt.js +9 -0
  142. package/{dist/sql-objects/operators/OpLte.d.ts → esm/sql-objects/operators/op-lte.d.ts} +3 -3
  143. package/esm/sql-objects/operators/op-lte.js +9 -0
  144. package/{dist/sql-objects/operators/OpNe.d.ts → esm/sql-objects/operators/op-ne.d.ts} +3 -3
  145. package/esm/sql-objects/operators/op-ne.js +9 -0
  146. package/{dist/sql-objects/operators/OpNotBetween.d.ts → esm/sql-objects/operators/op-not-between.d.ts} +2 -2
  147. package/esm/sql-objects/operators/op-not-between.js +6 -0
  148. package/{dist/sql-objects/operators/OpNotExists.d.ts → esm/sql-objects/operators/op-not-exists.d.ts} +2 -2
  149. package/esm/sql-objects/operators/op-not-exists.js +6 -0
  150. package/{dist/sql-objects/operators/OpNotILike.d.ts → esm/sql-objects/operators/op-not-ilike.d.ts} +2 -2
  151. package/esm/sql-objects/operators/op-not-ilike.js +6 -0
  152. package/{dist/sql-objects/operators/OpNotIn.d.ts → esm/sql-objects/operators/op-not-in.d.ts} +2 -2
  153. package/esm/sql-objects/operators/op-not-in.js +6 -0
  154. package/{dist/sql-objects/operators/OpNotLike.d.ts → esm/sql-objects/operators/op-not-like.d.ts} +2 -2
  155. package/esm/sql-objects/operators/op-not-like.js +6 -0
  156. package/esm/sql-objects/operators/op-or.d.ts +5 -0
  157. package/esm/sql-objects/operators/op-or.js +5 -0
  158. package/{dist/sql-objects/OrderColumn.d.ts → esm/sql-objects/order-column.d.ts} +3 -3
  159. package/esm/sql-objects/order-column.js +39 -0
  160. package/{dist/sql-objects/ParamExpression.d.ts → esm/sql-objects/param-expression.d.ts} +3 -3
  161. package/esm/sql-objects/param-expression.js +52 -0
  162. package/{dist/sql-objects/RawStatement.d.ts → esm/sql-objects/raw-statement.d.ts} +3 -3
  163. package/esm/sql-objects/raw-statement.js +15 -0
  164. package/{dist/sql-objects/ReturningColumn.d.ts → esm/sql-objects/returning-column.d.ts} +3 -3
  165. package/esm/sql-objects/returning-column.js +29 -0
  166. package/esm/sql-objects/sequence-getter-statement.d.ts +24 -0
  167. package/esm/sql-objects/sequence-getter-statement.js +47 -0
  168. package/esm/sql-objects/string-agg-statement.d.ts +31 -0
  169. package/esm/sql-objects/string-agg-statement.js +78 -0
  170. package/{dist/sql-objects/TableName.d.ts → esm/sql-objects/table-name.d.ts} +3 -3
  171. package/esm/sql-objects/table-name.js +30 -0
  172. package/esm/sql-objects/upper-statement.d.ts +22 -0
  173. package/esm/sql-objects/upper-statement.js +37 -0
  174. package/esm/sqlobject.initializers.d.ts +54 -0
  175. package/esm/sqlobject.initializers.js +101 -0
  176. package/{dist → esm}/typeguards.d.ts +18 -17
  177. package/esm/typeguards.js +57 -0
  178. package/{dist → esm}/types.d.ts +2 -2
  179. package/esm/types.js +1 -0
  180. package/package.json +49 -34
  181. package/dist/classes.d.ts +0 -38
  182. package/dist/classes.js +0 -41
  183. package/dist/index.d.ts +0 -20
  184. package/dist/index.js +0 -27
  185. package/dist/sql-objects/BaseField.js +0 -11
  186. package/dist/sql-objects/Expression.js +0 -7
  187. package/dist/sql-objects/operators/OpAnd.d.ts +0 -5
  188. package/dist/sql-objects/operators/OpAnd.js +0 -12
  189. package/dist/sql-objects/operators/OpEq.js +0 -13
  190. package/dist/sql-objects/operators/OpGt.js +0 -13
  191. package/dist/sql-objects/operators/OpGte.js +0 -13
  192. package/dist/sql-objects/operators/OpILike.js +0 -13
  193. package/dist/sql-objects/operators/OpIn.js +0 -19
  194. package/dist/sql-objects/operators/OpIs.js +0 -13
  195. package/dist/sql-objects/operators/OpIsNot.js +0 -13
  196. package/dist/sql-objects/operators/OpLt.js +0 -13
  197. package/dist/sql-objects/operators/OpLte.js +0 -13
  198. package/dist/sql-objects/operators/OpNe.js +0 -13
  199. package/dist/sql-objects/operators/OpNotBetween.js +0 -13
  200. package/dist/sql-objects/operators/OpNotExists.js +0 -13
  201. package/dist/sql-objects/operators/OpNotILike.js +0 -13
  202. package/dist/sql-objects/operators/OpNotIn.js +0 -13
  203. package/dist/sql-objects/operators/OpNotLike.js +0 -13
  204. package/dist/sql-objects/operators/OpOr.d.ts +0 -5
  205. package/dist/sql-objects/operators/OpOr.js +0 -12
  206. package/dist/sqlobject.initializers.d.ts +0 -39
  207. package/dist/sqlobject.initializers.js +0 -90
  208. package/dist/typeguards.js +0 -73
@@ -0,0 +1,52 @@
1
+ import { SerializationType } from '../enums.js';
2
+ import { Serializable } from '../serializable.js';
3
+ export class ParamExpression extends Serializable {
4
+ _name;
5
+ _dataType;
6
+ _isArray;
7
+ constructor(arg) {
8
+ super();
9
+ if (typeof arg === 'object') {
10
+ this._name = arg.name;
11
+ this._dataType = arg.dataType;
12
+ this._isArray = arg.isArray;
13
+ }
14
+ else
15
+ this._name = arg;
16
+ }
17
+ get _type() {
18
+ return SerializationType.EXTERNAL_PARAMETER;
19
+ }
20
+ /**
21
+ * Performs serialization
22
+ */
23
+ _serialize(ctx) {
24
+ const o = {
25
+ name: this._name,
26
+ dataType: this._dataType,
27
+ isArray: this._isArray,
28
+ };
29
+ return ctx.serialize(this._type, o, () => this.__defaultSerialize(ctx, o));
30
+ }
31
+ __defaultSerialize(ctx, o) {
32
+ let prmValue = (ctx.params && ctx.params[o.name]) ?? null;
33
+ if (prmValue != null && o.isArray && !Array.isArray(prmValue))
34
+ prmValue = [prmValue];
35
+ ctx.preparedParams = ctx.preparedParams || {};
36
+ if (Array.isArray(ctx.preparedParams))
37
+ ctx.preparedParams.push(prmValue);
38
+ else
39
+ ctx.preparedParams[o.name] = prmValue;
40
+ const paramOps = {
41
+ dataType: this._dataType,
42
+ isArray: this._isArray,
43
+ };
44
+ ctx.paramOptions = ctx.paramOptions ||
45
+ (Array.isArray(ctx.preparedParams) ? [] : {});
46
+ if (Array.isArray(ctx.paramOptions))
47
+ ctx.paramOptions.push(paramOps);
48
+ else
49
+ ctx.paramOptions[o.name] = paramOps;
50
+ return ':' + o.name;
51
+ }
52
+ }
@@ -1,6 +1,6 @@
1
- import { SerializationType } from '../enums';
2
- import { Serializable } from '../Serializable';
3
- import { SerializeContext } from '../SerializeContext';
1
+ import { SerializationType } from '../enums.js';
2
+ import { Serializable } from '../serializable.js';
3
+ import { SerializeContext } from '../serialize-context.js';
4
4
  export declare class RawStatement extends Serializable {
5
5
  _text: string;
6
6
  constructor(str: string);
@@ -0,0 +1,15 @@
1
+ import { SerializationType } from '../enums.js';
2
+ import { Serializable } from '../serializable.js';
3
+ export class RawStatement extends Serializable {
4
+ _text;
5
+ constructor(str) {
6
+ super();
7
+ this._text = str;
8
+ }
9
+ get _type() {
10
+ return SerializationType.RAW;
11
+ }
12
+ _serialize(ctx) {
13
+ return ctx.serialize(this._type, this._text, () => this._text);
14
+ }
15
+ }
@@ -1,6 +1,6 @@
1
- import { SerializationType } from '../enums';
2
- import { SerializeContext } from '../SerializeContext';
3
- import { BaseField } from './BaseField';
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 ReturningColumn extends BaseField {
5
5
  _alias: string;
6
6
  constructor(field: string);
@@ -0,0 +1,29 @@
1
+ import { SerializationType } from '../enums.js';
2
+ import { BaseField } from './base-field.js';
3
+ const RETURNING_COLUMN_PATTERN = /^([a-zA-Z]\w*) *(?:as)? *(\w+)?$/;
4
+ export class ReturningColumn extends BaseField {
5
+ _alias;
6
+ constructor(field) {
7
+ super();
8
+ const m = field.match(RETURNING_COLUMN_PATTERN);
9
+ if (!m)
10
+ throw new TypeError(`"${field}" does not match returning column format`);
11
+ this._field = m[1];
12
+ this._alias = m[2];
13
+ }
14
+ get _type() {
15
+ return SerializationType.RETURNING_COLUMN;
16
+ }
17
+ _serialize(ctx) {
18
+ const o = {
19
+ field: this._field,
20
+ alias: this._alias
21
+ };
22
+ ctx.returningFields = ctx.returningFields || [];
23
+ ctx.returningFields.push(o);
24
+ return ctx.serialize(this._type, o, () => {
25
+ return ctx.escapeReserved(o.field) +
26
+ (o.alias ? ' as ' + ctx.escapeReserved(o.alias) : '');
27
+ });
28
+ }
29
+ }
@@ -0,0 +1,24 @@
1
+ import { SerializationType } from '../enums.js';
2
+ import { Serializable } from '../serializable.js';
3
+ import { SerializeContext } from '../serialize-context.js';
4
+ export declare class SequenceGetterStatement extends Serializable {
5
+ _expression: string;
6
+ _next: boolean;
7
+ _alias?: string;
8
+ constructor(expression: string, next?: boolean);
9
+ get _type(): SerializationType;
10
+ next(value: boolean): this;
11
+ /**
12
+ * Sets alias to case expression.
13
+ */
14
+ as(alias: string): this;
15
+ /**
16
+ * Performs serialization
17
+ *
18
+ * @param {Object} ctx
19
+ * @return {string}
20
+ * @override
21
+ */
22
+ _serialize(ctx: SerializeContext): string;
23
+ protected __defaultSerialize(ctx: SerializeContext, o: any): string;
24
+ }
@@ -0,0 +1,47 @@
1
+ import { SerializationType } from '../enums.js';
2
+ import { Serializable } from '../serializable.js';
3
+ export class SequenceGetterStatement extends Serializable {
4
+ _expression;
5
+ _next;
6
+ _alias;
7
+ constructor(expression, next) {
8
+ super();
9
+ this._expression = expression;
10
+ this._next = !!next;
11
+ }
12
+ get _type() {
13
+ return SerializationType.SEQUENCE_GETTER_STATEMENT;
14
+ }
15
+ next(value) {
16
+ this._next = value;
17
+ return this;
18
+ }
19
+ /**
20
+ * Sets alias to case expression.
21
+ */
22
+ as(alias) {
23
+ this._alias = alias;
24
+ return this;
25
+ }
26
+ /**
27
+ * Performs serialization
28
+ *
29
+ * @param {Object} ctx
30
+ * @return {string}
31
+ * @override
32
+ */
33
+ _serialize(ctx) {
34
+ if (!this._expression)
35
+ return '';
36
+ const q = {
37
+ genName: this._expression,
38
+ next: this._next,
39
+ alias: this._alias
40
+ };
41
+ return ctx.serialize(this._type, q, () => this.__defaultSerialize(ctx, q));
42
+ }
43
+ __defaultSerialize(ctx, o) {
44
+ return (o.next ? 'nextval' : 'currval') + '(\'' + o.genName + '\')' +
45
+ (o.alias ? ' ' + o.alias : '');
46
+ }
47
+ }
@@ -0,0 +1,31 @@
1
+ import { SerializationType } from '../enums.js';
2
+ import { Serializable } from '../serializable.js';
3
+ import { SerializeContext } from '../serialize-context.js';
4
+ import { OrderColumn } from './order-column.js';
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
+ import { SerializationType } from '../enums.js';
2
+ import { printArray } from '../helpers.js';
3
+ import { Serializable } from '../serializable.js';
4
+ import { FieldExpression } from './field-expression.js';
5
+ import { OrderColumn } from './order-column.js';
6
+ export class StringAGGStatement extends Serializable {
7
+ _field;
8
+ _delimiter;
9
+ _orderBy;
10
+ _alias;
11
+ constructor(field, delimiter) {
12
+ super();
13
+ this._field = typeof field === 'string' ? new FieldExpression(field) : field;
14
+ this._delimiter = delimiter || ',';
15
+ }
16
+ get _type() {
17
+ return SerializationType.STRINGAGG_STATEMENT;
18
+ }
19
+ delimiter(value) {
20
+ this._delimiter = value;
21
+ return this;
22
+ }
23
+ /**
24
+ * Defines "order by" part of StringAGG.
25
+ */
26
+ orderBy(...field) {
27
+ this._orderBy = this._orderBy || [];
28
+ for (const arg of field) {
29
+ if (!arg)
30
+ continue;
31
+ this._orderBy.push(typeof arg === 'string' ? new OrderColumn(arg) : arg);
32
+ }
33
+ return this;
34
+ }
35
+ /**
36
+ * Sets alias to case expression.
37
+ */
38
+ as(alias) {
39
+ this._alias = alias;
40
+ return this;
41
+ }
42
+ /**
43
+ * Performs serialization
44
+ *
45
+ * @param {Object} ctx
46
+ * @return {string}
47
+ * @override
48
+ */
49
+ _serialize(ctx) {
50
+ const q = {
51
+ field: ctx.anyToSQL(this._field),
52
+ delimiter: this._delimiter,
53
+ orderBy: this.__serializeOrderColumns(ctx),
54
+ alias: this._alias
55
+ };
56
+ return ctx.serialize(this._type, q, () => this.__defaultSerialize(ctx, q));
57
+ }
58
+ __serializeOrderColumns(ctx) {
59
+ const arr = [];
60
+ if (this._orderBy)
61
+ for (const t of this._orderBy) {
62
+ const s = t._serialize(ctx);
63
+ /* istanbul ignore else */
64
+ if (s)
65
+ arr.push(s);
66
+ }
67
+ return ctx.serialize(SerializationType.SELECT_QUERY_ORDERBY, arr, () => {
68
+ const s = printArray(arr);
69
+ return s ? 'order by ' + s : '';
70
+ });
71
+ }
72
+ __defaultSerialize(ctx, o) {
73
+ return 'string_agg(' + o.field +
74
+ ',\'' + o.delimiter + '\'' +
75
+ (o.orderBy ? ' ' + o.orderBy : '') + ')' +
76
+ (o.alias ? ' ' + o.alias : '');
77
+ }
78
+ }
@@ -1,6 +1,6 @@
1
- import { SerializationType } from '../enums';
2
- import { Serializable } from '../Serializable';
3
- import { SerializeContext } from '../SerializeContext';
1
+ import { SerializationType } from '../enums.js';
2
+ import { Serializable } from '../serializable.js';
3
+ import { SerializeContext } from '../serialize-context.js';
4
4
  export declare class TableName extends Serializable {
5
5
  schema?: string;
6
6
  table?: string;
@@ -0,0 +1,30 @@
1
+ import { SerializationType } from '../enums.js';
2
+ import { Serializable } from '../serializable.js';
3
+ export class TableName extends Serializable {
4
+ schema;
5
+ table;
6
+ alias;
7
+ constructor(tableName) {
8
+ super();
9
+ const m = tableName.match(/^(?:([a-zA-Z][\w$]*)\.)? *([a-zA-Z][\w$]*) *(?:as)? *(\w+)?$/);
10
+ if (!m)
11
+ throw new TypeError(`(${tableName}) does not match table name format`);
12
+ if (m[1])
13
+ this.schema = m[1];
14
+ if (m[2])
15
+ this.table = m[2];
16
+ if (m[3])
17
+ this.alias = m[3];
18
+ }
19
+ get _type() {
20
+ return SerializationType.TABLE_NAME;
21
+ }
22
+ _serialize(ctx) {
23
+ return ctx.serialize(this._type, {
24
+ schema: this.schema,
25
+ table: this.table,
26
+ alias: this.alias
27
+ }, () => (this.schema ? this.schema + '.' : '') + this.table +
28
+ (this.alias ? ' ' + this.alias : ''));
29
+ }
30
+ }
@@ -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 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,37 @@
1
+ import { SerializationType } from '../enums.js';
2
+ import { Serializable } from '../serializable.js';
3
+ export class UpperStatement extends Serializable {
4
+ _expression;
5
+ _alias;
6
+ constructor(expression) {
7
+ super();
8
+ this._expression = expression;
9
+ }
10
+ get _type() {
11
+ return SerializationType.UPPER_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 'upper(' + o + ')' +
35
+ (this._alias ? ' ' + this._alias : '');
36
+ }
37
+ }
@@ -0,0 +1,54 @@
1
+ import { DataType } from './enums.js';
2
+ import { DeleteQuery } from './query/delete-query.js';
3
+ import { InsertQuery } from './query/insert-query.js';
4
+ import { SelectQuery } from './query/select-query.js';
5
+ import { UpdateQuery } from './query/update-query.js';
6
+ import { Serializable } from './serializable.js';
7
+ import { CaseStatement } from './sql-objects/case-statement.js';
8
+ import { CoalesceStatement } from './sql-objects/coalesce-statement.js';
9
+ import { CountStatement } from './sql-objects/count-statement.js';
10
+ import { FieldExpression } from './sql-objects/field-expression.js';
11
+ import { JoinStatement } from './sql-objects/join-statement.js';
12
+ import { LowerStatement } from './sql-objects/lower-statement.js';
13
+ import { MaxStatement } from './sql-objects/max-statement.js';
14
+ import { MinStatement } from './sql-objects/min-statement.js';
15
+ import { ParamExpression } from './sql-objects/param-expression.js';
16
+ import { RawStatement } from './sql-objects/raw-statement.js';
17
+ import { SequenceGetterStatement } from './sql-objects/sequence-getter-statement.js';
18
+ import { StringAGGStatement } from './sql-objects/string-agg-statement.js';
19
+ import { UpperStatement } from './sql-objects/upper-statement.js';
20
+ export declare function Raw(text: string): RawStatement;
21
+ export declare function Select(...column: (string | string[] | Serializable)[]): SelectQuery;
22
+ export declare function Insert(tableName: string | RawStatement, input: any): InsertQuery;
23
+ export declare function Update(tableName: string | RawStatement, input: any): UpdateQuery;
24
+ export declare function Delete(tableName: string | RawStatement): DeleteQuery;
25
+ export declare function Join(table: string | SelectQuery | RawStatement): JoinStatement;
26
+ export declare function InnerJoin(table: string | SelectQuery | RawStatement): JoinStatement;
27
+ export declare function LeftJoin(table: string | SelectQuery | RawStatement): JoinStatement;
28
+ export declare function LeftOuterJoin(table: string | SelectQuery | RawStatement): JoinStatement;
29
+ export declare function RightJoin(table: string | SelectQuery | RawStatement): JoinStatement;
30
+ export declare function RightOuterJoin(table: string | SelectQuery | RawStatement): JoinStatement;
31
+ export declare function OuterJoin(table: string | SelectQuery | RawStatement): JoinStatement;
32
+ export declare function FullOuterJoin(table: string | SelectQuery | RawStatement): JoinStatement;
33
+ export declare function Case(): CaseStatement;
34
+ export declare function Coalesce(...expressions: any[]): CoalesceStatement;
35
+ export declare function Lower(expression: any): LowerStatement;
36
+ export declare function Upper(expression: any): UpperStatement;
37
+ export declare function Min(expression: any): MinStatement;
38
+ export declare function Max(expression: any): MaxStatement;
39
+ export declare function StringAGG(field: any): StringAGGStatement;
40
+ export declare function Count(): CountStatement;
41
+ export declare function SequenceNext(expression: string): SequenceGetterStatement;
42
+ export declare function SequenceCurr(expression: string): SequenceGetterStatement;
43
+ export declare function Param(name: string, dataType?: DataType, isArray?: boolean): ParamExpression;
44
+ export declare function Param(args: {
45
+ name: string;
46
+ dataType?: DataType;
47
+ isArray?: boolean;
48
+ }): ParamExpression;
49
+ export declare function Field(name: string, dataType?: DataType, isArray?: boolean): FieldExpression;
50
+ export declare function Field(args: {
51
+ name: string;
52
+ dataType?: DataType;
53
+ isArray?: boolean;
54
+ }): FieldExpression;
@@ -0,0 +1,101 @@
1
+ import { JoinType } from './enums.js';
2
+ import { DeleteQuery } from './query/delete-query.js';
3
+ import { InsertQuery } from './query/insert-query.js';
4
+ import { SelectQuery } from './query/select-query.js';
5
+ import { UpdateQuery } from './query/update-query.js';
6
+ import { CaseStatement } from './sql-objects/case-statement.js';
7
+ import { CoalesceStatement } from './sql-objects/coalesce-statement.js';
8
+ import { CountStatement } from './sql-objects/count-statement.js';
9
+ import { FieldExpression } from './sql-objects/field-expression.js';
10
+ import { JoinStatement } from './sql-objects/join-statement.js';
11
+ import { LowerStatement } from './sql-objects/lower-statement.js';
12
+ import { MaxStatement } from './sql-objects/max-statement.js';
13
+ import { MinStatement } from './sql-objects/min-statement.js';
14
+ import { ParamExpression } from './sql-objects/param-expression.js';
15
+ import { RawStatement } from './sql-objects/raw-statement.js';
16
+ import { SequenceGetterStatement } from './sql-objects/sequence-getter-statement.js';
17
+ import { StringAGGStatement } from './sql-objects/string-agg-statement.js';
18
+ import { UpperStatement } from './sql-objects/upper-statement.js';
19
+ export function Raw(text) {
20
+ return new RawStatement(text);
21
+ }
22
+ export function Select(...column) {
23
+ return new SelectQuery(...column);
24
+ }
25
+ export function Insert(tableName, input) {
26
+ return new InsertQuery(tableName, input);
27
+ }
28
+ export function Update(tableName, input) {
29
+ return new UpdateQuery(tableName, input);
30
+ }
31
+ export function Delete(tableName) {
32
+ return new DeleteQuery(tableName);
33
+ }
34
+ export function Join(table) {
35
+ return new JoinStatement(JoinType.INNER, table);
36
+ }
37
+ export function InnerJoin(table) {
38
+ return new JoinStatement(JoinType.INNER, table);
39
+ }
40
+ export function LeftJoin(table) {
41
+ return new JoinStatement(JoinType.LEFT, table);
42
+ }
43
+ export function LeftOuterJoin(table) {
44
+ return new JoinStatement(JoinType.LEFT_OUTER, table);
45
+ }
46
+ export function RightJoin(table) {
47
+ return new JoinStatement(JoinType.RIGHT, table);
48
+ }
49
+ export function RightOuterJoin(table) {
50
+ return new JoinStatement(JoinType.RIGHT_OUTER, table);
51
+ }
52
+ export function OuterJoin(table) {
53
+ return new JoinStatement(JoinType.OUTER, table);
54
+ }
55
+ export function FullOuterJoin(table) {
56
+ return new JoinStatement(JoinType.FULL_OUTER, table);
57
+ }
58
+ export function Case() {
59
+ return new CaseStatement();
60
+ }
61
+ export function Coalesce(...expressions) {
62
+ return new CoalesceStatement(...expressions);
63
+ }
64
+ export function Lower(expression) {
65
+ return new LowerStatement(expression);
66
+ }
67
+ export function Upper(expression) {
68
+ return new UpperStatement(expression);
69
+ }
70
+ export function Min(expression) {
71
+ return new MinStatement(expression);
72
+ }
73
+ export function Max(expression) {
74
+ return new MaxStatement(expression);
75
+ }
76
+ export function StringAGG(field) {
77
+ return new StringAGGStatement(field);
78
+ }
79
+ export function Count() {
80
+ return new CountStatement();
81
+ }
82
+ export function SequenceNext(expression) {
83
+ return new SequenceGetterStatement(expression, true);
84
+ }
85
+ export function SequenceCurr(expression) {
86
+ return new SequenceGetterStatement(expression, false);
87
+ }
88
+ export function Param(arg0, arg1, arg2) {
89
+ if (typeof arg0 === 'object')
90
+ return new ParamExpression(arg0);
91
+ return new ParamExpression({
92
+ name: arg0,
93
+ dataType: arg1,
94
+ isArray: arg2
95
+ });
96
+ }
97
+ export function Field(arg0, arg1, arg2) {
98
+ if (typeof arg0 === 'object')
99
+ return new FieldExpression(arg0);
100
+ return new FieldExpression(arg0, arg1, arg2);
101
+ }
@@ -1,21 +1,22 @@
1
- import type { DeleteQuery } from './query/DeleteQuery';
2
- import type { InsertQuery } from './query/InsertQuery';
3
- import type { SelectQuery } from './query/SelectQuery';
4
- import type { UpdateQuery } from './query/UpdateQuery';
5
- import { Serializable } from './Serializable';
6
- import type { CaseStatement } from './sql-objects/CaseStatement';
7
- import { CountStatement } from './sql-objects/CountStatement';
8
- import type { FieldExpression } from './sql-objects/FieldExpression';
9
- import type { GroupColumn } from './sql-objects/GroupColumn';
10
- import type { JoinStatement } from './sql-objects/JoinStatement';
11
- import type { CompOperator } from './sql-objects/operators/CompOperator';
12
- import type { LogicalOperator } from './sql-objects/operators/LogicalOperator';
13
- import type { OrderColumn } from './sql-objects/OrderColumn';
14
- import type { ParamExpression } from './sql-objects/ParamExpression';
15
- import type { RawStatement } from './sql-objects/RawStatement';
16
- import type { ReturningColumn } from './sql-objects/ReturningColumn';
17
- import type { TableName } from './sql-objects/TableName';
1
+ import type { DeleteQuery } from './query/delete-query.js';
2
+ import type { InsertQuery } from './query/insert-query.js';
3
+ import type { SelectQuery } from './query/select-query.js';
4
+ import type { UpdateQuery } from './query/update-query.js';
5
+ import { Serializable } from './serializable.js';
6
+ import type { CaseStatement } from './sql-objects/case-statement.js';
7
+ import { CountStatement } from './sql-objects/count-statement.js';
8
+ import type { FieldExpression } from './sql-objects/field-expression.js';
9
+ import type { GroupColumn } from './sql-objects/group-column.js';
10
+ import type { JoinStatement } from './sql-objects/join-statement.js';
11
+ import type { CompOperator } from './sql-objects/operators/comp-operator.js';
12
+ import type { LogicalOperator } from './sql-objects/operators/logical-operator.js';
13
+ import type { OrderColumn } from './sql-objects/order-column.js';
14
+ import type { ParamExpression } from './sql-objects/param-expression.js';
15
+ import type { RawStatement } from './sql-objects/raw-statement.js';
16
+ import type { ReturningColumn } from './sql-objects/returning-column.js';
17
+ import type { TableName } from './sql-objects/table-name.js';
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;
@@ -0,0 +1,57 @@
1
+ import { SerializationType } from './enums.js';
2
+ import { Query } from './query/query.js';
3
+ import { Serializable } from './serializable.js';
4
+ export function isSerializable(value) {
5
+ return value instanceof Serializable;
6
+ }
7
+ export function isQuery(value) {
8
+ return value instanceof Query;
9
+ }
10
+ export function isRawStatement(value) {
11
+ return isSerializable(value) && value._type === SerializationType.RAW;
12
+ }
13
+ export function isSelectQuery(value) {
14
+ return isSerializable(value) && value._type === SerializationType.SELECT_QUERY;
15
+ }
16
+ export function isInsertQuery(value) {
17
+ return isSerializable(value) && value._type === SerializationType.INSERT_QUERY;
18
+ }
19
+ export function isIUpdateQuery(value) {
20
+ return isSerializable(value) && value._type === SerializationType.UPDATE_QUERY;
21
+ }
22
+ export function isDeleteQuery(value) {
23
+ return isSerializable(value) && value._type === SerializationType.DELETE_QUERY;
24
+ }
25
+ export function isJoinStatement(value) {
26
+ return isSerializable(value) && value._type === SerializationType.JOIN;
27
+ }
28
+ export function isCaseStatement(value) {
29
+ return isSerializable(value) && value._type === SerializationType.CASE_STATEMENT;
30
+ }
31
+ export function isCountStatement(value) {
32
+ return isSerializable(value) && value._type === SerializationType.COUNT_STATEMENT;
33
+ }
34
+ export function isParamExpression(value) {
35
+ return isSerializable(value) && value._type === SerializationType.EXTERNAL_PARAMETER;
36
+ }
37
+ export function isLogicalOperator(value) {
38
+ return isSerializable(value) && value._type === SerializationType.LOGICAL_EXPRESSION;
39
+ }
40
+ export function isCompOperator(value) {
41
+ return isSerializable(value) && value._type === SerializationType.COMPARISON_EXPRESSION;
42
+ }
43
+ export function isSelectColumn(value) {
44
+ return isSerializable(value) && value._type === SerializationType.SELECT_COLUMN;
45
+ }
46
+ export function isOrderColumn(value) {
47
+ return isSerializable(value) && value._type === SerializationType.ORDER_COLUMN;
48
+ }
49
+ export function isGroupColumn(value) {
50
+ return isSerializable(value) && value._type === SerializationType.GROUP_COLUMN;
51
+ }
52
+ export function isReturningColumn(value) {
53
+ return isSerializable(value) && value._type === SerializationType.RETURNING_COLUMN;
54
+ }
55
+ export function isTableName(value) {
56
+ return isSerializable(value) && value._type === SerializationType.TABLE_NAME;
57
+ }