@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
@@ -1,19 +1,19 @@
1
- import { SerializationType } from '../enums';
2
- import { Serializable } from '../Serializable';
3
- import { SerializeContext } from '../SerializeContext';
4
- import { GroupColumn } from '../sql-objects/GroupColumn';
5
- import { JoinStatement } from '../sql-objects/JoinStatement';
6
- import { LogicalOperator } from '../sql-objects/operators/LogicalOperator';
7
- import { OrderColumn } from '../sql-objects/OrderColumn';
8
- import { RawStatement } from '../sql-objects/RawStatement';
9
- import { Query } from './Query';
1
+ import { SerializationType } from '../enums.js';
2
+ import { Serializable } from '../serializable.js';
3
+ import { SerializeContext } from '../serialize-context.js';
4
+ import { GroupColumn } from '../sql-objects/group-column.js';
5
+ import { JoinStatement } from '../sql-objects/join-statement.js';
6
+ import { LogicalOperator } from '../sql-objects/operators/logical-operator.js';
7
+ import { OrderColumn } from '../sql-objects/order-column.js';
8
+ import { RawStatement } from '../sql-objects/raw-statement.js';
9
+ import { Query } from './query.js';
10
10
  export declare class SelectQuery extends Query {
11
11
  _tables?: Serializable[];
12
12
  _columns?: Serializable[];
13
13
  _joins?: JoinStatement[];
14
14
  _where?: LogicalOperator;
15
- _groupBy?: (GroupColumn | RawStatement)[];
16
- _orderBy?: (OrderColumn | RawStatement)[];
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 | RawStatement)[]): this;
42
+ groupBy(...field: (string | Serializable)[]): this;
43
43
  /**
44
44
  * Defines "order by" part of query.
45
45
  */
46
- orderBy(...field: (string | RawStatement)[]): this;
46
+ orderBy(...field: (string | Serializable)[]): this;
47
47
  /**
48
48
  * Sets alias for sub-select queries
49
49
  */
@@ -1,24 +1,31 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SelectQuery = void 0;
4
- const putil_varhelpers_1 = require("putil-varhelpers");
5
- const enums_1 = require("../enums");
6
- const helpers_1 = require("../helpers");
7
- const FieldExpression_1 = require("../sql-objects/FieldExpression");
8
- const GroupColumn_1 = require("../sql-objects/GroupColumn");
9
- const OpAnd_1 = require("../sql-objects/operators/OpAnd");
10
- const OrderColumn_1 = require("../sql-objects/OrderColumn");
11
- const TableName_1 = require("../sql-objects/TableName");
12
- const typeguards_1 = require("../typeguards");
13
- const Query_1 = require("./Query");
14
- class SelectQuery extends Query_1.Query {
1
+ import { coerceToInt } from 'putil-varhelpers';
2
+ import { SerializationType } from '../enums.js';
3
+ import { printArray } from '../helpers.js';
4
+ import { FieldExpression } from '../sql-objects/field-expression.js';
5
+ import { GroupColumn } from '../sql-objects/group-column.js';
6
+ import { OpAnd } from '../sql-objects/operators/op-and.js';
7
+ import { OrderColumn } from '../sql-objects/order-column.js';
8
+ import { TableName } from '../sql-objects/table-name.js';
9
+ import { isJoinStatement, isSerializable } from '../typeguards.js';
10
+ import { Query } from './query.js';
11
+ export class SelectQuery extends Query {
12
+ _tables;
13
+ _columns;
14
+ _joins;
15
+ _where;
16
+ _groupBy;
17
+ _orderBy;
18
+ _limit;
19
+ _offset;
20
+ _alias;
21
+ _distinct;
15
22
  constructor(...column) {
16
23
  super();
17
24
  if (column.length)
18
25
  this.addColumn(...column);
19
26
  }
20
27
  get _type() {
21
- return enums_1.SerializationType.SELECT_QUERY;
28
+ return SerializationType.SELECT_QUERY;
22
29
  }
23
30
  /**
24
31
  * Adds columns to query.
@@ -32,7 +39,7 @@ class SelectQuery extends Query_1.Query {
32
39
  if (Array.isArray(arg))
33
40
  self.addColumn(...arg);
34
41
  else
35
- this._columns.push((0, typeguards_1.isSerializable)(arg) ? arg : new FieldExpression_1.FieldExpression(arg));
42
+ this._columns.push(isSerializable(arg) ? arg : new FieldExpression(arg));
36
43
  }
37
44
  return this;
38
45
  }
@@ -44,7 +51,7 @@ class SelectQuery extends Query_1.Query {
44
51
  for (const arg of table) {
45
52
  if (!arg)
46
53
  continue;
47
- this._tables.push(typeof arg === 'string' ? new TableName_1.TableName(arg) : arg);
54
+ this._tables.push(typeof arg === 'string' ? new TableName(arg) : arg);
48
55
  }
49
56
  return this;
50
57
  }
@@ -56,7 +63,7 @@ class SelectQuery extends Query_1.Query {
56
63
  for (const arg of join) {
57
64
  if (!arg)
58
65
  continue;
59
- if (!(0, typeguards_1.isJoinStatement)(arg))
66
+ if (!isJoinStatement(arg))
60
67
  throw new TypeError('Join statement required');
61
68
  this._joins.push(arg);
62
69
  }
@@ -66,7 +73,7 @@ class SelectQuery extends Query_1.Query {
66
73
  * Defines "where" part of query
67
74
  */
68
75
  where(...condition) {
69
- this._where = this._where || new OpAnd_1.OpAnd();
76
+ this._where = this._where || new OpAnd();
70
77
  this._where.add(...condition);
71
78
  return this;
72
79
  }
@@ -78,7 +85,7 @@ class SelectQuery extends Query_1.Query {
78
85
  for (const arg of field) {
79
86
  if (!arg)
80
87
  continue;
81
- this._groupBy.push(typeof arg === 'string' ? new GroupColumn_1.GroupColumn(arg) : arg);
88
+ this._groupBy.push(typeof arg === 'string' ? new GroupColumn(arg) : arg);
82
89
  }
83
90
  return this;
84
91
  }
@@ -90,7 +97,7 @@ class SelectQuery extends Query_1.Query {
90
97
  for (const arg of field) {
91
98
  if (!arg)
92
99
  continue;
93
- this._orderBy.push(typeof arg === 'string' ? new OrderColumn_1.OrderColumn(arg) : arg);
100
+ this._orderBy.push(typeof arg === 'string' ? new OrderColumn(arg) : arg);
94
101
  }
95
102
  return this;
96
103
  }
@@ -105,14 +112,14 @@ class SelectQuery extends Query_1.Query {
105
112
  * Sets limit for query
106
113
  */
107
114
  limit(limit) {
108
- this._limit = (0, putil_varhelpers_1.coerceToInt)(limit);
115
+ this._limit = coerceToInt(limit);
109
116
  return this;
110
117
  }
111
118
  /**
112
119
  * Sets offset for query
113
120
  */
114
121
  offset(offset) {
115
- this._offset = (0, putil_varhelpers_1.coerceToInt)(offset);
122
+ this._offset = coerceToInt(offset);
116
123
  return this;
117
124
  }
118
125
  /**
@@ -183,18 +190,19 @@ class SelectQuery extends Query_1.Query {
183
190
  const arr = [];
184
191
  if (this._columns)
185
192
  for (const t of this._columns) {
186
- const s = t._serialize(ctx);
193
+ const s = ctx.anyToSQL(t);
194
+ // t._serialize(ctx);
187
195
  if (s) {
188
196
  if (t instanceof SelectQuery) {
189
197
  if (!t._alias)
190
198
  throw new TypeError('Alias required for sub-select in columns');
191
- arr.push('(' + s + ') ' + t._alias);
199
+ arr.push(s + ' ' + t._alias);
192
200
  }
193
201
  else
194
202
  arr.push(s);
195
203
  }
196
204
  }
197
- return ctx.serialize(enums_1.SerializationType.SELECT_QUERY_COLUMNS, arr, () => (0, helpers_1.printArray)(arr) || '*');
205
+ return ctx.serialize(SerializationType.SELECT_QUERY_COLUMNS, arr, () => printArray(arr) || '*');
198
206
  }
199
207
  /**
200
208
  *
@@ -215,7 +223,7 @@ class SelectQuery extends Query_1.Query {
215
223
  arr.push(s);
216
224
  }
217
225
  }
218
- return ctx.serialize(enums_1.SerializationType.SELECT_QUERY_FROM, arr, () => {
226
+ return ctx.serialize(SerializationType.SELECT_QUERY_FROM, arr, () => {
219
227
  const s = arr.join(',');
220
228
  return s ? ('from' + (s.substring(0, 1) !== '\n' ? ' ' : '') + s) : '';
221
229
  });
@@ -232,7 +240,7 @@ class SelectQuery extends Query_1.Query {
232
240
  if (s)
233
241
  arr.push(s);
234
242
  }
235
- return ctx.serialize(enums_1.SerializationType.SELECT_QUERY_JOIN, arr, () => {
243
+ return ctx.serialize(SerializationType.SELECT_QUERY_JOIN, arr, () => {
236
244
  return arr.join('\n');
237
245
  });
238
246
  }
@@ -243,7 +251,7 @@ class SelectQuery extends Query_1.Query {
243
251
  if (!this._where)
244
252
  return '';
245
253
  const s = this._where._serialize(ctx);
246
- return ctx.serialize(enums_1.SerializationType.CONDITIONS_BLOCK, s, () => {
254
+ return ctx.serialize(SerializationType.CONDITIONS_BLOCK, s, () => {
247
255
  /* istanbul ignore next */
248
256
  return s ? 'where ' + s : '';
249
257
  });
@@ -260,8 +268,8 @@ class SelectQuery extends Query_1.Query {
260
268
  if (s)
261
269
  arr.push(s);
262
270
  }
263
- return ctx.serialize(enums_1.SerializationType.SELECT_QUERY_GROUPBY, arr, () => {
264
- const s = (0, helpers_1.printArray)(arr);
271
+ return ctx.serialize(SerializationType.SELECT_QUERY_GROUPBY, arr, () => {
272
+ const s = printArray(arr);
265
273
  return s ? 'group by ' + s : '';
266
274
  });
267
275
  }
@@ -274,10 +282,9 @@ class SelectQuery extends Query_1.Query {
274
282
  if (s)
275
283
  arr.push(s);
276
284
  }
277
- return ctx.serialize(enums_1.SerializationType.SELECT_QUERY_ORDERBY, arr, () => {
278
- const s = (0, helpers_1.printArray)(arr);
285
+ return ctx.serialize(SerializationType.SELECT_QUERY_ORDERBY, arr, () => {
286
+ const s = printArray(arr);
279
287
  return s ? 'order by ' + s : '';
280
288
  });
281
289
  }
282
290
  }
283
- exports.SelectQuery = SelectQuery;
@@ -1,9 +1,9 @@
1
- import { SerializationType } from '../enums';
2
- import { SerializeContext } from '../SerializeContext';
3
- import { LogicalOperator } from '../sql-objects/operators/LogicalOperator';
4
- import { RawStatement } from '../sql-objects/RawStatement';
5
- import { TableName } from '../sql-objects/TableName';
6
- import { ReturningQuery } from './ReturningQuery';
1
+ import { SerializationType } from '../enums.js';
2
+ import { SerializeContext } from '../serialize-context.js';
3
+ import { LogicalOperator } from '../sql-objects/operators/logical-operator.js';
4
+ import { RawStatement } from '../sql-objects/raw-statement.js';
5
+ import { TableName } from '../sql-objects/table-name.js';
6
+ import { ReturningQuery } from './returning-query.js';
7
7
  export declare class UpdateQuery extends ReturningQuery {
8
8
  _table: TableName | RawStatement;
9
9
  _input: any;
@@ -0,0 +1,79 @@
1
+ import { SerializationType } from '../enums.js';
2
+ import { printArray } from '../helpers.js';
3
+ import { OpAnd } from '../sql-objects/operators/op-and.js';
4
+ import { TableName } from '../sql-objects/table-name.js';
5
+ import { isRawStatement } from '../typeguards.js';
6
+ import { ReturningQuery } from './returning-query.js';
7
+ export class UpdateQuery extends ReturningQuery {
8
+ _table;
9
+ _input;
10
+ _where;
11
+ constructor(tableName, input) {
12
+ super();
13
+ if (!tableName || !(typeof tableName === 'string' || isRawStatement(tableName)))
14
+ throw new TypeError('String or Raw instance required as first argument (tableName) for UpdateQuery');
15
+ if (!input || !((typeof input === 'object' && !Array.isArray(input)) ||
16
+ input.isSelect))
17
+ throw new TypeError('Object or Raw instance required as second argument (input) for UpdateQuery');
18
+ this._table = typeof tableName === 'string' ? new TableName(tableName) : tableName;
19
+ this._input = input;
20
+ }
21
+ get _type() {
22
+ return SerializationType.UPDATE_QUERY;
23
+ }
24
+ /**
25
+ * Defines "where" part of query
26
+ */
27
+ where(...operator) {
28
+ this._where = this._where || new OpAnd();
29
+ this._where.add(...operator);
30
+ return this;
31
+ }
32
+ /**
33
+ * Performs serialization
34
+ */
35
+ _serialize(ctx) {
36
+ const o = {
37
+ table: this._table._serialize(ctx),
38
+ values: this.__serializeValues(ctx),
39
+ where: this.__serializeWhere(ctx),
40
+ returning: this.__serializeReturning(ctx)
41
+ };
42
+ let out = 'update ' + o.table + ' set \n\t' + o.values + '\b';
43
+ if (o.where)
44
+ out += '\n' + o.where;
45
+ if (o.returning)
46
+ out += '\n' + o.returning;
47
+ return out;
48
+ }
49
+ /**
50
+ *
51
+ */
52
+ __serializeValues(ctx) {
53
+ const arr = [];
54
+ const allValues = this._input;
55
+ for (const n of Object.getOwnPropertyNames(allValues)) {
56
+ const value = ctx.anyToSQL(allValues[n]);
57
+ arr.push({
58
+ field: n,
59
+ value
60
+ });
61
+ }
62
+ return ctx.serialize(SerializationType.UPDATE_QUERY_VALUES, arr, () => {
63
+ const a = arr.map(o => o.field + ' = ' + o.value);
64
+ return printArray(a, ',');
65
+ });
66
+ }
67
+ /**
68
+ *
69
+ */
70
+ __serializeWhere(ctx) {
71
+ if (!this._where)
72
+ return '';
73
+ const s = this._where._serialize(ctx);
74
+ return ctx.serialize(SerializationType.CONDITIONS_BLOCK, s, () => {
75
+ /* istanbul ignore next */
76
+ return s ? 'where ' + s : '';
77
+ });
78
+ }
79
+ }
@@ -1,5 +1,5 @@
1
- import type { SerializationType } from './enums';
2
- import type { SerializeContext } from './SerializeContext';
1
+ import type { SerializationType } from './enums.js';
2
+ import type { SerializeContext } from './serialize-context.js';
3
3
  export declare abstract class Serializable {
4
4
  abstract _type: SerializationType;
5
5
  /**
@@ -0,0 +1,2 @@
1
+ export class Serializable {
2
+ }
@@ -1,4 +1,4 @@
1
- import { DefaultSerializeFunction, GenerateOptions, ParamOptions } from './types';
1
+ import { DefaultSerializeFunction, GenerateOptions, ParamOptions } from './types.js';
2
2
  export declare class SerializeContext implements GenerateOptions {
3
3
  readonly reservedWords: string[];
4
4
  dialect?: string;
@@ -0,0 +1,145 @@
1
+ import { SerializationType } from './enums.js';
2
+ import { serializers } from './extensions.js';
3
+ import { Serializable } from './serializable.js';
4
+ import { isLogicalOperator, isQuery, isSerializable } from './typeguards.js';
5
+ export class SerializeContext {
6
+ reservedWords = [
7
+ 'schema', 'table', 'field', 'index', 'foreign', 'key',
8
+ 'select', 'insert', 'update', 'delete', 'with', 'merge',
9
+ 'join', 'inner', 'outer', 'left', 'right', 'full',
10
+ 'from', 'where', 'order', 'by', 'group', 'having',
11
+ 'acs', 'ascending', 'dsc', 'descending', 'distinct',
12
+ 'and', 'or', 'not', 'between', 'null', 'like', 'ilike',
13
+ 'count', 'sum', 'average', 'avg', 'cascade', 'authorization',
14
+ 'create', 'add', 'drop', 'alter', 'index', 'private', 'sequence',
15
+ 'default', 'constraint', 'references', 'primary', 'foreign',
16
+ 'user', 'password'
17
+ ];
18
+ dialect;
19
+ prettyPrint;
20
+ params;
21
+ dialectVersion;
22
+ strictParams;
23
+ serializeHooks;
24
+ paramOptions;
25
+ preparedParams;
26
+ returningFields;
27
+ strictParamGenId;
28
+ constructor(opts) {
29
+ if (opts)
30
+ Object.assign(this, opts);
31
+ }
32
+ /**
33
+ * Performs a fallback mechanism, tries hook functions, extensions than default function to serialize
34
+ */
35
+ serialize(type, o, fallback) {
36
+ if (this.serializeHooks) {
37
+ for (const hook of this.serializeHooks) {
38
+ const s = hook(this, type, o, fallback);
39
+ if (s != null)
40
+ return s;
41
+ }
42
+ }
43
+ for (const ext of serializers) {
44
+ if (ext.dialect === this.dialect && ext.serialize) {
45
+ const s = ext.serialize(this, type, o, fallback);
46
+ if (s != null)
47
+ return s;
48
+ }
49
+ }
50
+ return fallback(this, o);
51
+ }
52
+ /**
53
+ * Serializes object
54
+ */
55
+ anyToSQL(v) {
56
+ if (v == null)
57
+ return 'null';
58
+ if (Array.isArray(v)) {
59
+ const vv = v.map(x => this.anyToSQL(x));
60
+ return this.serialize(SerializationType.ARRAY, vv, () => '(' + v.join(',')) + ')';
61
+ }
62
+ if (typeof v === 'object') {
63
+ if (isSerializable(v)) {
64
+ const s = v._serialize(this);
65
+ return s ? (isQuery(v) || isLogicalOperator(v) ? '(' + s + ')' : s) :
66
+ /* istanbul ignore next */
67
+ '';
68
+ }
69
+ if (v instanceof Date) {
70
+ return this.serialize(SerializationType.DATE_VALUE, v, () => this.dateToSQL(v));
71
+ }
72
+ }
73
+ if (typeof v === 'string') {
74
+ return this.serialize(SerializationType.STRING_VALUE, v, () => this.stringToSQL(v));
75
+ }
76
+ if (typeof v === 'boolean') {
77
+ return this.serialize(SerializationType.BOOLEAN_VALUE, v, () => this.booleanToSQL(v));
78
+ }
79
+ if (typeof v === 'number') {
80
+ return this.serialize(SerializationType.NUMBER_VALUE, v, () => this.numberToSQL(v));
81
+ }
82
+ if (v instanceof Serializable)
83
+ return v._serialize(this);
84
+ return v;
85
+ }
86
+ /**
87
+ *
88
+ */
89
+ stringToSQL(val) {
90
+ return '\'' + String(val).replace(/'/g, '\'\'') + '\'';
91
+ }
92
+ /**
93
+ *
94
+ */
95
+ booleanToSQL(val) {
96
+ return val ? 'true' : 'false';
97
+ }
98
+ /**
99
+ *
100
+ */
101
+ numberToSQL(val) {
102
+ return '' + val;
103
+ }
104
+ /**
105
+ *
106
+ */
107
+ dateToSQL(date) {
108
+ const d = date.getUTCDate();
109
+ const m = date.getUTCMonth() + 1;
110
+ const y = date.getUTCFullYear();
111
+ const h = date.getUTCHours();
112
+ const n = date.getUTCMinutes();
113
+ const s = date.getUTCSeconds();
114
+ let str = y + '-' + (m <= 9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
115
+ /* istanbul ignore else */
116
+ if (h + n + s)
117
+ str += ' ' + (h <= 9 ? '0' + h : h) + ':' +
118
+ (n <= 9 ? '0' + n : n) + ':' +
119
+ (s <= 9 ? '0' + s : s);
120
+ return '\'' + str + '\'';
121
+ }
122
+ /**
123
+ * Check if a string value is a reserved word
124
+ */
125
+ isReservedWord(s) {
126
+ if (!s)
127
+ return false;
128
+ if (this.reservedWords.includes(s.toLowerCase()))
129
+ return true;
130
+ for (const ext of serializers) {
131
+ if (ext.dialect === this.dialect && ext.isReservedWord) {
132
+ if (ext.isReservedWord(this, s))
133
+ return true;
134
+ }
135
+ }
136
+ return false;
137
+ }
138
+ escapeReserved(s) {
139
+ if (!s)
140
+ return '';
141
+ if (this.isReservedWord(s))
142
+ return '"' + s + '"';
143
+ return s;
144
+ }
145
+ }
@@ -1,4 +1,4 @@
1
- import { Expression } from './Expression';
1
+ import { Expression } from './expression.js';
2
2
  export declare abstract class BaseField extends Expression {
3
3
  _field: string;
4
4
  _schema?: string;
@@ -0,0 +1,7 @@
1
+ import { Expression } from './expression.js';
2
+ export class BaseField extends Expression {
3
+ _field = '';
4
+ _schema;
5
+ _table;
6
+ _descending;
7
+ }
@@ -1,9 +1,9 @@
1
- import { SerializationType } from '../enums';
2
- import { Serializable } from '../Serializable';
3
- import { SerializeContext } from '../SerializeContext';
4
- import { Operator } from './Operator';
5
- import { LogicalOperator } from './operators/LogicalOperator';
6
- import { RawStatement } from './RawStatement';
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
+ import { LogicalOperator } from './operators/logical-operator.js';
6
+ import { RawStatement } from './raw-statement.js';
7
7
  export declare class CaseStatement extends Serializable {
8
8
  _expressions: {
9
9
  condition: Serializable;
@@ -0,0 +1,85 @@
1
+ import { SerializationType } from '../enums.js';
2
+ import { Serializable } from '../serializable.js';
3
+ import { OpAnd } from './operators/op-and.js';
4
+ export class CaseStatement extends Serializable {
5
+ _expressions;
6
+ _elseValue;
7
+ _condition;
8
+ _alias;
9
+ constructor() {
10
+ super();
11
+ this._expressions = [];
12
+ }
13
+ get _type() {
14
+ return SerializationType.CASE_STATEMENT;
15
+ }
16
+ /**
17
+ * Defines "when" part of Case expression.
18
+ */
19
+ when(...condition) {
20
+ if (condition.length)
21
+ this._condition = new OpAnd(...condition);
22
+ else
23
+ this._condition = undefined;
24
+ return this;
25
+ }
26
+ /**
27
+ * Defines "then" part of Case expression.
28
+ */
29
+ then(value) {
30
+ if (this._condition)
31
+ this._expressions.push({
32
+ condition: this._condition,
33
+ value
34
+ });
35
+ return this;
36
+ }
37
+ /**
38
+ * Defines "else" part of Case expression.
39
+ */
40
+ else(value) {
41
+ this._elseValue = value;
42
+ return this;
43
+ }
44
+ /**
45
+ * Sets alias to case expression.
46
+ */
47
+ as(alias) {
48
+ this._alias = alias;
49
+ return this;
50
+ }
51
+ /**
52
+ * Performs serialization
53
+ *
54
+ * @param {Object} ctx
55
+ * @return {string}
56
+ * @override
57
+ */
58
+ _serialize(ctx) {
59
+ if (!this._expressions.length)
60
+ return '';
61
+ const q = {
62
+ expressions: [],
63
+ elseValue: this._elseValue !== undefined ?
64
+ ctx.anyToSQL(this._elseValue) : undefined
65
+ };
66
+ for (const x of this._expressions) {
67
+ const o = {
68
+ condition: x.condition._serialize(ctx),
69
+ value: ctx.anyToSQL(x.value)
70
+ };
71
+ q.expressions.push(o);
72
+ }
73
+ return ctx.serialize(this._type, q, () => this.__defaultSerialize(ctx, q));
74
+ }
75
+ __defaultSerialize(ctx, o) {
76
+ let out = 'case\n\t';
77
+ for (const x of o.expressions) {
78
+ out += 'when ' + x.condition + ' then ' + x.value + '\n';
79
+ }
80
+ if (o.elseValue !== undefined)
81
+ out += 'else ' + o.elseValue + '\n';
82
+ out += '\bend' + (this._alias ? ' ' + this._alias : '');
83
+ return out;
84
+ }
85
+ }
@@ -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 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
+ }