summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2021-10-21 17:00:08 +0200
committerGitHub <noreply@github.com>2021-10-21 17:00:08 +0200
commit92325edf62d94b9ad1d7888342bd856226ee6c60 (patch)
tree2852e4c7bf8d47dbc0dee1959a2c72bb88ef8bec
parent1ab456814f40defa32b2c17233d68b05584f015b (diff)
parentd1fd3f5dd8b4f44c4e8a36390273205e79f8728c (diff)
Merge pull request #19680 from vespa-engine/arnej/add-trueitem
add TrueItem
-rw-r--r--container-search/abi-spec.json18
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/TrueItem.java41
-rw-r--r--container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java12
-rw-r--r--container-search/src/main/java/com/yahoo/search/yql/YqlParser.java6
-rw-r--r--container-search/src/test/java/com/yahoo/search/yql/VespaSerializerTestCase.java3
-rw-r--r--container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java5
6 files changed, 82 insertions, 3 deletions
diff --git a/container-search/abi-spec.json b/container-search/abi-spec.json
index fc642ca7b22..d191659f085 100644
--- a/container-search/abi-spec.json
+++ b/container-search/abi-spec.json
@@ -1605,6 +1605,24 @@
],
"fields": []
},
+ "com.yahoo.prelude.query.TrueItem": {
+ "superClass": "com.yahoo.prelude.query.Item",
+ "interfaces": [],
+ "attributes": [
+ "public"
+ ],
+ "methods": [
+ "public void <init>()",
+ "public void setIndexName(java.lang.String)",
+ "public com.yahoo.prelude.query.Item$ItemType getItemType()",
+ "public java.lang.String getName()",
+ "protected void appendHeadingString(java.lang.StringBuilder)",
+ "public int encode(java.nio.ByteBuffer)",
+ "public int getTermCount()",
+ "protected void appendBodyString(java.lang.StringBuilder)"
+ ],
+ "fields": []
+ },
"com.yahoo.prelude.query.UriItem": {
"superClass": "com.yahoo.prelude.query.PhraseItem",
"interfaces": [],
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/TrueItem.java b/container-search/src/main/java/com/yahoo/prelude/query/TrueItem.java
new file mode 100644
index 00000000000..20aebd124e7
--- /dev/null
+++ b/container-search/src/main/java/com/yahoo/prelude/query/TrueItem.java
@@ -0,0 +1,41 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.prelude.query;
+
+import java.nio.ByteBuffer;
+
+/**
+ * A query item which matches everything.
+ *
+ * @author arnej
+ */
+public class TrueItem extends Item {
+
+ @Override
+ public void setIndexName(String index) {
+ throw new IllegalArgumentException("TrueItem should not have an index name");
+ }
+
+ @Override
+ public ItemType getItemType() { return ItemType.TRUE; }
+
+ @Override
+ public String getName() { return "TRUE"; }
+
+ /** Override to only return "TRUE" rather than "TRUE " */
+ @Override
+ protected void appendHeadingString(StringBuilder buffer) {
+ buffer.append(getName());
+ }
+
+ @Override
+ public int encode(ByteBuffer buffer) {
+ super.encodeThis(buffer);
+ return 1;
+ }
+
+ @Override
+ public int getTermCount() { return 0; }
+
+ @Override
+ protected void appendBodyString(StringBuilder buffer) { }
+}
diff --git a/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java b/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java
index 012f427a781..897bcde4fc3 100644
--- a/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java
+++ b/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java
@@ -97,6 +97,7 @@ import com.yahoo.prelude.query.SuffixItem;
import com.yahoo.prelude.query.TaggableItem;
import com.yahoo.prelude.query.ToolBox;
import com.yahoo.prelude.query.ToolBox.QueryVisitor;
+import com.yahoo.prelude.query.TrueItem;
import com.yahoo.prelude.query.UriItem;
import com.yahoo.prelude.query.WandItem;
import com.yahoo.prelude.query.WeakAndItem;
@@ -484,6 +485,16 @@ public class VespaSerializer {
}
+ private static class TrueSerializer extends Serializer<TrueItem> {
+ @Override
+ void onExit(StringBuilder destination, TrueItem item) { }
+ @Override
+ boolean serialize(StringBuilder destination, TrueItem item) {
+ destination.append("true");
+ return false;
+ }
+ }
+
private static class FalseSerializer extends Serializer<FalseItem> {
@Override
void onExit(StringBuilder destination, FalseItem item) { }
@@ -1205,6 +1216,7 @@ public class VespaSerializer {
dispatchBuilder.put(IntItem.class, new NumberSerializer());
dispatchBuilder.put(GeoLocationItem.class, new GeoLocationSerializer());
dispatchBuilder.put(BoolItem.class, new BoolSerializer());
+ dispatchBuilder.put(TrueItem.class, new TrueSerializer());
dispatchBuilder.put(FalseItem.class, new FalseSerializer());
dispatchBuilder.put(MarkerWordItem.class, new WordSerializer()); // gotcha
dispatchBuilder.put(NearItem.class, new NearSerializer());
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 fa2b9fd14e7..c688f61add0 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
@@ -62,6 +62,7 @@ import com.yahoo.prelude.query.TaggableItem;
import com.yahoo.prelude.query.TermItem;
import com.yahoo.prelude.query.ToolBox;
import com.yahoo.prelude.query.ToolBox.QueryVisitor;
+import com.yahoo.prelude.query.TrueItem;
import com.yahoo.prelude.query.UriItem;
import com.yahoo.prelude.query.WandItem;
import com.yahoo.prelude.query.WeakAndItem;
@@ -450,10 +451,13 @@ public class YqlParser implements Parser {
private Item buildLiteral(OperatorNode<ExpressionOperator> ast) {
var literal = ast.getArgument(0);
+ if (Boolean.TRUE.equals(literal)) {
+ return new TrueItem();
+ }
if (Boolean.FALSE.equals(literal)) {
return new FalseItem();
}
- throw newUnexpectedArgumentException(literal, Boolean.FALSE);
+ throw newUnexpectedArgumentException(literal, Boolean.FALSE, Boolean.TRUE);
}
private Item buildNearestNeighbor(OperatorNode<ExpressionOperator> ast) {
diff --git a/container-search/src/test/java/com/yahoo/search/yql/VespaSerializerTestCase.java b/container-search/src/test/java/com/yahoo/search/yql/VespaSerializerTestCase.java
index 308907df6b4..cc13658648d 100644
--- a/container-search/src/test/java/com/yahoo/search/yql/VespaSerializerTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/yql/VespaSerializerTestCase.java
@@ -143,7 +143,8 @@ public class VespaSerializerTestCase {
}
@Test
- public void testFalse() {
+ public void testTrueAndFalse() {
+ parseAndConfirm("true");
parseAndConfirm("false");
}
diff --git a/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java b/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java
index e7cba25d1ed..f9005387716 100644
--- a/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java
@@ -592,8 +592,11 @@ public class YqlParserTestCase {
}
@Test
- public void testFalse() {
+ public void testTrueAndFalse() {
+ assertParse("select foo from bar where true;", "TRUE");
assertParse("select foo from bar where false;", "FALSE");
+ assertParse("select foo from bar where ((title contains \"foo\") AND true) AND !((title contains \"bar\") or false);",
+ "+(AND title:foo TRUE) -(OR title:bar FALSE)");
}
@Test