@things-factory/shell 5.0.0-alpha.35 → 5.0.0-alpha.38
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/condition-builder.js +10 -11
- package/dist-server/utils/condition-builder.js.map +1 -1
- package/dist-server/utils/list-params-converter.js.map +1 -1
- package/dist-server/utils/list-query-builder.js +77 -1
- package/dist-server/utils/list-query-builder.js.map +1 -1
- package/dist-server/utils/where-clause-builder.js +159 -0
- package/dist-server/utils/where-clause-builder.js.map +1 -0
- package/package.json +13 -13
- package/server/utils/condition-builder.ts +12 -12
- package/server/utils/list-params-converter.ts +5 -3
- package/server/utils/list-query-builder.ts +93 -1
- package/server/utils/where-clause-builder.ts +200 -0
- package/db.test.sqlite +0 -0
@@ -8,6 +8,7 @@ const lodash_1 = __importDefault(require("lodash"));
|
|
8
8
|
const buildCondition = function (alias, fieldName, operator, value, relation, seq) {
|
9
9
|
seq++;
|
10
10
|
fieldName = lodash_1.default.snakeCase(fieldName);
|
11
|
+
const values = value instanceof Array ? value : [value];
|
11
12
|
switch (operator) {
|
12
13
|
case 'eq':
|
13
14
|
return {
|
@@ -61,23 +62,21 @@ const buildCondition = function (alias, fieldName, operator, value, relation, se
|
|
61
62
|
parameters: { [`args${seq}`]: value }
|
62
63
|
};
|
63
64
|
case 'in':
|
64
|
-
const clause = relation ? `${fieldName}.id IN (:...args${seq})` : `${alias}.${fieldName} IN (:...args${seq})`;
|
65
|
-
value = (value === null || value === void 0 ? void 0 : value.length) ? value : [value];
|
66
65
|
return {
|
67
|
-
clause
|
68
|
-
parameters: { [`args${seq}`]:
|
66
|
+
clause: relation ? `${fieldName}.id IN (:...args${seq})` : `${alias}.${fieldName} IN (:...args${seq})`,
|
67
|
+
parameters: { [`args${seq}`]: values }
|
69
68
|
};
|
70
69
|
case 'notin':
|
71
|
-
value = (value === null || value === void 0 ? void 0 : value.length) ? value : [value];
|
72
70
|
return {
|
73
|
-
clause: `${alias}.${fieldName} NOT IN (:...args${seq})`,
|
74
|
-
parameters: { [`args${seq}`]:
|
71
|
+
clause: relation ? `${fieldName}.id NOT IN (:...args${seq})` : `${alias}.${fieldName} NOT IN (:...args${seq})`,
|
72
|
+
parameters: { [`args${seq}`]: values }
|
75
73
|
};
|
76
74
|
case 'notin_with_null':
|
77
|
-
value = (value === null || value === void 0 ? void 0 : value.length) ? value : [value];
|
78
75
|
return {
|
79
|
-
clause:
|
80
|
-
|
76
|
+
clause: relation
|
77
|
+
? `(${fieldName}.id IS NULL OR ${fieldName}.id NOT IN (:...args${seq})`
|
78
|
+
: `${alias}.${fieldName} IS NULL OR ${alias}.${fieldName} NOT IN (:...args${seq}))`,
|
79
|
+
parameters: { [`args${seq}`]: values }
|
81
80
|
};
|
82
81
|
case 'is_null':
|
83
82
|
return {
|
@@ -118,7 +117,7 @@ const buildCondition = function (alias, fieldName, operator, value, relation, se
|
|
118
117
|
case 'between':
|
119
118
|
return {
|
120
119
|
clause: `${alias}.${fieldName} BETWEEN :args${seq}_1 AND :args${seq}_2`,
|
121
|
-
parameters: { [`args${seq}_1`]:
|
120
|
+
parameters: { [`args${seq}_1`]: values[0], [`args${seq}_2`]: values[1] }
|
122
121
|
};
|
123
122
|
}
|
124
123
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"condition-builder.js","sourceRoot":"","sources":["../../server/utils/condition-builder.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAsB;AAEf,MAAM,cAAc,GAAG,UAC5B,KAAa,EACb,SAAiB,EACjB,QAAgB,EAChB,KAAU,EACV,
|
1
|
+
{"version":3,"file":"condition-builder.js","sourceRoot":"","sources":["../../server/utils/condition-builder.ts"],"names":[],"mappings":"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"}
|
@@ -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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"}
|
@@ -1,8 +1,9 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.buildQuery = void 0;
|
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 where_clause_builder_1 = require("./where-clause-builder");
|
6
7
|
const buildQuery = function (queryBuilder, params, context, domainRef = true) {
|
7
8
|
var _a, _b;
|
8
9
|
const columnFilters = ((_a = params.filters) === null || _a === void 0 ? void 0 : _a.filter(filter => filter.operator !== 'search')) || [];
|
@@ -48,4 +49,79 @@ const buildQuery = function (queryBuilder, params, context, domainRef = true) {
|
|
48
49
|
}
|
49
50
|
};
|
50
51
|
exports.buildQuery = buildQuery;
|
52
|
+
function getQueryBuilderFromListParams(options) {
|
53
|
+
var _a, _b;
|
54
|
+
var { repository, params, domain, alias } = options;
|
55
|
+
const selectQueryBuilder = repository.createQueryBuilder(alias);
|
56
|
+
alias = selectQueryBuilder.alias;
|
57
|
+
const columnFilters = ((_a = params.filters) === null || _a === void 0 ? void 0 : _a.filter(filter => filter.operator !== 'search')) || [];
|
58
|
+
const searchFilters = ((_b = params.filters) === null || _b === void 0 ? void 0 : _b.filter(filter => filter.operator === 'search')) || [];
|
59
|
+
const pagination = params.pagination;
|
60
|
+
const sortings = params.sortings;
|
61
|
+
const metadata = repository.metadata;
|
62
|
+
const columnMetas = params.filters
|
63
|
+
.map(filter => filter.name)
|
64
|
+
.reduce((sum, name) => {
|
65
|
+
sum[name] = metadata.columns.find(column => column.propertyName === name);
|
66
|
+
return sum;
|
67
|
+
}, {});
|
68
|
+
if (columnFilters && columnFilters.length > 0) {
|
69
|
+
columnFilters.forEach(filter => {
|
70
|
+
const { name, operator, value } = filter;
|
71
|
+
const condition = (0, where_clause_builder_1.buildWhereClause)({
|
72
|
+
alias,
|
73
|
+
columnMeta: columnMetas[name],
|
74
|
+
operator,
|
75
|
+
value,
|
76
|
+
seq: Object.keys(selectQueryBuilder.getParameters()).length + 1,
|
77
|
+
domain,
|
78
|
+
selectQueryBuilder
|
79
|
+
});
|
80
|
+
if (condition === null || condition === void 0 ? void 0 : condition.clause)
|
81
|
+
selectQueryBuilder.andWhere(condition.clause);
|
82
|
+
if (condition === null || condition === void 0 ? void 0 : condition.parameters)
|
83
|
+
selectQueryBuilder.setParameters(condition.parameters);
|
84
|
+
});
|
85
|
+
}
|
86
|
+
if (searchFilters.length > 0) {
|
87
|
+
selectQueryBuilder.andWhere(new typeorm_1.Brackets(qb => {
|
88
|
+
searchFilters.forEach(filter => {
|
89
|
+
const { name, operator, value } = filter;
|
90
|
+
const condition = (0, where_clause_builder_1.buildWhereClause)({
|
91
|
+
alias,
|
92
|
+
columnMeta: columnMetas[name],
|
93
|
+
operator /* has to be 'search' */,
|
94
|
+
value,
|
95
|
+
seq: Object.keys(selectQueryBuilder.getParameters()).length + 1,
|
96
|
+
domain,
|
97
|
+
selectQueryBuilder
|
98
|
+
});
|
99
|
+
if (condition === null || condition === void 0 ? void 0 : condition.clause)
|
100
|
+
selectQueryBuilder.orWhere(condition.clause);
|
101
|
+
if (condition === null || condition === void 0 ? void 0 : condition.parameters)
|
102
|
+
selectQueryBuilder.setParameters(condition.parameters);
|
103
|
+
});
|
104
|
+
}));
|
105
|
+
}
|
106
|
+
if (domain) {
|
107
|
+
selectQueryBuilder.andWhere(`${selectQueryBuilder.alias}.domain = :domain`, { domain: domain.id });
|
108
|
+
}
|
109
|
+
if (pagination && pagination.page > 0 && pagination.limit > 0) {
|
110
|
+
selectQueryBuilder.skip(pagination.limit * (pagination.page - 1));
|
111
|
+
selectQueryBuilder.take(pagination.limit);
|
112
|
+
}
|
113
|
+
if (sortings && sortings.length > 0) {
|
114
|
+
sortings.forEach((sorting, index) => {
|
115
|
+
const sortField = sorting.name.split('.').length > 1 ? sorting.name : `${selectQueryBuilder.alias}.${sorting.name}`;
|
116
|
+
if (index === 0) {
|
117
|
+
selectQueryBuilder.orderBy(sortField, sorting.desc ? 'DESC' : 'ASC');
|
118
|
+
}
|
119
|
+
else {
|
120
|
+
selectQueryBuilder.addOrderBy(sortField, sorting.desc ? 'DESC' : 'ASC');
|
121
|
+
}
|
122
|
+
});
|
123
|
+
}
|
124
|
+
return selectQueryBuilder;
|
125
|
+
}
|
126
|
+
exports.getQueryBuilderFromListParams = getQueryBuilderFromListParams;
|
51
127
|
//# 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":";;;AAAA,
|
1
|
+
{"version":3,"file":"list-query-builder.js","sourceRoot":"","sources":["../../server/utils/list-query-builder.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,159 @@
|
|
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
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"where-clause-builder.js","sourceRoot":"","sources":["../../server/utils/where-clause-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.38",
|
4
4
|
"description": "Core module for framework",
|
5
5
|
"bin": {
|
6
6
|
"things-factory": "bin/things-factory",
|
@@ -36,7 +36,7 @@
|
|
36
36
|
"@graphql-tools/schema": "^8.3.2",
|
37
37
|
"@graphql-tools/utils": "^8.6.2",
|
38
38
|
"@hatiolab/koa-webpack": "^6.0.0",
|
39
|
-
"@hatiolab/things-scene": "^
|
39
|
+
"@hatiolab/things-scene": "^3.0.0",
|
40
40
|
"@koa/cors": "^3.1.0",
|
41
41
|
"@material/mwc-button": "^0.25.3",
|
42
42
|
"@material/mwc-fab": "^0.25.3",
|
@@ -44,16 +44,16 @@
|
|
44
44
|
"@material/mwc-icon-button": "^0.25.3",
|
45
45
|
"@material/mwc-slider": "^0.25.3",
|
46
46
|
"@material/mwc-textfield": "^0.25.3",
|
47
|
-
"@operato/board": "1.0.0-beta.
|
48
|
-
"@operato/graphql": "1.0.0-beta.
|
49
|
-
"@operato/help": "1.0.0-beta.
|
50
|
-
"@operato/layout": "1.0.0-beta.
|
51
|
-
"@operato/shell": "1.0.0-beta.
|
52
|
-
"@operato/utils": "1.0.0-beta.
|
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.
|
47
|
+
"@operato/board": "1.0.0-beta.5",
|
48
|
+
"@operato/graphql": "1.0.0-beta.5",
|
49
|
+
"@operato/help": "1.0.0-beta.5",
|
50
|
+
"@operato/layout": "1.0.0-beta.5",
|
51
|
+
"@operato/shell": "1.0.0-beta.5",
|
52
|
+
"@operato/utils": "1.0.0-beta.5",
|
53
|
+
"@things-factory/ejs-remote": "^5.0.0-alpha.38",
|
54
|
+
"@things-factory/env": "^5.0.0-alpha.38",
|
55
|
+
"@things-factory/styles": "^5.0.0-alpha.38",
|
56
|
+
"@things-factory/utils": "^5.0.0-alpha.38",
|
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",
|
@@ -129,5 +129,5 @@
|
|
129
129
|
"resolutions": {
|
130
130
|
"core-js": "^3.16.0"
|
131
131
|
},
|
132
|
-
"gitHead": "
|
132
|
+
"gitHead": "b5e6badbf7bfb3e509c5d065da635da7c084ffce"
|
133
133
|
}
|
@@ -5,12 +5,13 @@ export const buildCondition = function (
|
|
5
5
|
fieldName: string,
|
6
6
|
operator: string,
|
7
7
|
value: any,
|
8
|
-
relation: boolean,
|
8
|
+
relation: boolean | string,
|
9
9
|
seq: number
|
10
10
|
) {
|
11
11
|
seq++
|
12
12
|
|
13
13
|
fieldName = _.snakeCase(fieldName)
|
14
|
+
const values = value instanceof Array ? value : [value]
|
14
15
|
|
15
16
|
switch (operator) {
|
16
17
|
case 'eq':
|
@@ -75,24 +76,23 @@ export const buildCondition = function (
|
|
75
76
|
}
|
76
77
|
|
77
78
|
case 'in':
|
78
|
-
const clause = relation ? `${fieldName}.id IN (:...args${seq})` : `${alias}.${fieldName} IN (:...args${seq})`
|
79
|
-
value = value?.length ? value : [value]
|
80
79
|
return {
|
81
|
-
clause
|
82
|
-
parameters: { [`args${seq}`]:
|
80
|
+
clause: relation ? `${fieldName}.id IN (:...args${seq})` : `${alias}.${fieldName} IN (:...args${seq})`,
|
81
|
+
parameters: { [`args${seq}`]: values }
|
83
82
|
}
|
83
|
+
|
84
84
|
case 'notin':
|
85
|
-
value = value?.length ? value : [value]
|
86
85
|
return {
|
87
|
-
clause: `${alias}.${fieldName} NOT IN (:...args${seq})`,
|
88
|
-
parameters: { [`args${seq}`]:
|
86
|
+
clause: relation ? `${fieldName}.id NOT IN (:...args${seq})` : `${alias}.${fieldName} NOT IN (:...args${seq})`,
|
87
|
+
parameters: { [`args${seq}`]: values }
|
89
88
|
}
|
90
89
|
|
91
90
|
case 'notin_with_null':
|
92
|
-
value = value?.length ? value : [value]
|
93
91
|
return {
|
94
|
-
clause:
|
95
|
-
|
92
|
+
clause: relation
|
93
|
+
? `(${fieldName}.id IS NULL OR ${fieldName}.id NOT IN (:...args${seq})`
|
94
|
+
: `${alias}.${fieldName} IS NULL OR ${alias}.${fieldName} NOT IN (:...args${seq}))`,
|
95
|
+
parameters: { [`args${seq}`]: values }
|
96
96
|
}
|
97
97
|
|
98
98
|
case 'is_null':
|
@@ -135,7 +135,7 @@ export const buildCondition = function (
|
|
135
135
|
case 'between':
|
136
136
|
return {
|
137
137
|
clause: `${alias}.${fieldName} BETWEEN :args${seq}_1 AND :args${seq}_2`,
|
138
|
-
parameters: { [`args${seq}_1`]:
|
138
|
+
parameters: { [`args${seq}_1`]: values[0], [`args${seq}_2`]: values[1] }
|
139
139
|
}
|
140
140
|
}
|
141
141
|
}
|
@@ -31,7 +31,7 @@ function getOperatorFunction({ operator, value }: { operator: string; value: any
|
|
31
31
|
return OPERATION_FUNCTION_MAP[operator](value)
|
32
32
|
}
|
33
33
|
|
34
|
-
function makePaginationParams(pagination: Pagination) {
|
34
|
+
function makePaginationParams(pagination: Pagination): { skip?: number; take?: number } {
|
35
35
|
var result = {} as { skip?: number; take?: number }
|
36
36
|
if (pagination) {
|
37
37
|
var { page = 0, limit = 0 } = pagination
|
@@ -51,7 +51,7 @@ function makePaginationParams(pagination: Pagination) {
|
|
51
51
|
return result
|
52
52
|
}
|
53
53
|
|
54
|
-
function makeSortingParams(sortings: Sorting[]) {
|
54
|
+
function makeSortingParams(sortings: Sorting[]): { order?: { [name: string]: 'DESC' | 'ASC' } } {
|
55
55
|
var result = {} as { order?: { [name: string]: 'DESC' | 'ASC' } }
|
56
56
|
if (sortings) {
|
57
57
|
var order = {} as { [name: string]: 'DESC' | 'ASC' }
|
@@ -67,7 +67,9 @@ function makeSortingParams(sortings: Sorting[]) {
|
|
67
67
|
return result
|
68
68
|
}
|
69
69
|
|
70
|
-
function makeFilterParams(filters: Filter[]) {
|
70
|
+
function makeFilterParams(filters: Filter[]): {
|
71
|
+
where: { [name: string]: FindOperator<any> } | { [name: string]: FindOperator<any> }[]
|
72
|
+
} {
|
71
73
|
/* for where AND clauses */
|
72
74
|
const columnFilters = filters.filter(filter => filter.operator !== 'search')
|
73
75
|
const columnWhere = columnFilters.reduce((where, f) => {
|
@@ -1,6 +1,9 @@
|
|
1
|
-
import { Brackets } from 'typeorm'
|
1
|
+
import { Brackets, Repository, SelectQueryBuilder } from 'typeorm'
|
2
|
+
import { ColumnMetadata } from 'typeorm/metadata/ColumnMetadata'
|
2
3
|
|
4
|
+
import { Domain } from '../service/domain/domain'
|
3
5
|
import { buildCondition } from './condition-builder'
|
6
|
+
import { buildWhereClause } from './where-clause-builder'
|
4
7
|
|
5
8
|
export const buildQuery = function (queryBuilder: any, params: any, context: any, domainRef: Boolean = true) {
|
6
9
|
const columnFilters = params.filters?.filter(filter => filter.operator !== 'search') || []
|
@@ -58,3 +61,92 @@ export const buildQuery = function (queryBuilder: any, params: any, context: any
|
|
58
61
|
})
|
59
62
|
}
|
60
63
|
}
|
64
|
+
|
65
|
+
export function getQueryBuilderFromListParams<Type>(options: {
|
66
|
+
repository: Repository<Type>
|
67
|
+
params: any
|
68
|
+
domain?: Domain
|
69
|
+
alias?: string
|
70
|
+
}): SelectQueryBuilder<Type> {
|
71
|
+
var { repository, params, domain, alias } = options
|
72
|
+
const selectQueryBuilder = repository.createQueryBuilder(alias)
|
73
|
+
alias = selectQueryBuilder.alias
|
74
|
+
|
75
|
+
const columnFilters = params.filters?.filter(filter => filter.operator !== 'search') || []
|
76
|
+
const searchFilters = params.filters?.filter(filter => filter.operator === 'search') || []
|
77
|
+
const pagination = params.pagination
|
78
|
+
const sortings = params.sortings
|
79
|
+
|
80
|
+
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
|
+
|
88
|
+
if (columnFilters && columnFilters.length > 0) {
|
89
|
+
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)
|
104
|
+
})
|
105
|
+
}
|
106
|
+
|
107
|
+
if (searchFilters.length > 0) {
|
108
|
+
selectQueryBuilder.andWhere(
|
109
|
+
new Brackets(qb => {
|
110
|
+
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) selectQueryBuilder.orWhere(condition.clause)
|
124
|
+
if (condition?.parameters) selectQueryBuilder.setParameters(condition.parameters)
|
125
|
+
})
|
126
|
+
})
|
127
|
+
)
|
128
|
+
}
|
129
|
+
|
130
|
+
if (domain) {
|
131
|
+
selectQueryBuilder.andWhere(`${selectQueryBuilder.alias}.domain = :domain`, { domain: domain.id })
|
132
|
+
}
|
133
|
+
|
134
|
+
if (pagination && pagination.page > 0 && pagination.limit > 0) {
|
135
|
+
selectQueryBuilder.skip(pagination.limit * (pagination.page - 1))
|
136
|
+
selectQueryBuilder.take(pagination.limit)
|
137
|
+
}
|
138
|
+
|
139
|
+
if (sortings && sortings.length > 0) {
|
140
|
+
sortings.forEach((sorting, index) => {
|
141
|
+
const sortField =
|
142
|
+
sorting.name.split('.').length > 1 ? sorting.name : `${selectQueryBuilder.alias}.${sorting.name}`
|
143
|
+
if (index === 0) {
|
144
|
+
selectQueryBuilder.orderBy(sortField, sorting.desc ? 'DESC' : 'ASC')
|
145
|
+
} else {
|
146
|
+
selectQueryBuilder.addOrderBy(sortField, sorting.desc ? 'DESC' : 'ASC')
|
147
|
+
}
|
148
|
+
})
|
149
|
+
}
|
150
|
+
|
151
|
+
return selectQueryBuilder
|
152
|
+
}
|
@@ -0,0 +1,200 @@
|
|
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
|
+
}
|
package/db.test.sqlite
DELETED
Binary file
|