Skip to content

Commit cbca319

Browse files
authored
feat: include fieldName and queryBuilder when calling resolveWhereClause (#66)
* Include fieldName and queryBuilder when calling resolveWhereClause
1 parent 7bf9eb3 commit cbca319

6 files changed

+52
-22
lines changed

src/PgConnectionArgFilterBackwardRelationsPlugin.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ module.exports = function PgConnectionArgFilterBackwardRelationsPlugin(
174174
return memo;
175175
}, {});
176176

177-
const resolve = ({ sourceAlias, fieldName, fieldValue }) => {
177+
const resolve = ({ sourceAlias, fieldName, fieldValue, queryBuilder }) => {
178178
if (fieldValue == null) return null;
179179

180180
const { table, foreignKeys, keys } = backwardRelationInfoByFieldName[
@@ -201,7 +201,8 @@ module.exports = function PgConnectionArgFilterBackwardRelationsPlugin(
201201
const sqlFragment = connectionFilterResolve(
202202
fieldValue,
203203
tableAlias,
204-
tableFilterTypeName
204+
tableFilterTypeName,
205+
queryBuilder
205206
);
206207

207208
return sqlFragment == null

src/PgConnectionArgFilterColumnsPlugin.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ module.exports = function PgConnectionArgFilterColumnsPlugin(builder) {
6767
{}
6868
);
6969

70-
const resolve = ({ sourceAlias, fieldName, fieldValue }) => {
70+
const resolve = ({ sourceAlias, fieldName, fieldValue, queryBuilder }) => {
7171
if (fieldValue == null) return null;
7272

7373
const attr = attrByFieldName[fieldName];
@@ -82,7 +82,9 @@ module.exports = function PgConnectionArgFilterColumnsPlugin(builder) {
8282
operatorName,
8383
input,
8484
attr.type,
85-
attr.typeModifier
85+
attr.typeModifier,
86+
fieldName,
87+
queryBuilder
8688
);
8789
})
8890
.filter(x => x != null);

src/PgConnectionArgFilterComputedColumnsPlugin.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ module.exports = function PgConnectionArgFilterComputedColumnsPlugin(builder) {
9191
{}
9292
);
9393

94-
const resolve = ({ sourceAlias, fieldName, fieldValue }) => {
94+
const resolve = ({ sourceAlias, fieldName, fieldValue, queryBuilder }) => {
9595
if (fieldValue == null) return null;
9696

9797
const proc = procByFieldName[fieldName];
@@ -108,7 +108,9 @@ module.exports = function PgConnectionArgFilterComputedColumnsPlugin(builder) {
108108
operatorName,
109109
input,
110110
procReturnType,
111-
null
111+
null,
112+
fieldName,
113+
queryBuilder
112114
);
113115
})
114116
.filter(x => x != null);

src/PgConnectionArgFilterForwardRelationsPlugin.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ module.exports = function PgConnectionArgFilterForwardRelationsPlugin(builder) {
113113
return memo;
114114
}, {});
115115

116-
const resolve = ({ sourceAlias, fieldName, fieldValue }) => {
116+
const resolve = ({ sourceAlias, fieldName, fieldValue, queryBuilder }) => {
117117
if (fieldValue == null) return null;
118118

119119
const {
@@ -147,7 +147,8 @@ module.exports = function PgConnectionArgFilterForwardRelationsPlugin(builder) {
147147
const sqlFragment = connectionFilterResolve(
148148
fieldValue,
149149
foreignTableAlias,
150-
foreignTableFilterTypeName
150+
foreignTableFilterTypeName,
151+
queryBuilder
151152
);
152153

153154
return sqlFragment == null

src/PgConnectionArgFilterLogicalOperatorsPlugin.js

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,27 +24,32 @@ module.exports = function PgConnectionArgFilterLogicalOperatorsPlugin(builder) {
2424
}
2525

2626
const logicResolversByFieldName = {
27-
and: (arr, sourceAlias) => {
27+
and: (arr, sourceAlias, queryBuilder) => {
2828
const sqlFragments = arr
29-
.map(o => connectionFilterResolve(o, sourceAlias, Self.name))
29+
.map(o =>
30+
connectionFilterResolve(o, sourceAlias, Self.name, queryBuilder)
31+
)
3032
.filter(x => x != null);
3133
return sqlFragments.length === 0
3234
? null
3335
: sql.query`(${sql.join(sqlFragments, ") and (")})`;
3436
},
35-
or: (arr, sourceAlias) => {
37+
or: (arr, sourceAlias, queryBuilder) => {
3638
const sqlFragments = arr
37-
.map(o => connectionFilterResolve(o, sourceAlias, Self.name))
39+
.map(o =>
40+
connectionFilterResolve(o, sourceAlias, Self.name, queryBuilder)
41+
)
3842
.filter(x => x != null);
3943
return sqlFragments.length === 0
4044
? null
4145
: sql.query`(${sql.join(sqlFragments, ") or (")})`;
4246
},
43-
not: (obj, sourceAlias) => {
47+
not: (obj, sourceAlias, queryBuilder) => {
4448
const sqlFragment = connectionFilterResolve(
4549
obj,
4650
sourceAlias,
47-
Self.name
51+
Self.name,
52+
queryBuilder
4853
);
4954
return sqlFragment == null ? null : sql.query`not (${sqlFragment})`;
5055
},
@@ -83,10 +88,14 @@ module.exports = function PgConnectionArgFilterLogicalOperatorsPlugin(builder) {
8388
),
8489
};
8590

86-
const resolve = ({ sourceAlias, fieldName, fieldValue }) => {
91+
const resolve = ({ sourceAlias, fieldName, fieldValue, queryBuilder }) => {
8792
if (fieldValue == null) return null;
8893

89-
return logicResolversByFieldName[fieldName](fieldValue, sourceAlias);
94+
return logicResolversByFieldName[fieldName](
95+
fieldValue,
96+
sourceAlias,
97+
queryBuilder
98+
);
9099
};
91100

92101
for (const fieldName of Object.keys(logicResolversByFieldName)) {

src/PgConnectionArgFilterPlugin.js

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,12 @@ module.exports = function PgConnectionArgFilterPlugin(
6464
const sqlFragment = connectionFilterResolve(
6565
args.filter,
6666
queryBuilder.getTableAlias(),
67-
filterTypeName
67+
filterTypeName,
68+
queryBuilder
6869
);
6970
if (sqlFragment != null) {
7071
queryBuilder.where(sqlFragment);
71-
}
72+
}
7273
}
7374
},
7475
};
@@ -187,7 +188,12 @@ module.exports = function PgConnectionArgFilterPlugin(
187188
!Array.isArray(obj) &&
188189
Object.keys(obj).length === 0;
189190

190-
const connectionFilterResolve = (obj, sourceAlias, typeName) => {
191+
const connectionFilterResolve = (
192+
obj,
193+
sourceAlias,
194+
typeName,
195+
queryBuilder
196+
) => {
191197
if (obj == null) return handleNullInput();
192198
if (isEmptyObject(obj)) return handleEmptyObjectInput();
193199

@@ -203,6 +209,7 @@ module.exports = function PgConnectionArgFilterPlugin(
203209
sourceAlias,
204210
fieldName: key,
205211
fieldValue: value,
212+
queryBuilder,
206213
});
207214
}
208215
throw new Error(`Unable to resolve filter field '${key}'`);
@@ -254,7 +261,7 @@ module.exports = function PgConnectionArgFilterPlugin(
254261
},
255262
true
256263
)
257-
);
264+
);
258265
};
259266

260267
const sqlValueFromInput = (input, inputResolver, pgType, pgTypeModifier) =>
@@ -293,7 +300,9 @@ module.exports = function PgConnectionArgFilterPlugin(
293300
operatorName,
294301
input,
295302
pgType,
296-
pgTypeModifier
303+
pgTypeModifier,
304+
fieldName,
305+
queryBuilder
297306
) => {
298307
if (input == null) return handleNullInput();
299308
if (isEmptyObject(input)) return handleEmptyObjectInput();
@@ -316,7 +325,13 @@ module.exports = function PgConnectionArgFilterPlugin(
316325
const sqlValue = operator.options.resolveWithRawInput
317326
? input
318327
: sqlValueFromInput(input, inputResolver, pgType, pgTypeModifier);
319-
return operator.resolveWhereClause(sqlIdentifier, sqlValue, input);
328+
return operator.resolveWhereClause(
329+
sqlIdentifier,
330+
sqlValue,
331+
input,
332+
fieldName,
333+
queryBuilder
334+
);
320335
};
321336

322337
const connectionFilterType = (

0 commit comments

Comments
 (0)