|  | @@ -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());
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 |