Skip to content

Commit 757be9f

Browse files
committed
[NAE-2460] PFQL placeholder support
- fix QueryLangEvaluator.handleInRangeStringComparison
1 parent e078a99 commit 757be9f

2 files changed

Lines changed: 52 additions & 9 deletions

File tree

src/main/java/com/netgrif/application/engine/pfql/service/QueryLangEvaluator.java

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -222,17 +222,29 @@ private String handleLoggedUserStringAttribute(QueryLangParser.LoggedUserStringA
222222

223223
/// returns pair, where the first element is left value and the second element is right value
224224
private Pair<String, String> handleInRangeStringComparison(QueryLangParser.StringRangeContext ctx) {
225-
String left = "", right = "";
225+
List<ParseTree> filteredChildren = ctx.children.stream()
226+
.filter(node -> node instanceof TerminalNode && ((TerminalNode) node).getSymbol().getType() == QueryLangParser.STRING
227+
|| node instanceof QueryLangParser.LoggedUserStringAttributeContext)
228+
.collect(Collectors.toList());
229+
230+
if (filteredChildren.size() < 2) {
231+
throw new IllegalArgumentException("Wrong in range values");
232+
}
226233

227-
if (ctx.STRING(0) != null) {
228-
left = getStringValue(ctx.STRING(0).getText());
229-
} else if (ctx.loggedUserStringAttribute(0) != null) {
230-
left = ctx.loggedUserStringAttribute(0).getText();
234+
String left;
235+
ParseTree leftNode = filteredChildren.get(0);
236+
if (leftNode instanceof TerminalNode) {
237+
left = getStringValue(leftNode.getText());
238+
} else {
239+
left = handleLoggedUserStringAttribute((QueryLangParser.LoggedUserStringAttributeContext) leftNode);
231240
}
232-
if (ctx.STRING(1) != null) {
233-
right = getStringValue(ctx.STRING(1).getText());
234-
} else if (ctx.loggedUserStringAttribute(1) != null) {
235-
right = ctx.loggedUserStringAttribute(1).getText();
241+
242+
String right;
243+
ParseTree rightNode = filteredChildren.get(1);
244+
if (rightNode instanceof TerminalNode) {
245+
right = getStringValue(rightNode.getText());
246+
} else {
247+
right = handleLoggedUserStringAttribute((QueryLangParser.LoggedUserStringAttributeContext) rightNode);
236248
}
237249

238250
return Pair.of(left, right);

src/test/java/com/netgrif/application/engine/pfql/QueryLangTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,22 @@ public void testSimpleMongodbCaseQuery() {
376376

377377
compareMongoQueries(mongoDbUtils, actual, expected);
378378

379+
actual = evaluateQuery("cases: title in ('test1' : loggedUser.username)").getFullMongoQuery();
380+
expected = QCase.case$.title.gt("test1").and(QCase.case$.title.lt(systemUser.getUsername()));
381+
382+
compareMongoQueries(mongoDbUtils, actual, expected);
383+
384+
actual = evaluateQuery("cases: title in (loggedUser.username : 'test1')").getFullMongoQuery();
385+
expected = QCase.case$.title.gt(systemUser.getUsername()).and(QCase.case$.title.lt("test1"));
386+
387+
compareMongoQueries(mongoDbUtils, actual, expected);
388+
389+
actual = evaluateQuery("cases: title in (loggedUser.username : loggedUser.fullName)").getFullMongoQuery();
390+
expected = QCase.case$.title.gt(systemUser.getUsername()).and(QCase.case$.title.lt(systemUser.getFullName()));
391+
392+
compareMongoQueries(mongoDbUtils, actual, expected);
393+
394+
379395
// only available for elastic query
380396
// places comparison
381397
actual = evaluateQuery("case: places.p1.marking eq 1").getFullMongoQuery();
@@ -1013,6 +1029,21 @@ public void testSimpleElasticCaseQuery() {
10131029

10141030
// data options comparison
10151031
checkStringComparisonElastic("case", "data.field1.options", "dataSet.field1.options");
1032+
1033+
actual = evaluateQuery("cases: title in ('test1' : loggedUser.username)").getFullElasticQuery();
1034+
expected = String.format("(title:>test1 AND title:<%s)", systemUser.getUsername());
1035+
1036+
assertEquals(expected, actual);
1037+
1038+
actual = evaluateQuery("cases: title in (loggedUser.username : 'test1')").getFullElasticQuery();
1039+
expected = String.format("(title:>%s AND title:<test1)", systemUser.getUsername());
1040+
1041+
assertEquals(expected, actual);
1042+
1043+
actual = evaluateQuery("cases: title in (loggedUser.username : loggedUser.fullName)").getFullElasticQuery();
1044+
expected = String.format("(title:>%s AND title:<%s)", systemUser.getUsername(), systemUser.getFullName());
1045+
1046+
assertEquals(expected, actual);
10161047
}
10171048

10181049
@Test

0 commit comments

Comments
 (0)