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