diff options
author | Jon Bratseth <bratseth@gmail.com> | 2021-12-21 12:36:58 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2021-12-21 12:36:58 +0100 |
commit | 793bc708b0554ba84cf209363bdde9a555c69740 (patch) | |
tree | e14eca6017c135663764b322c14e6d32a54f19c4 /container-search | |
parent | 811e7036517781a863c5a326a9f24957a2866ceb (diff) |
Allow keywords as YQL properties without quoting
Diffstat (limited to 'container-search')
6 files changed, 17 insertions, 17 deletions
diff --git a/container-search/src/main/antlr4/com/yahoo/search/yql/yqlplus.g4 b/container-search/src/main/antlr4/com/yahoo/search/yql/yqlplus.g4 index 8b0ebcf98fc..6193cabeaa7 100644 --- a/container-search/src/main/antlr4/com/yahoo/search/yql/yqlplus.g4 +++ b/container-search/src/main/antlr4/com/yahoo/search/yql/yqlplus.g4 @@ -270,7 +270,7 @@ sequence_source ; namespaced_name - : (ident (DOT ident)* (DOT STAR)?) + : (dotted_idents (DOT STAR)?) ; orderby @@ -450,12 +450,12 @@ propertyNameAndValue ; propertyName - : dottedIdentifiers + : dotted_idents | STRING ; -dottedIdentifiers - : IDENTIFIER (DOT IDENTIFIER)* +dotted_idents + : ident (DOT ident)* ; constantExpression 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 3e7084acc56..cc441eb0c3d 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 @@ -1485,7 +1485,7 @@ public class VespaSerializer { private static void serializeOrigin(StringBuilder destination, String image, int offset, int length) { destination.append(ORIGIN).append(": {").append(ORIGIN_ORIGINAL).append(": \""); escape(image, destination); - destination.append("\", '").append(ORIGIN_OFFSET).append("': ") + destination.append("\", ").append(ORIGIN_OFFSET).append(": ") .append(offset).append(", ").append(ORIGIN_LENGTH) .append(": ").append(length).append("}"); } diff --git a/container-search/src/test/java/com/yahoo/search/yql/MinimalQueryInserterTestCase.java b/container-search/src/test/java/com/yahoo/search/yql/MinimalQueryInserterTestCase.java index 36e8830004b..76241dfced3 100644 --- a/container-search/src/test/java/com/yahoo/search/yql/MinimalQueryInserterTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/yql/MinimalQueryInserterTestCase.java @@ -345,7 +345,7 @@ public class MinimalQueryInserterTestCase { public void testAndSegmenting() { Query query = new Query("?yql=select%20%2A%20from%20sources%20%2A%20where%20%5B%7B%22defaultIndex%22%3A%20%22default%22%2C%22grammar%22%3A%20%22web%22%2C%22stem%22%3A%20true%2C%22allowEmpty%22%3A%20true%7D%5DuserInput%28%40animal%29%3B&animal=m%26m%27s&tracelevel=3"); execution.search(query); - assertEquals("select * from sources * where (default contains \"m\" AND default contains ([{origin: {original: \"m\\'s\", 'offset': 0, length: 3}, andSegmenting: true}]phrase(\"m\", \"s\")));", + assertEquals("select * from sources * where (default contains \"m\" AND default contains ([{origin: {original: \"m\\'s\", offset: 0, length: 3}, andSegmenting: true}]phrase(\"m\", \"s\")));", query.yqlRepresentation()); } 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 b220be83b18..cc1a275af5a 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 @@ -83,7 +83,7 @@ public class UserInputTestCase { builder.setParameter("yql", "select * from sources * where [{grammar: \"segment\"}]userInput(\"nal le\")"); Query query = searchAndAssertNoErrors(builder); - assertEquals("select * from sources * where default contains ([{origin: {original: \"nal le\", 'offset': 0, length: 6}}]phrase(\"nal\", \"le\"));", query.yqlRepresentation()); + assertEquals("select * from sources * where default contains ([{origin: {original: \"nal le\", offset: 0, length: 6}}]phrase(\"nal\", \"le\"));", query.yqlRepresentation()); } @Test 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 d1759daae47..7057f996041 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 @@ -242,7 +242,7 @@ public class VespaSerializerTestCase { phraseSegment.setLabel("labeled"); phraseSegment.lock(); String q = VespaSerializer.serialize(phraseSegment); - assertEquals("someIndexName contains ([{origin: {original: \"abc\", 'offset': 0, length: 3}, label: \"labeled\"}]phrase(\"a\", \"b\"))", q); + assertEquals("someIndexName contains ([{origin: {original: \"abc\", offset: 0, length: 3}, label: \"labeled\"}]phrase(\"a\", \"b\"))", q); } @Test @@ -261,12 +261,12 @@ public class VespaSerializerTestCase { andSegment.addItem(new WordItem("b", "indexNamePlaceholder")); andSegment.setLabel("labeled"); String q = VespaSerializer.serialize(andSegment); - assertEquals("indexNamePlaceholder contains ([{origin: {original: \"abc\", 'offset': 0, length: 3}, andSegmenting: true}]phrase(\"a\", \"b\"))", q); + assertEquals("indexNamePlaceholder contains ([{origin: {original: \"abc\", offset: 0, length: 3}, andSegmenting: true}]phrase(\"a\", \"b\"))", q); andSegment.setIndexName("someIndexName"); andSegment.lock(); q = VespaSerializer.serialize(andSegment); - assertEquals("someIndexName contains ([{origin: {original: \"abc\", 'offset': 0, length: 3}, andSegmenting: true}]phrase(\"a\", \"b\"))", q); + assertEquals("someIndexName contains ([{origin: {original: \"abc\", offset: 0, length: 3}, andSegmenting: true}]phrase(\"a\", \"b\"))", q); } @Test @@ -276,7 +276,7 @@ public class VespaSerializerTestCase { @Test public void testPhraseSegmentInPhrase() { - parseAndConfirm("description contains phrase(\"a\", \"b\", ([{origin: {original: \"c d\", 'offset': 0, length: 3}}]phrase(\"c\", \"d\")))"); + parseAndConfirm("description contains phrase(\"a\", \"b\", ([{origin: {original: \"c d\", offset: 0, length: 3}}]phrase(\"c\", \"d\")))"); } @Test @@ -432,14 +432,14 @@ public class VespaSerializerTestCase { @Test public void testWordAlternatives() { - parseAndConfirm("foo contains" + " ([{origin: {original: \" trees \", 'offset': 1, length: 5}}]" + parseAndConfirm("foo contains" + " ([{origin: {original: \" trees \", offset: 1, length: 5}}]" + "alternatives({\"trees\": 1.0, \"tree\": 0.7}))"); } @Test public void testWordAlternativesInPhrase() { parseAndConfirm("foo contains phrase(\"forest\"," - + " ([{origin: {original: \" trees \", 'offset': 1, length: 5}}]" + + " ([{origin: {original: \" trees \", offset: 1, length: 5}}]" + "alternatives({\"trees\": 1.0, \"tree\": 0.7}))" + ")"); } 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 ec326f4bdad..c555505327c 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 @@ -314,7 +314,7 @@ public class YqlParserTestCase { "([ {ranked: false} ]\"colors\")").isRanked()); Substring origin = getRootWord("select foo from bar where baz contains " + - "([ {origin: {original: \"abc\", 'offset': 1, length: 2}} ]" + + "([ {origin: {original: \"abc\", offset: 1, length: 2}} ]" + "\"colors\")").getOrigin(); assertEquals("abc", origin.string); assertEquals(1, origin.start); @@ -350,7 +350,7 @@ public class YqlParserTestCase { @Test public void testNestedPhraseSegment() { assertParse("select foo from bar where baz contains " + - "phrase(\"a\", \"b\", [ {origin: {original: \"c d\", 'offset': 0, length: 3}} ]" + + "phrase(\"a\", \"b\", [ {origin: {original: \"c d\", offset: 0, length: 3}} ]" + "phrase(\"c\", \"d\"));", "baz:\"a b 'c d'\""); } @@ -969,7 +969,7 @@ public class YqlParserTestCase { @Test public void testWordAlternativesWithOrigin() { QueryTree q = parse("select * from sources * where foo contains" + - " ([{origin: {original: \" trees \", 'offset': 1, length: 5}}]" + + " ([{origin: {original: \" trees \", offset: 1, length: 5}}]" + "alternatives({trees: 1.0, tree: 0.7}))"); Item root = q.getRoot(); assertSame(WordAlternativesItem.class, root.getClass()); @@ -1071,7 +1071,7 @@ public class YqlParserTestCase { @Test public void testAndSegmenting() { - parse("select * from sources * where (default contains ([{stem: false}]\"m\") AND default contains ([{origin: {original: \"m\'s\", 'offset': 0, length: 3}, andSegmenting: true}]phrase(\"m\", \"s\"))) timeout 472"); + parse("select * from sources * where (default contains ([{stem: false}]\"m\") AND default contains ([{origin: {original: \"m\'s\", offset: 0, length: 3}, andSegmenting: true}]phrase(\"m\", \"s\"))) timeout 472"); } private void assertUrlQuery(String field, Query query, boolean startAnchor, boolean endAnchor, boolean endAnchorIsDefault) { |