@things-factory/shell 5.0.0-alpha.50 → 5.0.0-alpha.54

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.
@@ -1,6 +1,9 @@
1
1
  import { Between, Equal, FindOperator, ILike, In, IsNull, Like, Not, Raw } from 'typeorm'
2
2
 
3
3
  import { Filter, ListParam, Pagination, Sorting } from '../service/common-types'
4
+ import { Domain } from '../service/domain/domain'
5
+
6
+ const debug = require('debug')('things-factory:shell:list-params-converter')
4
7
 
5
8
  const OPERATION_FUNCTION_MAP: { [operator: string]: (value: any) => FindOperator<any> } = {
6
9
  search: value => ILike(value),
@@ -67,17 +70,43 @@ function makeSortingParams(sortings: Sorting[]): { order?: { [name: string]: 'DE
67
70
  return result
68
71
  }
69
72
 
70
- function makeFilterParams(filters: Filter[]): {
73
+ function makeFilterParams(
74
+ filters: Filter[],
75
+ searchables?: string[]
76
+ ): {
71
77
  where: { [name: string]: FindOperator<any> } | { [name: string]: FindOperator<any> }[]
72
78
  } {
73
79
  /* for where AND clauses */
74
- const columnFilters = filters.filter(filter => filter.operator !== 'search')
80
+ const columnFilters =
81
+ filters?.filter(filter => {
82
+ if (filter.operator === 'search') {
83
+ return false
84
+ }
85
+ if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {
86
+ return false
87
+ }
88
+ return true
89
+ }) || []
90
+
91
+ const searchFilters =
92
+ searchables instanceof Array
93
+ ? filters?.filter(filter => {
94
+ if (filter.operator !== 'search') {
95
+ return false
96
+ }
97
+ if (!searchables.includes(filter.name)) {
98
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name)
99
+ return false
100
+ }
101
+ return true
102
+ }) || []
103
+ : []
104
+
75
105
  const columnWhere = columnFilters.reduce((where, f) => {
76
106
  where[f.name] = getOperatorFunction(f)
77
107
  return where
78
108
  }, {} as { [name: string]: FindOperator<any> })
79
109
 
80
- const searchFilters = filters.filter(filter => filter.operator === 'search')
81
110
  if (searchFilters.length === 0) {
82
111
  return {
83
112
  where: columnWhere
@@ -99,7 +128,12 @@ function makeFilterParams(filters: Filter[]): {
99
128
 
100
129
  export function convertListParams(
101
130
  params: ListParam,
102
- domain?: String
131
+ options?:
132
+ | string
133
+ | {
134
+ domain?: string | Domain
135
+ searchables?: string[]
136
+ }
103
137
  ): {
104
138
  where?: { [name: string]: FindOperator<any> }
105
139
  order?: {
@@ -108,20 +142,31 @@ export function convertListParams(
108
142
  skip?: number
109
143
  take?: number
110
144
  } {
145
+ var domainId: string | undefined
146
+
147
+ if (options) {
148
+ if (typeof options === 'string' /* for 하위 호환성 */) {
149
+ var domainId = options
150
+ } else {
151
+ var { domain, searchables } = options
152
+ var domainId = typeof domain === 'string' ? domain : domain?.id
153
+ }
154
+ }
155
+
111
156
  var { pagination, filters = [], sortings } = params
112
157
  var result = {}
113
158
 
114
- if (domain) {
159
+ if (domainId) {
115
160
  filters.push({
116
161
  name: 'domain',
117
162
  operator: 'eq',
118
- value: domain
163
+ value: domainId
119
164
  })
120
165
  }
121
166
 
122
167
  if (pagination) Object.assign(result, makePaginationParams(pagination))
123
168
  if (sortings) Object.assign(result, makeSortingParams(sortings))
124
- if (filters) Object.assign(result, makeFilterParams(filters))
169
+ if (filters) Object.assign(result, makeFilterParams(filters, searchables))
125
170
 
126
171
  return result
127
172
  }
@@ -1,13 +1,59 @@
1
- import { Brackets, Repository, SelectQueryBuilder } from 'typeorm'
2
- import { ColumnMetadata } from 'typeorm/metadata/ColumnMetadata'
1
+ import { Filter, ListParam } from 'server/service'
2
+ import { Brackets, EntityMetadata, Repository, SelectQueryBuilder, WhereExpressionBuilder } from 'typeorm'
3
3
 
4
4
  import { Domain } from '../service/domain/domain'
5
5
  import { buildCondition } from './condition-builder'
6
- import { buildWhereClause } from './where-clause-builder'
7
6
 
8
- export const buildQuery = function (queryBuilder: any, params: any, context: any, domainRef: Boolean = true) {
9
- const columnFilters = params.filters?.filter(filter => filter.operator !== 'search') || []
10
- const searchFilters = params.filters?.filter(filter => filter.operator === 'search') || []
7
+ const debug = require('debug')('things-factory:shell:list-query-builder')
8
+
9
+ /**
10
+ * @deprecated The name of this function does not imply an exact purpose and it is not possible to correspond to a foreign key using the meta information of the table column, so it is recommended to replace it with the A function.
11
+ */
12
+ export const buildQuery = function (
13
+ queryBuilder: any,
14
+ params: any,
15
+ context: any,
16
+ options?:
17
+ | boolean
18
+ | {
19
+ domainRef?: boolean
20
+ searchables?: string[]
21
+ }
22
+ ) {
23
+ /* default value of domainRef is 'true' */
24
+ var domainRef = typeof options === 'boolean' ? options : true
25
+
26
+ /* for backwards compatibility of function spec */
27
+ if (typeof options === 'object') {
28
+ var { domainRef = true, searchables } = options
29
+ }
30
+
31
+ const columnFilters =
32
+ params.filters?.filter(filter => {
33
+ if (filter.operator === 'search') {
34
+ return false
35
+ }
36
+ if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {
37
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name)
38
+ return false
39
+ }
40
+ return true
41
+ }) || []
42
+
43
+ const searchFilters =
44
+ searchables instanceof Array
45
+ ? params.filters?.filter(filter => {
46
+ if (filter.operator !== 'search') {
47
+ return false
48
+ }
49
+ if (!searchables.includes(filter.name)) {
50
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name)
51
+ return false
52
+ }
53
+ return true
54
+ }) || []
55
+ : []
56
+
11
57
  const pagination = params.pagination
12
58
  const sortings = params.sortings
13
59
  const domainId = context && context.state.domain && context.state.domain.id
@@ -64,43 +110,49 @@ export const buildQuery = function (queryBuilder: any, params: any, context: any
64
110
 
65
111
  export function getQueryBuilderFromListParams<Type>(options: {
66
112
  repository: Repository<Type>
67
- params: any
113
+ params: ListParam
68
114
  domain?: Domain
69
115
  alias?: string
116
+ searchables?: string[]
117
+ filtersMap?: { [name: string]: { columnName: string; relationColumn: string } }
70
118
  }): SelectQueryBuilder<Type> {
71
- var { repository, params, domain, alias } = options
119
+ var { repository, params, domain, alias, searchables, filtersMap = {} } = options
120
+
72
121
  const selectQueryBuilder = repository.createQueryBuilder(alias)
73
- alias = selectQueryBuilder.alias
122
+ const entityAlias = selectQueryBuilder.alias
74
123
 
75
- const columnFilters = params.filters?.filter(filter => filter.operator !== 'search') || []
76
- const searchFilters = params.filters?.filter(filter => filter.operator === 'search') || []
124
+ const columnFilters =
125
+ params.filters?.filter(filter => {
126
+ if (filter.operator === 'search') {
127
+ return false
128
+ }
129
+ if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {
130
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name)
131
+ return false
132
+ }
133
+ return true
134
+ }) || []
135
+ const searchFilters =
136
+ searchables instanceof Array
137
+ ? params.filters?.filter(filter => {
138
+ if (filter.operator !== 'search') {
139
+ return false
140
+ }
141
+ if (!searchables.includes(filter.name)) {
142
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name)
143
+ return false
144
+ }
145
+ return true
146
+ }) || []
147
+ : []
77
148
  const pagination = params.pagination
78
149
  const sortings = params.sortings
79
150
 
80
151
  const metadata = repository.metadata
81
- const columnMetas = params.filters
82
- .map(filter => filter.name)
83
- .reduce((sum, name) => {
84
- sum[name] = metadata.columns.find(column => column.propertyName === name)
85
- return sum
86
- }, {} as { [name: string]: ColumnMetadata })
87
152
 
88
153
  if (columnFilters && columnFilters.length > 0) {
89
154
  columnFilters.forEach(filter => {
90
- const { name, operator, value } = filter
91
-
92
- const condition = buildWhereClause({
93
- alias,
94
- columnMeta: columnMetas[name],
95
- operator,
96
- value,
97
- seq: Object.keys(selectQueryBuilder.getParameters()).length + 1,
98
- domain,
99
- selectQueryBuilder
100
- })
101
-
102
- if (condition?.clause) selectQueryBuilder.andWhere(condition.clause)
103
- if (condition?.parameters) selectQueryBuilder.setParameters(condition.parameters)
155
+ addCondition(metadata, selectQueryBuilder, selectQueryBuilder, filter, filtersMap, true)
104
156
  })
105
157
  }
106
158
 
@@ -108,27 +160,14 @@ export function getQueryBuilderFromListParams<Type>(options: {
108
160
  selectQueryBuilder.andWhere(
109
161
  new Brackets(qb => {
110
162
  searchFilters.forEach(filter => {
111
- const { name, operator, value } = filter
112
-
113
- const condition = buildWhereClause({
114
- alias,
115
- columnMeta: columnMetas[name],
116
- operator /* has to be 'search' */,
117
- value,
118
- seq: Object.keys(selectQueryBuilder.getParameters()).length + 1,
119
- domain,
120
- selectQueryBuilder
121
- })
122
-
123
- if (condition?.clause) qb.orWhere(condition.clause)
124
- if (condition?.parameters) selectQueryBuilder.setParameters(condition.parameters)
163
+ addCondition(metadata, selectQueryBuilder, qb, filter, filtersMap, false)
125
164
  })
126
165
  })
127
166
  )
128
167
  }
129
168
 
130
169
  if (domain) {
131
- selectQueryBuilder.andWhere(`${selectQueryBuilder.alias}.domain = :domain`, { domain: domain.id })
170
+ selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: domain.id })
132
171
  }
133
172
 
134
173
  if (pagination && pagination.page > 0 && pagination.limit > 0) {
@@ -138,8 +177,7 @@ export function getQueryBuilderFromListParams<Type>(options: {
138
177
 
139
178
  if (sortings && sortings.length > 0) {
140
179
  sortings.forEach((sorting, index) => {
141
- const sortField =
142
- sorting.name.split('.').length > 1 ? sorting.name : `${selectQueryBuilder.alias}.${sorting.name}`
180
+ const sortField = sorting.name.split('.').length > 1 ? sorting.name : `${entityAlias}.${sorting.name}`
143
181
  if (index === 0) {
144
182
  selectQueryBuilder.orderBy(sortField, sorting.desc ? 'DESC' : 'ASC')
145
183
  } else {
@@ -150,3 +188,209 @@ export function getQueryBuilderFromListParams<Type>(options: {
150
188
 
151
189
  return selectQueryBuilder
152
190
  }
191
+
192
+ function addCondition<T>(
193
+ metadata: EntityMetadata,
194
+ selectQueryBuilder: SelectQueryBuilder<T>,
195
+ whereExpressionBuilder: WhereExpressionBuilder,
196
+ filter: Filter,
197
+ filtersMap: { [name: string]: { columnName: string; relationColumn: string } } = {},
198
+ andCondition: boolean
199
+ ): void {
200
+ const { name, operator, value } = filter
201
+ const values = value instanceof Array ? value : [value]
202
+ const entityAlias = selectQueryBuilder.alias
203
+
204
+ var { relationColumn, columnName } = filtersMap[name] || {}
205
+ /*
206
+ 1. relationColumn과 columnName이 지정된 경우
207
+ - relation inverse 테이블에서, columnName을 찾는다.
208
+ 2. relationColumn만 지정된 경우는 없어야 한다.
209
+ - 이 경우 columnName 은 'name' 이라고 판단한다.
210
+ 3. columnName이 지정된 경우.
211
+ - 이 경우는 columnName 만 적용한다.
212
+ */
213
+ if (relationColumn) {
214
+ var relationColumnMeta = metadata.columns.find(column => column.propertyName === relationColumn)
215
+ if (!relationColumnMeta) {
216
+ debug(`relationColumn "${relationColumn}" in filtersMap for "${name}" is not a relation column`)
217
+ return
218
+ }
219
+
220
+ var relation = relationColumnMeta.relationMetadata
221
+ var entityMetadata = relation.inverseEntityMetadata
222
+ var columnMeta = entityMetadata.columns.find(column => column.propertyName === (columnName || 'name'))
223
+ if (!columnMeta) {
224
+ debug(`columnName "${columnName}" in filtersMap for "${name}" is not a column`)
225
+ return
226
+ }
227
+ } else {
228
+ var columnMeta = metadata.columns.find(column => column.propertyName === (columnName || name))
229
+ if (!columnMeta) {
230
+ columnName
231
+ ? debug(`columnName "${columnName}" in filtersMap for "${name}" is not a column`)
232
+ : debug(`name "${name}" is not a column`)
233
+ return
234
+ }
235
+ var relation = columnMeta.relationMetadata
236
+
237
+ if (relation) {
238
+ /* filterMap에 의해서 relationColumn 이 지정되지 않았더라도, name 또는 columnName의 column이 relation인 경우에는
239
+ - 조건절 구성을 위한 타겟필드명은 'name' 으로만 한정된다.
240
+ */
241
+ var relationColumnMeta = columnMeta
242
+ var entityMetadata = relation.inverseEntityMetadata
243
+ columnMeta = entityMetadata.columns.find(column => column.propertyName === 'name')
244
+ if (!columnMeta) {
245
+ debug(`relation column "${columnName || name}" does not have "name" column`)
246
+ return
247
+ }
248
+ }
249
+ }
250
+
251
+ const dbNameForColumn = columnMeta.databaseName
252
+ const alias = relationColumnMeta ? `${name}-filter` : entityAlias
253
+
254
+ /* relation columne인 경우 name을 alias로 사용한다. */
255
+ const field = `${alias}.${dbNameForColumn}`
256
+
257
+ var clause = ''
258
+ var parameters = {}
259
+
260
+ switch (operator) {
261
+ case 'eq':
262
+ clause = `${field} = :${name}`
263
+ parameters = { [name]: value }
264
+ break
265
+
266
+ case 'like':
267
+ clause = `${field} LIKE :${name}`
268
+ parameters = { [name]: `%${value}%` }
269
+ break
270
+
271
+ case 'search':
272
+ case 'i_like':
273
+ clause = `LOWER(${field}) LIKE :${name}`
274
+ parameters = { [name]: `%${String(value).toLowerCase()}%` }
275
+ break
276
+
277
+ case 'nlike':
278
+ clause = `${field} NOT LIKE :${name}`
279
+ parameters = { [name]: `%${value}%` }
280
+ break
281
+
282
+ case 'i_nlike':
283
+ clause = `LOWER(${field}) NOT LIKE :${name}`
284
+ parameters = { [name]: `%${String(value).toLowerCase()}%` }
285
+ break
286
+
287
+ case 'lt':
288
+ clause = `${field} < :${name}`
289
+ parameters = { [name]: value }
290
+ break
291
+
292
+ case 'gt':
293
+ clause = `${field} > :${name}`
294
+ parameters = { [name]: value }
295
+ break
296
+
297
+ case 'lte':
298
+ clause = `${field} <= :${name}`
299
+ parameters = { [name]: value }
300
+ break
301
+
302
+ case 'gte':
303
+ clause = `${field} >= :${name}`
304
+ parameters = { [name]: value }
305
+ break
306
+
307
+ case 'noteq':
308
+ clause = `${field} != :${name}`
309
+ parameters = { [name]: value }
310
+ break
311
+
312
+ case 'in':
313
+ clause = `${field} IN (:...${name})`
314
+ parameters = { [name]: values }
315
+ break
316
+
317
+ case 'notin':
318
+ clause = `${field} NOT IN (:...${name})`
319
+ parameters = { [name]: values }
320
+ break
321
+
322
+ case 'notin_with_null':
323
+ clause = `${field} IS NULL OR ${field} NOT IN (:...${name}))`
324
+ parameters = { [name]: values }
325
+ break
326
+
327
+ case 'is_null':
328
+ clause = `${field} IS NULL`
329
+ break
330
+
331
+ case 'is_not_null':
332
+ clause = `${field} IS NOT NULL`
333
+ break
334
+
335
+ case 'is_false':
336
+ clause = `${field} IS FALSE`
337
+ break
338
+
339
+ case 'is_true':
340
+ clause = `${field} IS TRUE`
341
+ break
342
+
343
+ case 'is_not_false':
344
+ clause = `${field} IS NOT FALSE`
345
+ break
346
+
347
+ case 'is_not_true':
348
+ clause = `${field} IS NOT TRUE`
349
+ break
350
+
351
+ case 'is_present':
352
+ clause = `${field} IS PRESENT`
353
+ break
354
+
355
+ case 'is_blank':
356
+ clause = `${field} IS BLANK`
357
+ break
358
+
359
+ case 'is_empty_num_id':
360
+ clause = `${field} IS EMPTY NUMERIC ID`
361
+ break
362
+
363
+ case 'between':
364
+ clause = `${field} BETWEEN :${name}_1 AND :${name}_2`
365
+ parameters = { [`${name}_1`]: values[0], [`${name}_2`]: values[1] }
366
+ break
367
+ }
368
+
369
+ if (relationColumnMeta) {
370
+ const { propertyName } = relationColumnMeta
371
+ const property = `${entityAlias}.${propertyName}`
372
+ if (andCondition) {
373
+ selectQueryBuilder.innerJoin(property, alias, clause, parameters)
374
+ } else {
375
+ selectQueryBuilder.leftJoin(property, alias)
376
+ whereExpressionBuilder.orWhere(clause, parameters)
377
+ }
378
+ } else {
379
+ andCondition
380
+ ? whereExpressionBuilder.andWhere(clause, parameters)
381
+ : whereExpressionBuilder.orWhere(clause, parameters)
382
+ }
383
+ }
384
+
385
+ // export function adjustFiltersFromListParam(params: ListParam, filtersChange: Filter[]): ListParam {
386
+ // const { filters = [] } = params
387
+
388
+ // var filtersNew = [...filters]
389
+
390
+ // filtersChange.forEach(change => {
391
+ // const idx = (filtersNew || []).findIndex(f => f.name === change.name)
392
+ // idx !== -1 ? filtersNew.splice(idx, 1, change) : filtersNew.push(change)
393
+ // })
394
+
395
+ // return { ...params, filters: filtersNew }
396
+ // }
@@ -1,159 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildWhereClause = void 0;
4
- function getClause(selectQueryBuilder, columnMeta, operator, field, pname) {
5
- const relation = columnMeta.relationMetadata;
6
- if (!relation) {
7
- switch (operator) {
8
- case 'like':
9
- return `${field} LIKE :${pname}`;
10
- case 'search':
11
- case 'i_like':
12
- return `LOWER(${field}) LIKE :${pname}`;
13
- case 'nlike':
14
- return `${field} NOT LIKE :${pname}`;
15
- case 'i_nlike':
16
- return `LOWER(${field}) NOT LIKE :${pname}`;
17
- }
18
- }
19
- const inverseEntityMetadata = relation.inverseEntityMetadata;
20
- const { target, tableName, ownColumns } = inverseEntityMetadata;
21
- var subquery = selectQueryBuilder.subQuery().select('id').from(target, tableName);
22
- switch (operator) {
23
- case 'like':
24
- subquery = subquery.where(`${tableName}.name LIKE :${pname}`);
25
- break;
26
- case 'search':
27
- case 'i_like':
28
- subquery = subquery.where(`LOWER(${tableName}.name) LIKE :${pname}`);
29
- break;
30
- case 'nlike':
31
- subquery = subquery.where(`${tableName}.name NOT LIKE :${pname}`);
32
- break;
33
- case 'i_nlike':
34
- subquery = subquery.where(`LOWER(${tableName}.name) NOT LIKE :${pname}`);
35
- break;
36
- }
37
- if (ownColumns.find(column => column.propertyName === 'domain')) {
38
- subquery.andWhere(`${tableName}.domain_id = :domain`);
39
- }
40
- return `${field} IN ${subquery.getQuery()}`;
41
- }
42
- const buildWhereClause = function (options) {
43
- const { alias, columnMeta, operator, value, seq, selectQueryBuilder, domain } = options;
44
- const values = value instanceof Array ? value : [value];
45
- const { propertyName: name, propertyAliasName, propertyPath: path, databaseName } = columnMeta;
46
- const field = `${alias}.${databaseName}`;
47
- const pname = `args${seq}`;
48
- switch (operator) {
49
- case 'eq':
50
- return {
51
- clause: `${field} = :${pname}`,
52
- parameters: { [pname]: value }
53
- };
54
- case 'like':
55
- return {
56
- clause: getClause(selectQueryBuilder, columnMeta, operator, field, pname),
57
- parameters: { [pname]: `%${value}%` }
58
- };
59
- case 'search':
60
- case 'i_like':
61
- return {
62
- clause: getClause(selectQueryBuilder, columnMeta, operator, field, pname),
63
- parameters: { [pname]: `%${String(value).toLowerCase()}%` }
64
- };
65
- case 'nlike':
66
- return {
67
- clause: getClause(selectQueryBuilder, columnMeta, operator, field, pname),
68
- value: { [pname]: `%${value}%` }
69
- };
70
- case 'i_nlike':
71
- return {
72
- clause: getClause(selectQueryBuilder, columnMeta, operator, field, pname),
73
- value: { [pname]: `%${String(value).toLowerCase()}%` }
74
- };
75
- case 'lt':
76
- return {
77
- clause: `${field} < :${pname}`,
78
- parameters: { [pname]: value }
79
- };
80
- case 'gt':
81
- return {
82
- clause: `${field} > :${pname}`,
83
- parameters: { [pname]: value }
84
- };
85
- case 'lte':
86
- return {
87
- clause: `${field} <= :${pname}`,
88
- parameters: { [pname]: value }
89
- };
90
- case 'gte':
91
- return {
92
- clause: `${field} >= :${pname}`,
93
- parameters: { [pname]: value }
94
- };
95
- case 'noteq':
96
- return {
97
- clause: `${field} != :${pname}`,
98
- parameters: { [pname]: value }
99
- };
100
- case 'in':
101
- return {
102
- clause: `${field} IN (:...${pname})`,
103
- parameters: { [pname]: values }
104
- };
105
- case 'notin':
106
- return {
107
- clause: `${field} NOT IN (:...${pname})`,
108
- parameters: { [pname]: values }
109
- };
110
- case 'notin_with_null':
111
- return {
112
- clause: `${field} IS NULL OR ${field} NOT IN (:...${pname}))`,
113
- parameters: { [pname]: values }
114
- };
115
- case 'is_null':
116
- return {
117
- clause: `${field} IS NULL`
118
- };
119
- case 'is_not_null':
120
- return {
121
- clause: `${field} IS NOT NULL`
122
- };
123
- case 'is_false':
124
- return {
125
- clause: `${field} IS FALSE`
126
- };
127
- case 'is_true':
128
- return {
129
- clause: `${field} IS TRUE`
130
- };
131
- case 'is_not_false':
132
- return {
133
- clause: `${field} IS NOT FALSE`
134
- };
135
- case 'is_not_true':
136
- return {
137
- clause: `${field} IS NOT TRUE`
138
- };
139
- case 'is_present':
140
- return {
141
- clause: `${field} IS PRESENT`
142
- };
143
- case 'is_blank':
144
- return {
145
- clause: `${field} IS BLANK`
146
- };
147
- case 'is_empty_num_id':
148
- return {
149
- clause: `${field} IS EMPTY NUMERIC ID`
150
- };
151
- case 'between':
152
- return {
153
- clause: `${field} BETWEEN :${pname}_1 AND :${pname}_2`,
154
- parameters: { [`args${seq}_1`]: values[0], [`args${seq}_2`]: values[1] }
155
- };
156
- }
157
- };
158
- exports.buildWhereClause = buildWhereClause;
159
- //# sourceMappingURL=where-clause-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"where-clause-builder.js","sourceRoot":"","sources":["../../server/utils/where-clause-builder.ts"],"names":[],"mappings":"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"}