summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/query
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-10-18 13:53:23 +0200
committerJon Bratseth <bratseth@verizonmedia.com>2019-10-18 13:53:23 +0200
commitb24c9357bffd09f89973b68c9c554a247feb75bb (patch)
treee2acf4797b2c276109265c34723296486bc33c52 /container-search/src/main/java/com/yahoo/search/query
parent4331d28a447b57d0918078897757540fa06354b7 (diff)
Allow old style select with query profile types
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/query')
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/Select.java10
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/SelectParser.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/profile/QueryProfileProperties.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java41
4 files changed, 39 insertions, 16 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/Select.java b/container-search/src/main/java/com/yahoo/search/query/Select.java
index f2a534a014e..cb662dcd671 100644
--- a/container-search/src/main/java/com/yahoo/search/query/Select.java
+++ b/container-search/src/main/java/com/yahoo/search/query/Select.java
@@ -37,6 +37,7 @@ public class Select implements Cloneable {
private String where;
private String grouping;
+ private String groupingExpressionString;
static {
argumentType = new QueryProfileType(SELECT);
@@ -107,6 +108,15 @@ public class Select implements Cloneable {
}
}
+ /**
+ * Sets the grouping expression string directly.
+ * This will not be parsed by this but will be accessed later by GroupingQueryParser.
+ */
+ public void setGroupingExpressionString(String groupingExpressionString) {
+ this.groupingExpressionString = groupingExpressionString;
+ }
+
+ public String getGroupingExpressionString() { return groupingExpressionString; }
/** Returns the grouping in the query */
public String getGroupingString(){
diff --git a/container-search/src/main/java/com/yahoo/search/query/SelectParser.java b/container-search/src/main/java/com/yahoo/search/query/SelectParser.java
index 7540f06266c..83e6e122a8a 100644
--- a/container-search/src/main/java/com/yahoo/search/query/SelectParser.java
+++ b/container-search/src/main/java/com/yahoo/search/query/SelectParser.java
@@ -210,7 +210,7 @@ public class SelectParser implements Parser {
List<String> operations = new ArrayList<>();
Inspector inspector = SlimeUtils.jsonToSlime(grouping.getBytes()).get();
if (inspector.field("error_message").valid()){
- throw new QueryException("Illegal query: "+inspector.field("error_message").asString() +
+ throw new QueryException("Illegal query: " + inspector.field("error_message").asString() +
" at: '" + new String(inspector.field("offending_input").asData(), StandardCharsets.UTF_8) + "'");
}
diff --git a/container-search/src/main/java/com/yahoo/search/query/profile/QueryProfileProperties.java b/container-search/src/main/java/com/yahoo/search/query/profile/QueryProfileProperties.java
index 3e1f664cf87..ea79b10d779 100644
--- a/container-search/src/main/java/com/yahoo/search/query/profile/QueryProfileProperties.java
+++ b/container-search/src/main/java/com/yahoo/search/query/profile/QueryProfileProperties.java
@@ -45,7 +45,7 @@ public class QueryProfileProperties extends Properties {
/** Gets a value from the query profile, or from the nested profile if the value is null */
@Override
- public Object get(CompoundName name, Map<String,String> context,
+ public Object get(CompoundName name, Map<String, String> context,
com.yahoo.processing.request.Properties substitution) {
name = unalias(name, context);
Object value = null;
diff --git a/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java b/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java
index 71752f6ad87..4cdd4488f7b 100644
--- a/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java
+++ b/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java
@@ -101,17 +101,22 @@ public class QueryProperties extends Properties {
if (key.last().equals(Matching.MINHITSPERTHREAD)) return matching.getMinHitsPerThread();
}
- else if (key.size()>2) {
+ else if (key.size() > 2) {
// pass the portion after "ranking.features/properties" down
if (key.get(1).equals(Ranking.FEATURES)) return ranking.getFeatures().getObject(key.rest().rest().toString());
if (key.get(1).equals(Ranking.PROPERTIES)) return ranking.getProperties().get(key.rest().rest().toString());
}
}
- else if (key.size()==2 && key.first().equals(Select.SELECT)) {
- if (key.last().equals(Select.WHERE)) return query.getSelect().getWhereString();
- if (key.last().equals(Select.GROUPING)) return query.getSelect().getGroupingString();
+ else if (key.first().equals(Select.SELECT)) {
+ if (key.size() == 1) {
+ return query.getSelect().getGroupingExpressionString();
+ }
+ else if (key.size() == 2) {
+ if (key.last().equals(Select.WHERE)) return query.getSelect().getWhereString();
+ if (key.last().equals(Select.GROUPING)) return query.getSelect().getGroupingString();
+ }
}
- else if (key.size()==2 && key.first().equals(Presentation.PRESENTATION)) {
+ else if (key.size() == 2 && key.first().equals(Presentation.PRESENTATION)) {
if (key.last().equals(Presentation.BOLDING)) return query.getPresentation().getBolding();
if (key.last().equals(Presentation.SUMMARY)) return query.getPresentation().getSummary();
if (key.last().equals(Presentation.FORMAT)) return query.getPresentation().getFormat();
@@ -144,7 +149,7 @@ public class QueryProperties extends Properties {
public void set(CompoundName key, Object value, Map<String,String> context) {
// Note: The defaults here are never used
try {
- if (key.size()==2 && key.first().equals(Model.MODEL)) {
+ if (key.size() == 2 && key.first().equals(Model.MODEL)) {
Model model = query.getModel();
if (key.last().equals(Model.QUERY_STRING))
model.setQueryString(asString(value, ""));
@@ -171,7 +176,7 @@ public class QueryProperties extends Properties {
}
else if (key.first().equals(Ranking.RANKING)) {
Ranking ranking = query.getRanking();
- if (key.size()==2) {
+ if (key.size() == 2) {
if (key.last().equals(Ranking.LOCATION))
ranking.setLocation(asString(value,""));
else if (key.last().equals(Ranking.PROFILE))
@@ -225,7 +230,7 @@ public class QueryProperties extends Properties {
if (key.last().equals(Matching.NUMSEARCHPARTITIIONS)) matching.setNumSearchPartitions(asInteger(value, 1));
if (key.last().equals(Matching.MINHITSPERTHREAD)) matching.setMinHitsPerThread(asInteger(value, 0));
}
- else if (key.size()>2) {
+ else if (key.size() > 2) {
String restKey = key.rest().rest().toString();
if (key.get(1).equals(Ranking.FEATURES))
setRankingFeature(query, restKey, toSpecifiedType(restKey, value, profileRegistry.getTypeRegistry().getComponent("features")));
@@ -235,7 +240,7 @@ public class QueryProperties extends Properties {
throwIllegalParameter(key.rest().toString(),Ranking.RANKING);
}
}
- else if (key.size()==2 && key.first().equals(Presentation.PRESENTATION)) {
+ else if (key.size() == 2 && key.first().equals(Presentation.PRESENTATION)) {
if (key.last().equals(Presentation.BOLDING))
query.getPresentation().setBolding(asBoolean(value, true));
else if (key.last().equals(Presentation.SUMMARY))
@@ -249,11 +254,19 @@ public class QueryProperties extends Properties {
else
throwIllegalParameter(key.last(), Presentation.PRESENTATION);
}
- else if (key.size()==2 && key.first().equals(Select.SELECT)) {
- if (key.last().equals(Select.WHERE)){
- query.getSelect().setWhereString(asString(value, ""));
- } else if (key.last().equals(Select.GROUPING)) {
- query.getSelect().setGroupingString(asString(value, ""));
+ else if (key.first().equals(Select.SELECT)) {
+ if (key.size() == 1) {
+ query.getSelect().setGroupingExpressionString(asString(value, ""));
+ }
+ else if (key.size() == 2) {
+ if (key.last().equals(Select.WHERE)) {
+ query.getSelect().setWhereString(asString(value, ""));
+ } else if (key.last().equals(Select.GROUPING)) {
+ query.getSelect().setGroupingString(asString(value, ""));
+ }
+ }
+ else {
+ throwIllegalParameter(key.last(), Select.SELECT);
}
}
else if (key.first().equals("rankfeature") || key.first().equals("featureoverride") ) { // featureoverride is deprecated