Skip to content

Commit 2286eab

Browse files
committed
Correct span function type routing (allow any)
Signed-off-by: Yuanchun Shen <yuanchu@amazon.com>
1 parent 9fcf8c3 commit 2286eab

1 file changed

Lines changed: 9 additions & 11 deletions

File tree

core/src/main/java/org/opensearch/sql/expression/function/udf/SpanFunction.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
import org.apache.calcite.rel.type.RelDataType;
1919
import org.apache.calcite.rex.RexCall;
2020
import org.apache.calcite.schema.impl.ScalarFunctionImpl;
21-
import org.apache.calcite.sql.type.CompositeOperandTypeChecker;
2221
import org.apache.calcite.sql.type.OperandTypes;
2322
import org.apache.calcite.sql.type.SqlReturnTypeInference;
2423
import org.apache.calcite.sql.type.SqlTypeFamily;
24+
import org.apache.calcite.sql.type.SqlTypeName;
2525
import org.apache.calcite.sql.type.SqlTypeUtil;
2626
import org.apache.calcite.util.BuiltInMethod;
2727
import 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

Comments
 (0)