Skip to content

Commit e540c03

Browse files
committed
Move capabilities and add comment about substitute surrogates
1 parent 38682b7 commit e540c03

File tree

2 files changed

+30
-26
lines changed

2 files changed

+30
-26
lines changed

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

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -890,6 +890,31 @@ public enum Cap {
890890
*/
891891
AGGREGATE_METRIC_DOUBLE_PARTIAL_SUBMETRICS(AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG),
892892

893+
/**
894+
* Support for rendering aggregate_metric_double type
895+
*/
896+
AGGREGATE_METRIC_DOUBLE_RENDERING(AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG),
897+
898+
/**
899+
* Support for to_aggregate_metric_double function
900+
*/
901+
AGGREGATE_METRIC_DOUBLE_CONVERT_TO(AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG),
902+
903+
/**
904+
* Support for sorting when aggregate_metric_doubles are present
905+
*/
906+
AGGREGATE_METRIC_DOUBLE_SORTING(AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG),
907+
908+
/**
909+
* Support avg with aggregate metric doubles
910+
*/
911+
AGGREGATE_METRIC_DOUBLE_AVG(AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG),
912+
913+
/**
914+
* Support for implicit casting of aggregate metric double when run in aggregations
915+
*/
916+
AGGREGATE_METRIC_DOUBLE_IMPLICIT_CASTING_IN_AGGS(AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG),
917+
893918
/**
894919
* Support change point detection "CHANGE_POINT".
895920
*/
@@ -913,11 +938,6 @@ public enum Cap {
913938
*/
914939
SUPPORT_PARTIAL_RESULTS,
915940

916-
/**
917-
* Support for rendering aggregate_metric_double type
918-
*/
919-
AGGREGATE_METRIC_DOUBLE_RENDERING(AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG),
920-
921941
/**
922942
* Support for RERANK command
923943
*/
@@ -969,11 +989,6 @@ public enum Cap {
969989
*/
970990
NON_FULL_TEXT_FUNCTIONS_SCORING,
971991

972-
/**
973-
* Support for to_aggregate_metric_double function
974-
*/
975-
AGGREGATE_METRIC_DOUBLE_CONVERT_TO(AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG),
976-
977992
/**
978993
* The {@code _query} API now reports the original types.
979994
*/
@@ -1000,11 +1015,6 @@ public enum Cap {
10001015
*/
10011016
MAKE_NUMBER_OF_CHANNELS_CONSISTENT_WITH_LAYOUT,
10021017

1003-
/**
1004-
* Support for sorting when aggregate_metric_doubles are present
1005-
*/
1006-
AGGREGATE_METRIC_DOUBLE_SORTING(AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG),
1007-
10081018
/**
10091019
* Supercedes {@link Cap#MAKE_NUMBER_OF_CHANNELS_CONSISTENT_WITH_LAYOUT}.
10101020
*/
@@ -1228,17 +1238,7 @@ public enum Cap {
12281238
/**
12291239
* FUSE command
12301240
*/
1231-
FUSE(Build.current().isSnapshot()),
1232-
1233-
/**
1234-
* Support avg with aggregate metric doubles
1235-
*/
1236-
AGGREGATE_METRIC_DOUBLE_AVG(AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG),
1237-
1238-
/**
1239-
* Support for implicit casting of aggregate metric double when run in aggregations
1240-
*/
1241-
AGGREGATE_METRIC_DOUBLE_IMPLICIT_CASTING_IN_AGGS(AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG);
1241+
FUSE(Build.current().isSnapshot());
12421242

12431243
private final boolean enabled;
12441244

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1998,6 +1998,10 @@ private LogicalPlan doRule(Aggregate plan) {
19981998
return aggFunc;
19991999
}
20002000
if (aggFunc instanceof Avg || aggFunc instanceof AvgOverTime) {
2001+
// This is related to a known bug involving AvgOverTime and aggregate_metric_double. We substitute
2002+
// surrogates here so when AvgOverTime becomes Div(SumOverTime, CountOverTime), which then becomes
2003+
// Div(SumOverTime(agg_metric.sum), SumOverTime(agg_metric.count)), we can distinguish between the
2004+
// SumOverTimes produced here from references to Sum/CountOverTime in other parts of the query
20012005
return ((SurrogateExpression) aggFunc).surrogate();
20022006
}
20032007
Map<String, Expression> typeConverters = typeConverters(aggFunc, fa, mtf);

0 commit comments

Comments
 (0)