|
@@ -15,12 +15,15 @@ import org.elasticsearch.xpack.sql.analysis.index.MappingException;
|
|
|
import org.elasticsearch.xpack.sql.expression.Expression;
|
|
|
import org.elasticsearch.xpack.sql.expression.function.FunctionRegistry;
|
|
|
import org.elasticsearch.xpack.sql.expression.function.scalar.math.MathProcessor.MathOperation;
|
|
|
+import org.elasticsearch.xpack.sql.expression.gen.script.ScriptTemplate;
|
|
|
import org.elasticsearch.xpack.sql.parser.SqlParser;
|
|
|
+import org.elasticsearch.xpack.sql.plan.logical.Aggregate;
|
|
|
import org.elasticsearch.xpack.sql.plan.logical.Filter;
|
|
|
import org.elasticsearch.xpack.sql.plan.logical.LogicalPlan;
|
|
|
import org.elasticsearch.xpack.sql.plan.logical.Project;
|
|
|
import org.elasticsearch.xpack.sql.planner.QueryTranslator.QueryTranslation;
|
|
|
import org.elasticsearch.xpack.sql.querydsl.agg.AggFilter;
|
|
|
+import org.elasticsearch.xpack.sql.querydsl.agg.GroupByScriptKey;
|
|
|
import org.elasticsearch.xpack.sql.querydsl.query.ExistsQuery;
|
|
|
import org.elasticsearch.xpack.sql.querydsl.query.NotQuery;
|
|
|
import org.elasticsearch.xpack.sql.querydsl.query.Query;
|
|
@@ -392,4 +395,30 @@ public class QueryTranslatorTests extends ESTestCase {
|
|
|
assertThat(aggFilter.scriptTemplate().params().toString(), startsWith("[{a=MAX(int){a->"));
|
|
|
assertThat(aggFilter.scriptTemplate().params().toString(), endsWith(", {v=10}]"));
|
|
|
}
|
|
|
+
|
|
|
+ public void testTranslateCoalesce_GroupBy_Painless() {
|
|
|
+ LogicalPlan p = plan("SELECT COALESCE(int, 10) FROM test GROUP BY 1");
|
|
|
+ assertTrue(p instanceof Aggregate);
|
|
|
+ Expression condition = ((Aggregate) p).groupings().get(0);
|
|
|
+ assertFalse(condition.foldable());
|
|
|
+ QueryTranslator.GroupingContext groupingContext = QueryTranslator.groupBy(((Aggregate) p).groupings());
|
|
|
+ assertNotNull(groupingContext);
|
|
|
+ ScriptTemplate scriptTemplate = ((GroupByScriptKey) groupingContext.tail).script();
|
|
|
+ assertEquals("InternalSqlScriptUtils.coalesce([InternalSqlScriptUtils.docValue(doc,params.v0),params.v1])",
|
|
|
+ scriptTemplate.toString());
|
|
|
+ assertEquals("[{v=int}, {v=10}]", scriptTemplate.params().toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testTranslateNullIf_GroupBy_Painless() {
|
|
|
+ LogicalPlan p = plan("SELECT NULLIF(int, 10) FROM test GROUP BY 1");
|
|
|
+ assertTrue(p instanceof Aggregate);
|
|
|
+ Expression condition = ((Aggregate) p).groupings().get(0);
|
|
|
+ assertFalse(condition.foldable());
|
|
|
+ QueryTranslator.GroupingContext groupingContext = QueryTranslator.groupBy(((Aggregate) p).groupings());
|
|
|
+ assertNotNull(groupingContext);
|
|
|
+ ScriptTemplate scriptTemplate = ((GroupByScriptKey) groupingContext.tail).script();
|
|
|
+ assertEquals("InternalSqlScriptUtils.nullif(InternalSqlScriptUtils.docValue(doc,params.v0),params.v1)",
|
|
|
+ scriptTemplate.toString());
|
|
|
+ assertEquals("[{v=int}, {v=10}]", scriptTemplate.params().toString());
|
|
|
+ }
|
|
|
}
|