|
|
@@ -3348,6 +3348,44 @@ public class LogicalPlanOptimizerTests extends ESTestCase {
|
|
|
);
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * Project[[bucket(salary, 1000.) + 1{r}#3, bucket(salary, 1000.){r}#5]]
|
|
|
+ \_Eval[[bucket(salary, 1000.){r}#5 + 1[INTEGER] AS bucket(salary, 1000.) + 1]]
|
|
|
+ \_Limit[1000[INTEGER]]
|
|
|
+ \_Aggregate[[bucket(salary, 1000.){r}#5],[bucket(salary, 1000.){r}#5]]
|
|
|
+ \_Eval[[BUCKET(salary{f}#12,1000.0[DOUBLE]) AS bucket(salary, 1000.)]]
|
|
|
+ \_EsRelation[test][_meta_field{f}#13, emp_no{f}#7, first_name{f}#8, ge..]
|
|
|
+ */
|
|
|
+ public void testBucketWithAggExpression() {
|
|
|
+ var plan = plan("""
|
|
|
+ from test
|
|
|
+ | stats bucket(salary, 1000.) + 1 by bucket(salary, 1000.)
|
|
|
+ """);
|
|
|
+ var project = as(plan, Project.class);
|
|
|
+ var evalTop = as(project.child(), Eval.class);
|
|
|
+ var limit = as(evalTop.child(), Limit.class);
|
|
|
+ var agg = as(limit.child(), Aggregate.class);
|
|
|
+ var evalBottom = as(agg.child(), Eval.class);
|
|
|
+ var relation = as(evalBottom.child(), EsRelation.class);
|
|
|
+
|
|
|
+ assertThat(evalTop.fields().size(), is(1));
|
|
|
+ assertThat(evalTop.fields().get(0), instanceOf(Alias.class));
|
|
|
+ assertThat(evalTop.fields().get(0).child(), instanceOf(Add.class));
|
|
|
+ var add = (Add) evalTop.fields().get(0).child();
|
|
|
+ assertThat(add.left(), instanceOf(ReferenceAttribute.class));
|
|
|
+ var ref = (ReferenceAttribute) add.left();
|
|
|
+
|
|
|
+ assertThat(evalBottom.fields().size(), is(1));
|
|
|
+ assertThat(evalBottom.fields().get(0), instanceOf(Alias.class));
|
|
|
+ var alias = evalBottom.fields().get(0);
|
|
|
+ assertEquals(ref, alias.toAttribute());
|
|
|
+
|
|
|
+ assertThat(agg.aggregates().size(), is(1));
|
|
|
+ assertThat(agg.aggregates().get(0), is(ref));
|
|
|
+ assertThat(agg.groupings().size(), is(1));
|
|
|
+ assertThat(agg.groupings().get(0), is(ref));
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Expects
|
|
|
* Project[[x{r}#5]]
|