taon-type-sql 21.0.22 → 21.0.24

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 (82) hide show
  1. package/browser/package.json +1 -1
  2. package/browser-prod/package.json +1 -1
  3. package/lib/build-info._auto-generated_.d.ts +1 -1
  4. package/lib/build-info._auto-generated_.js +1 -1
  5. package/lib/package.json +1 -1
  6. package/lib-prod/{build-info._auto-generated_.ts → build-info._auto-generated_.js} +1 -2
  7. package/lib-prod/builder/column/{basic-column.ts → basic-column.js} +4 -10
  8. package/lib-prod/builder/column/boolean-column.js +11 -0
  9. package/lib-prod/builder/column/comparable-column.js +39 -0
  10. package/lib-prod/builder/column/date-column.js +11 -0
  11. package/lib-prod/builder/column/number-column.js +16 -0
  12. package/lib-prod/builder/column/query-column.js +18 -0
  13. package/lib-prod/builder/column/string-column.js +33 -0
  14. package/lib-prod/builder/column/value-column.js +27 -0
  15. package/lib-prod/builder/condition/query-column-condition.js +16 -0
  16. package/lib-prod/builder/condition/query-condition-chain.js +26 -0
  17. package/lib-prod/builder/condition/query-condition.js +4 -0
  18. package/lib-prod/builder/condition/query-join-condition.js +16 -0
  19. package/lib-prod/builder/helpers/{generics-helper.ts → generics-helper.js} +2 -1
  20. package/lib-prod/builder/helpers/internal-types.js +1 -0
  21. package/lib-prod/builder/join/joined-tables-chain.js +11 -0
  22. package/lib-prod/builder/join/joined-tables.js +19 -0
  23. package/lib-prod/builder/other/query-ordering.js +14 -0
  24. package/lib-prod/builder/query/select-query.js +45 -0
  25. package/lib-prod/builder/query/table-condition-query.js +22 -0
  26. package/lib-prod/builder/query/table-query.js +52 -0
  27. package/lib-prod/builder/query-source.js +17 -0
  28. package/lib-prod/builder/query-table.js +22 -0
  29. package/lib-prod/client/{mysql.ts → mysql.js} +3 -5
  30. package/lib-prod/client/{pg.ts → pg.js} +3 -5
  31. package/lib-prod/client/query-processor.js +69 -0
  32. package/lib-prod/converter/{param-converter.ts → param-converter.js} +11 -8
  33. package/lib-prod/converter/parameterized-converter.js +14 -0
  34. package/lib-prod/converter/{query-converter.ts → query-converter.js} +94 -110
  35. package/lib-prod/converter/result-converter.js +85 -0
  36. package/lib-prod/converter/sql-converter.js +5 -0
  37. package/lib-prod/converter/type-converter.js +36 -0
  38. package/lib-prod/converter/types.js +1 -0
  39. package/lib-prod/env/{env.angular-node-app.ts → env.angular-node-app.js} +1 -1
  40. package/lib-prod/env/{env.docs-webapp.ts → env.docs-webapp.js} +1 -1
  41. package/lib-prod/env/{env.electron-app.ts → env.electron-app.js} +1 -1
  42. package/lib-prod/env/{env.mobile-app.ts → env.mobile-app.js} +1 -1
  43. package/lib-prod/env/{env.npm-lib-and-cli-tool.ts → env.npm-lib-and-cli-tool.js} +1 -1
  44. package/lib-prod/env/{env.vscode-plugin.ts → env.vscode-plugin.js} +1 -1
  45. package/lib-prod/{index._auto-generated_.ts → index._auto-generated_.js} +1 -1
  46. package/lib-prod/{index.ts → index.js} +0 -12
  47. package/lib-prod/migrations/index.js +2 -0
  48. package/lib-prod/migrations/{migrations_index._auto-generated_.ts → migrations_index._auto-generated_.js} +0 -2
  49. package/lib-prod/package.json +1 -1
  50. package/package.json +1 -1
  51. package/websql/package.json +1 -1
  52. package/websql-prod/package.json +1 -1
  53. package/lib-prod/builder/column/boolean-column.ts +0 -19
  54. package/lib-prod/builder/column/comparable-column.ts +0 -56
  55. package/lib-prod/builder/column/date-column.ts +0 -19
  56. package/lib-prod/builder/column/number-column.ts +0 -25
  57. package/lib-prod/builder/column/query-column.ts +0 -34
  58. package/lib-prod/builder/column/string-column.ts +0 -47
  59. package/lib-prod/builder/column/value-column.ts +0 -39
  60. package/lib-prod/builder/condition/query-column-condition.ts +0 -28
  61. package/lib-prod/builder/condition/query-condition-chain.ts +0 -42
  62. package/lib-prod/builder/condition/query-condition.ts +0 -13
  63. package/lib-prod/builder/condition/query-join-condition.ts +0 -27
  64. package/lib-prod/builder/helpers/internal-types.ts +0 -31
  65. package/lib-prod/builder/join/joined-tables-chain.ts +0 -17
  66. package/lib-prod/builder/join/joined-tables.ts +0 -28
  67. package/lib-prod/builder/other/query-ordering.ts +0 -26
  68. package/lib-prod/builder/query/select-query.ts +0 -68
  69. package/lib-prod/builder/query/table-condition-query.ts +0 -35
  70. package/lib-prod/builder/query/table-query.ts +0 -72
  71. package/lib-prod/builder/query-source.ts +0 -25
  72. package/lib-prod/builder/query-table.ts +0 -34
  73. package/lib-prod/client/query-processor.ts +0 -89
  74. package/lib-prod/converter/parameterized-converter.ts +0 -20
  75. package/lib-prod/converter/result-converter.ts +0 -88
  76. package/lib-prod/converter/sql-converter.ts +0 -7
  77. package/lib-prod/converter/type-converter.ts +0 -29
  78. package/lib-prod/converter/types.ts +0 -6
  79. package/lib-prod/lib-info.md +0 -8
  80. package/lib-prod/migrations/index.ts +0 -2
  81. package/lib-prod/migrations/migrations-info.md +0 -6
  82. /package/lib-prod/env/{index.ts → index.js} +0 -0
@@ -0,0 +1,14 @@
1
+ import { createQueryConverter } from "./query-converter";
2
+ import { convertEscapedParam } from './param-converter';
3
+ let pgParamConverter = (index) => '$' + index;
4
+ let mySqlParamConverter = (index) => '?';
5
+ function convertSingleParam(param, params, paramConverter) {
6
+ params.push(convertEscapedParam(param));
7
+ return paramConverter(params.length);
8
+ }
9
+ export function convertQueryToParameterizedSQL(query, options, engine) {
10
+ let params = [];
11
+ let paramConverter = engine === 'mysql' ? mySqlParamConverter : pgParamConverter;
12
+ let sql = createQueryConverter((param) => convertSingleParam(param, params, paramConverter), options, engine)(query);
13
+ return { sql, params };
14
+ }
@@ -1,104 +1,91 @@
1
1
  import { string, number, date, boolean } from './type-converter';
2
- import { QueryEngine, ConverterOptions } from "./types";
3
-
4
-
5
- export function createQueryConverter(paramConverter: (param: any) => string, options: ConverterOptions, engine: QueryEngine) {
6
-
2
+ export function createQueryConverter(paramConverter, options, engine) {
7
3
  return convertQuery;
8
-
9
- function convertQuery(query: any): string {
10
- if (query._action === 'select') return convertSelectQuery(query);
11
- if (query._action === 'delete') return convertDeleteQuery(query);
12
- if (query._action === 'update') return convertUpdateQuery(query);
13
- if (query._action === 'insert') return convertInsertQuery(query);
4
+ function convertQuery(query) {
5
+ if (query._action === 'select')
6
+ return convertSelectQuery(query);
7
+ if (query._action === 'delete')
8
+ return convertDeleteQuery(query);
9
+ if (query._action === 'update')
10
+ return convertUpdateQuery(query);
11
+ if (query._action === 'insert')
12
+ return convertInsertQuery(query);
14
13
  throw new Error('Unknown query type:' + query._action);
15
14
  }
16
-
17
- function convertDeleteQuery(query: any): string {
15
+ function convertDeleteQuery(query) {
18
16
  let s = 'DELETE FROM ' + convertTable(query._table);
19
17
  s += convertConditions(query._conditions);
20
18
  return s;
21
19
  }
22
-
23
- function convertUpdateQuery(query: any): string {
20
+ function convertUpdateQuery(query) {
24
21
  let s = 'UPDATE ' + convertTable(query._table) + ' SET ';
25
22
  s += convertUpdateSetters(query._table, query._entity);
26
23
  s += convertConditions(query._conditions);
27
24
  return s;
28
25
  }
29
-
30
- function convertUpdateSetters(table: any, entity: any): string {
26
+ function convertUpdateSetters(table, entity) {
31
27
  return Object.keys(entity).sort().map(key => {
32
28
  let value = entity[key];
33
29
  let column = table[key];
34
30
  return convertColumnName(column) + ' = ' + convertParam(column, value);
35
31
  }).join(', ');
36
32
  }
37
-
38
- function convertInsertQuery(query: any): string {
39
- let items: any[] = Array.isArray(query._entity) ? query._entity : [query._entity];
40
- let keySet: Set<string> = items.reduce((set: Set<string>, item) => {
41
- Object.keys(item).forEach(key => set.add(key)); return set;
42
- }, new Set<string>());
33
+ function convertInsertQuery(query) {
34
+ let items = Array.isArray(query._entity) ? query._entity : [query._entity];
35
+ let keySet = items.reduce((set, item) => {
36
+ Object.keys(item).forEach(key => set.add(key));
37
+ return set;
38
+ }, new Set());
43
39
  let keys = Array.from(keySet).sort();
44
-
45
40
  let s = 'INSERT INTO ' + convertTable(query._table) + ' ';
46
41
  s += '(' + keys.map(key => convertColumnName(query._table[key])).join(', ') + ')';
47
42
  s += options.lineBreak + 'VALUES ';
48
43
  s += items.map(item => convertInsertItem(query._table, item, keys))
49
- .map((row: string) => '(' + row + ')').join(', ');
50
-
44
+ .map((row) => '(' + row + ')').join(', ');
51
45
  s += getPgInsertReturningIfNeeded(query);
52
46
  return s;
53
47
  }
54
-
55
-
56
- function getPgInsertReturningIfNeeded(query: any): string {
48
+ function getPgInsertReturningIfNeeded(query) {
57
49
  if (engine === 'pg' && query._action === 'insert' && !Array.isArray(query._entity) &&
58
50
  query._table.$id && query._table.$id._table && query._table.$id._name) {
59
51
  return ' RETURNING ' + convertColumnName(query._table.$id);
60
52
  }
61
53
  return '';
62
54
  }
63
-
64
- function convertInsertItem(table: any, entity: any, keys: string[]): string {
55
+ function convertInsertItem(table, entity, keys) {
65
56
  return keys.map(key => {
66
57
  let value = entity[key];
67
58
  let column = table[key];
68
59
  return convertParam(column, value);
69
60
  }).join(', ');
70
61
  }
71
-
72
- function convertSelectQuery(query: any): string {
62
+ function convertSelectQuery(query) {
73
63
  let s = 'SELECT ';
74
64
  if (query._distinct) {
75
65
  s += 'DISTINCT ';
76
66
  }
77
-
78
67
  if (query._columns == null || query._columns.length === 0) {
79
- s += '*'
80
- } else {
81
- s += query._columns.map((column: any) => convertColumn(column)).join(', ');
68
+ s += '*';
69
+ }
70
+ else {
71
+ s += query._columns.map((column) => convertColumn(column)).join(', ');
82
72
  }
83
-
84
73
  s += options.lineBreak + 'FROM ';
85
74
  if (query._tables) {
86
- s+= query._tables.map((table: any) => table._parent ? convertJoin(table) : convertTable(table)).join(', ');
87
- } else {
88
- s+= convertTable(query._table);
75
+ s += query._tables.map((table) => table._parent ? convertJoin(table) : convertTable(table)).join(', ');
76
+ }
77
+ else {
78
+ s += convertTable(query._table);
89
79
  }
90
-
91
80
  s += convertConditions(query._conditions);
92
-
93
81
  if (query._groupBy && query._groupBy.length > 0) {
94
82
  s += options.lineBreak + 'GROUP BY ';
95
- s += query._groupBy.map((column: any) => convertColumn(column)).join(', ');
83
+ s += query._groupBy.map((column) => convertColumn(column)).join(', ');
96
84
  }
97
85
  s += convertConditions(query._having, 'HAVING');
98
-
99
86
  if (query._orderings && query._orderings.length > 0) {
100
87
  s += options.lineBreak + 'ORDER BY ';
101
- s += query._orderings.map((ordering: any) => convertOrdering(ordering)).join(', ');
88
+ s += query._orderings.map((ordering) => convertOrdering(ordering)).join(', ');
102
89
  }
103
90
  if (query._limit != null) {
104
91
  s += options.lineBreak + 'LIMIT ' + number(query._limit);
@@ -108,8 +95,7 @@ export function createQueryConverter(paramConverter: (param: any) => string, opt
108
95
  }
109
96
  return s;
110
97
  }
111
-
112
- function convertConditions(conditions: any[], keyword = 'WHERE'): string {
98
+ function convertConditions(conditions, keyword = 'WHERE') {
113
99
  let s = '';
114
100
  if (conditions && conditions.length > 0) {
115
101
  s += options.lineBreak + keyword + ' ';
@@ -118,18 +104,15 @@ export function createQueryConverter(paramConverter: (param: any) => string, opt
118
104
  }
119
105
  return s;
120
106
  }
121
-
122
- function convertJoin(joinChain: any): string {
123
- let items: any[] = [];
107
+ function convertJoin(joinChain) {
108
+ let items = [];
124
109
  while (joinChain) {
125
110
  items.push(joinChain);
126
111
  joinChain = joinChain._parent;
127
112
  }
128
-
129
113
  let root = items[items.length - 1];
130
114
  let s = convertTable(root);
131
-
132
- for (let i = items.length - 2; i >= 0; i-= 2) {
115
+ for (let i = items.length - 2; i >= 0; i -= 2) {
133
116
  let table = items[i]._table;
134
117
  let modifier = items[i]._modifier;
135
118
  let condition = items[i - 1]._condition;
@@ -137,32 +120,28 @@ export function createQueryConverter(paramConverter: (param: any) => string, opt
137
120
  s += ' ' + modifier.toUpperCase() + ' JOIN ' + convertTable(table) + ' ON ' +
138
121
  convertColumnCondition(condition, param);
139
122
  }
140
-
141
123
  return s;
142
124
  }
143
-
144
- function convertOrdering(ordering: any): string {
125
+ function convertOrdering(ordering) {
145
126
  if (ordering._column) {
146
127
  let s = convertColumn(ordering._column);
147
-
148
128
  if (ordering._nullsPosition != null) { // "NULLS FIRST" only exists in PG, this is the general solution
149
129
  s += ' IS NULL ' + (ordering._nullsPosition === 'FIRST' ? 'DESC' : 'ASC') + ', ' + s;
150
130
  }
151
-
152
- if (ordering._direction === 'ASC') s += ' ASC';
153
- if (ordering._direction === 'DESC') s += ' DESC';
154
-
131
+ if (ordering._direction === 'ASC')
132
+ s += ' ASC';
133
+ if (ordering._direction === 'DESC')
134
+ s += ' DESC';
155
135
  return s;
156
- } else {
136
+ }
137
+ else {
157
138
  return convertColumn(ordering);
158
139
  }
159
140
  }
160
-
161
- function convertTable(table: any): string {
141
+ function convertTable(table) {
162
142
  return options.nameEscape + table._$name + options.nameEscape;
163
143
  }
164
-
165
- function convertColumn(column: any): string {
144
+ function convertColumn(column) {
166
145
  let s = '';
167
146
  if (!(column._name === '*' && column._modifiers.length > 0 && column._modifiers[0].name === 'count')) {
168
147
  s += convertTable(column._table) + '.';
@@ -170,31 +149,37 @@ export function createQueryConverter(paramConverter: (param: any) => string, opt
170
149
  s += convertColumnName(column);
171
150
  return convertColumnModifiers(s, column);
172
151
  }
173
-
174
- function convertColumnModifiers(s: string, column: any): string {
152
+ function convertColumnModifiers(s, column) {
175
153
  if (column._modifiers) {
176
- column._modifiers.forEach((modifier: any) => {
154
+ column._modifiers.forEach((modifier) => {
177
155
  let name = modifier.name;
178
- if (name === 'lower') s = 'LOWER(' + s + ')';
179
- else if (name === 'upper') s = 'UPPER(' + s + ')';
180
- else if (name === 'count') s = 'COUNT(' + s + ')';
181
- else if (name === 'sum') s = 'SUM(' + s + ')';
182
- else if (name === 'avg') s = 'AVG(' + s + ')';
183
- else if (name === 'min') s = 'MIN(' + s + ')';
184
- else if (name === 'max') s = 'MAX(' + s + ')';
185
- else if (name === 'as') s = s + ' AS ' + options.nameEscape + modifier.params + options.nameEscape;
156
+ if (name === 'lower')
157
+ s = 'LOWER(' + s + ')';
158
+ else if (name === 'upper')
159
+ s = 'UPPER(' + s + ')';
160
+ else if (name === 'count')
161
+ s = 'COUNT(' + s + ')';
162
+ else if (name === 'sum')
163
+ s = 'SUM(' + s + ')';
164
+ else if (name === 'avg')
165
+ s = 'AVG(' + s + ')';
166
+ else if (name === 'min')
167
+ s = 'MIN(' + s + ')';
168
+ else if (name === 'max')
169
+ s = 'MAX(' + s + ')';
170
+ else if (name === 'as')
171
+ s = s + ' AS ' + options.nameEscape + modifier.params + options.nameEscape;
186
172
  });
187
173
  }
188
174
  return s + '';
189
175
  }
190
-
191
- function convertColumnName(column: any): string {
192
- if (column._name === '*') return column._name;
176
+ function convertColumnName(column) {
177
+ if (column._name === '*')
178
+ return column._name;
193
179
  let name = typeof column._name === 'string' ? column._name : column._name.name;
194
180
  return options.nameEscape + name + options.nameEscape;
195
181
  }
196
-
197
- function preprocessConditions(conditions: any[]): void {
182
+ function preprocessConditions(conditions) {
198
183
  conditions.forEach(condition => {
199
184
  if (conditions.length > 1 && condition._sibling) {
200
185
  condition._parenthesis = true;
@@ -202,9 +187,8 @@ export function createQueryConverter(paramConverter: (param: any) => string, opt
202
187
  preprocessParams(condition);
203
188
  });
204
189
  }
205
-
206
190
  // this is only needed, so that the $1, $2... numbering is not reversed
207
- function preprocessParams(condition: any): void {
191
+ function preprocessParams(condition) {
208
192
  if (condition._sibling) {
209
193
  preprocessParams(condition._sibling);
210
194
  }
@@ -215,12 +199,10 @@ export function createQueryConverter(paramConverter: (param: any) => string, opt
215
199
  preprocessParams(condition._child);
216
200
  }
217
201
  }
218
-
219
- function convertCondition(condition: any, root = false): string {
202
+ function convertCondition(condition, root = false) {
220
203
  if (!condition._sibling && !condition._child) {
221
204
  return convertColumnCondition(condition, condition.__param);
222
205
  }
223
-
224
206
  let s = '';
225
207
  if (condition._child) {
226
208
  s += convertCondition(condition._child);
@@ -236,14 +218,12 @@ export function createQueryConverter(paramConverter: (param: any) => string, opt
236
218
  }
237
219
  return s;
238
220
  }
239
-
240
- function convertColumnCondition(condition: any, param: string): string {
221
+ function convertColumnCondition(condition, param) {
241
222
  let s = convertColumn(condition._column);
242
223
  s += getConditionString(condition, param);
243
224
  return s;
244
225
  }
245
-
246
- function getConditionString(condition: any, param: string): string {
226
+ function getConditionString(condition, param) {
247
227
  switch (condition._type) {
248
228
  case 'eq': return ' = ' + param;
249
229
  case 'ne': return ' <> ' + param;
@@ -262,35 +242,39 @@ export function createQueryConverter(paramConverter: (param: any) => string, opt
262
242
  default: return '';
263
243
  }
264
244
  }
265
-
266
- function getConditionParam(condition: any): string {
245
+ function getConditionParam(condition) {
267
246
  let param = '';
268
247
  if (condition._otherColumn) {
269
248
  param = convertColumn(condition._otherColumn);
270
- } else {
271
- let _convertParam = (param: any) => convertParam(condition._column, param);
272
-
249
+ }
250
+ else {
251
+ let _convertParam = (param) => convertParam(condition._column, param);
273
252
  if (condition._type === 'in' || condition._type === 'not-in') {
274
- param = condition._values.map((value: any) => _convertParam(value)).join(', ');
275
- } else if (condition._type === 'between' || condition._type === 'not-between') {
253
+ param = condition._values.map((value) => _convertParam(value)).join(', ');
254
+ }
255
+ else if (condition._type === 'between' || condition._type === 'not-between') {
276
256
  param = _convertParam(condition._values[0]) + ' AND ' + _convertParam(condition._values[1]);
277
- } else if (condition._type !== 'is-null' && condition._type !== 'is-not-null') {
257
+ }
258
+ else if (condition._type !== 'is-null' && condition._type !== 'is-not-null') {
278
259
  param = _convertParam(condition._values[0]);
279
260
  }
280
261
  }
281
262
  return param;
282
263
  }
283
-
284
- function convertParam(column: any, param: any): string {
285
- if (param == null) return 'NULL';
264
+ function convertParam(column, param) {
265
+ if (param == null)
266
+ return 'NULL';
286
267
  return paramConverter(getTypedParam(column._type, param));
287
268
  }
288
-
289
- function getTypedParam(type: string, param: any): any {
290
- if (type === 'number') return number(param);
291
- else if (type === 'boolean') return boolean(param);
292
- else if (type === 'date') return date(param);
293
- else if (type === 'string') return string(param);
269
+ function getTypedParam(type, param) {
270
+ if (type === 'number')
271
+ return number(param);
272
+ else if (type === 'boolean')
273
+ return boolean(param);
274
+ else if (type === 'date')
275
+ return date(param);
276
+ else if (type === 'string')
277
+ return string(param);
294
278
  return param;
295
279
  }
296
- }
280
+ }
@@ -0,0 +1,85 @@
1
+ export function convertResult(query, result, engine) {
2
+ let rows = engine === 'pg' ? result.rows : result;
3
+ let rowCount = engine === 'pg' ? result.rowCount : result.affectedRows || result.changedRows;
4
+ if (query._action === 'select')
5
+ return convertSelectResult(query, rows);
6
+ if (query._action === 'delete')
7
+ return rowCount;
8
+ if (query._action === 'update')
9
+ return rowCount;
10
+ if (query._action === 'insert')
11
+ return convertInsertResult(result, engine);
12
+ throw new Error('Unknown query type:' + query._action);
13
+ }
14
+ function convertInsertResult(result, engine) {
15
+ if (engine === 'mysql')
16
+ return result.insertId > 0 ? result.insertId : undefined; // mysql returns 0 for tables that have a non-autoincrement ID
17
+ if (engine === 'pg' && result.rows && result.rows.length === 1) {
18
+ let columnName = Object.keys(result.rows[0])[0];
19
+ return result.rows[0][columnName];
20
+ }
21
+ }
22
+ function convertSelectResult(query, rows) {
23
+ if (query._columns && query._columns.length === 1 &&
24
+ !(query._columns[0]._name === '*' && query._columns[0]._modifiers.length === 0)) {
25
+ if (rows.length == 0)
26
+ return [];
27
+ let columnName = Object.keys(rows[0])[0]; // easier than reverse engineering from the column modifiers
28
+ let values = rows.map((row) => row[columnName]);
29
+ if (query._columns[0]._name === '*' && query._columns[0]._modifiers.some((m) => m.name === 'count')) {
30
+ return values.map((value) => Number(value)); // string to number conversion for PG count values
31
+ }
32
+ return values;
33
+ }
34
+ else {
35
+ convertAliasFields(query, rows);
36
+ return rows;
37
+ }
38
+ }
39
+ function convertAliasFields(query, rows) {
40
+ let aliasByName = getColumnAliasesByName(query);
41
+ if (Object.keys(aliasByName).length === 0)
42
+ return;
43
+ rows.forEach((row) => {
44
+ Object.keys(row).forEach((name) => {
45
+ if (aliasByName[name]) {
46
+ row[aliasByName[name]] = row[name];
47
+ delete row[name];
48
+ }
49
+ });
50
+ });
51
+ }
52
+ function getColumnAliasesByName(query) {
53
+ let aliasByName = {};
54
+ if (query._columns && query._columns.length > 0) {
55
+ query._columns.forEach((column) => {
56
+ if (column._name && column._name.alias && column._modifiers.length === 0) {
57
+ aliasByName[column._name.name] = column._name.alias;
58
+ }
59
+ else if (column._name === '*' && column._modifiers.length === 0) {
60
+ getAliasColumnsOfTable(column._table).forEach((column) => {
61
+ aliasByName[column._name.name] = column._name.alias;
62
+ });
63
+ }
64
+ });
65
+ }
66
+ else {
67
+ let tables = query._table ? [query._table] : query._tables;
68
+ tables.forEach((table) => {
69
+ getAliasColumnsOfTable(table).forEach((column) => {
70
+ aliasByName[column._name.name] = column._name.alias;
71
+ });
72
+ let joinTable = table._parent;
73
+ while (joinTable) {
74
+ getAliasColumnsOfTable(joinTable).forEach((column) => {
75
+ aliasByName[column._name.name] = column._name.alias;
76
+ });
77
+ joinTable = joinTable._parent;
78
+ }
79
+ });
80
+ }
81
+ return aliasByName;
82
+ }
83
+ function getAliasColumnsOfTable(table) {
84
+ return Object.keys(table).map(key => table[key]).filter((column) => column && column._name && column._name.alias);
85
+ }
@@ -0,0 +1,5 @@
1
+ import { createQueryConverter } from "./query-converter";
2
+ import { convertSubstitutionParam } from './param-converter';
3
+ export function convertQueryToSQL(query, options, engine) {
4
+ return createQueryConverter((param) => convertSubstitutionParam(param), options, engine)(query);
5
+ }
@@ -0,0 +1,36 @@
1
+ export function number(param) {
2
+ let result = Number(param);
3
+ if (Number.isNaN(result))
4
+ throw new Error('Invalid number parameter in SQL query: ' + param);
5
+ return result;
6
+ }
7
+ export function boolean(param) {
8
+ if (typeof param === 'boolean')
9
+ return param;
10
+ if (param instanceof Boolean)
11
+ return param.valueOf();
12
+ if (param === 'true')
13
+ return true;
14
+ if (param === 'false')
15
+ return false;
16
+ throw new Error('Invalid boolean parameter in SQL query: ' + param);
17
+ }
18
+ export function date(param) {
19
+ if (param instanceof Date)
20
+ return param; // @ts-ignore
21
+ if (typeof param === 'number' || param instanceof Number)
22
+ return new Date(param);
23
+ if (typeof param === 'string' || param instanceof String) {
24
+ if (Number.isNaN(Date.parse(String(param))))
25
+ throw new Error('Invalid date parameter in SQL query: ' + param); // @ts-ignore
26
+ return new Date(param);
27
+ }
28
+ throw new Error('Invalid date parameter in SQL query: ' + param);
29
+ }
30
+ export function string(param) {
31
+ if (typeof param === 'string')
32
+ return param;
33
+ if (param instanceof String)
34
+ return param.valueOf();
35
+ throw new Error('Invalid string parameter in SQL query: ' + param);
36
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -63,4 +63,4 @@ export const ENV_ANGULAR_NODE_APP_IS_CI_PROCESS = undefined;
63
63
  export const ENV_ANGULAR_NODE_APP_DOCKER_ADDITIONAL_CONTAINER = undefined;
64
64
  export const ENV_ANGULAR_NODE_APP_DOCKER_SKIP_START_IN_ORDER = undefined;
65
65
  export const ENV_ANGULAR_NODE_APP_DOCKER_SKIP_USING_MYSQL_DB = undefined;
66
- // THIS FILE IS GENERATED - DO NOT MODIFY
66
+ // THIS FILE IS GENERATED - DO NOT MODIFY
@@ -63,4 +63,4 @@ export const ENV_DOCS_WEBAPP_IS_CI_PROCESS = undefined;
63
63
  export const ENV_DOCS_WEBAPP_DOCKER_ADDITIONAL_CONTAINER = undefined;
64
64
  export const ENV_DOCS_WEBAPP_DOCKER_SKIP_START_IN_ORDER = undefined;
65
65
  export const ENV_DOCS_WEBAPP_DOCKER_SKIP_USING_MYSQL_DB = undefined;
66
- // THIS FILE IS GENERATED - DO NOT MODIFY
66
+ // THIS FILE IS GENERATED - DO NOT MODIFY
@@ -63,4 +63,4 @@ export const ENV_ELECTRON_APP_IS_CI_PROCESS = undefined;
63
63
  export const ENV_ELECTRON_APP_DOCKER_ADDITIONAL_CONTAINER = undefined;
64
64
  export const ENV_ELECTRON_APP_DOCKER_SKIP_START_IN_ORDER = undefined;
65
65
  export const ENV_ELECTRON_APP_DOCKER_SKIP_USING_MYSQL_DB = undefined;
66
- // THIS FILE IS GENERATED - DO NOT MODIFY
66
+ // THIS FILE IS GENERATED - DO NOT MODIFY
@@ -63,4 +63,4 @@ export const ENV_MOBILE_APP_IS_CI_PROCESS = undefined;
63
63
  export const ENV_MOBILE_APP_DOCKER_ADDITIONAL_CONTAINER = undefined;
64
64
  export const ENV_MOBILE_APP_DOCKER_SKIP_START_IN_ORDER = undefined;
65
65
  export const ENV_MOBILE_APP_DOCKER_SKIP_USING_MYSQL_DB = undefined;
66
- // THIS FILE IS GENERATED - DO NOT MODIFY
66
+ // THIS FILE IS GENERATED - DO NOT MODIFY
@@ -63,4 +63,4 @@ export const ENV_NPM_LIB_AND_CLI_TOOL_IS_CI_PROCESS = undefined;
63
63
  export const ENV_NPM_LIB_AND_CLI_TOOL_DOCKER_ADDITIONAL_CONTAINER = undefined;
64
64
  export const ENV_NPM_LIB_AND_CLI_TOOL_DOCKER_SKIP_START_IN_ORDER = undefined;
65
65
  export const ENV_NPM_LIB_AND_CLI_TOOL_DOCKER_SKIP_USING_MYSQL_DB = undefined;
66
- // THIS FILE IS GENERATED - DO NOT MODIFY
66
+ // THIS FILE IS GENERATED - DO NOT MODIFY
@@ -63,4 +63,4 @@ export const ENV_VSCODE_PLUGIN_IS_CI_PROCESS = undefined;
63
63
  export const ENV_VSCODE_PLUGIN_DOCKER_ADDITIONAL_CONTAINER = undefined;
64
64
  export const ENV_VSCODE_PLUGIN_DOCKER_SKIP_START_IN_ORDER = undefined;
65
65
  export const ENV_VSCODE_PLUGIN_DOCKER_SKIP_USING_MYSQL_DB = undefined;
66
- // THIS FILE IS GENERATED - DO NOT MODIFY
66
+ // THIS FILE IS GENERATED - DO NOT MODIFY
@@ -2,4 +2,4 @@
2
2
  // This file is auto-generated during init process. Do not modify.
3
3
  // This is only placeholder.
4
4
  // Use property "shouldGenerateAutogenIndexFile: true"
5
- // in taon.jsonc to enable ts exports auto generation.
5
+ // in taon.jsonc to enable ts exports auto generation.
@@ -1,5 +1,4 @@
1
1
  // Builder:
2
-
3
2
  export { default as BasicColumn } from './builder/column/basic-column';
4
3
  export { default as BooleanColumn } from './builder/column/boolean-column';
5
4
  export { default as ComparableColumn } from './builder/column/comparable-column';
@@ -8,30 +7,19 @@ export { default as NumberColumn } from './builder/column/number-column';
8
7
  export { default as QueryColumn } from './builder/column/query-column';
9
8
  export { default as StringColumn } from './builder/column/string-column';
10
9
  export { default as ValueColumn } from './builder/column/value-column';
11
-
12
10
  export { default as QueryColumnCondition } from './builder/condition/query-column-condition';
13
11
  export { default as QueryCondition } from './builder/condition/query-condition';
14
12
  export { default as QueryConditionChain } from './builder/condition/query-condition-chain';
15
13
  export { default as QueryJoinCondition } from './builder/condition/query-join-condition';
16
-
17
14
  export { default as JoinedTables } from './builder/join/joined-tables';
18
15
  export { default as JoinedTablesChain } from './builder/join/joined-tables-chain';
19
-
20
16
  export { default as QueryOrdering } from './builder/other/query-ordering';
21
-
22
17
  export { default as SelectQuery } from './builder/query/select-query';
23
18
  export { default as TableQuery } from './builder/query/table-query';
24
19
  export { default as TableConditionQuery } from './builder/query/table-condition-query';
25
-
26
20
  export { default as QuerySource } from './builder/query-source';
27
21
  export { default as QueryTable } from './builder/query-table';
28
-
29
22
  // Client:
30
-
31
23
  export { default as MySqlQuerySource } from './client/mysql';
32
24
  // export { default as PgQuerySource } from './client/pg';
33
-
34
25
  export { QueryProcessorOptions } from './client/query-processor';
35
-
36
-
37
- export type PropsEntitySQL<IEntityType> = { [prop in keyof Required<IEntityType>]: any; }
@@ -0,0 +1,2 @@
1
+ //@ts-nocheck
2
+ export * from './migrations_index._auto-generated_';
@@ -1,5 +1,3 @@
1
1
  // THIS FILE IS GENERATED - DO NOT MODIFY
2
-
3
2
  // THIS FILE IS GENERATED - DO NOT MODIFY
4
-
5
3
  // THIS FILE IS GENERATED - DO NOT MODIFY
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "taon-type-sql/lib-prod",
3
- "version": "21.0.22"
3
+ "version": "21.0.24"
4
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taon-type-sql",
3
- "version": "21.0.22",
3
+ "version": "21.0.24",
4
4
  "scripts": {
5
5
  "taon init": "taon init",
6
6
  "taon start": "taon start",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taon-type-sql/websql",
3
- "version": "21.0.22",
3
+ "version": "21.0.24",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.0.0",
6
6
  "@angular/core": "^21.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taon-type-sql/websql-prod",
3
- "version": "21.0.22",
3
+ "version": "21.0.24",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.0.0",
6
6
  "@angular/core": "^21.0.0"