1818import org .apache .calcite .rel .type .RelDataType ;
1919import org .apache .calcite .rex .RexCall ;
2020import org .apache .calcite .schema .impl .ScalarFunctionImpl ;
21- import org .apache .calcite .sql .type .CompositeOperandTypeChecker ;
2221import org .apache .calcite .sql .type .OperandTypes ;
2322import org .apache .calcite .sql .type .SqlReturnTypeInference ;
2423import org .apache .calcite .sql .type .SqlTypeFamily ;
24+ import org .apache .calcite .sql .type .SqlTypeName ;
2525import org .apache .calcite .sql .type .SqlTypeUtil ;
2626import org .apache .calcite .util .BuiltInMethod ;
2727import org .opensearch .sql .calcite .type .ExprSqlType ;
@@ -59,15 +59,13 @@ public SqlReturnTypeInference getReturnTypeInference() {
5959 @ Override
6060 public UDFOperandMetadata getOperandMetadata () {
6161 return UDFOperandMetadata .wrap (
62- (CompositeOperandTypeChecker )
63- OperandTypes .family (
64- SqlTypeFamily .CHARACTER , SqlTypeFamily .NUMERIC , SqlTypeFamily .CHARACTER )
65- .or (
66- OperandTypes .family (
67- SqlTypeFamily .DATETIME , SqlTypeFamily .NUMERIC , SqlTypeFamily .CHARACTER ))
68- .or (
69- OperandTypes .family (
70- SqlTypeFamily .NUMERIC , SqlTypeFamily .NUMERIC , SqlTypeFamily .ANY )));
62+ OperandTypes .family (SqlTypeFamily .CHARACTER , SqlTypeFamily .NUMERIC , SqlTypeFamily .CHARACTER )
63+ .or (
64+ OperandTypes .family (
65+ SqlTypeFamily .DATETIME , SqlTypeFamily .NUMERIC , SqlTypeFamily .CHARACTER ))
66+ .or (
67+ OperandTypes .family (
68+ SqlTypeFamily .NUMERIC , SqlTypeFamily .NUMERIC , SqlTypeFamily .ANY )));
7169 }
7270
7371 public static class SpanImplementor implements NotNullImplementor {
@@ -86,7 +84,7 @@ public Expression implement(
8684 if (SqlTypeUtil .isDecimal (intervalType )) {
8785 interval = Expressions .call (interval , "doubleValue" );
8886 }
89- if (SqlTypeUtil .isNull (unitType )) {
87+ if (SqlTypeUtil .isNull (unitType ) || SqlTypeName . ANY . equals ( unitType . getSqlTypeName ()) ) {
9088 return switch (call .getType ().getSqlTypeName ()) {
9189 case BIGINT , INTEGER , SMALLINT , TINYINT ->
9290 Expressions .multiply (Expressions .divide (field , interval ), interval );
0 commit comments