1010import com .carrotsearch .randomizedtesting .annotations .Name ;
1111import com .carrotsearch .randomizedtesting .annotations .ParametersFactory ;
1212
13+ import org .elasticsearch .common .Rounding ;
1314import org .elasticsearch .index .mapper .DateFieldMapper ;
15+ import org .elasticsearch .logging .LogManager ;
1416import org .elasticsearch .xpack .esql .core .expression .Expression ;
15- import org .elasticsearch .xpack .esql .core .expression .FieldAttribute ;
1617import org .elasticsearch .xpack .esql .core .tree .Source ;
1718import 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 ;
2020import org .elasticsearch .xpack .esql .expression .function .TestCaseSupplier ;
2121import org .hamcrest .Matcher ;
2222
2323import java .time .Duration ;
24+ import java .time .Instant ;
2425import java .time .Period ;
2526import java .util .ArrayList ;
2627import java .util .List ;
27- import java .util .Map ;
2828import java .util .function .LongSupplier ;
2929import java .util .function .Supplier ;
3030
3131import static org .hamcrest .Matchers .equalTo ;
3232import 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