@simplysm/orm-common 13.0.100 → 14.0.4
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 +90 -147
- package/dist/create-db-context.d.ts +10 -10
- package/dist/create-db-context.js +312 -276
- package/dist/create-db-context.js.map +1 -6
- package/dist/ddl/column-ddl.d.ts +4 -4
- package/dist/ddl/column-ddl.js +41 -35
- package/dist/ddl/column-ddl.js.map +1 -6
- package/dist/ddl/initialize.d.ts +17 -17
- package/dist/ddl/initialize.js +200 -142
- package/dist/ddl/initialize.js.map +1 -6
- package/dist/ddl/relation-ddl.d.ts +6 -6
- package/dist/ddl/relation-ddl.js +55 -48
- package/dist/ddl/relation-ddl.js.map +1 -6
- package/dist/ddl/schema-ddl.d.ts +4 -4
- package/dist/ddl/schema-ddl.js +21 -15
- package/dist/ddl/schema-ddl.js.map +1 -6
- package/dist/ddl/table-ddl.d.ts +20 -20
- package/dist/ddl/table-ddl.js +139 -93
- package/dist/ddl/table-ddl.js.map +1 -6
- package/dist/define-db-context.js +10 -13
- package/dist/define-db-context.js.map +1 -6
- package/dist/errors/db-transaction-error.d.ts +15 -15
- package/dist/errors/db-transaction-error.d.ts.map +1 -1
- package/dist/errors/db-transaction-error.js +53 -19
- package/dist/errors/db-transaction-error.js.map +1 -6
- package/dist/exec/executable.d.ts +23 -23
- package/dist/exec/executable.js +94 -40
- package/dist/exec/executable.js.map +1 -6
- package/dist/exec/queryable.d.ts +97 -97
- package/dist/exec/queryable.js +1310 -1204
- package/dist/exec/queryable.js.map +1 -6
- package/dist/exec/search-parser.d.ts +31 -31
- package/dist/exec/search-parser.d.ts.map +1 -1
- package/dist/exec/search-parser.js +158 -59
- package/dist/exec/search-parser.js.map +1 -6
- package/dist/expr/expr-unit.d.ts +4 -4
- package/dist/expr/expr-unit.js +24 -18
- package/dist/expr/expr-unit.js.map +1 -6
- package/dist/expr/expr.d.ts +108 -108
- package/dist/expr/expr.js +1872 -1844
- package/dist/expr/expr.js.map +1 -6
- package/dist/index.js +23 -1
- package/dist/index.js.map +1 -6
- package/dist/models/system-migration.js +7 -7
- package/dist/models/system-migration.js.map +1 -6
- package/dist/query-builder/base/expr-renderer-base.d.ts +10 -10
- package/dist/query-builder/base/expr-renderer-base.js +27 -21
- package/dist/query-builder/base/expr-renderer-base.js.map +1 -6
- package/dist/query-builder/base/query-builder-base.d.ts +21 -21
- package/dist/query-builder/base/query-builder-base.d.ts.map +1 -1
- package/dist/query-builder/base/query-builder-base.js +90 -80
- package/dist/query-builder/base/query-builder-base.js.map +1 -6
- package/dist/query-builder/mssql/mssql-expr-renderer.d.ts +5 -5
- package/dist/query-builder/mssql/mssql-expr-renderer.d.ts.map +1 -1
- package/dist/query-builder/mssql/mssql-expr-renderer.js +447 -420
- package/dist/query-builder/mssql/mssql-expr-renderer.js.map +1 -6
- package/dist/query-builder/mssql/mssql-query-builder.d.ts +2 -2
- package/dist/query-builder/mssql/mssql-query-builder.d.ts.map +1 -1
- package/dist/query-builder/mssql/mssql-query-builder.js +483 -443
- package/dist/query-builder/mssql/mssql-query-builder.js.map +1 -6
- package/dist/query-builder/mysql/mysql-expr-renderer.d.ts +5 -5
- package/dist/query-builder/mysql/mysql-expr-renderer.d.ts.map +1 -1
- package/dist/query-builder/mysql/mysql-expr-renderer.js +451 -419
- package/dist/query-builder/mysql/mysql-expr-renderer.js.map +1 -6
- package/dist/query-builder/mysql/mysql-query-builder.d.ts +10 -10
- package/dist/query-builder/mysql/mysql-query-builder.d.ts.map +1 -1
- package/dist/query-builder/mysql/mysql-query-builder.js +570 -479
- package/dist/query-builder/mysql/mysql-query-builder.js.map +1 -6
- package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts +5 -5
- package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts.map +1 -1
- package/dist/query-builder/postgresql/postgresql-expr-renderer.js +449 -422
- package/dist/query-builder/postgresql/postgresql-expr-renderer.js.map +1 -6
- package/dist/query-builder/postgresql/postgresql-query-builder.d.ts +8 -8
- package/dist/query-builder/postgresql/postgresql-query-builder.d.ts.map +1 -1
- package/dist/query-builder/postgresql/postgresql-query-builder.js +511 -460
- package/dist/query-builder/postgresql/postgresql-query-builder.js.map +1 -6
- package/dist/query-builder/query-builder.d.ts +1 -1
- package/dist/query-builder/query-builder.js +13 -13
- package/dist/query-builder/query-builder.js.map +1 -6
- package/dist/schema/factory/column-builder.d.ts +84 -84
- package/dist/schema/factory/column-builder.js +248 -185
- package/dist/schema/factory/column-builder.js.map +1 -6
- package/dist/schema/factory/index-builder.d.ts +38 -38
- package/dist/schema/factory/index-builder.js +144 -85
- package/dist/schema/factory/index-builder.js.map +1 -6
- package/dist/schema/factory/relation-builder.d.ts +99 -99
- package/dist/schema/factory/relation-builder.d.ts.map +1 -1
- package/dist/schema/factory/relation-builder.js +274 -136
- package/dist/schema/factory/relation-builder.js.map +1 -6
- package/dist/schema/procedure-builder.d.ts +51 -51
- package/dist/schema/procedure-builder.d.ts.map +1 -1
- package/dist/schema/procedure-builder.js +205 -131
- package/dist/schema/procedure-builder.js.map +1 -6
- package/dist/schema/table-builder.d.ts +55 -55
- package/dist/schema/table-builder.d.ts.map +1 -1
- package/dist/schema/table-builder.js +274 -205
- package/dist/schema/table-builder.js.map +1 -6
- package/dist/schema/view-builder.d.ts +44 -44
- package/dist/schema/view-builder.d.ts.map +1 -1
- package/dist/schema/view-builder.js +189 -116
- package/dist/schema/view-builder.js.map +1 -6
- package/dist/types/column.d.ts +21 -21
- package/dist/types/column.js +60 -30
- package/dist/types/column.js.map +1 -6
- package/dist/types/db-context-def.d.ts +9 -9
- package/dist/types/db-context-def.js +2 -1
- package/dist/types/db-context-def.js.map +1 -6
- package/dist/types/db.d.ts +47 -47
- package/dist/types/db.js +15 -5
- package/dist/types/db.js.map +1 -6
- package/dist/types/expr.d.ts +81 -81
- package/dist/types/expr.d.ts.map +1 -1
- package/dist/types/expr.js +3 -1
- package/dist/types/expr.js.map +1 -6
- package/dist/types/query-def.d.ts +46 -46
- package/dist/types/query-def.d.ts.map +1 -1
- package/dist/types/query-def.js +31 -24
- package/dist/types/query-def.js.map +1 -6
- package/dist/utils/result-parser.d.ts +11 -11
- package/dist/utils/result-parser.js +362 -221
- package/dist/utils/result-parser.js.map +1 -6
- package/docs/core.md +117 -145
- package/docs/expression.md +186 -203
- package/docs/query-builder.md +75 -42
- package/docs/queryable.md +189 -151
- package/docs/schema-builders.md +172 -283
- package/docs/types.md +229 -173
- package/package.json +7 -5
- package/src/create-db-context.ts +31 -31
- package/src/ddl/column-ddl.ts +4 -4
- package/src/ddl/initialize.ts +38 -38
- package/src/ddl/relation-ddl.ts +6 -6
- package/src/ddl/schema-ddl.ts +4 -4
- package/src/ddl/table-ddl.ts +24 -24
- package/src/errors/db-transaction-error.ts +13 -13
- package/src/exec/executable.ts +25 -25
- package/src/exec/queryable.ts +152 -152
- package/src/exec/search-parser.ts +50 -50
- package/src/expr/expr-unit.ts +4 -4
- package/src/expr/expr.ts +118 -118
- package/src/index.ts +8 -8
- package/src/models/system-migration.ts +1 -1
- package/src/query-builder/base/expr-renderer-base.ts +21 -21
- package/src/query-builder/base/query-builder-base.ts +33 -33
- package/src/query-builder/mssql/mssql-expr-renderer.ts +28 -28
- package/src/query-builder/mssql/mssql-query-builder.ts +37 -37
- package/src/query-builder/mysql/mysql-expr-renderer.ts +29 -29
- package/src/query-builder/mysql/mysql-query-builder.ts +70 -70
- package/src/query-builder/postgresql/postgresql-expr-renderer.ts +22 -22
- package/src/query-builder/postgresql/postgresql-query-builder.ts +54 -54
- package/src/query-builder/query-builder.ts +1 -1
- package/src/schema/factory/column-builder.ts +86 -86
- package/src/schema/factory/index-builder.ts +38 -38
- package/src/schema/factory/relation-builder.ts +102 -102
- package/src/schema/procedure-builder.ts +52 -52
- package/src/schema/table-builder.ts +56 -56
- package/src/schema/view-builder.ts +47 -47
- package/src/types/column.ts +24 -24
- package/src/types/db-context-def.ts +15 -15
- package/src/types/db.ts +50 -50
- package/src/types/expr.ts +103 -103
- package/src/types/query-def.ts +50 -50
- package/src/utils/result-parser.ts +88 -88
- package/docs/utilities.md +0 -27
- package/tests/db-context/create-db-context.spec.ts +0 -193
- package/tests/db-context/define-db-context.spec.ts +0 -17
- package/tests/ddl/basic.expected.ts +0 -341
- package/tests/ddl/basic.spec.ts +0 -557
- package/tests/ddl/column-builder.expected.ts +0 -310
- package/tests/ddl/column-builder.spec.ts +0 -525
- package/tests/ddl/index-builder.expected.ts +0 -38
- package/tests/ddl/index-builder.spec.ts +0 -148
- package/tests/ddl/procedure-builder.expected.ts +0 -52
- package/tests/ddl/procedure-builder.spec.ts +0 -128
- package/tests/ddl/relation-builder.expected.ts +0 -36
- package/tests/ddl/relation-builder.spec.ts +0 -171
- package/tests/ddl/table-builder.expected.ts +0 -113
- package/tests/ddl/table-builder.spec.ts +0 -399
- package/tests/ddl/view-builder.expected.ts +0 -38
- package/tests/ddl/view-builder.spec.ts +0 -116
- package/tests/dml/delete.expected.ts +0 -96
- package/tests/dml/delete.spec.ts +0 -127
- package/tests/dml/insert.expected.ts +0 -192
- package/tests/dml/insert.spec.ts +0 -210
- package/tests/dml/update.expected.ts +0 -176
- package/tests/dml/update.spec.ts +0 -222
- package/tests/dml/upsert.expected.ts +0 -215
- package/tests/dml/upsert.spec.ts +0 -190
- package/tests/errors/queryable-errors.spec.ts +0 -126
- package/tests/escape.spec.ts +0 -59
- package/tests/examples/pivot.expected.ts +0 -211
- package/tests/examples/pivot.spec.ts +0 -200
- package/tests/examples/sampling.expected.ts +0 -69
- package/tests/examples/sampling.spec.ts +0 -42
- package/tests/examples/unpivot.expected.ts +0 -120
- package/tests/examples/unpivot.spec.ts +0 -161
- package/tests/exec/search-parser.spec.ts +0 -267
- package/tests/executable/basic.expected.ts +0 -18
- package/tests/executable/basic.spec.ts +0 -54
- package/tests/expr/comparison.expected.ts +0 -282
- package/tests/expr/comparison.spec.ts +0 -334
- package/tests/expr/conditional.expected.ts +0 -134
- package/tests/expr/conditional.spec.ts +0 -249
- package/tests/expr/date.expected.ts +0 -332
- package/tests/expr/date.spec.ts +0 -459
- package/tests/expr/math.expected.ts +0 -62
- package/tests/expr/math.spec.ts +0 -59
- package/tests/expr/string.expected.ts +0 -218
- package/tests/expr/string.spec.ts +0 -300
- package/tests/expr/utility.expected.ts +0 -147
- package/tests/expr/utility.spec.ts +0 -155
- package/tests/select/basic.expected.ts +0 -322
- package/tests/select/basic.spec.ts +0 -433
- package/tests/select/filter.expected.ts +0 -357
- package/tests/select/filter.spec.ts +0 -954
- package/tests/select/group.expected.ts +0 -169
- package/tests/select/group.spec.ts +0 -159
- package/tests/select/join.expected.ts +0 -582
- package/tests/select/join.spec.ts +0 -692
- package/tests/select/order.expected.ts +0 -150
- package/tests/select/order.spec.ts +0 -140
- package/tests/select/recursive-cte.expected.ts +0 -244
- package/tests/select/recursive-cte.spec.ts +0 -514
- package/tests/select/result-meta.spec.ts +0 -270
- package/tests/select/subquery.expected.ts +0 -363
- package/tests/select/subquery.spec.ts +0 -441
- package/tests/select/view.expected.ts +0 -155
- package/tests/select/view.spec.ts +0 -235
- package/tests/select/window.expected.ts +0 -345
- package/tests/select/window.spec.ts +0 -433
- package/tests/setup/MockExecutor.ts +0 -18
- package/tests/setup/TestDbContext.ts +0 -59
- package/tests/setup/models/Company.ts +0 -13
- package/tests/setup/models/Employee.ts +0 -10
- package/tests/setup/models/MonthlySales.ts +0 -11
- package/tests/setup/models/Post.ts +0 -16
- package/tests/setup/models/Sales.ts +0 -10
- package/tests/setup/models/User.ts +0 -19
- package/tests/setup/procedure/GetAllUsers.ts +0 -9
- package/tests/setup/procedure/GetUserById.ts +0 -12
- package/tests/setup/test-utils.ts +0 -72
- package/tests/setup/views/ActiveUsers.ts +0 -8
- package/tests/setup/views/UserSummary.ts +0 -11
- package/tests/types/nullable-queryable-record.spec.ts +0 -97
- package/tests/utils/result-parser-perf.spec.ts +0 -143
- package/tests/utils/result-parser.spec.ts +0 -667
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 검색 쿼리 파싱 결과 (LIKE 패턴)
|
|
3
3
|
*/
|
|
4
4
|
export interface ParsedSearchQuery {
|
|
5
|
-
/**
|
|
5
|
+
/** 일반 검색어 (OR 조건) - LIKE 패턴 */
|
|
6
6
|
or: string[];
|
|
7
|
-
/**
|
|
7
|
+
/** 필수 검색어 (AND 조건, + 접두사 또는 따옴표) - LIKE 패턴 */
|
|
8
8
|
must: string[];
|
|
9
|
-
/**
|
|
9
|
+
/** 제외 검색어 (NOT 조건, - 접두사) - LIKE 패턴 */
|
|
10
10
|
not: string[];
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
//
|
|
13
|
+
// 이스케이프 시퀀스를 플레이스홀더로 치환
|
|
14
14
|
const ESC = {
|
|
15
15
|
BACKSLASH: "\x00BACKSLASH\x00",
|
|
16
16
|
ASTERISK: "\x00ASTERISK\x00",
|
|
@@ -21,38 +21,38 @@ const ESC = {
|
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* 검색 쿼리 문자열을 파싱하여 SQL LIKE 패턴으로 변환한다.
|
|
25
25
|
*
|
|
26
|
-
* ##
|
|
26
|
+
* ## 검색 구문
|
|
27
27
|
*
|
|
28
|
-
* |
|
|
28
|
+
* | 구문 | 의미 | 예시 |
|
|
29
29
|
* |--------|---------|---------|
|
|
30
|
-
* | `term1 term2` | OR (
|
|
31
|
-
* | `+term` |
|
|
32
|
-
* | `-term` |
|
|
33
|
-
* | `"exact phrase"` |
|
|
34
|
-
* | `*` |
|
|
30
|
+
* | `term1 term2` | OR (하나 이상 일치) | `apple banana` |
|
|
31
|
+
* | `+term` | 필수 포함 (AND) | `+apple +banana` |
|
|
32
|
+
* | `-term` | 제외 (NOT) | `apple -banana` |
|
|
33
|
+
* | `"exact phrase"` | 정확한 구문 일치 (필수) | `"맛있는 과일"` |
|
|
34
|
+
* | `*` | 와일드카드 | `app*` → `app%` |
|
|
35
35
|
*
|
|
36
|
-
* ##
|
|
36
|
+
* ## 이스케이프 시퀀스
|
|
37
37
|
*
|
|
38
|
-
* |
|
|
38
|
+
* | 입력 | 의미 |
|
|
39
39
|
* |-------|---------|
|
|
40
|
-
* | `\\` |
|
|
41
|
-
* | `\*` |
|
|
42
|
-
* | `\%` |
|
|
43
|
-
* | `\"` |
|
|
44
|
-
* | `\+` |
|
|
45
|
-
* | `\-` |
|
|
40
|
+
* | `\\` | 리터럴 `\` |
|
|
41
|
+
* | `\*` | 리터럴 `*` |
|
|
42
|
+
* | `\%` | 리터럴 `%` |
|
|
43
|
+
* | `\"` | 리터럴 `"` |
|
|
44
|
+
* | `\+` | 리터럴 `+` |
|
|
45
|
+
* | `\-` | 리터럴 `-` |
|
|
46
46
|
*
|
|
47
|
-
* ##
|
|
47
|
+
* ## 특수 케이스
|
|
48
48
|
*
|
|
49
|
-
* -
|
|
49
|
+
* - 닫히지 않은 따옴표(`"text`)는 따옴표를 포함한 일반 텍스트로 처리된다.
|
|
50
50
|
*
|
|
51
|
-
* ##
|
|
51
|
+
* ## 예시
|
|
52
52
|
*
|
|
53
53
|
* ```typescript
|
|
54
54
|
* parseSearchQuery('apple "delicious fruit" -banana +strawberry')
|
|
55
|
-
* //
|
|
55
|
+
* // 결과:
|
|
56
56
|
* // {
|
|
57
57
|
* // or: ["%apple%"],
|
|
58
58
|
* // must: ["%delicious fruit%", "%strawberry%"],
|
|
@@ -60,24 +60,24 @@ const ESC = {
|
|
|
60
60
|
* // }
|
|
61
61
|
*
|
|
62
62
|
* parseSearchQuery('app* test')
|
|
63
|
-
* //
|
|
63
|
+
* // 결과:
|
|
64
64
|
* // {
|
|
65
|
-
* // or: ["app%", "%test%"], // app
|
|
65
|
+
* // or: ["app%", "%test%"], // app*는 "app"으로 시작, test는 부분 문자열 검색
|
|
66
66
|
* // must: [],
|
|
67
67
|
* // not: []
|
|
68
68
|
* // }
|
|
69
69
|
*
|
|
70
|
-
* parseSearchQuery('app\\*test') //
|
|
71
|
-
* //
|
|
70
|
+
* parseSearchQuery('app\\*test') // 이스케이프된 *
|
|
71
|
+
* // 결과:
|
|
72
72
|
* // {
|
|
73
|
-
* // or: ["%app*test%"], //
|
|
73
|
+
* // or: ["%app*test%"], // 리터럴 *
|
|
74
74
|
* // must: [],
|
|
75
75
|
* // not: []
|
|
76
76
|
* // }
|
|
77
77
|
* ```
|
|
78
78
|
*
|
|
79
|
-
* @param searchText
|
|
80
|
-
* @returns
|
|
79
|
+
* @param searchText 검색 쿼리 문자열
|
|
80
|
+
* @returns 파싱된 검색 쿼리 객체 (LIKE 패턴)
|
|
81
81
|
*/
|
|
82
82
|
export function parseSearchQuery(searchText: string): ParsedSearchQuery {
|
|
83
83
|
const result: ParsedSearchQuery = {
|
|
@@ -98,7 +98,7 @@ export function parseSearchQuery(searchText: string): ParsedSearchQuery {
|
|
|
98
98
|
.replace(/\\\+/g, ESC.PLUS)
|
|
99
99
|
.replace(/\\-/g, ESC.MINUS);
|
|
100
100
|
|
|
101
|
-
//
|
|
101
|
+
// 따옴표 구간 추출
|
|
102
102
|
const quotedRegex = /([+-]?)"([^"]*)"/g;
|
|
103
103
|
let match: RegExpExecArray | null;
|
|
104
104
|
|
|
@@ -115,21 +115,21 @@ export function parseSearchQuery(searchText: string): ParsedSearchQuery {
|
|
|
115
115
|
} else if (prefix === "-") {
|
|
116
116
|
result.not.push(pattern);
|
|
117
117
|
} else {
|
|
118
|
-
//
|
|
118
|
+
// 따옴표 텍스트는 must로 처리 (정확한 일치 = 필수)
|
|
119
119
|
result.must.push(pattern);
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
//
|
|
123
|
+
// 따옴표 구간 제거
|
|
124
124
|
processed = processed.replace(/[+-]?"[^"]*"/g, " ");
|
|
125
125
|
|
|
126
|
-
//
|
|
126
|
+
// 공백으로 토큰 분리
|
|
127
127
|
const tokens = processed.split(/\s+/).filter((t) => t.length > 0);
|
|
128
128
|
|
|
129
129
|
for (let token of tokens) {
|
|
130
130
|
let targetArray = result.or;
|
|
131
131
|
|
|
132
|
-
//
|
|
132
|
+
// + 또는 - 접두사 처리
|
|
133
133
|
if (token.startsWith("+")) {
|
|
134
134
|
targetArray = result.must;
|
|
135
135
|
token = token.slice(1);
|
|
@@ -148,32 +148,32 @@ export function parseSearchQuery(searchText: string): ParsedSearchQuery {
|
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
/**
|
|
151
|
-
*
|
|
151
|
+
* 검색어를 SQL LIKE 패턴으로 변환 (내부 함수)
|
|
152
152
|
*
|
|
153
|
-
*
|
|
154
|
-
* - `apple` (
|
|
155
|
-
* - `apple*` → `apple%` (
|
|
156
|
-
* - `*apple` → `%apple` (
|
|
157
|
-
* - `*apple*` → `%apple%` (
|
|
158
|
-
* - `a*ple` → `a%ple` (
|
|
153
|
+
* 와일드카드 규칙:
|
|
154
|
+
* - `apple` (와일드카드 없음) → `%apple%` (부분 문자열 검색, 기본값)
|
|
155
|
+
* - `apple*` → `apple%` (시작 일치)
|
|
156
|
+
* - `*apple` → `%apple` (끝 일치)
|
|
157
|
+
* - `*apple*` → `%apple%` (명시적 부분 문자열)
|
|
158
|
+
* - `a*ple` → `a%ple` (중간 일치)
|
|
159
159
|
*/
|
|
160
160
|
function termToLikePattern(term: string): string {
|
|
161
|
-
//
|
|
161
|
+
// 와일드카드 *를 임시 마커로 변환 (이스케이프된 것은 이미 ESC.ASTERISK로 처리됨)
|
|
162
162
|
const WILDCARD = "\x01WILDCARD\x01";
|
|
163
163
|
const hasWildcard = term.includes("*");
|
|
164
164
|
let pattern = term.replace(/\*/g, WILDCARD);
|
|
165
165
|
|
|
166
|
-
//
|
|
166
|
+
// SQL LIKE 특수 문자 이스케이프 (\ → \\, % → \%, _ → \_, [ → \[)
|
|
167
167
|
pattern = pattern
|
|
168
168
|
.replace(/\\/g, "\\\\")
|
|
169
169
|
.replace(/%/g, "\\%")
|
|
170
170
|
.replace(/_/g, "\\_")
|
|
171
171
|
.replace(/\[/g, "\\[");
|
|
172
172
|
|
|
173
|
-
//
|
|
173
|
+
// 와일드카드 마커 → % (SQL 와일드카드)로 변환
|
|
174
174
|
pattern = pattern.replaceAll(WILDCARD, "%");
|
|
175
175
|
|
|
176
|
-
//
|
|
176
|
+
// 이스케이프 플레이스홀더 복원
|
|
177
177
|
pattern = pattern
|
|
178
178
|
.replaceAll(ESC.BACKSLASH, "\\\\") // \\ → SQL \\
|
|
179
179
|
.replaceAll(ESC.ASTERISK, "*") // \* → literal * (not special in SQL)
|
|
@@ -182,8 +182,8 @@ function termToLikePattern(term: string): string {
|
|
|
182
182
|
.replaceAll(ESC.PLUS, "+")
|
|
183
183
|
.replaceAll(ESC.MINUS, "-");
|
|
184
184
|
|
|
185
|
-
//
|
|
186
|
-
//
|
|
185
|
+
// 와일드카드가 없으면 양쪽에 % 추가 (기본 부분 문자열 검색)
|
|
186
|
+
// 와일드카드가 있으면 사용자가 지정한 패턴 그대로 사용
|
|
187
187
|
if (hasWildcard) {
|
|
188
188
|
return pattern;
|
|
189
189
|
}
|
package/src/expr/expr-unit.ts
CHANGED
|
@@ -2,8 +2,8 @@ import type { ColumnPrimitive, ColumnPrimitiveStr } from "../types/column";
|
|
|
2
2
|
import type { Expr, WhereExpr } from "../types/expr";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* 타입 안전 표현식 래퍼
|
|
6
|
+
* TypeScript 제네릭을 사용하여 표현식 반환 타입을 추적한다
|
|
7
7
|
*/
|
|
8
8
|
export class ExprUnit<TPrimitive extends ColumnPrimitive> {
|
|
9
9
|
readonly $infer!: TPrimitive;
|
|
@@ -19,13 +19,13 @@ export class ExprUnit<TPrimitive extends ColumnPrimitive> {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* WHERE 절용 표현식 래퍼
|
|
23
23
|
*/
|
|
24
24
|
export class WhereExprUnit {
|
|
25
25
|
constructor(readonly expr: WhereExpr) {}
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
29
|
+
* ExprUnit 또는 리터럴 값을 받는 입력 타입
|
|
30
30
|
*/
|
|
31
31
|
export type ExprInput<TPrimitive extends ColumnPrimitive> = ExprUnit<TPrimitive> | TPrimitive;
|