summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2020-09-03 15:29:34 +0200
committerJon Bratseth <bratseth@gmail.com>2020-09-03 15:29:34 +0200
commitbf46d861e0e7cc3380508a11fa2e5085427b2725 (patch)
treedbddce55f89474d75adb81dbcb48feb6158a45eb /container-search
parent842478eca170b3cc04408d80acafb252d7c19c26 (diff)
Allow varref in equiv
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/yql/YqlParser.java10
-rw-r--r--container-search/src/test/java/com/yahoo/search/yql/UserInputTestCase.java10
2 files changed, 16 insertions, 4 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java b/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java
index 3880ad594e3..739aae0e277 100644
--- a/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java
+++ b/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java
@@ -1283,7 +1283,7 @@ public class YqlParser implements Parser {
equiv.setIndexName(field);
for (OperatorNode<ExpressionOperator> arg : args) {
switch (arg.getOperator()) {
- case LITERAL:
+ case LITERAL: case VARREF:
equiv.addItem(instantiateWordItem(field, arg, equiv.getClass()));
break;
case CALL:
@@ -1292,7 +1292,7 @@ public class YqlParser implements Parser {
break;
default:
throw newUnexpectedArgumentException(arg.getOperator(),
- ExpressionOperator.CALL, ExpressionOperator.LITERAL);
+ ExpressionOperator.CALL, ExpressionOperator.LITERAL, ExpressionOperator.VARREF);
}
}
return leafStyleSettings(ast, equiv);
@@ -1353,7 +1353,8 @@ public class YqlParser implements Parser {
}
private Item instantiateWordItem(String field,
- OperatorNode<ExpressionOperator> ast, Class<?> parent,
+ OperatorNode<ExpressionOperator> ast,
+ Class<?> parent,
SegmentWhen segmentPolicy) {
String wordData = getStringContents(ast);
return instantiateWordItem(field, wordData, ast, parent, segmentPolicy, null, decideParsingLanguage(ast, wordData));
@@ -1369,7 +1370,8 @@ public class YqlParser implements Parser {
// which always expands first, but not using getIndex, which performs checks that doesn't always work
private Item instantiateWordItem(String field,
String rawWord,
- OperatorNode<ExpressionOperator> ast, Class<?> parent,
+ OperatorNode<ExpressionOperator> ast,
+ Class<?> parent,
SegmentWhen segmentPolicy,
Boolean exactMatch,
Language language) {
diff --git a/container-search/src/test/java/com/yahoo/search/yql/UserInputTestCase.java b/container-search/src/test/java/com/yahoo/search/yql/UserInputTestCase.java
index 6433270d691..06160e1c6d5 100644
--- a/container-search/src/test/java/com/yahoo/search/yql/UserInputTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/yql/UserInputTestCase.java
@@ -217,6 +217,16 @@ public class UserInputTestCase {
assertEquals("select * from sources * where myfield contains \"token\" | [{ 'continuations':['BCBCBCBEBG', 'BCBKCBACBKCCK'] }]all(group(f) each(output(count())));", query.yqlRepresentation());
}
+ @Test
+ public void testReferenceInEquiv() {
+ URIBuilder builder = searchUri();
+ builder.setParameter("term", "A");
+ builder.setParameter("yql",
+ "select foo from bar where fieldName contains equiv(@term,'B');");
+ Query query = searchAndAssertNoErrors(builder);
+ assertEquals("select foo from bar where fieldName contains equiv(\"A\", \"B\");", query.yqlRepresentation());
+ }
+
private Query searchAndAssertNoErrors(URIBuilder builder) {
Query query = new Query(builder.toString());
Result r = execution.search(query);