@bitblit/ratchet-rdbms 4.0.419-alpha → 4.0.421-alpha

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 (150) hide show
  1. package/lib/build/index.d.ts +1 -0
  2. package/lib/build/index.js +2 -0
  3. package/lib/build/index.js.map +1 -0
  4. package/lib/build/ratchet-rdbms-info.d.ts +5 -0
  5. package/lib/build/ratchet-rdbms-info.js +15 -0
  6. package/lib/build/ratchet-rdbms-info.js.map +1 -0
  7. package/lib/model/connection-and-tunnel.d.ts +6 -0
  8. package/lib/model/connection-and-tunnel.js +2 -0
  9. package/lib/model/connection-and-tunnel.js.map +1 -0
  10. package/lib/model/database-access-provider.d.ts +7 -0
  11. package/lib/model/database-access-provider.js +2 -0
  12. package/lib/model/database-access-provider.js.map +1 -0
  13. package/lib/model/database-access.d.ts +17 -0
  14. package/lib/model/database-access.js +2 -0
  15. package/lib/model/database-access.js.map +1 -0
  16. package/lib/model/database-config-list.d.ts +3 -0
  17. package/lib/model/database-config-list.js +2 -0
  18. package/lib/model/database-config-list.js.map +1 -0
  19. package/lib/model/database-request-type.d.ts +6 -0
  20. package/lib/model/database-request-type.js +8 -0
  21. package/lib/model/database-request-type.js.map +1 -0
  22. package/lib/model/group-by-count-result.d.ts +4 -0
  23. package/lib/model/group-by-count-result.js +2 -0
  24. package/lib/model/group-by-count-result.js.map +1 -0
  25. package/lib/model/index.d.ts +19 -0
  26. package/lib/model/index.js +20 -0
  27. package/lib/model/index.js.map +1 -0
  28. package/lib/model/modify-results.d.ts +9 -0
  29. package/lib/model/modify-results.js +2 -0
  30. package/lib/model/modify-results.js.map +1 -0
  31. package/lib/model/named-parameter-database-service-config.d.ts +12 -0
  32. package/lib/model/named-parameter-database-service-config.js +2 -0
  33. package/lib/model/named-parameter-database-service-config.js.map +1 -0
  34. package/lib/model/paginated-results.d.ts +5 -0
  35. package/lib/model/paginated-results.js +2 -0
  36. package/lib/model/paginated-results.js.map +1 -0
  37. package/lib/model/pagination-bounds.d.ts +6 -0
  38. package/lib/model/pagination-bounds.js +2 -0
  39. package/lib/model/pagination-bounds.js.map +1 -0
  40. package/lib/model/paginator.d.ts +9 -0
  41. package/lib/model/paginator.js +2 -0
  42. package/lib/model/paginator.js.map +1 -0
  43. package/lib/model/query-defaults.d.ts +4 -0
  44. package/lib/model/query-defaults.js +2 -0
  45. package/lib/model/query-defaults.js.map +1 -0
  46. package/lib/model/query-text-provider.d.ts +4 -0
  47. package/lib/model/query-text-provider.js +2 -0
  48. package/lib/model/query-text-provider.js.map +1 -0
  49. package/lib/model/request-results.d.ts +4 -0
  50. package/lib/model/request-results.js +2 -0
  51. package/lib/model/request-results.js.map +1 -0
  52. package/lib/model/simple-query-text-provider.d.ts +7 -0
  53. package/lib/model/simple-query-text-provider.js +18 -0
  54. package/lib/model/simple-query-text-provider.js.map +1 -0
  55. package/lib/model/sort-direction.d.ts +4 -0
  56. package/lib/model/sort-direction.js +6 -0
  57. package/lib/model/sort-direction.js.map +1 -0
  58. package/lib/model/ssh/ssh-tunnel-config.d.ts +8 -0
  59. package/lib/model/ssh/ssh-tunnel-config.js +2 -0
  60. package/lib/model/ssh/ssh-tunnel-config.js.map +1 -0
  61. package/lib/model/ssh/ssh-tunnel-container.d.ts +12 -0
  62. package/lib/model/ssh/ssh-tunnel-container.js +2 -0
  63. package/lib/model/ssh/ssh-tunnel-container.js.map +1 -0
  64. package/lib/model/transaction-isolation-level.d.ts +4 -0
  65. package/lib/model/transaction-isolation-level.js +6 -0
  66. package/lib/model/transaction-isolation-level.js.map +1 -0
  67. package/lib/mysql/index.d.ts +5 -0
  68. package/lib/mysql/index.js +6 -0
  69. package/lib/mysql/index.js.map +1 -0
  70. package/lib/mysql/model/mysql-db-config.d.ts +12 -0
  71. package/lib/mysql/model/mysql-db-config.js +2 -0
  72. package/lib/mysql/model/mysql-db-config.js.map +1 -0
  73. package/lib/mysql/model/mysql-master-status.d.ts +6 -0
  74. package/lib/mysql/model/mysql-master-status.js +2 -0
  75. package/lib/mysql/model/mysql-master-status.js.map +1 -0
  76. package/lib/mysql/model/mysql-slave-status.d.ts +52 -0
  77. package/lib/mysql/model/mysql-slave-status.js +2 -0
  78. package/lib/mysql/model/mysql-slave-status.js.map +1 -0
  79. package/lib/mysql/mysql-style-database-access.d.ts +20 -0
  80. package/lib/mysql/mysql-style-database-access.js +57 -0
  81. package/lib/mysql/mysql-style-database-access.js.map +1 -0
  82. package/lib/mysql/rds-mysql-style-connection-provider.d.ts +29 -0
  83. package/lib/mysql/rds-mysql-style-connection-provider.js +205 -0
  84. package/lib/mysql/rds-mysql-style-connection-provider.js.map +1 -0
  85. package/lib/query-builder/index.d.ts +3 -0
  86. package/lib/query-builder/index.js +4 -0
  87. package/lib/query-builder/index.js.map +1 -0
  88. package/lib/query-builder/query-builder-result.d.ts +9 -0
  89. package/lib/query-builder/query-builder-result.js +13 -0
  90. package/lib/query-builder/query-builder-result.js.map +1 -0
  91. package/lib/query-builder/query-builder.d.ts +52 -0
  92. package/lib/query-builder/query-builder.js +352 -0
  93. package/lib/query-builder/query-builder.js.map +1 -0
  94. package/lib/query-builder/query-util.d.ts +16 -0
  95. package/lib/query-builder/query-util.js +137 -0
  96. package/lib/query-builder/query-util.js.map +1 -0
  97. package/lib/service/index.d.ts +3 -0
  98. package/lib/service/index.js +4 -0
  99. package/lib/service/index.js.map +1 -0
  100. package/lib/service/named-parameter-database-service.d.ts +42 -0
  101. package/lib/service/named-parameter-database-service.js +272 -0
  102. package/lib/service/named-parameter-database-service.js.map +1 -0
  103. package/lib/service/ssh-tunnel-service.d.ts +6 -0
  104. package/lib/service/ssh-tunnel-service.js +49 -0
  105. package/lib/service/ssh-tunnel-service.js.map +1 -0
  106. package/lib/service/transactional-named-parameter-database-service.d.ts +20 -0
  107. package/lib/service/transactional-named-parameter-database-service.js +129 -0
  108. package/lib/service/transactional-named-parameter-database-service.js.map +1 -0
  109. package/lib/sqlite/index.d.ts +9 -0
  110. package/lib/sqlite/index.js +10 -0
  111. package/lib/sqlite/index.js.map +1 -0
  112. package/lib/sqlite/model/fetch-remote-mode.d.ts +4 -0
  113. package/lib/sqlite/model/fetch-remote-mode.js +6 -0
  114. package/lib/sqlite/model/fetch-remote-mode.js.map +1 -0
  115. package/lib/sqlite/model/flush-remote-mode.d.ts +4 -0
  116. package/lib/sqlite/model/flush-remote-mode.js +6 -0
  117. package/lib/sqlite/model/flush-remote-mode.js.map +1 -0
  118. package/lib/sqlite/model/sqlite-connection-config-flag.d.ts +3 -0
  119. package/lib/sqlite/model/sqlite-connection-config-flag.js +5 -0
  120. package/lib/sqlite/model/sqlite-connection-config-flag.js.map +1 -0
  121. package/lib/sqlite/model/sqlite-connection-config.d.ts +9 -0
  122. package/lib/sqlite/model/sqlite-connection-config.js +2 -0
  123. package/lib/sqlite/model/sqlite-connection-config.js.map +1 -0
  124. package/lib/sqlite/model/sqlite-local-file-config.d.ts +3 -0
  125. package/lib/sqlite/model/sqlite-local-file-config.js +2 -0
  126. package/lib/sqlite/model/sqlite-local-file-config.js.map +1 -0
  127. package/lib/sqlite/model/sqlite-remote-file-sync-config.d.ts +8 -0
  128. package/lib/sqlite/model/sqlite-remote-file-sync-config.js +2 -0
  129. package/lib/sqlite/model/sqlite-remote-file-sync-config.js.map +1 -0
  130. package/lib/sqlite/sqlite-database-access.d.ts +25 -0
  131. package/lib/sqlite/sqlite-database-access.js +106 -0
  132. package/lib/sqlite/sqlite-database-access.js.map +1 -0
  133. package/lib/sqlite/sqlite-remote-sync-database-access.d.ts +34 -0
  134. package/lib/sqlite/sqlite-remote-sync-database-access.js +129 -0
  135. package/lib/sqlite/sqlite-remote-sync-database-access.js.map +1 -0
  136. package/lib/sqlite/sqlite-style-connection-provider.d.ts +19 -0
  137. package/lib/sqlite/sqlite-style-connection-provider.js +157 -0
  138. package/lib/sqlite/sqlite-style-connection-provider.js.map +1 -0
  139. package/lib/util/aws-rds-cert-2023.d.ts +6 -0
  140. package/lib/util/aws-rds-cert-2023.js +499 -0
  141. package/lib/util/aws-rds-cert-2023.js.map +1 -0
  142. package/lib/util/index.d.ts +2 -0
  143. package/lib/util/index.js +3 -0
  144. package/lib/util/index.js.map +1 -0
  145. package/lib/util/relational-database-utils.d.ts +4 -0
  146. package/lib/util/relational-database-utils.js +31 -0
  147. package/lib/util/relational-database-utils.js.map +1 -0
  148. package/package.json +12 -13
  149. package/lib/index.mjs +0 -2
  150. package/lib/types.d.ts +0 -489
@@ -0,0 +1,352 @@
1
+ import { RequireRatchet } from '@bitblit/ratchet-common/lang/require-ratchet';
2
+ import { Logger } from '@bitblit/ratchet-common/logger/logger';
3
+ import { ErrorRatchet } from '@bitblit/ratchet-common/lang/error-ratchet';
4
+ import { StringRatchet } from '@bitblit/ratchet-common/lang/string-ratchet';
5
+ import { QueryBuilderResult } from './query-builder-result.js';
6
+ import { TransactionIsolationLevel } from '../model/transaction-isolation-level.js';
7
+ import { SortDirection } from '../model/sort-direction.js';
8
+ export class QueryBuilder {
9
+ static ALLOWED_SQL_CONSTRUCT = /^[a-z0-9_.`]+$/i;
10
+ queryProvider;
11
+ query;
12
+ meta = Object.freeze({});
13
+ sqlConstructs = {};
14
+ namedParams = {};
15
+ conditionals = {};
16
+ debugComment = '';
17
+ paginator;
18
+ debugAnnotateMode = false;
19
+ transactionIsolationLevel = TransactionIsolationLevel.Default;
20
+ constructor(queryProvider) {
21
+ this.queryProvider = queryProvider;
22
+ }
23
+ clone() {
24
+ const clone = new QueryBuilder(this.queryProvider);
25
+ if (this.query) {
26
+ clone.withBaseQuery(this.query);
27
+ }
28
+ clone.sqlConstructs = structuredClone(this.sqlConstructs);
29
+ clone.namedParams = structuredClone(this.namedParams);
30
+ clone.conditionals = structuredClone(this.conditionals);
31
+ clone.paginator = structuredClone(this.paginator);
32
+ clone.debugComment = this.debugComment;
33
+ clone.transactionIsolationLevel = this.transactionIsolationLevel;
34
+ return clone;
35
+ }
36
+ withTransactionIsolationLevel(level) {
37
+ this.transactionIsolationLevel = level;
38
+ return this;
39
+ }
40
+ withDebugComment(comment) {
41
+ this.debugComment = comment;
42
+ return this;
43
+ }
44
+ appendDebugComment(comment) {
45
+ this.debugComment = this.debugComment + comment;
46
+ return this;
47
+ }
48
+ withNamedQuery(queryPath) {
49
+ this.query = this.queryProvider.fetchQuery(queryPath);
50
+ if (!StringRatchet.trimToNull(this.query)) {
51
+ ErrorRatchet.throwFormattedErr('Requested query that does not exist : %s', queryPath);
52
+ }
53
+ this.meta = Object.freeze({ queryPath: queryPath });
54
+ this.withDebugComment(' ' + queryPath + ' ');
55
+ return this;
56
+ }
57
+ withBaseQuery(baseQuery) {
58
+ this.query = baseQuery;
59
+ }
60
+ withSqlConstruct(key, value) {
61
+ this.sqlConstructs[key] = value;
62
+ return this;
63
+ }
64
+ withSqlConstructs(params) {
65
+ this.sqlConstructs = Object.assign(this.sqlConstructs, params);
66
+ return this;
67
+ }
68
+ removeParam(key) {
69
+ delete this.namedParams[key];
70
+ return this;
71
+ }
72
+ paramNames() {
73
+ return Object.keys(this.namedParams);
74
+ }
75
+ withParam(key, value) {
76
+ this.namedParams[key] = value;
77
+ return this;
78
+ }
79
+ withParams(params) {
80
+ this.namedParams = Object.assign(this.namedParams, params);
81
+ return this;
82
+ }
83
+ withExpandedParam(keyPrefix, values, extendIfExists) {
84
+ const lengthParamName = keyPrefix + 'Length';
85
+ let oldSize = this.fetchCopyOfParam(lengthParamName) ?? 0;
86
+ if (oldSize > 0 && !extendIfExists) {
87
+ Logger.silly('Old item found and not extending - removing old params');
88
+ const toRemove = this.paramNames().filter((s) => s.startsWith(keyPrefix));
89
+ toRemove.forEach((s) => this.removeParam(s));
90
+ oldSize = 0;
91
+ }
92
+ this.withParam(lengthParamName, values.length + oldSize);
93
+ for (let i = 0; i < values.length; i++) {
94
+ const value = values[i];
95
+ if (typeof value === 'object' && !!value) {
96
+ for (const key of Object.keys(value)) {
97
+ const paramKey = keyPrefix + key.charAt(0).toUpperCase() + key.slice(1) + (i + oldSize);
98
+ this.withParam(paramKey, value[key]);
99
+ }
100
+ }
101
+ else {
102
+ const paramKey = keyPrefix + i;
103
+ this.withParam(paramKey, value);
104
+ }
105
+ }
106
+ return this;
107
+ }
108
+ withConditional(tag, state = true) {
109
+ this.conditionals[tag] = state;
110
+ return this;
111
+ }
112
+ withConditionals(params) {
113
+ this.conditionals = Object.assign(this.conditionals, params);
114
+ return this;
115
+ }
116
+ withPaginator(paginator) {
117
+ RequireRatchet.notNullOrUndefined(paginator, 'paginator');
118
+ RequireRatchet.notNullOrUndefined(paginator.cn, 'paginator.cn');
119
+ RequireRatchet.true(paginator.min || paginator.max || paginator.l, 'paginator must have some limit');
120
+ paginator.s = paginator.s ?? SortDirection.Asc;
121
+ this.paginator = paginator;
122
+ return this;
123
+ }
124
+ fetchCopyOfParam(paramName) {
125
+ return this.namedParams[paramName];
126
+ }
127
+ fetchCopyOfConditional(conditionalName) {
128
+ return this.conditionals[conditionalName];
129
+ }
130
+ containsParam(paramName) {
131
+ return this.namedParams[paramName] != undefined;
132
+ }
133
+ getDebugComment() {
134
+ return this.debugComment;
135
+ }
136
+ containsConditional(conditionalName) {
137
+ return this.conditionals[conditionalName] != undefined;
138
+ }
139
+ build() {
140
+ const build = this.clone();
141
+ return build.internalBuild(false);
142
+ }
143
+ buildUnfiltered() {
144
+ const builder = this.clone();
145
+ return builder.internalBuild(true);
146
+ }
147
+ internalBuild(unfiltered) {
148
+ this.applyQueryFragments();
149
+ this.applyConditionalBlocks();
150
+ this.applyRepeatBlocks();
151
+ this.applyPagination(unfiltered);
152
+ this.applySqlConstructs();
153
+ this.applyComments();
154
+ this.runQueryChecks();
155
+ this.stripNonAsciiParams();
156
+ return new QueryBuilderResult((this.query ?? '').trim(), this.namedParams, this.paginator, this.transactionIsolationLevel);
157
+ }
158
+ stripNonAsciiParams() {
159
+ const reduced = StringRatchet.stripNonAscii(JSON.stringify(this.namedParams));
160
+ this.namedParams = JSON.parse(reduced);
161
+ }
162
+ runQueryChecks() {
163
+ const quotedNamedParams = [...(this.query?.matchAll(/['"]:[A-z-]*['"]/gm) ?? [])];
164
+ if (quotedNamedParams.length > 0) {
165
+ Logger.warn('The resulting query contains quoted named params check this this is intended. Instances found: %s', quotedNamedParams.join(', '));
166
+ }
167
+ }
168
+ applyComments() {
169
+ if (this.debugComment.length && this.query) {
170
+ const firstSpaceIndex = this.query.indexOf(' ');
171
+ const comment = this.debugComment;
172
+ this.query = this.query.substring(0, firstSpaceIndex + 1) + `/*${comment}*/` + this.query.substring(firstSpaceIndex + 1);
173
+ }
174
+ }
175
+ applySqlConstructs() {
176
+ for (const key of Object.keys(this.sqlConstructs)) {
177
+ let value;
178
+ const val = this.sqlConstructs[key];
179
+ if (Array.isArray(val)) {
180
+ val.forEach((v) => {
181
+ if (typeof v !== 'string' || !v.match(QueryBuilder.ALLOWED_SQL_CONSTRUCT)) {
182
+ throw new Error(`sql construct entry ${v} is invalid value must be alphanumeric only.`);
183
+ }
184
+ });
185
+ value = val.join(', ');
186
+ }
187
+ else {
188
+ value = StringRatchet.safeString(val);
189
+ if (value.length > 0 && !value.match(QueryBuilder.ALLOWED_SQL_CONSTRUCT)) {
190
+ throw new Error(`sql construct ${value} is invalid value must be alphanumeric only.`);
191
+ }
192
+ }
193
+ const sqlReservedWords = ['update', 'insert', 'delete', 'drop', 'select'];
194
+ for (const word of sqlReservedWords) {
195
+ if (value.toLowerCase().includes(word)) {
196
+ throw new Error(`sql construct ${value} is invalid value must not contain reserved word ${word}.`);
197
+ }
198
+ }
199
+ const rawKey = `##sqlConstruct:${key}##`;
200
+ while (this.query?.includes(rawKey)) {
201
+ this.query = this.query.replace(rawKey, value);
202
+ }
203
+ }
204
+ }
205
+ applyRepeatBlocks() {
206
+ const startSymbol = '<repeat';
207
+ const endSymbol = '>';
208
+ while (true) {
209
+ const startIndex = this.query?.indexOf(startSymbol);
210
+ if (startIndex === -1 || !this.query || typeof startIndex !== 'number') {
211
+ return;
212
+ }
213
+ const endIndex = this.query.indexOf(endSymbol, startIndex);
214
+ if (endIndex == -1) {
215
+ throw new Error(`Invalid query when finding end symbol matching ${endSymbol} in ${this.query} check that you have closed all your tags correctly.`);
216
+ }
217
+ const content = this.query.substring(startIndex + startSymbol.length, endIndex).trim();
218
+ const countSymbol = 'count=';
219
+ let countParam = '';
220
+ const joinSymbol = 'join=';
221
+ let joinString;
222
+ const params = content.split(' ');
223
+ for (const param of params) {
224
+ if (param.includes(countSymbol)) {
225
+ countParam = param.substring(param.indexOf(countSymbol) + countSymbol.length);
226
+ }
227
+ if (param.includes(joinSymbol)) {
228
+ joinString = param.substring(param.indexOf(joinSymbol) + joinSymbol.length);
229
+ }
230
+ }
231
+ const endTag = `</repeat>`;
232
+ const endTagIndex = this.query.indexOf(endTag);
233
+ const repeatedContent = this.query.substring(endIndex + endSymbol.length, endTagIndex);
234
+ this.query = this.query.substring(0, startIndex) + this.query.substring(endTagIndex + endTag.length);
235
+ const count = this.namedParams[countParam.substring(1)];
236
+ for (let i = 0; i < count; i++) {
237
+ let indexedContent = repeatedContent;
238
+ if (joinString && i != 0) {
239
+ indexedContent += joinString;
240
+ }
241
+ let startParamTagIndex = indexedContent.indexOf(`::`);
242
+ while (startParamTagIndex != -1) {
243
+ const endParamTagIndex = indexedContent.indexOf(`::`, startParamTagIndex + 2);
244
+ if (endParamTagIndex == -1) {
245
+ throw new Error(`Invalid query when finding end symbol matching :: check that you have closed all your tags correctly. Query: ${this.query} `);
246
+ }
247
+ const param = indexedContent.substring(startParamTagIndex + 2, endParamTagIndex);
248
+ indexedContent = indexedContent.replace('::' + param + '::', ':' + param + i);
249
+ startParamTagIndex = indexedContent.indexOf(`::`);
250
+ }
251
+ this.query = this.query.substring(0, startIndex) + indexedContent + this.query.substring(startIndex);
252
+ }
253
+ }
254
+ }
255
+ applyQueryFragments() {
256
+ const startSymbol = '[[';
257
+ const endSymbol = ']]';
258
+ while (true) {
259
+ const startIndex = this.query?.indexOf(startSymbol);
260
+ if (startIndex == -1 || !this.query || typeof startIndex !== 'number') {
261
+ return;
262
+ }
263
+ const endIndex = this.query.indexOf(endSymbol, startIndex);
264
+ if (endIndex == -1) {
265
+ throw new Error(`Invalid query when finding end symbol matching ${endSymbol} in ${this.query} check that you have closed all your tags correctly.`);
266
+ }
267
+ const rawName = this.query.substring(startIndex + startSymbol.length, endIndex);
268
+ const namedQueryElement = this.queryProvider.fetchQuery(rawName);
269
+ if (!namedQueryElement) {
270
+ throw new Error(`Invalid query, query fragment ${rawName} not found in named queries.`);
271
+ }
272
+ this.query = this.query.replace(`[[${rawName}]]`, namedQueryElement);
273
+ }
274
+ }
275
+ applyPagination(unfiltered) {
276
+ const paginationRawKey = '##pagination##';
277
+ if (!unfiltered && this.paginator) {
278
+ const sortDirEnum = this.paginator.s == SortDirection.Desc ? SortDirection.Desc : SortDirection.Asc;
279
+ const sortDir = StringRatchet.safeString(sortDirEnum);
280
+ if (this.paginator.min || this.paginator.max) {
281
+ let wc = 'WHERE ##sqlConstruct:queryBuilderPaginatorWhere##';
282
+ this.withSqlConstruct('queryBuilderPaginatorWhere', this.paginator.cn);
283
+ if (this.paginator.min) {
284
+ wc += '>= :queryBuilderPaginatorWhereMin';
285
+ this.withParam('queryBuilderPaginatorWhereMin', this.paginator.min);
286
+ }
287
+ if (this.paginator.max) {
288
+ if (this.paginator.min) {
289
+ wc += ' AND ##sqlConstruct:queryBuilderPaginatorWhere##';
290
+ }
291
+ wc += '< :queryBuilderPaginatorWhereMax';
292
+ this.withParam('queryBuilderPaginatorWhereMax', this.paginator.max);
293
+ }
294
+ this.query += wc;
295
+ }
296
+ this.query += ` ORDER BY ##sqlConstruct:queryBuilderOrderBy## ${sortDir}`;
297
+ this.withSqlConstruct('queryBuilderOrderBy', this.paginator.cn);
298
+ if (this.paginator.l) {
299
+ this.query += ' LIMIT :queryBuilderLimit';
300
+ this.withParam('queryBuilderLimit', this.paginator.l);
301
+ }
302
+ }
303
+ if (unfiltered && this.query) {
304
+ const paginationSplitIndex = this.query.indexOf(paginationRawKey);
305
+ if (paginationSplitIndex != -1) {
306
+ this.query = 'SELECT COUNT(*) ' + this.query.substring(paginationSplitIndex + paginationRawKey.length);
307
+ }
308
+ }
309
+ while (this.query?.includes(paginationRawKey)) {
310
+ this.query = this.query.replace(paginationRawKey, '');
311
+ }
312
+ }
313
+ applyConditionalBlocks() {
314
+ const startSymbol = '<<';
315
+ const endSymbol = '>>';
316
+ while (true) {
317
+ const startIndex = this.query?.indexOf(startSymbol);
318
+ if (startIndex == -1 || !this.query || typeof startIndex !== 'number') {
319
+ return;
320
+ }
321
+ const endIndex = this.query.indexOf(endSymbol, startIndex);
322
+ if (endIndex == -1) {
323
+ throw new Error(`Invalid query when finding end symbol matching ${endSymbol} in ${this.query} check that you have closed all your tags correctly.`);
324
+ }
325
+ const rawTag = this.query.substring(startIndex + startSymbol.length, endIndex);
326
+ const tag = rawTag.replace(':', '');
327
+ const endTag = `<</${rawTag}>>`;
328
+ const endTagIndex = this.query.indexOf(endTag);
329
+ if (endTagIndex == -1) {
330
+ throw new Error(`Invalid query when finding conditional end tag matching ${endTag} in ${this.query} check that your query contains an exact match of this tag.`);
331
+ }
332
+ let replacement = this.query.substring(endIndex + endSymbol.length, endTagIndex);
333
+ if (rawTag.startsWith(':')) {
334
+ const param = this.namedParams[tag];
335
+ if (param == null || (Array.isArray(param) && param.length == 0)) {
336
+ replacement = '';
337
+ }
338
+ }
339
+ else {
340
+ const conditional = this.conditionals[tag.replace('!', '')];
341
+ if (conditional == undefined || conditional == tag.startsWith('!')) {
342
+ replacement = '';
343
+ }
344
+ }
345
+ if (this.debugAnnotateMode) {
346
+ replacement = '/* conditional ' + tag + '*/';
347
+ }
348
+ this.query = this.query.substring(0, startIndex) + replacement + this.query.substring(endTagIndex + endTag.length);
349
+ }
350
+ }
351
+ }
352
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/query-builder/query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export declare class QueryUtil {
2
+ private fields;
3
+ private replacements;
4
+ addReplacement(replacement: Record<string, unknown>, ...fields: string[]): void;
5
+ appendReplacement(replacementKey: string, appendValue: string, ...fields: string[]): void;
6
+ addFields(...fields: string[]): void;
7
+ getFields(): string[];
8
+ getReplacements(): Record<string, unknown>;
9
+ static sqlInjectionUnsafeParamRenderer(value: unknown): string;
10
+ static renderQueryStringForPasteIntoTool(query: string, inFields: object | null, transform?: (x: unknown) => string): string | null;
11
+ static reformatQueryForLogging(qry: string, inMaxLineLength?: number): string | null;
12
+ static addPrefixToFieldNames(fields: Record<string, any>, prefix?: string): Record<string, any>;
13
+ static replaceNullReplacementsInQuery(query: string, fields: Record<string, any>): string;
14
+ static removeUnusedFields(query: string, fields: Record<string, any>, prefix?: string): Record<string, any>;
15
+ static extractUsedNamedParams(query: string): string[];
16
+ }
@@ -0,0 +1,137 @@
1
+ import { Logger } from '@bitblit/ratchet-common/logger/logger';
2
+ import { ErrorRatchet } from '@bitblit/ratchet-common/lang/error-ratchet';
3
+ import { StringRatchet } from '@bitblit/ratchet-common/lang/string-ratchet';
4
+ export class QueryUtil {
5
+ fields = [];
6
+ replacements = {};
7
+ addReplacement(replacement, ...fields) {
8
+ this.replacements = Object.assign(this.replacements, replacement);
9
+ this.addFields(...fields);
10
+ }
11
+ appendReplacement(replacementKey, appendValue, ...fields) {
12
+ this.replacements[replacementKey] = this.replacements[replacementKey] + appendValue;
13
+ this.addFields(...fields);
14
+ }
15
+ addFields(...fields) {
16
+ this.fields = this.fields.concat(...fields);
17
+ }
18
+ getFields() {
19
+ return this.fields;
20
+ }
21
+ getReplacements() {
22
+ return this.replacements;
23
+ }
24
+ static sqlInjectionUnsafeParamRenderer(value) {
25
+ const rFn = (val) => (typeof val === 'string' ? '"' + val + '"' : StringRatchet.safeString(val));
26
+ const repl = Array.isArray(value) ? value.map((s) => rFn(s)).join(',') : rFn(value);
27
+ return repl;
28
+ }
29
+ static renderQueryStringForPasteIntoTool(query, inFields, transform = QueryUtil.sqlInjectionUnsafeParamRenderer) {
30
+ const fields = inFields ?? {};
31
+ let rval = QueryUtil.reformatQueryForLogging(query);
32
+ if (rval) {
33
+ const keys = Object.keys(fields);
34
+ keys.sort((b, a) => a.length - b.length);
35
+ for (const key of keys) {
36
+ const val = fields[key];
37
+ const find = ':' + key;
38
+ const repl = transform(val);
39
+ rval = rval.split(find).join(repl);
40
+ }
41
+ if (!rval.endsWith(';')) {
42
+ rval += ';';
43
+ }
44
+ }
45
+ return rval;
46
+ }
47
+ static reformatQueryForLogging(qry, inMaxLineLength = 80) {
48
+ let maxLineLength = inMaxLineLength;
49
+ if (!StringRatchet.trimToNull(qry)) {
50
+ return null;
51
+ }
52
+ let loggableQuery = '';
53
+ let cleaned = StringRatchet.trimToEmpty(qry).split('\n').join(' ').split('\r').join(' ');
54
+ while (cleaned.length > maxLineLength) {
55
+ let idx = Math.min(cleaned.length, maxLineLength);
56
+ while (idx > 0 && ![' ', ','].includes(cleaned.charAt(idx))) {
57
+ idx--;
58
+ }
59
+ if (idx > 0) {
60
+ loggableQuery += cleaned.substring(0, idx) + '\n';
61
+ cleaned = StringRatchet.trimToEmpty(cleaned.substring(idx));
62
+ }
63
+ else {
64
+ Logger.silly('Input contains a string longer than the max line length - bumping');
65
+ maxLineLength += 2;
66
+ }
67
+ }
68
+ return loggableQuery + (cleaned.length > 0 ? cleaned : '');
69
+ }
70
+ static addPrefixToFieldNames(fields, prefix = ':') {
71
+ const rval = {};
72
+ Object.keys(fields).forEach((k) => {
73
+ rval[prefix + k] = fields[k];
74
+ });
75
+ return rval;
76
+ }
77
+ static replaceNullReplacementsInQuery(query, fields) {
78
+ const rval = query;
79
+ Object.keys(fields).forEach((k) => {
80
+ if (fields[k] === null || fields[k] === undefined) {
81
+ rval.replaceAll(k, 'null');
82
+ }
83
+ });
84
+ return rval;
85
+ }
86
+ static removeUnusedFields(query, fields, prefix) {
87
+ const usedFields = QueryUtil.extractUsedNamedParams(query);
88
+ const rval = {};
89
+ Object.keys(fields).forEach((k) => {
90
+ if (usedFields.includes(k) || (prefix && usedFields.includes(prefix + k))) {
91
+ rval[k] = fields[k];
92
+ }
93
+ });
94
+ return rval;
95
+ }
96
+ static extractUsedNamedParams(query) {
97
+ let state = 0;
98
+ let idx = 0;
99
+ const frags = [];
100
+ const usedParams = [];
101
+ let curString = '';
102
+ while (idx < query.length) {
103
+ const nextChar = query.charAt(idx++);
104
+ if (state === 0) {
105
+ if (nextChar === ':') {
106
+ frags.push(curString);
107
+ curString = ':';
108
+ state = 1;
109
+ }
110
+ else {
111
+ curString += nextChar;
112
+ }
113
+ }
114
+ else if (state === 1) {
115
+ if (!StringRatchet.stringContainsOnlyAlphanumeric(nextChar)) {
116
+ usedParams.push(curString);
117
+ curString = nextChar;
118
+ state = 0;
119
+ }
120
+ else {
121
+ curString += nextChar;
122
+ }
123
+ }
124
+ else {
125
+ throw ErrorRatchet.fErr('Cant happen - invalid state');
126
+ }
127
+ }
128
+ if (state === 0) {
129
+ frags.push(curString);
130
+ }
131
+ else {
132
+ usedParams.push(curString);
133
+ }
134
+ return usedParams;
135
+ }
136
+ }
137
+ //# sourceMappingURL=query-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-util.js","sourceRoot":"","sources":["../../src/query-builder/query-util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './named-parameter-database-service.js';
2
+ export * from './ssh-tunnel-service.js';
3
+ export * from './transactional-named-parameter-database-service.js';
@@ -0,0 +1,4 @@
1
+ export * from './named-parameter-database-service.js';
2
+ export * from './ssh-tunnel-service.js';
3
+ export * from './transactional-named-parameter-database-service.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/service/index.ts"],"names":[],"mappings":"AAIA,cAAc,uCAAuC,CAAC;AACtD,cAAc,yBAAyB,CAAC;AACxC,cAAc,qDAAqD,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { TransactionIsolationLevel } from '../model/transaction-isolation-level.js';
2
+ import { QueryBuilder } from '../query-builder/query-builder.js';
3
+ import { GroupByCountResult } from '../model/group-by-count-result.js';
4
+ import { QueryDefaults } from '../model/query-defaults.js';
5
+ import { QueryTextProvider } from '../model/query-text-provider.js';
6
+ import { ModifyResults } from '../model/modify-results.js';
7
+ import { DatabaseAccessProvider } from '../model/database-access-provider.js';
8
+ import { DatabaseAccess } from '../model/database-access.js';
9
+ import { RequestResults } from '../model/request-results.js';
10
+ import { DatabaseRequestType } from '../model/database-request-type.js';
11
+ import { NamedParameterDatabaseServiceConfig } from '../model/named-parameter-database-service-config.js';
12
+ export declare class NamedParameterDatabaseService {
13
+ private cfg;
14
+ constructor(cfg: NamedParameterDatabaseServiceConfig);
15
+ getConfig(): NamedParameterDatabaseServiceConfig;
16
+ nonPooledExtraConfiguration(): Record<string, any>;
17
+ nonPooledMode(): boolean;
18
+ get databaseAccessProvider(): DatabaseAccessProvider;
19
+ getQueryDefaults(): QueryDefaults;
20
+ getQueryProvider(): QueryTextProvider;
21
+ createNonPooledDatabaseAccess(queryDefaults: QueryDefaults, additionalConfig?: Record<string, any>): Promise<DatabaseAccess>;
22
+ fetchQueryRawTextByName(queryPath: string): string;
23
+ queryBuilder(queryPath?: string): QueryBuilder;
24
+ executeUpdateOrInsertByName(queryPath: string, params?: object, timeoutMS?: number): Promise<ModifyResults>;
25
+ buildAndExecuteUpdateOrInsert(queryBuilder: QueryBuilder, timeoutMS?: number): Promise<ModifyResults>;
26
+ buildAndExecuteUpdateOrInsertWithRetry(queryBuilder: QueryBuilder, maxRetries: number, timeoutMS?: number): Promise<ModifyResults>;
27
+ executeQueryByName<Row>(queryPath: string, params: object, timeoutMS?: number): Promise<Row[]>;
28
+ executeQueryByNameSingle<Row>(queryPath: string, params: object, timeoutMS?: number): Promise<Row | null>;
29
+ buildAndExecute<Row>(queryBuilder: QueryBuilder, timeoutMS?: number): Promise<Row[]>;
30
+ buildAndExecuteSingle<Row>(queryBuilder: QueryBuilder, timeoutMS?: number): Promise<Row | null>;
31
+ buildAndExecuteFetchTotalRows(queryBuilder: QueryBuilder, groupBy?: string, timeoutMS?: number): Promise<GroupByCountResult[]>;
32
+ executeQueryWithMeta<Row>(requestType: DatabaseRequestType, transactionIsolationLevel: TransactionIsolationLevel, query: string, fields?: object, timeoutMS?: number, debugComment?: string): Promise<RequestResults<Row>>;
33
+ shutdown(): Promise<boolean>;
34
+ testDbFailure(): Promise<void>;
35
+ changeNextQueryTransactionIsolationLevel<Row>(tx: TransactionIsolationLevel | null): Promise<RequestResults<Row> | null>;
36
+ forceCloseConnectionForTesting(): Promise<boolean>;
37
+ private innerExecutePreparedAsPromiseWithRetryCloseConnection;
38
+ private innerExecutePreparedAsPromise;
39
+ getDB(): Promise<DatabaseAccess>;
40
+ testConnection(logTestResults?: boolean): Promise<number>;
41
+ resetConnection(): Promise<boolean>;
42
+ }