Skip to content

Commit ef989e9

Browse files
add CsvTests
1 parent 827787f commit ef989e9

File tree

4 files changed

+67
-4
lines changed

4 files changed

+67
-4
lines changed

x-pack/plugin/esql/qa/testFixtures/src/main/resources/bucket.csv-spec

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -850,3 +850,37 @@ c:long | b:date
850850
11 | 1984-05-01T00:00:00.000Z
851851
11 | 1991-01-01T00:00:00.000Z
852852
;
853+
854+
resolveGroupingsBeforeResolvingImplicitReferencesToGroupings
855+
required_capability: resolve_groupings_before_resolving_references_to_groupings_in_aggregations
856+
857+
FROM employees
858+
| STATS c = count(emp_no), b = BUCKET(hire_date, "1 year") + 1 year BY yr = BUCKET(hire_date, "1 year")
859+
| SORT yr
860+
| LIMIT 5
861+
;
862+
863+
c:long | b:datetime | yr:datetime
864+
11 | 1986-01-01T00:00:00.000Z | 1985-01-01T00:00:00.000Z
865+
11 | 1987-01-01T00:00:00.000Z | 1986-01-01T00:00:00.000Z
866+
15 | 1988-01-01T00:00:00.000Z | 1987-01-01T00:00:00.000Z
867+
9 | 1989-01-01T00:00:00.000Z | 1988-01-01T00:00:00.000Z
868+
13 | 1990-01-01T00:00:00.000Z | 1989-01-01T00:00:00.000Z
869+
;
870+
871+
resolveGroupingsBeforeResolvingExplicitReferencesToGroupings
872+
required_capability: resolve_groupings_before_resolving_references_to_groupings_in_aggregations
873+
874+
FROM employees
875+
| STATS c = count(emp_no), b = yr + 1 year BY yr = BUCKET(hire_date, "1 year")
876+
| SORT yr
877+
| LIMIT 5
878+
;
879+
880+
c:long | b:datetime | yr:datetime
881+
11 | 1986-01-01T00:00:00.000Z | 1985-01-01T00:00:00.000Z
882+
11 | 1987-01-01T00:00:00.000Z | 1986-01-01T00:00:00.000Z
883+
15 | 1988-01-01T00:00:00.000Z | 1987-01-01T00:00:00.000Z
884+
9 | 1989-01-01T00:00:00.000Z | 1988-01-01T00:00:00.000Z
885+
13 | 1990-01-01T00:00:00.000Z | 1989-01-01T00:00:00.000Z
886+
;

x-pack/plugin/esql/qa/testFixtures/src/main/resources/stats.csv-spec

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3097,3 +3097,27 @@ ROW a = [1,2,3], b = 5
30973097
STD_DEV(a):double | STD_DEV(b):double
30983098
0.816496580927726 | 0.0
30993099
;
3100+
3101+
resolveGroupingsBeforeResolvingImplicitReferencesToGroupings
3102+
required_capability: resolve_groupings_before_resolving_references_to_groupings_in_aggregations
3103+
3104+
FROM employees
3105+
| EVAL date = "2025-01-01"::datetime
3106+
| stats m = MAX(hire_date) BY d = (date == "2025-01-01")
3107+
;
3108+
3109+
m:datetime | d:boolean
3110+
1999-04-30T00:00:00.000Z | true
3111+
;
3112+
3113+
resolveGroupingsBeforeResolvingExplicitReferencesToGroupings
3114+
required_capability: resolve_groupings_before_resolving_references_to_groupings_in_aggregations
3115+
3116+
FROM employees
3117+
| EVAL date = "2025-01-01"::datetime
3118+
| stats m = MAX(hire_date), x = d::int + 1 BY d = (date == "2025-01-01")
3119+
;
3120+
3121+
m:datetime | x:integer | d:boolean
3122+
1999-04-30T00:00:00.000Z | 2 | true
3123+
;

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1049,7 +1049,12 @@ public enum Cap {
10491049
/**
10501050
* The {@code _query} API now gives a cast recommendation if multiple types are found in certain instances.
10511051
*/
1052-
SUGGESTED_CAST;
1052+
SUGGESTED_CAST,
1053+
1054+
/**
1055+
* Resolve groupings before resolving references to groupings in the aggregations.
1056+
*/
1057+
RESOLVE_GROUPINGS_BEFORE_RESOLVING_REFERENCES_TO_GROUPINGS_IN_AGGREGATIONS;
10531058

10541059
private final boolean enabled;
10551060

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/analysis/Analyzer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -591,9 +591,9 @@ private Aggregate resolveAggregate(Aggregate aggregate, List<Attribute> children
591591
boolean groupingResolved = Resolvables.resolved(groupings);
592592
int size = groupingResolved ? aggregates.size() : aggregates.size() - groupings.size();
593593
for (int i = 0; i < aggregates.size(); i++) {
594-
NamedExpression agg = aggregates.get(i);
594+
NamedExpression maybeResolvedAgg = aggregates.get(i);
595595
if (i < size) { // Skip resolving references to groupings in the aggregations if the groupings are not resolved yet.
596-
agg = (NamedExpression) agg.transformUp(UnresolvedAttribute.class, ua -> {
596+
maybeResolvedAgg = (NamedExpression) maybeResolvedAgg.transformUp(UnresolvedAttribute.class, ua -> {
597597
Expression ne = ua;
598598
Attribute maybeResolved = maybeResolveAttribute(ua, resolvedList);
599599
// An item in aggregations can reference to groupings explicitly, if groupings are not resolved yet and
@@ -607,7 +607,7 @@ private Aggregate resolveAggregate(Aggregate aggregate, List<Attribute> children
607607
return ne;
608608
});
609609
}
610-
newAggregates.add(agg);
610+
newAggregates.add(maybeResolvedAgg);
611611
}
612612

613613
// TODO: remove this when Stats interface is removed

0 commit comments

Comments
 (0)