@digitalwalletcorp/sql-builder 1.3.4 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +114 -5
- package/lib/sql-builder.d.ts +5 -14
- package/lib/sql-builder.js +41 -42
- package/lib/sql-builder.js.map +1 -1
- package/package.json +2 -2
- package/src/sql-builder.ts +42 -46
package/README.md
CHANGED
|
@@ -152,14 +152,14 @@ WHERE
|
|
|
152
152
|
|
|
153
153
|
### 📚 API Reference
|
|
154
154
|
|
|
155
|
-
##### `new SQLBuilder(bindType?: 'postgres' | 'mysql' | 'oracle' | 'mssql'
|
|
155
|
+
##### `new SQLBuilder(bindType?: 'postgres' | 'mysql' | 'oracle' | 'mssql')`
|
|
156
156
|
|
|
157
157
|
Creates a new instance of the SQL builder.
|
|
158
158
|
|
|
159
159
|
The bindType parameter is optional. If provided in the constructor, you do not need to specify it again when calling generateParameterizedSQL. This is useful for projects that consistently use a single database type.
|
|
160
160
|
|
|
161
161
|
**Note on `bindType` Mapping:**
|
|
162
|
-
While `bindType` explicitly names PostgreSQL, MySQL, Oracle
|
|
162
|
+
While `bindType` explicitly names PostgreSQL, MySQL, Oracle and SQL Server the generated placeholder syntax is compatible with other SQL databases as follows:
|
|
163
163
|
|
|
164
164
|
| `bindType` | Placeholder Syntax | Compatible Databases | Bind Parameter Type |
|
|
165
165
|
| :------------- | :----------------- | :------------------- | :------------------ |
|
|
@@ -167,7 +167,6 @@ While `bindType` explicitly names PostgreSQL, MySQL, Oracle, SQL Server, and Big
|
|
|
167
167
|
| `mysql` | `?`, `?`, ... | **MySQL**, **SQLite** (for unnamed parameters) | `Array<any>` |
|
|
168
168
|
| `oracle` | `:name`, `:age`, ... | **Oracle**, **SQLite** (for named parameters) | `Record<string, any>` |
|
|
169
169
|
| `mssql` | `@name`, `@age`, ... | **SQL Server** (for named parameters) | `Record<string, any>` |
|
|
170
|
-
| `bigquery` | `@name`, `@age`, ... | **BigQuery** | `Array<string, { name: string, parameterType: { type: string }, parameterValue: { value: any }}>` |
|
|
171
170
|
|
|
172
171
|
##### `generateSQL(template: string, entity: Record<string, any>): string`
|
|
173
172
|
|
|
@@ -226,8 +225,118 @@ console.log('Parameters:', params);
|
|
|
226
225
|
**Resulting SQL & Parameters:**
|
|
227
226
|
|
|
228
227
|
```
|
|
229
|
-
SQL:
|
|
230
|
-
|
|
228
|
+
SQL:
|
|
229
|
+
SELECT
|
|
230
|
+
id,
|
|
231
|
+
user_name
|
|
232
|
+
FROM users
|
|
233
|
+
WHERE
|
|
234
|
+
1 = 1
|
|
235
|
+
AND user_id = $1
|
|
236
|
+
AND project_name IN ($2, $3)
|
|
237
|
+
|
|
238
|
+
Parameters:
|
|
239
|
+
[ 123, 'project_a', 'project_b' ]
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
##### Example 4: INSERT with NULL normalization
|
|
243
|
+
|
|
244
|
+
**Template:**
|
|
245
|
+
|
|
246
|
+
```sql
|
|
247
|
+
INSERT INTO users (
|
|
248
|
+
user_id,
|
|
249
|
+
user_name,
|
|
250
|
+
email,
|
|
251
|
+
age
|
|
252
|
+
) VALUES (
|
|
253
|
+
/*userId*/0,
|
|
254
|
+
/*userName*/'anonymous',
|
|
255
|
+
/*email*/'dummy@example.com',
|
|
256
|
+
/*age*/0
|
|
257
|
+
)
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**Code:**
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
import { SQLBuilder } from '@digitalwalletcorp/sql-builder';
|
|
264
|
+
|
|
265
|
+
const builder = new SQLBuilder();
|
|
266
|
+
|
|
267
|
+
const template = `...`; // The SQL template from above
|
|
268
|
+
|
|
269
|
+
const bindEntity = {
|
|
270
|
+
userId: 1001,
|
|
271
|
+
userName: 'Alice',
|
|
272
|
+
email: undefined, // optional column (not provided)
|
|
273
|
+
age: null // optional column (explicitly null)
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
const sql1 = builder.generateSQL(
|
|
277
|
+
template,
|
|
278
|
+
bindEntity
|
|
279
|
+
);
|
|
280
|
+
|
|
281
|
+
console.log('SQL1:', sql1);
|
|
282
|
+
|
|
283
|
+
const [sql2, params2] = builder.generateParameterizedSQL(
|
|
284
|
+
template,
|
|
285
|
+
bindEntity,
|
|
286
|
+
'postgres'
|
|
287
|
+
);
|
|
288
|
+
|
|
289
|
+
console.log('SQL2:', sql2);
|
|
290
|
+
console.log('Parameters2:', params2);
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**Result:**
|
|
294
|
+
|
|
295
|
+
```text
|
|
296
|
+
SQL1:
|
|
297
|
+
INSERT INTO users (
|
|
298
|
+
user_id,
|
|
299
|
+
user_name,
|
|
300
|
+
email,
|
|
301
|
+
age
|
|
302
|
+
) VALUES (
|
|
303
|
+
1001,
|
|
304
|
+
'Alice',
|
|
305
|
+
NULL,
|
|
306
|
+
NULL
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
SQL2:
|
|
310
|
+
INSERT INTO users (
|
|
311
|
+
user_id,
|
|
312
|
+
user_name,
|
|
313
|
+
email,
|
|
314
|
+
age
|
|
315
|
+
) VALUES (
|
|
316
|
+
$1,
|
|
317
|
+
$2,
|
|
318
|
+
$3,
|
|
319
|
+
$4
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
Parameters2:
|
|
323
|
+
[ 1001, 'Alice', null, null ]
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
**Notes:**
|
|
327
|
+
|
|
328
|
+
- For both `generateSQL` and `generateParameterizedSQL`,
|
|
329
|
+
`undefined` and `null` values are normalized to SQL `NULL`.
|
|
330
|
+
- This behavior is especially important for INSERT / UPDATE statements,
|
|
331
|
+
where the number of columns and values must always match.
|
|
332
|
+
- NOT NULL constraint violations are intentionally left to the database.
|
|
333
|
+
- If you need to handle `IS NULL` conditions explicitly, you can use `/*IF */` blocks as shown below:
|
|
334
|
+
|
|
335
|
+
```sql
|
|
336
|
+
WHERE
|
|
337
|
+
1 = 1
|
|
338
|
+
/*IF param == null*/AND param IS NULL/*END*/
|
|
339
|
+
/*IF param != null*/AND param = /*param*/'abc'/*END*/
|
|
231
340
|
```
|
|
232
341
|
|
|
233
342
|
### 🪄 Special Comment Syntax
|
package/lib/sql-builder.d.ts
CHANGED
|
@@ -4,28 +4,16 @@
|
|
|
4
4
|
* SQLite: ?, $name, :name 配列またはオブジェクト
|
|
5
5
|
* Oracle: :name オブジェクト
|
|
6
6
|
* SQL Server: `@name` 配列またはオブジェクト
|
|
7
|
-
* BigQuery: `@name` オブジェクトの配列
|
|
8
7
|
*
|
|
9
8
|
* 以下をサポートする
|
|
10
9
|
* ・$1, $2 (postgres)
|
|
11
10
|
* ・? (mysql) SQLite, SQL Serverもこれで代替可能
|
|
12
11
|
* ・:name (oracle) SQLiteもこれで代替可能
|
|
13
12
|
* ・`@name` (mssql)
|
|
14
|
-
* ・`@name` (bigquery)
|
|
15
13
|
*/
|
|
16
|
-
declare const dbTypes: readonly ["postgres", "mysql", "oracle", "mssql"
|
|
14
|
+
declare const dbTypes: readonly ["postgres", "mysql", "oracle", "mssql"];
|
|
17
15
|
type BindType = typeof dbTypes[number];
|
|
18
|
-
type
|
|
19
|
-
type: 'STRING' | 'INT64' | 'FLOAT64' | 'BOOL' | 'DATE' | 'DATETIME' | 'TIMESTAMP' | 'ARRAY' | 'STRUCT';
|
|
20
|
-
};
|
|
21
|
-
type BigQueryParameterTypeValue = {
|
|
22
|
-
name: string;
|
|
23
|
-
parameterType?: BigQueryParameterType;
|
|
24
|
-
parameterValue: {
|
|
25
|
-
value: any;
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
type BindParameterType<T extends BindType> = T extends 'postgres' ? any[] : T extends 'mysql' ? any[] : T extends 'oracle' ? Record<string, any> : T extends 'mssql' ? Record<string, any> : T extends 'bigquery' ? BigQueryParameterTypeValue[] : undefined;
|
|
16
|
+
type BindParameterType<T extends BindType> = T extends 'postgres' ? any[] : T extends 'mysql' ? any[] : T extends 'oracle' ? Record<string, any> : T extends 'mssql' ? Record<string, any> : undefined;
|
|
29
17
|
/**
|
|
30
18
|
* 動的SQLを生成する
|
|
31
19
|
*
|
|
@@ -139,6 +127,9 @@ export declare class SQLBuilder {
|
|
|
139
127
|
* * 返却する値がboolean型の場合はそのまま返す
|
|
140
128
|
* true
|
|
141
129
|
* false
|
|
130
|
+
* * null/undefinedの場合は'NULL'を返す
|
|
131
|
+
*
|
|
132
|
+
* NULLの扱いを含むため、この関数はgenerateSQLのみで利用する
|
|
142
133
|
*
|
|
143
134
|
* @param {string} property `obj.param1.param2`などのドットで繋いだプロパティ
|
|
144
135
|
* @param {Record<string, any>} entity
|
package/lib/sql-builder.js
CHANGED
|
@@ -42,21 +42,18 @@ const abstract_syntax_tree_1 = require("./abstract-syntax-tree");
|
|
|
42
42
|
* SQLite: ?, $name, :name 配列またはオブジェクト
|
|
43
43
|
* Oracle: :name オブジェクト
|
|
44
44
|
* SQL Server: `@name` 配列またはオブジェクト
|
|
45
|
-
* BigQuery: `@name` オブジェクトの配列
|
|
46
45
|
*
|
|
47
46
|
* 以下をサポートする
|
|
48
47
|
* ・$1, $2 (postgres)
|
|
49
48
|
* ・? (mysql) SQLite, SQL Serverもこれで代替可能
|
|
50
49
|
* ・:name (oracle) SQLiteもこれで代替可能
|
|
51
50
|
* ・`@name` (mssql)
|
|
52
|
-
* ・`@name` (bigquery)
|
|
53
51
|
*/
|
|
54
52
|
const dbTypes = [
|
|
55
53
|
'postgres',
|
|
56
54
|
'mysql',
|
|
57
55
|
'oracle',
|
|
58
|
-
'mssql'
|
|
59
|
-
'bigquery'
|
|
56
|
+
'mssql'
|
|
60
57
|
];
|
|
61
58
|
/**
|
|
62
59
|
* 動的SQLを生成する
|
|
@@ -148,9 +145,6 @@ class SQLBuilder {
|
|
|
148
145
|
case 'mssql':
|
|
149
146
|
bindParams = {};
|
|
150
147
|
break;
|
|
151
|
-
case 'bigquery':
|
|
152
|
-
bindParams = [];
|
|
153
|
-
break;
|
|
154
148
|
default:
|
|
155
149
|
throw new Error(`Unsupported bind type: ${bt}`);
|
|
156
150
|
}
|
|
@@ -309,7 +303,11 @@ class SQLBuilder {
|
|
|
309
303
|
result += template.substring(pos.index, tagContext.startIndex);
|
|
310
304
|
pos.index = tagContext.endIndex;
|
|
311
305
|
// BEGINのときは無条件にsubに対して再帰呼び出し
|
|
312
|
-
|
|
306
|
+
const beginBlockResult = this.parse(pos, template, entity, tagContext.sub, options);
|
|
307
|
+
// BEGIN内のIF、FORのいずれかで成立したものがあった場合は結果を出力
|
|
308
|
+
if (tagContext.sub.some(sub => (sub.type === 'IF' || sub.type === 'FOR') && sub.status === 10)) {
|
|
309
|
+
result += beginBlockResult;
|
|
310
|
+
}
|
|
313
311
|
break;
|
|
314
312
|
}
|
|
315
313
|
case 'IF': {
|
|
@@ -317,7 +315,8 @@ class SQLBuilder {
|
|
|
317
315
|
pos.index = tagContext.endIndex;
|
|
318
316
|
if (this.evaluateCondition(tagContext.contents, entity)) {
|
|
319
317
|
// IF条件が成立する場合はsubに対して再帰呼び出し
|
|
320
|
-
tagContext.status = 10;
|
|
318
|
+
tagContext.status = 10; // 成立(→/*BEGIN*/を使っている場合の判定条件になる)
|
|
319
|
+
// IFの結果自体は他の要素に影響されないので直接resultに還元可能
|
|
321
320
|
result += this.parse(pos, template, entity, tagContext.sub, options);
|
|
322
321
|
}
|
|
323
322
|
else {
|
|
@@ -328,15 +327,16 @@ class SQLBuilder {
|
|
|
328
327
|
break;
|
|
329
328
|
}
|
|
330
329
|
case 'FOR': {
|
|
330
|
+
result += template.substring(pos.index, tagContext.startIndex);
|
|
331
|
+
pos.index = tagContext.endIndex;
|
|
331
332
|
const [bindName, collectionName] = tagContext.contents.split(':').map(a => a.trim());
|
|
332
|
-
const array =
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
if (array) {
|
|
336
|
-
result += template.substring(pos.index, tagContext.startIndex);
|
|
333
|
+
const array = common.getProperty(entity, collectionName);
|
|
334
|
+
if (Array.isArray(array) && array.length) {
|
|
335
|
+
tagContext.status = 10; // 成立(→/*BEGIN*/を使っている場合の判定条件になる)
|
|
337
336
|
for (const value of array) {
|
|
338
337
|
// 再帰呼び出しによりposが進むので、ループのたびにposを戻す必要がある
|
|
339
338
|
pos.index = tagContext.endIndex;
|
|
339
|
+
// FORの結果自体は他の要素に影響されないので直接resultに還元可能
|
|
340
340
|
result += this.parse(pos, template, {
|
|
341
341
|
...entity,
|
|
342
342
|
[bindName]: value
|
|
@@ -345,17 +345,25 @@ class SQLBuilder {
|
|
|
345
345
|
result += '\n';
|
|
346
346
|
}
|
|
347
347
|
}
|
|
348
|
+
else {
|
|
349
|
+
// FORブロックを丸ごとスキップ
|
|
350
|
+
const endTagContext = tagContext.sub[tagContext.sub.length - 1];
|
|
351
|
+
pos.index = endTagContext.endIndex;
|
|
352
|
+
}
|
|
348
353
|
break;
|
|
349
354
|
}
|
|
350
355
|
case 'END': {
|
|
351
|
-
// 2025-04-13 現時点ではBEGINやIFがネストされた場合について期待通りに動作しない
|
|
352
356
|
switch (true) {
|
|
353
|
-
// BEGINの場合、subにIFタグが1つ以上あり、いずれもstatus=10(成功)になっていない
|
|
354
357
|
case tagContext.parent?.type === 'BEGIN'
|
|
355
|
-
&&
|
|
356
|
-
&& !tagContext.parent
|
|
357
|
-
//
|
|
358
|
+
&& tagContext.parent?.sub.some(a => ['IF', 'FOR'].includes(a.type))
|
|
359
|
+
&& !tagContext.parent?.sub.some(a => ['IF', 'FOR'].includes(a.type) && a.status === 10):
|
|
360
|
+
// BEGINに対応するENDの場合
|
|
361
|
+
// ・子要素にIFまたはFORが存在する
|
|
362
|
+
// ・子要素のIFまたはFORにstatus=10(成功)を示すものが1つもない
|
|
358
363
|
case tagContext.parent?.type === 'IF' && tagContext.parent.status !== 10:
|
|
364
|
+
// IFに対応するENDの場合、IFのstatusがstatus=10(成功)になっていない
|
|
365
|
+
case tagContext.parent?.type === 'FOR' && tagContext.parent.status !== 10:
|
|
366
|
+
// FORに対応するENDの場合、FORのstatusがstatus=10(成功)になっていない
|
|
359
367
|
pos.index = tagContext.endIndex;
|
|
360
368
|
return '';
|
|
361
369
|
default:
|
|
@@ -367,7 +375,14 @@ class SQLBuilder {
|
|
|
367
375
|
case 'BIND': {
|
|
368
376
|
result += template.substring(pos.index, tagContext.startIndex);
|
|
369
377
|
pos.index = tagContext.endIndex;
|
|
370
|
-
|
|
378
|
+
// ★ UNKNOWN_TAG 判定
|
|
379
|
+
const hasProperty = Object.prototype.hasOwnProperty.call(entity, tagContext.contents);
|
|
380
|
+
if (!hasProperty) {
|
|
381
|
+
// UNKNOWN_TAG → 何も出力しない
|
|
382
|
+
break;
|
|
383
|
+
}
|
|
384
|
+
const rawValue = common.getProperty(entity, tagContext.contents);
|
|
385
|
+
const value = rawValue === undefined ? null : rawValue;
|
|
371
386
|
switch (options?.bindType) {
|
|
372
387
|
case 'postgres': {
|
|
373
388
|
// PostgreSQL形式の場合、$Nでバインドパラメータを展開
|
|
@@ -437,28 +452,6 @@ class SQLBuilder {
|
|
|
437
452
|
}
|
|
438
453
|
break;
|
|
439
454
|
}
|
|
440
|
-
case 'bigquery': {
|
|
441
|
-
// BigQuery形式の場合、名前付きバインドでバインドパラメータを展開
|
|
442
|
-
if (Array.isArray(value)) {
|
|
443
|
-
// UNNESTを付けないとBigQuery側で正しく配列展開できないケースがある
|
|
444
|
-
result += `UNNEST(@${tagContext.contents})`; // IN UNNEST(@params)
|
|
445
|
-
}
|
|
446
|
-
else {
|
|
447
|
-
result += `@${tagContext.contents}`;
|
|
448
|
-
}
|
|
449
|
-
options.bindParams.push({
|
|
450
|
-
name: tagContext.contents,
|
|
451
|
-
// パラメータ型の指定はなくても、引数の型が適切であればBigQueryが推論してくれるようである
|
|
452
|
-
// TODO: SQLBuilderでカラム型を含めて返せるようにするか、呼び出し元で必要に応じて追加してもらうか、方式を検討する
|
|
453
|
-
// parameterType: {
|
|
454
|
-
// type: type
|
|
455
|
-
// },
|
|
456
|
-
parameterValue: {
|
|
457
|
-
value: value
|
|
458
|
-
}
|
|
459
|
-
});
|
|
460
|
-
break;
|
|
461
|
-
}
|
|
462
455
|
default: {
|
|
463
456
|
// generateSQLの場合
|
|
464
457
|
const escapedValue = this.extractValue(tagContext.contents, entity);
|
|
@@ -574,6 +567,9 @@ class SQLBuilder {
|
|
|
574
567
|
* * 返却する値がboolean型の場合はそのまま返す
|
|
575
568
|
* true
|
|
576
569
|
* false
|
|
570
|
+
* * null/undefinedの場合は'NULL'を返す
|
|
571
|
+
*
|
|
572
|
+
* NULLの扱いを含むため、この関数はgenerateSQLのみで利用する
|
|
577
573
|
*
|
|
578
574
|
* @param {string} property `obj.param1.param2`などのドットで繋いだプロパティ
|
|
579
575
|
* @param {Record<string, any>} entity
|
|
@@ -583,6 +579,9 @@ class SQLBuilder {
|
|
|
583
579
|
*/
|
|
584
580
|
extractValue(property, entity, options) {
|
|
585
581
|
const value = common.getProperty(entity, property);
|
|
582
|
+
if (value == null) {
|
|
583
|
+
return 'NULL';
|
|
584
|
+
}
|
|
586
585
|
let result = '';
|
|
587
586
|
switch (options?.responseType) {
|
|
588
587
|
case 'array':
|
package/lib/sql-builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-builder.js","sourceRoot":"","sources":["../src/sql-builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sql-builder.js","sourceRoot":"","sources":["../src/sql-builder.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digitalwalletcorp/sql-builder",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "This is a library for building SQL",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"type": "git",
|
|
26
26
|
"url": "git+https://github.com/digitalwalletcorp/sql-builder.git"
|
|
27
27
|
},
|
|
28
|
-
"homepage": "https://github.com/digitalwalletcorp/sql-builder
|
|
28
|
+
"homepage": "https://github.com/digitalwalletcorp/sql-builder",
|
|
29
29
|
"bugs": {
|
|
30
30
|
"url": "https://github.com/digitalwalletcorp/sql-builder/issues"
|
|
31
31
|
},
|
package/src/sql-builder.ts
CHANGED
|
@@ -15,35 +15,27 @@ type ExtractValueType<T extends 'string' | 'array' | 'object'>
|
|
|
15
15
|
* SQLite: ?, $name, :name 配列またはオブジェクト
|
|
16
16
|
* Oracle: :name オブジェクト
|
|
17
17
|
* SQL Server: `@name` 配列またはオブジェクト
|
|
18
|
-
* BigQuery: `@name` オブジェクトの配列
|
|
19
18
|
*
|
|
20
19
|
* 以下をサポートする
|
|
21
20
|
* ・$1, $2 (postgres)
|
|
22
21
|
* ・? (mysql) SQLite, SQL Serverもこれで代替可能
|
|
23
22
|
* ・:name (oracle) SQLiteもこれで代替可能
|
|
24
23
|
* ・`@name` (mssql)
|
|
25
|
-
* ・`@name` (bigquery)
|
|
26
24
|
*/
|
|
27
25
|
const dbTypes = [
|
|
28
26
|
'postgres',
|
|
29
27
|
'mysql',
|
|
30
28
|
'oracle',
|
|
31
|
-
'mssql'
|
|
32
|
-
'bigquery'
|
|
29
|
+
'mssql'
|
|
33
30
|
] as const;
|
|
34
31
|
|
|
35
32
|
type BindType = typeof dbTypes[number];
|
|
36
33
|
|
|
37
|
-
// BigQueryのライブラリと依存を持ちたくないのでここで定義
|
|
38
|
-
type BigQueryParameterType = { type: 'STRING' | 'INT64' | 'FLOAT64' | 'BOOL' | 'DATE' | 'DATETIME' | 'TIMESTAMP' | 'ARRAY' | 'STRUCT' };
|
|
39
|
-
type BigQueryParameterTypeValue = { name: string, parameterType?: BigQueryParameterType, parameterValue: { value: any } };
|
|
40
|
-
|
|
41
34
|
type BindParameterType<T extends BindType>
|
|
42
35
|
= T extends 'postgres' ? any[]
|
|
43
36
|
: T extends 'mysql' ? any[]
|
|
44
37
|
: T extends 'oracle' ? Record<string, any>
|
|
45
38
|
: T extends 'mssql' ? Record<string, any>
|
|
46
|
-
: T extends 'bigquery' ? BigQueryParameterTypeValue[]
|
|
47
39
|
: undefined;
|
|
48
40
|
|
|
49
41
|
interface TagContext {
|
|
@@ -160,9 +152,6 @@ export class SQLBuilder {
|
|
|
160
152
|
case 'mssql':
|
|
161
153
|
bindParams = {} as BindParameterType<T>;
|
|
162
154
|
break;
|
|
163
|
-
case 'bigquery':
|
|
164
|
-
bindParams = [] as unknown as BindParameterType<T>;
|
|
165
|
-
break;
|
|
166
155
|
default:
|
|
167
156
|
throw new Error(`Unsupported bind type: ${bt}`);
|
|
168
157
|
}
|
|
@@ -330,7 +319,13 @@ export class SQLBuilder {
|
|
|
330
319
|
result += template.substring(pos.index, tagContext.startIndex);
|
|
331
320
|
pos.index = tagContext.endIndex;
|
|
332
321
|
// BEGINのときは無条件にsubに対して再帰呼び出し
|
|
333
|
-
|
|
322
|
+
const beginBlockResult = this.parse(pos, template, entity, tagContext.sub, options);
|
|
323
|
+
// BEGIN内のIF、FORのいずれかで成立したものがあった場合は結果を出力
|
|
324
|
+
if (tagContext.sub.some(sub =>
|
|
325
|
+
(sub.type === 'IF' || sub.type === 'FOR') && sub.status === 10
|
|
326
|
+
)) {
|
|
327
|
+
result += beginBlockResult;
|
|
328
|
+
}
|
|
334
329
|
break;
|
|
335
330
|
}
|
|
336
331
|
case 'IF': {
|
|
@@ -338,7 +333,8 @@ export class SQLBuilder {
|
|
|
338
333
|
pos.index = tagContext.endIndex;
|
|
339
334
|
if (this.evaluateCondition(tagContext.contents, entity)) {
|
|
340
335
|
// IF条件が成立する場合はsubに対して再帰呼び出し
|
|
341
|
-
tagContext.status = 10;
|
|
336
|
+
tagContext.status = 10; // 成立(→/*BEGIN*/を使っている場合の判定条件になる)
|
|
337
|
+
// IFの結果自体は他の要素に影響されないので直接resultに還元可能
|
|
342
338
|
result += this.parse(pos, template, entity, tagContext.sub, options);
|
|
343
339
|
} else {
|
|
344
340
|
// IF条件が成立しない場合は再帰呼び出しせず、subのENDタグのendIndexをposに設定
|
|
@@ -348,15 +344,16 @@ export class SQLBuilder {
|
|
|
348
344
|
break;
|
|
349
345
|
}
|
|
350
346
|
case 'FOR': {
|
|
347
|
+
result += template.substring(pos.index, tagContext.startIndex);
|
|
348
|
+
pos.index = tagContext.endIndex;
|
|
351
349
|
const [bindName, collectionName] = tagContext.contents.split(':').map(a => a.trim());
|
|
352
|
-
const array =
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
if (array) {
|
|
356
|
-
result += template.substring(pos.index, tagContext.startIndex);
|
|
350
|
+
const array = common.getProperty(entity, collectionName);
|
|
351
|
+
if (Array.isArray(array) && array.length) {
|
|
352
|
+
tagContext.status = 10; // 成立(→/*BEGIN*/を使っている場合の判定条件になる)
|
|
357
353
|
for (const value of array) {
|
|
358
354
|
// 再帰呼び出しによりposが進むので、ループのたびにposを戻す必要がある
|
|
359
355
|
pos.index = tagContext.endIndex;
|
|
356
|
+
// FORの結果自体は他の要素に影響されないので直接resultに還元可能
|
|
360
357
|
result += this.parse(pos, template, {
|
|
361
358
|
...entity,
|
|
362
359
|
[bindName]: value
|
|
@@ -364,18 +361,25 @@ export class SQLBuilder {
|
|
|
364
361
|
// FORループするときは各行で改行する
|
|
365
362
|
result += '\n';
|
|
366
363
|
}
|
|
364
|
+
} else {
|
|
365
|
+
// FORブロックを丸ごとスキップ
|
|
366
|
+
const endTagContext = tagContext.sub[tagContext.sub.length - 1];
|
|
367
|
+
pos.index = endTagContext.endIndex;
|
|
367
368
|
}
|
|
368
369
|
break;
|
|
369
370
|
}
|
|
370
371
|
case 'END': {
|
|
371
|
-
// 2025-04-13 現時点ではBEGINやIFがネストされた場合について期待通りに動作しない
|
|
372
372
|
switch (true) {
|
|
373
|
-
// BEGINの場合、subにIFタグが1つ以上あり、いずれもstatus=10(成功)になっていない
|
|
374
373
|
case tagContext.parent?.type === 'BEGIN'
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
374
|
+
&& tagContext.parent?.sub.some(a => ['IF', 'FOR'].includes(a.type))
|
|
375
|
+
&& !tagContext.parent?.sub.some(a => ['IF', 'FOR'].includes(a.type) && a.status === 10):
|
|
376
|
+
// BEGINに対応するENDの場合
|
|
377
|
+
// ・子要素にIFまたはFORが存在する
|
|
378
|
+
// ・子要素のIFまたはFORにstatus=10(成功)を示すものが1つもない
|
|
378
379
|
case tagContext.parent?.type === 'IF' && tagContext.parent.status !== 10:
|
|
380
|
+
// IFに対応するENDの場合、IFのstatusがstatus=10(成功)になっていない
|
|
381
|
+
case tagContext.parent?.type === 'FOR' && tagContext.parent.status !== 10:
|
|
382
|
+
// FORに対応するENDの場合、FORのstatusがstatus=10(成功)になっていない
|
|
379
383
|
pos.index = tagContext.endIndex;
|
|
380
384
|
return '';
|
|
381
385
|
default:
|
|
@@ -387,7 +391,14 @@ export class SQLBuilder {
|
|
|
387
391
|
case 'BIND': {
|
|
388
392
|
result += template.substring(pos.index, tagContext.startIndex);
|
|
389
393
|
pos.index = tagContext.endIndex;
|
|
390
|
-
|
|
394
|
+
// ★ UNKNOWN_TAG 判定
|
|
395
|
+
const hasProperty = Object.prototype.hasOwnProperty.call(entity, tagContext.contents);
|
|
396
|
+
if (!hasProperty) {
|
|
397
|
+
// UNKNOWN_TAG → 何も出力しない
|
|
398
|
+
break;
|
|
399
|
+
}
|
|
400
|
+
const rawValue = common.getProperty(entity, tagContext.contents);
|
|
401
|
+
const value = rawValue === undefined ? null : rawValue;
|
|
391
402
|
switch (options?.bindType) {
|
|
392
403
|
case 'postgres': {
|
|
393
404
|
// PostgreSQL形式の場合、$Nでバインドパラメータを展開
|
|
@@ -453,27 +464,6 @@ export class SQLBuilder {
|
|
|
453
464
|
}
|
|
454
465
|
break;
|
|
455
466
|
}
|
|
456
|
-
case 'bigquery': {
|
|
457
|
-
// BigQuery形式の場合、名前付きバインドでバインドパラメータを展開
|
|
458
|
-
if (Array.isArray(value)) {
|
|
459
|
-
// UNNESTを付けないとBigQuery側で正しく配列展開できないケースがある
|
|
460
|
-
result += `UNNEST(@${tagContext.contents})`; // IN UNNEST(@params)
|
|
461
|
-
} else {
|
|
462
|
-
result += `@${tagContext.contents}`;
|
|
463
|
-
}
|
|
464
|
-
(options.bindParams as BigQueryParameterTypeValue[]).push({
|
|
465
|
-
name: tagContext.contents,
|
|
466
|
-
// パラメータ型の指定はなくても、引数の型が適切であればBigQueryが推論してくれるようである
|
|
467
|
-
// TODO: SQLBuilderでカラム型を含めて返せるようにするか、呼び出し元で必要に応じて追加してもらうか、方式を検討する
|
|
468
|
-
// parameterType: {
|
|
469
|
-
// type: type
|
|
470
|
-
// },
|
|
471
|
-
parameterValue: {
|
|
472
|
-
value: value
|
|
473
|
-
}
|
|
474
|
-
});
|
|
475
|
-
break;
|
|
476
|
-
}
|
|
477
467
|
default: {
|
|
478
468
|
// generateSQLの場合
|
|
479
469
|
const escapedValue = this.extractValue(tagContext.contents, entity);
|
|
@@ -591,6 +581,9 @@ export class SQLBuilder {
|
|
|
591
581
|
* * 返却する値がboolean型の場合はそのまま返す
|
|
592
582
|
* true
|
|
593
583
|
* false
|
|
584
|
+
* * null/undefinedの場合は'NULL'を返す
|
|
585
|
+
*
|
|
586
|
+
* NULLの扱いを含むため、この関数はgenerateSQLのみで利用する
|
|
594
587
|
*
|
|
595
588
|
* @param {string} property `obj.param1.param2`などのドットで繋いだプロパティ
|
|
596
589
|
* @param {Record<string, any>} entity
|
|
@@ -602,6 +595,9 @@ export class SQLBuilder {
|
|
|
602
595
|
responseType?: T
|
|
603
596
|
}): ExtractValueType<T> {
|
|
604
597
|
const value = common.getProperty(entity, property);
|
|
598
|
+
if (value == null) {
|
|
599
|
+
return 'NULL' as ExtractValueType<T>;
|
|
600
|
+
}
|
|
605
601
|
let result = '';
|
|
606
602
|
switch (options?.responseType) {
|
|
607
603
|
case 'array':
|