diff --git a/x-pack/plugin/esql/qa/testFixtures/src/main/resources/exponential_histogram.csv-spec b/x-pack/plugin/esql/qa/testFixtures/src/main/resources/exponential_histogram.csv-spec index 471c33062a32a..90ce7645cc50e 100644 --- a/x-pack/plugin/esql/qa/testFixtures/src/main/resources/exponential_histogram.csv-spec +++ b/x-pack/plugin/esql/qa/testFixtures/src/main/resources/exponential_histogram.csv-spec @@ -80,6 +80,19 @@ NULL | NULL | NULL ; +histoAsCaseValue +required_capability: exponential_histogram_minmax_support + +FROM exp_histo_sample + | INLINE STATS p50 = PERCENTILE(responseTime, 50) BY instance, @timestamp + | EVAL filteredHisto = CASE(p50 > 0.1, responseTime) + | INLINE STATS filteredMax = MAX(filteredHisto) BY instance, @timestamp //MAX is null if the histogram is null + | STATS filteredCount = COUNT(filteredMax) +; + +filteredCount:long +3 +; ungroupedPercentiles required_capability: exponential_histogram_percentiles_support diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/Case.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/Case.java index 061afe0c746a0..f497882ec798d 100644 --- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/Case.java +++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/Case.java @@ -81,7 +81,8 @@ ConditionEvaluatorSupplier toEvaluator(ToEvaluator toEvaluator) { "keyword", "long", "unsigned_long", - "version" }, + "version", + "exponential_histogram" }, description = """ Accepts pairs of conditions and values. The function returns the value that belongs to the first condition that evaluates to `true`. @@ -126,7 +127,8 @@ public Case( "long", "text", "unsigned_long", - "version" }, + "version", + "exponential_histogram" }, description = "The value that’s returned when the corresponding condition is the first to evaluate to `true`. " + "The default value is returned when no condition matches." ) List rest diff --git a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/CaseTests.java b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/CaseTests.java index f4fa6e7574d51..4059ad709d0f5 100644 --- a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/CaseTests.java +++ b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/scalar/conditional/CaseTests.java @@ -66,7 +66,6 @@ public class CaseTests extends AbstractScalarFunctionTestCase { if (Build.current().isSnapshot()) { t.addAll( DataType.UNDER_CONSTRUCTION.stream() - .filter(type -> type != DataType.EXPONENTIAL_HISTOGRAM) // TODO(b/133393): implement .filter(type -> type != DataType.AGGREGATE_METRIC_DOUBLE && type != DataType.DENSE_VECTOR) .toList() );