@simplysm/orm-common 13.0.68 → 13.0.70
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 +54 -1447
- package/dist/create-db-context.d.ts +10 -10
- package/dist/create-db-context.js +9 -9
- package/dist/create-db-context.js.map +1 -1
- package/dist/ddl/column-ddl.d.ts +4 -4
- package/dist/ddl/initialize.d.ts +17 -17
- package/dist/ddl/initialize.js +2 -2
- package/dist/ddl/initialize.js.map +1 -1
- package/dist/ddl/relation-ddl.d.ts +6 -6
- package/dist/ddl/schema-ddl.d.ts +4 -4
- package/dist/ddl/table-ddl.d.ts +24 -24
- package/dist/ddl/table-ddl.js +4 -4
- package/dist/ddl/table-ddl.js.map +1 -1
- package/dist/errors/db-transaction-error.d.ts +15 -15
- package/dist/errors/db-transaction-error.d.ts.map +1 -1
- package/dist/exec/executable.d.ts +23 -23
- package/dist/exec/executable.js +3 -3
- package/dist/exec/executable.js.map +1 -1
- package/dist/exec/queryable.d.ts +160 -160
- package/dist/exec/queryable.js +119 -119
- package/dist/exec/queryable.js.map +1 -1
- package/dist/exec/search-parser.d.ts +37 -37
- package/dist/exec/search-parser.d.ts.map +1 -1
- package/dist/expr/expr-unit.d.ts +4 -4
- package/dist/expr/expr.d.ts +257 -257
- package/dist/expr/expr.js +265 -265
- package/dist/expr/expr.js.map +1 -1
- package/dist/query-builder/base/expr-renderer-base.d.ts +9 -9
- package/dist/query-builder/base/expr-renderer-base.js +2 -2
- package/dist/query-builder/base/expr-renderer-base.js.map +1 -1
- package/dist/query-builder/base/query-builder-base.d.ts +26 -26
- package/dist/query-builder/base/query-builder-base.d.ts.map +1 -1
- package/dist/query-builder/base/query-builder-base.js +22 -22
- package/dist/query-builder/base/query-builder-base.js.map +1 -1
- package/dist/query-builder/mssql/mssql-expr-renderer.d.ts +4 -4
- package/dist/query-builder/mssql/mssql-expr-renderer.d.ts.map +1 -1
- package/dist/query-builder/mssql/mssql-expr-renderer.js +18 -18
- package/dist/query-builder/mssql/mssql-expr-renderer.js.map +1 -1
- 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 +11 -11
- package/dist/query-builder/mssql/mssql-query-builder.js.map +1 -1
- package/dist/query-builder/mysql/mysql-expr-renderer.d.ts +4 -4
- package/dist/query-builder/mysql/mysql-expr-renderer.d.ts.map +1 -1
- package/dist/query-builder/mysql/mysql-expr-renderer.js +17 -17
- package/dist/query-builder/mysql/mysql-expr-renderer.js.map +1 -1
- package/dist/query-builder/mysql/mysql-query-builder.d.ts +8 -8
- package/dist/query-builder/mysql/mysql-query-builder.d.ts.map +1 -1
- package/dist/query-builder/mysql/mysql-query-builder.js +5 -5
- package/dist/query-builder/mysql/mysql-query-builder.js.map +1 -1
- package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts +4 -4
- package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts.map +1 -1
- package/dist/query-builder/postgresql/postgresql-expr-renderer.js +17 -17
- package/dist/query-builder/postgresql/postgresql-expr-renderer.js.map +1 -1
- package/dist/query-builder/postgresql/postgresql-query-builder.d.ts +5 -5
- package/dist/query-builder/postgresql/postgresql-query-builder.d.ts.map +1 -1
- package/dist/query-builder/postgresql/postgresql-query-builder.js +8 -8
- package/dist/query-builder/postgresql/postgresql-query-builder.js.map +1 -1
- package/dist/query-builder/query-builder.d.ts +1 -1
- package/dist/schema/factory/column-builder.d.ts +79 -79
- package/dist/schema/factory/column-builder.js +42 -42
- package/dist/schema/factory/index-builder.d.ts +39 -39
- package/dist/schema/factory/index-builder.js +26 -26
- 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 +38 -38
- package/dist/schema/procedure-builder.d.ts +49 -49
- package/dist/schema/procedure-builder.d.ts.map +1 -1
- package/dist/schema/procedure-builder.js +33 -33
- package/dist/schema/table-builder.d.ts +59 -59
- package/dist/schema/table-builder.d.ts.map +1 -1
- package/dist/schema/table-builder.js +43 -43
- package/dist/schema/view-builder.d.ts +49 -49
- package/dist/schema/view-builder.d.ts.map +1 -1
- package/dist/schema/view-builder.js +32 -32
- package/dist/types/column.d.ts +22 -22
- package/dist/types/column.js +1 -1
- package/dist/types/column.js.map +1 -1
- package/dist/types/db.d.ts +40 -40
- package/dist/types/expr.d.ts +59 -59
- package/dist/types/expr.d.ts.map +1 -1
- package/dist/types/query-def.d.ts +44 -44
- package/dist/types/query-def.d.ts.map +1 -1
- package/dist/utils/result-parser.d.ts +11 -11
- package/dist/utils/result-parser.js +3 -3
- package/dist/utils/result-parser.js.map +1 -1
- package/package.json +5 -5
- package/src/create-db-context.ts +20 -20
- package/src/ddl/column-ddl.ts +4 -4
- package/src/ddl/initialize.ts +259 -259
- package/src/ddl/relation-ddl.ts +89 -89
- package/src/ddl/schema-ddl.ts +4 -4
- package/src/ddl/table-ddl.ts +189 -189
- package/src/errors/db-transaction-error.ts +13 -13
- package/src/exec/executable.ts +25 -25
- package/src/exec/queryable.ts +2033 -2033
- package/src/exec/search-parser.ts +57 -57
- package/src/expr/expr-unit.ts +4 -4
- package/src/expr/expr.ts +2140 -2140
- package/src/query-builder/base/expr-renderer-base.ts +237 -237
- package/src/query-builder/base/query-builder-base.ts +213 -213
- package/src/query-builder/mssql/mssql-expr-renderer.ts +607 -607
- package/src/query-builder/mssql/mssql-query-builder.ts +650 -650
- package/src/query-builder/mysql/mysql-expr-renderer.ts +613 -613
- package/src/query-builder/mysql/mysql-query-builder.ts +759 -759
- package/src/query-builder/postgresql/postgresql-expr-renderer.ts +611 -611
- package/src/query-builder/postgresql/postgresql-query-builder.ts +686 -686
- package/src/query-builder/query-builder.ts +19 -19
- package/src/schema/factory/column-builder.ts +423 -423
- package/src/schema/factory/index-builder.ts +164 -164
- package/src/schema/factory/relation-builder.ts +453 -453
- package/src/schema/procedure-builder.ts +232 -232
- package/src/schema/table-builder.ts +319 -319
- package/src/schema/view-builder.ts +221 -221
- package/src/types/column.ts +188 -188
- package/src/types/db.ts +208 -208
- package/src/types/expr.ts +697 -697
- package/src/types/query-def.ts +513 -513
- package/src/utils/result-parser.ts +458 -458
- package/tests/db-context/create-db-context.spec.ts +224 -0
- package/tests/db-context/define-db-context.spec.ts +68 -0
- package/tests/ddl/basic.expected.ts +341 -0
- package/tests/ddl/basic.spec.ts +714 -0
- package/tests/ddl/column-builder.expected.ts +310 -0
- package/tests/ddl/column-builder.spec.ts +637 -0
- package/tests/ddl/index-builder.expected.ts +38 -0
- package/tests/ddl/index-builder.spec.ts +202 -0
- package/tests/ddl/procedure-builder.expected.ts +52 -0
- package/tests/ddl/procedure-builder.spec.ts +234 -0
- package/tests/ddl/relation-builder.expected.ts +36 -0
- package/tests/ddl/relation-builder.spec.ts +372 -0
- package/tests/ddl/table-builder.expected.ts +113 -0
- package/tests/ddl/table-builder.spec.ts +433 -0
- package/tests/ddl/view-builder.expected.ts +38 -0
- package/tests/ddl/view-builder.spec.ts +176 -0
- package/tests/dml/delete.expected.ts +96 -0
- package/tests/dml/delete.spec.ts +160 -0
- package/tests/dml/insert.expected.ts +192 -0
- package/tests/dml/insert.spec.ts +288 -0
- package/tests/dml/update.expected.ts +176 -0
- package/tests/dml/update.spec.ts +318 -0
- package/tests/dml/upsert.expected.ts +215 -0
- package/tests/dml/upsert.spec.ts +242 -0
- package/tests/errors/queryable-errors.spec.ts +177 -0
- package/tests/escape.spec.ts +100 -0
- package/tests/examples/pivot.expected.ts +211 -0
- package/tests/examples/pivot.spec.ts +533 -0
- package/tests/examples/sampling.expected.ts +69 -0
- package/tests/examples/sampling.spec.ts +104 -0
- package/tests/examples/unpivot.expected.ts +120 -0
- package/tests/examples/unpivot.spec.ts +226 -0
- package/tests/exec/search-parser.spec.ts +283 -0
- package/tests/executable/basic.expected.ts +18 -0
- package/tests/executable/basic.spec.ts +54 -0
- package/tests/expr/comparison.expected.ts +282 -0
- package/tests/expr/comparison.spec.ts +400 -0
- package/tests/expr/conditional.expected.ts +134 -0
- package/tests/expr/conditional.spec.ts +276 -0
- package/tests/expr/date.expected.ts +332 -0
- package/tests/expr/date.spec.ts +526 -0
- package/tests/expr/math.expected.ts +62 -0
- package/tests/expr/math.spec.ts +106 -0
- package/tests/expr/string.expected.ts +218 -0
- package/tests/expr/string.spec.ts +356 -0
- package/tests/expr/utility.expected.ts +147 -0
- package/tests/expr/utility.spec.ts +182 -0
- package/tests/select/basic.expected.ts +322 -0
- package/tests/select/basic.spec.ts +502 -0
- package/tests/select/filter.expected.ts +357 -0
- package/tests/select/filter.spec.ts +1068 -0
- package/tests/select/group.expected.ts +169 -0
- package/tests/select/group.spec.ts +244 -0
- package/tests/select/join.expected.ts +582 -0
- package/tests/select/join.spec.ts +805 -0
- package/tests/select/order.expected.ts +150 -0
- package/tests/select/order.spec.ts +189 -0
- package/tests/select/recursive-cte.expected.ts +244 -0
- package/tests/select/recursive-cte.spec.ts +514 -0
- package/tests/select/result-meta.spec.ts +270 -0
- package/tests/select/subquery.expected.ts +363 -0
- package/tests/select/subquery.spec.ts +537 -0
- package/tests/select/view.expected.ts +155 -0
- package/tests/select/view.spec.ts +235 -0
- package/tests/select/window.expected.ts +345 -0
- package/tests/select/window.spec.ts +618 -0
- package/tests/setup/MockExecutor.ts +18 -0
- package/tests/setup/TestDbContext.ts +59 -0
- package/tests/setup/models/Company.ts +13 -0
- package/tests/setup/models/Employee.ts +10 -0
- package/tests/setup/models/MonthlySales.ts +11 -0
- package/tests/setup/models/Post.ts +16 -0
- package/tests/setup/models/Sales.ts +10 -0
- package/tests/setup/models/User.ts +19 -0
- package/tests/setup/procedure/GetAllUsers.ts +9 -0
- package/tests/setup/procedure/GetUserById.ts +12 -0
- package/tests/setup/test-utils.ts +72 -0
- package/tests/setup/views/ActiveUsers.ts +8 -0
- package/tests/setup/views/UserSummary.ts +11 -0
- package/tests/types/nullable-queryable-record.spec.ts +145 -0
- package/tests/utils/result-parser-perf.spec.ts +210 -0
- package/tests/utils/result-parser.spec.ts +701 -0
- package/docs/expressions.md +0 -172
- package/docs/queries.md +0 -444
- package/docs/schema.md +0 -245
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Search query parsing result (LIKE pattern)
|
|
3
3
|
*/
|
|
4
4
|
export interface ParsedSearchQuery {
|
|
5
|
-
/**
|
|
5
|
+
/** General search terms (OR condition) - LIKE pattern */
|
|
6
6
|
or: string[];
|
|
7
|
-
/**
|
|
7
|
+
/** Required search terms (AND condition, + prefix or quotes) - LIKE pattern */
|
|
8
8
|
must: string[];
|
|
9
|
-
/**
|
|
9
|
+
/** Excluded search terms (NOT condition, - prefix) - LIKE pattern */
|
|
10
10
|
not: string[];
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
//
|
|
13
|
+
// Replace escape sequences with placeholders
|
|
14
14
|
const ESC = {
|
|
15
15
|
BACKSLASH: "\x00BACKSLASH\x00",
|
|
16
16
|
ASTERISK: "\x00ASTERISK\x00",
|
|
@@ -21,63 +21,63 @@ const ESC = {
|
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* Parse search query string and convert to SQL LIKE pattern.
|
|
25
25
|
*
|
|
26
|
-
* ##
|
|
26
|
+
* ## Search Syntax
|
|
27
27
|
*
|
|
28
|
-
* |
|
|
29
|
-
*
|
|
30
|
-
* | `term1 term2` | OR (
|
|
31
|
-
* | `+term` |
|
|
32
|
-
* | `-term` |
|
|
33
|
-
* | `"exact phrase"` |
|
|
34
|
-
* | `*` |
|
|
28
|
+
* | Syntax | Meaning | Example |
|
|
29
|
+
* |--------|---------|---------|
|
|
30
|
+
* | `term1 term2` | OR (one of them) | `apple banana` |
|
|
31
|
+
* | `+term` | Required (AND) | `+apple +banana` |
|
|
32
|
+
* | `-term` | Excluded (NOT) | `apple -banana` |
|
|
33
|
+
* | `"exact phrase"` | Exact match (required) | `"delicious fruit"` |
|
|
34
|
+
* | `*` | Wildcard | `app*` → `app%` |
|
|
35
35
|
*
|
|
36
|
-
* ##
|
|
36
|
+
* ## Escape Sequences
|
|
37
37
|
*
|
|
38
|
-
* |
|
|
39
|
-
*
|
|
40
|
-
* | `\\` |
|
|
41
|
-
* | `\*` |
|
|
42
|
-
* | `\%` |
|
|
43
|
-
* | `\"` |
|
|
44
|
-
* | `\+` |
|
|
45
|
-
* | `\-` |
|
|
38
|
+
* | Input | Meaning |
|
|
39
|
+
* |-------|---------|
|
|
40
|
+
* | `\\` | Literal `\` |
|
|
41
|
+
* | `\*` | Literal `*` |
|
|
42
|
+
* | `\%` | Literal `%` |
|
|
43
|
+
* | `\"` | Literal `"` |
|
|
44
|
+
* | `\+` | Literal `+` |
|
|
45
|
+
* | `\-` | Literal `-` |
|
|
46
46
|
*
|
|
47
|
-
* ##
|
|
47
|
+
* ## Special Cases
|
|
48
48
|
*
|
|
49
|
-
* -
|
|
49
|
+
* - Unclosed quotes (`"text`) are treated as regular text including the quote character.
|
|
50
50
|
*
|
|
51
|
-
* ##
|
|
51
|
+
* ## Examples
|
|
52
52
|
*
|
|
53
53
|
* ```typescript
|
|
54
|
-
* parseSearchQuery('
|
|
55
|
-
* //
|
|
54
|
+
* parseSearchQuery('apple "delicious fruit" -banana +strawberry')
|
|
55
|
+
* // Result:
|
|
56
56
|
* // {
|
|
57
|
-
* // or: ["
|
|
58
|
-
* // must: ["
|
|
59
|
-
* // not: ["
|
|
57
|
+
* // or: ["%apple%"],
|
|
58
|
+
* // must: ["%delicious fruit%", "%strawberry%"],
|
|
59
|
+
* // not: ["%banana%"]
|
|
60
60
|
* // }
|
|
61
61
|
*
|
|
62
62
|
* parseSearchQuery('app* test')
|
|
63
|
-
* //
|
|
63
|
+
* // Result:
|
|
64
64
|
* // {
|
|
65
|
-
* // or: ["app%", "%test%"], // app
|
|
65
|
+
* // or: ["app%", "%test%"], // app* starts with "app", test is substring match
|
|
66
66
|
* // must: [],
|
|
67
67
|
* // not: []
|
|
68
68
|
* // }
|
|
69
69
|
*
|
|
70
|
-
* parseSearchQuery('app\\*test') //
|
|
71
|
-
* //
|
|
70
|
+
* parseSearchQuery('app\\*test') // escaped *
|
|
71
|
+
* // Result:
|
|
72
72
|
* // {
|
|
73
|
-
* // or: ["%app*test%"], //
|
|
73
|
+
* // or: ["%app*test%"], // literal *
|
|
74
74
|
* // must: [],
|
|
75
75
|
* // not: []
|
|
76
76
|
* // }
|
|
77
77
|
* ```
|
|
78
78
|
*
|
|
79
|
-
* @param searchText
|
|
80
|
-
* @returns
|
|
79
|
+
* @param searchText Search query string
|
|
80
|
+
* @returns Parsed search query object (LIKE pattern)
|
|
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
|
+
// Extract quoted sections
|
|
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
|
+
// Quoted text is treated as must (exact match = required)
|
|
119
119
|
result.must.push(pattern);
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
//
|
|
123
|
+
// Remove quoted sections
|
|
124
124
|
processed = processed.replace(/[+-]?"[^"]*"/g, " ");
|
|
125
125
|
|
|
126
|
-
//
|
|
126
|
+
// Split tokens by whitespace
|
|
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
|
+
// Handle + or - prefix
|
|
133
133
|
if (token.startsWith("+")) {
|
|
134
134
|
targetArray = result.must;
|
|
135
135
|
token = token.slice(1);
|
|
@@ -148,42 +148,42 @@ export function parseSearchQuery(searchText: string): ParsedSearchQuery {
|
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
/**
|
|
151
|
-
*
|
|
151
|
+
* Convert search term to SQL LIKE pattern (internal function)
|
|
152
152
|
*
|
|
153
|
-
*
|
|
154
|
-
* -
|
|
155
|
-
* -
|
|
156
|
-
* -
|
|
157
|
-
* -
|
|
158
|
-
* -
|
|
153
|
+
* Wildcard rules:
|
|
154
|
+
* - `apple` (no wildcard) → `%apple%` (substring match, default)
|
|
155
|
+
* - `apple*` → `apple%` (starts with)
|
|
156
|
+
* - `*apple` → `%apple` (ends with)
|
|
157
|
+
* - `*apple*` → `%apple%` (explicit substring)
|
|
158
|
+
* - `a*ple` → `a%ple` (in the middle)
|
|
159
159
|
*/
|
|
160
160
|
function termToLikePattern(term: string): string {
|
|
161
|
-
//
|
|
161
|
+
// Convert wildcard * to temporary marker (escaped ones are already handled as 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
|
-
// SQL LIKE
|
|
166
|
+
// Escape SQL LIKE special characters (\ → \\, % → \%, _ → \_, [ → \[)
|
|
167
167
|
pattern = pattern
|
|
168
168
|
.replace(/\\/g, "\\\\")
|
|
169
169
|
.replace(/%/g, "\\%")
|
|
170
170
|
.replace(/_/g, "\\_")
|
|
171
171
|
.replace(/\[/g, "\\[");
|
|
172
172
|
|
|
173
|
-
//
|
|
173
|
+
// Convert wildcard marker → % (SQL wildcard)
|
|
174
174
|
pattern = pattern.replaceAll(WILDCARD, "%");
|
|
175
175
|
|
|
176
|
-
//
|
|
176
|
+
// Restore escape placeholders
|
|
177
177
|
pattern = pattern
|
|
178
178
|
.replaceAll(ESC.BACKSLASH, "\\\\") // \\ → SQL \\
|
|
179
|
-
.replaceAll(ESC.ASTERISK, "*") // \* →
|
|
179
|
+
.replaceAll(ESC.ASTERISK, "*") // \* → literal * (not special in SQL)
|
|
180
180
|
.replaceAll(ESC.PERCENT, "\\%") // \% → SQL \%
|
|
181
181
|
.replaceAll(ESC.QUOTE, '"')
|
|
182
182
|
.replaceAll(ESC.PLUS, "+")
|
|
183
183
|
.replaceAll(ESC.MINUS, "-");
|
|
184
184
|
|
|
185
|
-
//
|
|
186
|
-
//
|
|
185
|
+
// If no wildcard, add % on both sides (default substring search)
|
|
186
|
+
// If wildcard exists, use the pattern as specified by the user
|
|
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
|
+
* Type-safe expression wrapper
|
|
6
|
+
* Tracks expression return type using TypeScript generics
|
|
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
|
+
* Expression wrapper for WHERE clause
|
|
23
23
|
*/
|
|
24
24
|
export class WhereExprUnit {
|
|
25
25
|
constructor(readonly expr: WhereExpr) {}
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
29
|
+
* Input type that accepts ExprUnit or literal values
|
|
30
30
|
*/
|
|
31
31
|
export type ExprInput<TPrimitive extends ColumnPrimitive> = ExprUnit<TPrimitive> | TPrimitive;
|