Skip to content

Commit 5bd6f36

Browse files
committed
ES|QL: Add TBUCKET function
Fix tests Closes #131068
1 parent e72467f commit 5bd6f36

File tree

4 files changed

+45
-35
lines changed

4 files changed

+45
-35
lines changed

docs/reference/query-languages/esql/_snippets/functions/examples/tbucket.md

Lines changed: 23 additions & 4 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/tbucket.json

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

docs/reference/query-languages/esql/kibana/docs/functions/tbucket.md

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

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/grouping/TBucketTests.java

Lines changed: 19 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,28 @@
1010
import com.carrotsearch.randomizedtesting.annotations.Name;
1111
import com.carrotsearch.randomizedtesting.annotations.ParametersFactory;
1212

13+
import org.elasticsearch.common.Rounding;
1314
import org.elasticsearch.index.mapper.DateFieldMapper;
15+
import org.elasticsearch.logging.LogManager;
1416
import org.elasticsearch.xpack.esql.core.expression.Expression;
15-
import org.elasticsearch.xpack.esql.core.expression.FieldAttribute;
1617
import org.elasticsearch.xpack.esql.core.tree.Source;
1718
import org.elasticsearch.xpack.esql.core.type.DataType;
18-
import org.elasticsearch.xpack.esql.core.type.DateEsField;
19-
import org.elasticsearch.xpack.esql.expression.function.AbstractAggregationTestCase;
19+
import org.elasticsearch.xpack.esql.expression.function.AbstractScalarFunctionTestCase;
2020
import org.elasticsearch.xpack.esql.expression.function.TestCaseSupplier;
2121
import org.hamcrest.Matcher;
2222

2323
import java.time.Duration;
24+
import java.time.Instant;
2425
import java.time.Period;
2526
import java.util.ArrayList;
2627
import java.util.List;
27-
import java.util.Map;
2828
import java.util.function.LongSupplier;
2929
import java.util.function.Supplier;
3030

3131
import static org.hamcrest.Matchers.equalTo;
3232
import static org.hamcrest.Matchers.hasSize;
3333

34-
// TODO: WIP
35-
public class TBucketTests extends AbstractAggregationTestCase {
34+
public class TBucketTests extends AbstractScalarFunctionTestCase {
3635
public TBucketTests(@Name("TestCase") Supplier<TestCaseSupplier.TestCase> testCaseSupplier) {
3736
this.testCase = testCaseSupplier.get();
3837
}
@@ -56,16 +55,7 @@ public static Iterable<Object[]> parameters() {
5655
Duration.ofDays(1L),
5756
"[86400000 in Z][fixed]"
5857
);
59-
60-
return parameterSuppliersFromTypedData(
61-
anyNullIsNull(
62-
suppliers,
63-
(nullPosition, nullValueDataType, original) -> nullPosition == 0 && nullValueDataType == DataType.NULL
64-
? DataType.NULL
65-
: original.expectedType(),
66-
(nullPosition, nullData, original) -> nullPosition == 0 ? original : equalTo("LiteralsEvaluator[lit=null]")
67-
)
68-
);
58+
return parameterSuppliersFromTypedData(suppliers);
6959
}
7060

7161
private static void dateCasesWithSpan(
@@ -76,10 +66,10 @@ private static void dateCasesWithSpan(
7666
Object span,
7767
String spanStr
7868
) {
79-
suppliers.add(new TestCaseSupplier(name, List.of(spanType), () -> {
69+
suppliers.add(new TestCaseSupplier(name, List.of(spanType, DataType.DATETIME), () -> {
8070
List<TestCaseSupplier.TypedData> args = new ArrayList<>();
8171
args.add(new TestCaseSupplier.TypedData(span, spanType, "buckets").forceLiteral());
82-
// args.add(new TestCaseSupplier.TypedData(date.getAsLong(), DataType.DATETIME, "timestamps"));
72+
args.add(new TestCaseSupplier.TypedData(date.getAsLong(), DataType.DATETIME, "field"));
8373

8474
return new TestCaseSupplier.TestCase(
8575
args,
@@ -91,21 +81,21 @@ private static void dateCasesWithSpan(
9181
}
9282

9383
private static Matcher<Object> resultsMatcher(List<TestCaseSupplier.TypedData> typedData) {
94-
// long millis = ((Number) typedData.get(1).data()).longValue();
95-
// long expected = Rounding.builder(Rounding.DateTimeUnit.DAY_OF_MONTH).build().prepareForUnknown().round(millis);
96-
// LogManager.getLogger(getTestClass()).info("Expected: " + Instant.ofEpochMilli(expected));
97-
// LogManager.getLogger(getTestClass()).info("Input: " + Instant.ofEpochMilli(millis));
98-
// return equalTo(expected);
99-
return equalTo(null);
84+
long millis = ((Number) typedData.get(1).data()).longValue();
85+
long expected = Rounding.builder(Rounding.DateTimeUnit.DAY_OF_MONTH).build().prepareForUnknown().round(millis);
86+
LogManager.getLogger(getTestClass()).info("Expected: " + Instant.ofEpochMilli(expected));
87+
LogManager.getLogger(getTestClass()).info("Input: " + Instant.ofEpochMilli(millis));
88+
return equalTo(expected);
10089
}
10190

10291
@Override
10392
protected Expression build(Source source, List<Expression> args) {
104-
return new TBucket(
105-
source,
106-
args.getFirst(),
107-
new FieldAttribute(source, "@timestamp", DateEsField.dateEsField("@timestamp", Map.of(), false))
108-
);
93+
return new TBucket(source, args.get(0), args.get(1));
94+
}
95+
96+
@Override
97+
protected boolean canSerialize() {
98+
return false;
10999
}
110100

111101
public static List<DataType> signatureTypes(List<DataType> testCaseTypes) {

0 commit comments

Comments
 (0)