@@ -252,9 +252,8 @@ public void testTranslateIsNotNullExpression_WhereClause_Painless() {
252252
253253 public void testTranslateIsNullExpression_HavingClause_Painless () {
254254 LogicalPlan p = plan ("SELECT keyword, max(int) FROM test GROUP BY keyword HAVING max(int) IS NULL" );
255- assertTrue (p instanceof Project );
256- assertTrue (p .children ().get (0 ) instanceof Filter );
257- Expression condition = ((Filter ) p .children ().get (0 )).condition ();
255+ assertTrue (p instanceof Filter );
256+ Expression condition = ((Filter ) p ).condition ();
258257 assertFalse (condition .foldable ());
259258 QueryTranslation translation = QueryTranslator .toQuery (condition , true );
260259 assertNull (translation .query );
@@ -266,9 +265,8 @@ public void testTranslateIsNullExpression_HavingClause_Painless() {
266265
267266 public void testTranslateIsNotNullExpression_HavingClause_Painless () {
268267 LogicalPlan p = plan ("SELECT keyword, max(int) FROM test GROUP BY keyword HAVING max(int) IS NOT NULL" );
269- assertTrue (p instanceof Project );
270- assertTrue (p .children ().get (0 ) instanceof Filter );
271- Expression condition = ((Filter ) p .children ().get (0 )).condition ();
268+ assertTrue (p instanceof Filter );
269+ Expression condition = ((Filter ) p ).condition ();
272270 assertFalse (condition .foldable ());
273271 QueryTranslation translation = QueryTranslator .toQuery (condition , true );
274272 assertNull (translation .query );
@@ -335,9 +333,8 @@ public void testTranslateInExpression_WhereClause_Painless() {
335333
336334 public void testTranslateInExpression_HavingClause_Painless () {
337335 LogicalPlan p = plan ("SELECT keyword, max(int) FROM test GROUP BY keyword HAVING max(int) IN (10, 20, 30 - 10)" );
338- assertTrue (p instanceof Project );
339- assertTrue (p .children ().get (0 ) instanceof Filter );
340- Expression condition = ((Filter ) p .children ().get (0 )).condition ();
336+ assertTrue (p instanceof Filter );
337+ Expression condition = ((Filter ) p ).condition ();
341338 assertFalse (condition .foldable ());
342339 QueryTranslation translation = QueryTranslator .toQuery (condition , true );
343340 assertNull (translation .query );
@@ -350,9 +347,8 @@ public void testTranslateInExpression_HavingClause_Painless() {
350347
351348 public void testTranslateInExpression_HavingClause_PainlessOneArg () {
352349 LogicalPlan p = plan ("SELECT keyword, max(int) FROM test GROUP BY keyword HAVING max(int) IN (10, 30 - 20)" );
353- assertTrue (p instanceof Project );
354- assertTrue (p .children ().get (0 ) instanceof Filter );
355- Expression condition = ((Filter ) p .children ().get (0 )).condition ();
350+ assertTrue (p instanceof Filter );
351+ Expression condition = ((Filter ) p ).condition ();
356352 assertFalse (condition .foldable ());
357353 QueryTranslation translation = QueryTranslator .toQuery (condition , true );
358354 assertNull (translation .query );
@@ -366,9 +362,8 @@ public void testTranslateInExpression_HavingClause_PainlessOneArg() {
366362
367363 public void testTranslateInExpression_HavingClause_PainlessAndNullHandling () {
368364 LogicalPlan p = plan ("SELECT keyword, max(int) FROM test GROUP BY keyword HAVING max(int) IN (10, null, 20, 30, null, 30 - 10)" );
369- assertTrue (p instanceof Project );
370- assertTrue (p .children ().get (0 ) instanceof Filter );
371- Expression condition = ((Filter ) p .children ().get (0 )).condition ();
365+ assertTrue (p instanceof Filter );
366+ Expression condition = ((Filter ) p ).condition ();
372367 assertFalse (condition .foldable ());
373368 QueryTranslation translation = QueryTranslator .toQuery (condition , true );
374369 assertNull (translation .query );
@@ -385,9 +380,8 @@ public void testTranslateMathFunction_HavingClause_Painless() {
385380
386381 LogicalPlan p = plan ("SELECT keyword, max(int) FROM test GROUP BY keyword HAVING " +
387382 operation .name () + "(max(int)) > 10" );
388- assertTrue (p instanceof Project );
389- assertTrue (p .children ().get (0 ) instanceof Filter );
390- Expression condition = ((Filter ) p .children ().get (0 )).condition ();
383+ assertTrue (p instanceof Filter );
384+ Expression condition = ((Filter ) p ).condition ();
391385 assertFalse (condition .foldable ());
392386 QueryTranslation translation = QueryTranslator .toQuery (condition , true );
393387 assertNull (translation .query );
@@ -399,6 +393,21 @@ public void testTranslateMathFunction_HavingClause_Painless() {
399393 assertThat (aggFilter .scriptTemplate ().params ().toString (), endsWith (", {v=10}]" ));
400394 }
401395
396+ public void testGroupByAndHavingWithFunctionOnTopOfAggregation () {
397+ LogicalPlan p = plan ("SELECT keyword, MAX(int) FROM test GROUP BY 1 HAVING ABS(MAX(int)) > 10" );
398+ assertTrue (p instanceof Filter );
399+ Expression condition = ((Filter ) p ).condition ();
400+ assertFalse (condition .foldable ());
401+ QueryTranslation translation = QueryTranslator .toQuery (condition , true );
402+ assertNull (translation .query );
403+ AggFilter aggFilter = translation .aggFilter ;
404+ assertEquals ("InternalSqlScriptUtils.nullSafeFilter(InternalSqlScriptUtils.gt(InternalSqlScriptUtils.abs" +
405+ "(params.a0),params.v0))" ,
406+ aggFilter .scriptTemplate ().toString ());
407+ assertThat (aggFilter .scriptTemplate ().params ().toString (), startsWith ("[{a=MAX(int){a->" ));
408+ assertThat (aggFilter .scriptTemplate ().params ().toString (), endsWith (", {v=10}]" ));
409+ }
410+
402411 public void testTranslateCoalesce_GroupBy_Painless () {
403412 LogicalPlan p = plan ("SELECT COALESCE(int, 10) FROM test GROUP BY 1" );
404413 assertTrue (p instanceof Aggregate );
0 commit comments