@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.
- package/lib/build/index.d.ts +1 -0
- package/lib/build/index.js +2 -0
- package/lib/build/index.js.map +1 -0
- package/lib/build/ratchet-rdbms-info.d.ts +5 -0
- package/lib/build/ratchet-rdbms-info.js +15 -0
- package/lib/build/ratchet-rdbms-info.js.map +1 -0
- package/lib/model/connection-and-tunnel.d.ts +6 -0
- package/lib/model/connection-and-tunnel.js +2 -0
- package/lib/model/connection-and-tunnel.js.map +1 -0
- package/lib/model/database-access-provider.d.ts +7 -0
- package/lib/model/database-access-provider.js +2 -0
- package/lib/model/database-access-provider.js.map +1 -0
- package/lib/model/database-access.d.ts +17 -0
- package/lib/model/database-access.js +2 -0
- package/lib/model/database-access.js.map +1 -0
- package/lib/model/database-config-list.d.ts +3 -0
- package/lib/model/database-config-list.js +2 -0
- package/lib/model/database-config-list.js.map +1 -0
- package/lib/model/database-request-type.d.ts +6 -0
- package/lib/model/database-request-type.js +8 -0
- package/lib/model/database-request-type.js.map +1 -0
- package/lib/model/group-by-count-result.d.ts +4 -0
- package/lib/model/group-by-count-result.js +2 -0
- package/lib/model/group-by-count-result.js.map +1 -0
- package/lib/model/index.d.ts +19 -0
- package/lib/model/index.js +20 -0
- package/lib/model/index.js.map +1 -0
- package/lib/model/modify-results.d.ts +9 -0
- package/lib/model/modify-results.js +2 -0
- package/lib/model/modify-results.js.map +1 -0
- package/lib/model/named-parameter-database-service-config.d.ts +12 -0
- package/lib/model/named-parameter-database-service-config.js +2 -0
- package/lib/model/named-parameter-database-service-config.js.map +1 -0
- package/lib/model/paginated-results.d.ts +5 -0
- package/lib/model/paginated-results.js +2 -0
- package/lib/model/paginated-results.js.map +1 -0
- package/lib/model/pagination-bounds.d.ts +6 -0
- package/lib/model/pagination-bounds.js +2 -0
- package/lib/model/pagination-bounds.js.map +1 -0
- package/lib/model/paginator.d.ts +9 -0
- package/lib/model/paginator.js +2 -0
- package/lib/model/paginator.js.map +1 -0
- package/lib/model/query-defaults.d.ts +4 -0
- package/lib/model/query-defaults.js +2 -0
- package/lib/model/query-defaults.js.map +1 -0
- package/lib/model/query-text-provider.d.ts +4 -0
- package/lib/model/query-text-provider.js +2 -0
- package/lib/model/query-text-provider.js.map +1 -0
- package/lib/model/request-results.d.ts +4 -0
- package/lib/model/request-results.js +2 -0
- package/lib/model/request-results.js.map +1 -0
- package/lib/model/simple-query-text-provider.d.ts +7 -0
- package/lib/model/simple-query-text-provider.js +18 -0
- package/lib/model/simple-query-text-provider.js.map +1 -0
- package/lib/model/sort-direction.d.ts +4 -0
- package/lib/model/sort-direction.js +6 -0
- package/lib/model/sort-direction.js.map +1 -0
- package/lib/model/ssh/ssh-tunnel-config.d.ts +8 -0
- package/lib/model/ssh/ssh-tunnel-config.js +2 -0
- package/lib/model/ssh/ssh-tunnel-config.js.map +1 -0
- package/lib/model/ssh/ssh-tunnel-container.d.ts +12 -0
- package/lib/model/ssh/ssh-tunnel-container.js +2 -0
- package/lib/model/ssh/ssh-tunnel-container.js.map +1 -0
- package/lib/model/transaction-isolation-level.d.ts +4 -0
- package/lib/model/transaction-isolation-level.js +6 -0
- package/lib/model/transaction-isolation-level.js.map +1 -0
- package/lib/mysql/index.d.ts +5 -0
- package/lib/mysql/index.js +6 -0
- package/lib/mysql/index.js.map +1 -0
- package/lib/mysql/model/mysql-db-config.d.ts +12 -0
- package/lib/mysql/model/mysql-db-config.js +2 -0
- package/lib/mysql/model/mysql-db-config.js.map +1 -0
- package/lib/mysql/model/mysql-master-status.d.ts +6 -0
- package/lib/mysql/model/mysql-master-status.js +2 -0
- package/lib/mysql/model/mysql-master-status.js.map +1 -0
- package/lib/mysql/model/mysql-slave-status.d.ts +52 -0
- package/lib/mysql/model/mysql-slave-status.js +2 -0
- package/lib/mysql/model/mysql-slave-status.js.map +1 -0
- package/lib/mysql/mysql-style-database-access.d.ts +20 -0
- package/lib/mysql/mysql-style-database-access.js +57 -0
- package/lib/mysql/mysql-style-database-access.js.map +1 -0
- package/lib/mysql/rds-mysql-style-connection-provider.d.ts +29 -0
- package/lib/mysql/rds-mysql-style-connection-provider.js +205 -0
- package/lib/mysql/rds-mysql-style-connection-provider.js.map +1 -0
- package/lib/query-builder/index.d.ts +3 -0
- package/lib/query-builder/index.js +4 -0
- package/lib/query-builder/index.js.map +1 -0
- package/lib/query-builder/query-builder-result.d.ts +9 -0
- package/lib/query-builder/query-builder-result.js +13 -0
- package/lib/query-builder/query-builder-result.js.map +1 -0
- package/lib/query-builder/query-builder.d.ts +52 -0
- package/lib/query-builder/query-builder.js +352 -0
- package/lib/query-builder/query-builder.js.map +1 -0
- package/lib/query-builder/query-util.d.ts +16 -0
- package/lib/query-builder/query-util.js +137 -0
- package/lib/query-builder/query-util.js.map +1 -0
- package/lib/service/index.d.ts +3 -0
- package/lib/service/index.js +4 -0
- package/lib/service/index.js.map +1 -0
- package/lib/service/named-parameter-database-service.d.ts +42 -0
- package/lib/service/named-parameter-database-service.js +272 -0
- package/lib/service/named-parameter-database-service.js.map +1 -0
- package/lib/service/ssh-tunnel-service.d.ts +6 -0
- package/lib/service/ssh-tunnel-service.js +49 -0
- package/lib/service/ssh-tunnel-service.js.map +1 -0
- package/lib/service/transactional-named-parameter-database-service.d.ts +20 -0
- package/lib/service/transactional-named-parameter-database-service.js +129 -0
- package/lib/service/transactional-named-parameter-database-service.js.map +1 -0
- package/lib/sqlite/index.d.ts +9 -0
- package/lib/sqlite/index.js +10 -0
- package/lib/sqlite/index.js.map +1 -0
- package/lib/sqlite/model/fetch-remote-mode.d.ts +4 -0
- package/lib/sqlite/model/fetch-remote-mode.js +6 -0
- package/lib/sqlite/model/fetch-remote-mode.js.map +1 -0
- package/lib/sqlite/model/flush-remote-mode.d.ts +4 -0
- package/lib/sqlite/model/flush-remote-mode.js +6 -0
- package/lib/sqlite/model/flush-remote-mode.js.map +1 -0
- package/lib/sqlite/model/sqlite-connection-config-flag.d.ts +3 -0
- package/lib/sqlite/model/sqlite-connection-config-flag.js +5 -0
- package/lib/sqlite/model/sqlite-connection-config-flag.js.map +1 -0
- package/lib/sqlite/model/sqlite-connection-config.d.ts +9 -0
- package/lib/sqlite/model/sqlite-connection-config.js +2 -0
- package/lib/sqlite/model/sqlite-connection-config.js.map +1 -0
- package/lib/sqlite/model/sqlite-local-file-config.d.ts +3 -0
- package/lib/sqlite/model/sqlite-local-file-config.js +2 -0
- package/lib/sqlite/model/sqlite-local-file-config.js.map +1 -0
- package/lib/sqlite/model/sqlite-remote-file-sync-config.d.ts +8 -0
- package/lib/sqlite/model/sqlite-remote-file-sync-config.js +2 -0
- package/lib/sqlite/model/sqlite-remote-file-sync-config.js.map +1 -0
- package/lib/sqlite/sqlite-database-access.d.ts +25 -0
- package/lib/sqlite/sqlite-database-access.js +106 -0
- package/lib/sqlite/sqlite-database-access.js.map +1 -0
- package/lib/sqlite/sqlite-remote-sync-database-access.d.ts +34 -0
- package/lib/sqlite/sqlite-remote-sync-database-access.js +129 -0
- package/lib/sqlite/sqlite-remote-sync-database-access.js.map +1 -0
- package/lib/sqlite/sqlite-style-connection-provider.d.ts +19 -0
- package/lib/sqlite/sqlite-style-connection-provider.js +157 -0
- package/lib/sqlite/sqlite-style-connection-provider.js.map +1 -0
- package/lib/util/aws-rds-cert-2023.d.ts +6 -0
- package/lib/util/aws-rds-cert-2023.js +499 -0
- package/lib/util/aws-rds-cert-2023.js.map +1 -0
- package/lib/util/index.d.ts +2 -0
- package/lib/util/index.js +3 -0
- package/lib/util/index.js.map +1 -0
- package/lib/util/relational-database-utils.d.ts +4 -0
- package/lib/util/relational-database-utils.js +31 -0
- package/lib/util/relational-database-utils.js.map +1 -0
- package/package.json +12 -13
- package/lib/index.mjs +0 -2
- 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 @@
|
|
|
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
|
+
}
|