@things-factory/shell 5.0.0-alpha.52 → 5.0.0-alpha.56

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.
@@ -0,0 +1,304 @@
1
+ import { Filter, ListParam } from 'server/service'
2
+ import { Brackets, EntityMetadata, Repository, SelectQueryBuilder, WhereExpressionBuilder } from 'typeorm'
3
+
4
+ import { Domain } from '../service/domain/domain'
5
+
6
+ const debug = require('debug')('things-factory:shell:get-query-builder-from-list-params')
7
+
8
+ /**
9
+ *
10
+ * @param options
11
+ * @returns
12
+ */
13
+ export function getQueryBuilderFromListParams<Type>(options: {
14
+ repository: Repository<Type>
15
+ params: ListParam
16
+ domain?: Domain
17
+ alias?: string
18
+ searchables?: string[]
19
+ filtersMap?: { [name: string]: { columnName: string; relationColumn?: string } }
20
+ }): SelectQueryBuilder<Type> {
21
+ var { repository, params, domain, alias, searchables, filtersMap = {} } = options
22
+
23
+ const selectQueryBuilder = repository.createQueryBuilder(alias)
24
+ const entityAlias = selectQueryBuilder.alias
25
+
26
+ const columnFilters =
27
+ params.filters?.filter(filter => {
28
+ if (filter.operator === 'search') {
29
+ return false
30
+ }
31
+ if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {
32
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name)
33
+ return false
34
+ }
35
+ return true
36
+ }) || []
37
+ const searchFilters =
38
+ searchables instanceof Array
39
+ ? params.filters?.filter(filter => {
40
+ if (filter.operator !== 'search') {
41
+ return false
42
+ }
43
+ if (!searchables.includes(filter.name)) {
44
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name)
45
+ return false
46
+ }
47
+ return true
48
+ }) || []
49
+ : []
50
+ const pagination = params.pagination
51
+ const sortings = params.sortings
52
+
53
+ const metadata = repository.metadata
54
+
55
+ if (columnFilters && columnFilters.length > 0) {
56
+ columnFilters.forEach(filter => {
57
+ addCondition(metadata, selectQueryBuilder, selectQueryBuilder, filter, filtersMap, true)
58
+ })
59
+ }
60
+
61
+ if (searchFilters.length > 0) {
62
+ selectQueryBuilder.andWhere(
63
+ new Brackets(qb => {
64
+ searchFilters.forEach(filter => {
65
+ addCondition(metadata, selectQueryBuilder, qb, filter, filtersMap, false)
66
+ })
67
+ })
68
+ )
69
+ }
70
+
71
+ if (domain) {
72
+ selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: domain.id })
73
+ }
74
+
75
+ if (pagination && pagination.page > 0 && pagination.limit > 0) {
76
+ selectQueryBuilder.skip(pagination.limit * (pagination.page - 1))
77
+ selectQueryBuilder.take(pagination.limit)
78
+ }
79
+
80
+ if (sortings && sortings.length > 0) {
81
+ sortings.forEach((sorting, index) => {
82
+ const sortField = sorting.name.split('.').length > 1 ? sorting.name : `${entityAlias}.${sorting.name}`
83
+ if (index === 0) {
84
+ selectQueryBuilder.orderBy(sortField, sorting.desc ? 'DESC' : 'ASC')
85
+ } else {
86
+ selectQueryBuilder.addOrderBy(sortField, sorting.desc ? 'DESC' : 'ASC')
87
+ }
88
+ })
89
+ }
90
+
91
+ return selectQueryBuilder
92
+ }
93
+
94
+ function addCondition<T>(
95
+ metadata: EntityMetadata,
96
+ selectQueryBuilder: SelectQueryBuilder<T>,
97
+ whereExpressionBuilder: WhereExpressionBuilder,
98
+ filter: Filter,
99
+ filtersMap: { [name: string]: { columnName: string; relationColumn?: string } } = {},
100
+ andCondition: boolean
101
+ ): void {
102
+ const { name, operator, value } = filter
103
+ const values = value instanceof Array ? value : [value]
104
+ const entityAlias = selectQueryBuilder.alias
105
+
106
+ var { relationColumn, columnName } = filtersMap[name] || {}
107
+ /*
108
+ 1. relationColumn과 columnName이 지정된 경우
109
+ - relation inverse 테이블에서, columnName을 찾는다.
110
+ 2. relationColumn만 지정된 경우는 없어야 한다.
111
+ - 이 경우 columnName 은 'name' 이라고 판단한다.
112
+ 3. columnName이 지정된 경우.
113
+ - 이 경우는 columnName 만 적용한다.
114
+ */
115
+ if (relationColumn) {
116
+ var relationColumnMeta = metadata.columns.find(column => column.propertyName === relationColumn)
117
+ if (!relationColumnMeta) {
118
+ debug(`relationColumn "${relationColumn}" in filtersMap for "${name}" is not a relation column`)
119
+ return
120
+ }
121
+
122
+ var relation = relationColumnMeta.relationMetadata
123
+ var entityMetadata = relation.inverseEntityMetadata
124
+ var columnMeta = entityMetadata.columns.find(column => column.propertyName === (columnName || 'name'))
125
+ if (!columnMeta) {
126
+ debug(`columnName "${columnName}" in filtersMap for "${name}" is not a column`)
127
+ return
128
+ }
129
+ } else {
130
+ var columnMeta = metadata.columns.find(column => column.propertyName === (columnName || name))
131
+ if (!columnMeta) {
132
+ /* relationId 에 대한 필터링은 해당 컬럼값 자체의 비교로 한다. */
133
+ var relationIdMeta = metadata.relationIds.find(relationId => relationId.propertyName === (columnName || name))
134
+ if (relationIdMeta) {
135
+ columnMeta = relationIdMeta.relation.joinColumns[0]
136
+ } else {
137
+ columnName
138
+ ? debug(`columnName "${columnName}" in filtersMap for "${name}" is not a column`)
139
+ : debug(`name "${name}" is not a column`)
140
+ }
141
+ } else {
142
+ var relation = columnMeta.relationMetadata
143
+ }
144
+
145
+ if (relation) {
146
+ /* filterMap에 의해서 relationColumn 이 지정되지 않았더라도, name 또는 columnName의 column이 relation인 경우에는
147
+ - 조건절 구성을 위한 타겟필드명은 'name' 으로만 한정된다.
148
+ */
149
+ var relationColumnMeta = columnMeta
150
+ var entityMetadata = relation.inverseEntityMetadata
151
+ columnMeta = entityMetadata.columns.find(column => column.propertyName === 'name')
152
+ if (!columnMeta) {
153
+ debug(`relation column "${columnName || name}" does not have "name" column`)
154
+ return
155
+ }
156
+ }
157
+ }
158
+
159
+ const dbNameForColumn = columnMeta.databaseName
160
+ const alias = relationColumnMeta ? `${name}-filter` : entityAlias
161
+
162
+ /* relation columne인 경우 name을 alias로 사용한다. */
163
+ const field = `${alias}.${dbNameForColumn}`
164
+
165
+ var clause = ''
166
+ var parameters = {}
167
+
168
+ switch (operator) {
169
+ case 'eq':
170
+ clause = `${field} = :${name}`
171
+ parameters = { [name]: value }
172
+ break
173
+
174
+ case 'like':
175
+ clause = `${field} LIKE :${name}`
176
+ parameters = { [name]: `%${value}%` }
177
+ break
178
+
179
+ case 'search':
180
+ case 'i_like':
181
+ clause = `LOWER(${field}) LIKE :${name}`
182
+ parameters = { [name]: `%${String(value).toLowerCase()}%` }
183
+ break
184
+
185
+ case 'nlike':
186
+ clause = `${field} NOT LIKE :${name}`
187
+ parameters = { [name]: `%${value}%` }
188
+ break
189
+
190
+ case 'i_nlike':
191
+ clause = `LOWER(${field}) NOT LIKE :${name}`
192
+ parameters = { [name]: `%${String(value).toLowerCase()}%` }
193
+ break
194
+
195
+ case 'lt':
196
+ clause = `${field} < :${name}`
197
+ parameters = { [name]: value }
198
+ break
199
+
200
+ case 'gt':
201
+ clause = `${field} > :${name}`
202
+ parameters = { [name]: value }
203
+ break
204
+
205
+ case 'lte':
206
+ clause = `${field} <= :${name}`
207
+ parameters = { [name]: value }
208
+ break
209
+
210
+ case 'gte':
211
+ clause = `${field} >= :${name}`
212
+ parameters = { [name]: value }
213
+ break
214
+
215
+ case 'noteq':
216
+ clause = `${field} != :${name}`
217
+ parameters = { [name]: value }
218
+ break
219
+
220
+ case 'in':
221
+ clause = `${field} IN (:...${name})`
222
+ parameters = { [name]: values }
223
+ break
224
+
225
+ case 'notin':
226
+ clause = `${field} NOT IN (:...${name})`
227
+ parameters = { [name]: values }
228
+ break
229
+
230
+ case 'notin_with_null':
231
+ clause = `${field} IS NULL OR ${field} NOT IN (:...${name}))`
232
+ parameters = { [name]: values }
233
+ break
234
+
235
+ case 'is_null':
236
+ clause = `${field} IS NULL`
237
+ break
238
+
239
+ case 'is_not_null':
240
+ clause = `${field} IS NOT NULL`
241
+ break
242
+
243
+ case 'is_false':
244
+ clause = `${field} IS FALSE`
245
+ break
246
+
247
+ case 'is_true':
248
+ clause = `${field} IS TRUE`
249
+ break
250
+
251
+ case 'is_not_false':
252
+ clause = `${field} IS NOT FALSE`
253
+ break
254
+
255
+ case 'is_not_true':
256
+ clause = `${field} IS NOT TRUE`
257
+ break
258
+
259
+ case 'is_present':
260
+ clause = `${field} IS PRESENT`
261
+ break
262
+
263
+ case 'is_blank':
264
+ clause = `${field} IS BLANK`
265
+ break
266
+
267
+ case 'is_empty_num_id':
268
+ clause = `${field} IS EMPTY NUMERIC ID`
269
+ break
270
+
271
+ case 'between':
272
+ clause = `${field} BETWEEN :${name}_1 AND :${name}_2`
273
+ parameters = { [`${name}_1`]: values[0], [`${name}_2`]: values[1] }
274
+ break
275
+ }
276
+
277
+ if (relationColumnMeta) {
278
+ const { propertyName } = relationColumnMeta
279
+ const property = `${entityAlias}.${propertyName}`
280
+ if (andCondition) {
281
+ selectQueryBuilder.innerJoin(property, alias, clause, parameters)
282
+ } else {
283
+ selectQueryBuilder.leftJoin(property, alias)
284
+ whereExpressionBuilder.orWhere(clause, parameters)
285
+ }
286
+ } else {
287
+ andCondition
288
+ ? whereExpressionBuilder.andWhere(clause, parameters)
289
+ : whereExpressionBuilder.orWhere(clause, parameters)
290
+ }
291
+ }
292
+
293
+ // export function adjustFiltersFromListParam(params: ListParam, filtersChange: Filter[]): ListParam {
294
+ // const { filters = [] } = params
295
+
296
+ // var filtersNew = [...filters]
297
+
298
+ // filtersChange.forEach(change => {
299
+ // const idx = (filtersNew || []).findIndex(f => f.name === change.name)
300
+ // idx !== -1 ? filtersNew.splice(idx, 1, change) : filtersNew.push(change)
301
+ // })
302
+
303
+ // return { ...params, filters: filtersNew }
304
+ // }
@@ -3,3 +3,4 @@ export * from './condition-builder'
3
3
  export * from './list-query-builder'
4
4
  export * from './list-params-converter'
5
5
  export * from './publish-progress'
6
+ export * from './get-query-builder-from-list-params'
@@ -3,6 +3,8 @@ import { Between, Equal, FindOperator, ILike, In, IsNull, Like, Not, Raw } from
3
3
  import { Filter, ListParam, Pagination, Sorting } from '../service/common-types'
4
4
  import { Domain } from '../service/domain/domain'
5
5
 
6
+ const debug = require('debug')('things-factory:shell:list-params-converter')
7
+
6
8
  const OPERATION_FUNCTION_MAP: { [operator: string]: (value: any) => FindOperator<any> } = {
7
9
  search: value => ILike(value),
8
10
  eq: value => Equal(value),
@@ -75,17 +77,36 @@ function makeFilterParams(
75
77
  where: { [name: string]: FindOperator<any> } | { [name: string]: FindOperator<any> }[]
76
78
  } {
77
79
  /* for where AND clauses */
78
- const columnFilters = filters.filter(filter => filter.operator !== 'search')
79
- const columnWhere = columnFilters.reduce((where, f) => {
80
- where[f.name] = getOperatorFunction(f)
81
- return where
82
- }, {} as { [name: string]: FindOperator<any> })
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
+ }) || []
83
90
 
84
91
  const searchFilters =
85
92
  searchables instanceof Array
86
- ? filters.filter(filter => filter.operator === 'search' && searchables.includes(filter.name))
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
+ }) || []
87
103
  : []
88
104
 
105
+ const columnWhere = columnFilters.reduce((where, f) => {
106
+ where[f.name] = getOperatorFunction(f)
107
+ return where
108
+ }, {} as { [name: string]: FindOperator<any> })
109
+
89
110
  if (searchFilters.length === 0) {
90
111
  return {
91
112
  where: columnWhere
@@ -1,12 +1,11 @@
1
- import { Brackets, Repository, SelectQueryBuilder } from 'typeorm'
2
- import { ColumnMetadata } from 'typeorm/metadata/ColumnMetadata'
1
+ import { Brackets } from 'typeorm'
3
2
 
4
- import { Domain } from '../service/domain/domain'
5
3
  import { buildCondition } from './condition-builder'
6
- import { buildWhereClause } from './where-clause-builder'
4
+
5
+ const debug = require('debug')('things-factory:shell:list-query-builder')
7
6
 
8
7
  /**
9
- * @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.
8
+ * @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 getQueryBuilderFromListParams function.
10
9
  */
11
10
  export const buildQuery = function (
12
11
  queryBuilder: any,
@@ -27,11 +26,32 @@ export const buildQuery = function (
27
26
  var { domainRef = true, searchables } = options
28
27
  }
29
28
 
30
- const columnFilters = params.filters?.filter(filter => filter.operator !== 'search') || []
29
+ const columnFilters =
30
+ params.filters?.filter(filter => {
31
+ if (filter.operator === 'search') {
32
+ return false
33
+ }
34
+ if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {
35
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name)
36
+ return false
37
+ }
38
+ return true
39
+ }) || []
40
+
31
41
  const searchFilters =
32
42
  searchables instanceof Array
33
- ? params.filters?.filter(filter => filter.operator === 'search' && searchables.includes(filter.name)) || []
43
+ ? params.filters?.filter(filter => {
44
+ if (filter.operator !== 'search') {
45
+ return false
46
+ }
47
+ if (!searchables.includes(filter.name)) {
48
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name)
49
+ return false
50
+ }
51
+ return true
52
+ }) || []
34
53
  : []
54
+
35
55
  const pagination = params.pagination
36
56
  const sortings = params.sortings
37
57
  const domainId = context && context.state.domain && context.state.domain.id
@@ -85,96 +105,3 @@ export const buildQuery = function (
85
105
  })
86
106
  }
87
107
  }
88
-
89
- export function getQueryBuilderFromListParams<Type>(options: {
90
- repository: Repository<Type>
91
- params: any
92
- domain?: Domain
93
- alias?: string
94
- searchables?: string[]
95
- }): SelectQueryBuilder<Type> {
96
- var { repository, params, domain, alias, searchables } = options
97
- const selectQueryBuilder = repository.createQueryBuilder(alias)
98
- alias = selectQueryBuilder.alias
99
-
100
- const columnFilters = params.filters?.filter(filter => filter.operator !== 'search') || []
101
- const searchFilters =
102
- searchables instanceof Array
103
- ? params.filters?.filter(filter => filter.operator === 'search' && searchables.includes(filter.name)) || []
104
- : []
105
- const pagination = params.pagination
106
- const sortings = params.sortings
107
-
108
- const metadata = repository.metadata
109
- const columnMetas = params.filters
110
- .map(filter => filter.name)
111
- .reduce((sum, name) => {
112
- sum[name] = metadata.columns.find(column => column.propertyName === name)
113
- return sum
114
- }, {} as { [name: string]: ColumnMetadata })
115
-
116
- if (columnFilters && columnFilters.length > 0) {
117
- columnFilters.forEach(filter => {
118
- const { name, operator, value } = filter
119
-
120
- const condition = buildWhereClause({
121
- alias,
122
- columnMeta: columnMetas[name],
123
- operator,
124
- value,
125
- seq: Object.keys(selectQueryBuilder.getParameters()).length + 1,
126
- domain,
127
- selectQueryBuilder
128
- })
129
-
130
- if (condition?.clause) selectQueryBuilder.andWhere(condition.clause)
131
- if (condition?.parameters) selectQueryBuilder.setParameters(condition.parameters)
132
- })
133
- }
134
-
135
- if (searchFilters.length > 0) {
136
- selectQueryBuilder.andWhere(
137
- new Brackets(qb => {
138
- searchFilters.forEach(filter => {
139
- const { name, operator, value } = filter
140
-
141
- const condition = buildWhereClause({
142
- alias,
143
- columnMeta: columnMetas[name],
144
- operator /* has to be 'search' */,
145
- value,
146
- seq: Object.keys(selectQueryBuilder.getParameters()).length + 1,
147
- domain,
148
- selectQueryBuilder
149
- })
150
-
151
- if (condition?.clause) qb.orWhere(condition.clause)
152
- if (condition?.parameters) selectQueryBuilder.setParameters(condition.parameters)
153
- })
154
- })
155
- )
156
- }
157
-
158
- if (domain) {
159
- selectQueryBuilder.andWhere(`${selectQueryBuilder.alias}.domain = :domain`, { domain: domain.id })
160
- }
161
-
162
- if (pagination && pagination.page > 0 && pagination.limit > 0) {
163
- selectQueryBuilder.skip(pagination.limit * (pagination.page - 1))
164
- selectQueryBuilder.take(pagination.limit)
165
- }
166
-
167
- if (sortings && sortings.length > 0) {
168
- sortings.forEach((sorting, index) => {
169
- const sortField =
170
- sorting.name.split('.').length > 1 ? sorting.name : `${selectQueryBuilder.alias}.${sorting.name}`
171
- if (index === 0) {
172
- selectQueryBuilder.orderBy(sortField, sorting.desc ? 'DESC' : 'ASC')
173
- } else {
174
- selectQueryBuilder.addOrderBy(sortField, sorting.desc ? 'DESC' : 'ASC')
175
- }
176
- })
177
- }
178
-
179
- return selectQueryBuilder
180
- }
@@ -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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"}