Skip to content

Commit 9a5c860

Browse files
committed
Update Count, Sample and Values to accept unsigned_long, and normalize their error messages
1 parent 847bba8 commit 9a5c860

File tree

12 files changed

+74
-3
lines changed

12 files changed

+74
-3
lines changed

docs/reference/query-languages/esql/_snippets/functions/types/count.md

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/query-languages/esql/_snippets/functions/types/sample.md

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/query-languages/esql/_snippets/functions/types/values.md

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/query-languages/esql/kibana/definition/functions/count.json

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/query-languages/esql/kibana/definition/functions/sample.json

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/reference/query-languages/esql/kibana/definition/functions/values.json

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/aggregate/Count.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,11 @@ public Count(
7777
"aggregate_metric_double",
7878
"boolean",
7979
"cartesian_point",
80+
"cartesian_shape",
8081
"date",
8182
"double",
8283
"geo_point",
84+
"geo_shape",
8385
"integer",
8486
"ip",
8587
"keyword",

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/aggregate/Sample.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import static org.elasticsearch.xpack.esql.core.expression.TypeResolutions.ParamOrdinal.FIRST;
3838
import static org.elasticsearch.xpack.esql.core.expression.TypeResolutions.ParamOrdinal.SECOND;
3939
import static org.elasticsearch.xpack.esql.core.expression.TypeResolutions.isNotNullAndFoldable;
40+
import static org.elasticsearch.xpack.esql.core.expression.TypeResolutions.isRepresentableExceptCounters;
4041
import static org.elasticsearch.xpack.esql.core.expression.TypeResolutions.isType;
4142

4243
public class Sample extends AggregateFunction implements ToAggregator {
@@ -56,6 +57,7 @@ public class Sample extends AggregateFunction implements ToAggregator {
5657
"ip",
5758
"keyword",
5859
"long",
60+
"unsigned_long",
5961
"version" },
6062
description = "Collects sample values for a field.",
6163
type = FunctionType.AGGREGATE,
@@ -78,6 +80,7 @@ public Sample(
7880
"ip",
7981
"keyword",
8082
"long",
83+
"unsigned_long",
8184
"text",
8285
"version" },
8386
description = "The field to collect sample values for."
@@ -109,7 +112,7 @@ protected TypeResolution resolveType() {
109112
if (childrenResolved() == false) {
110113
return new TypeResolution("Unresolved children");
111114
}
112-
var typeResolution = isType(field(), dt -> dt != DataType.UNSIGNED_LONG, sourceText(), FIRST, "any type except unsigned_long").and(
115+
var typeResolution = isRepresentableExceptCounters(field(), sourceText(), FIRST).and(
113116
isNotNullAndFoldable(limitField(), sourceText(), SECOND)
114117
).and(isType(limitField(), dt -> dt == DataType.INTEGER, sourceText(), SECOND, "integer"));
115118
if (typeResolution.unresolved()) {

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/aggregate/Values.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public class Values extends AggregateFunction implements ToAggregator {
4444
private static final Map<DataType, Supplier<AggregatorFunctionSupplier>> SUPPLIERS = Map.ofEntries(
4545
Map.entry(DataType.INTEGER, ValuesIntAggregatorFunctionSupplier::new),
4646
Map.entry(DataType.LONG, ValuesLongAggregatorFunctionSupplier::new),
47+
Map.entry(DataType.UNSIGNED_LONG, ValuesLongAggregatorFunctionSupplier::new),
4748
Map.entry(DataType.DATETIME, ValuesLongAggregatorFunctionSupplier::new),
4849
Map.entry(DataType.DATE_NANOS, ValuesLongAggregatorFunctionSupplier::new),
4950
Map.entry(DataType.DOUBLE, ValuesDoubleAggregatorFunctionSupplier::new),
@@ -72,6 +73,7 @@ public class Values extends AggregateFunction implements ToAggregator {
7273
"ip",
7374
"keyword",
7475
"long",
76+
"unsigned_long",
7577
"version" },
7678
preview = true,
7779
appliesTo = { @FunctionAppliesTo(lifeCycle = FunctionAppliesToLifecycle.PREVIEW) },
@@ -111,6 +113,7 @@ public Values(
111113
"ip",
112114
"keyword",
113115
"long",
116+
"unsigned_long",
114117
"text",
115118
"version" }
116119
) Expression v
@@ -153,7 +156,7 @@ public DataType dataType() {
153156

154157
@Override
155158
protected TypeResolution resolveType() {
156-
return TypeResolutions.isType(field(), SUPPLIERS::containsKey, sourceText(), DEFAULT, "any type except unsigned_long");
159+
return TypeResolutions.isRepresentableExceptCounters(field(), sourceText(), DEFAULT);
157160
}
158161

159162
@Override

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/aggregate/CountTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ public static Iterable<Object[]> parameters() {
4646
MultiRowTestCaseSupplier.ipCases(1, 1000),
4747
MultiRowTestCaseSupplier.versionCases(1, 1000),
4848
MultiRowTestCaseSupplier.geoPointCases(1, 1000, IncludingAltitude.YES),
49-
MultiRowTestCaseSupplier.cartesianPointCases(1, 1000, IncludingAltitude.YES),
49+
MultiRowTestCaseSupplier.geoShapeCasesWithoutCircle(1, 1000, IncludingAltitude.YES),
50+
MultiRowTestCaseSupplier.cartesianShapeCasesWithoutCircle(1, 1000, IncludingAltitude.YES),
5051
MultiRowTestCaseSupplier.stringCases(1, 1000, DataType.KEYWORD),
5152
MultiRowTestCaseSupplier.stringCases(1, 1000, DataType.TEXT)
5253
).flatMap(List::stream).map(CountTests::makeSupplier).collect(Collectors.toCollection(() -> suppliers));

0 commit comments

Comments
 (0)