diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2019-10-18 13:53:23 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2019-10-18 13:53:23 +0200 |
commit | b24c9357bffd09f89973b68c9c554a247feb75bb (patch) | |
tree | e2acf4797b2c276109265c34723296486bc33c52 /container-search/src/main/java/com/yahoo/search/query | |
parent | 4331d28a447b57d0918078897757540fa06354b7 (diff) |
Allow old style select with query profile types
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/query')
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 |