Skip to content

Commit 0e98650

Browse files
committed
Invoke datetime UDF to cast date/time/timestamp with Calcite
Signed-off-by: Yuanchun Shen <yuanchu@amazon.com>
1 parent 7a120db commit 0e98650

1 file changed

Lines changed: 17 additions & 0 deletions

File tree

core/src/main/java/org/opensearch/sql/calcite/ExtendedRexBuilder.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,14 @@
55

66
package org.opensearch.sql.calcite;
77

8+
import static org.opensearch.sql.calcite.utils.OpenSearchTypeFactory.ExprUDT.EXPR_DATE;
9+
import static org.opensearch.sql.calcite.utils.OpenSearchTypeFactory.ExprUDT.EXPR_TIME;
10+
import static org.opensearch.sql.calcite.utils.OpenSearchTypeFactory.ExprUDT.EXPR_TIMESTAMP;
11+
812
import com.google.common.collect.ImmutableList;
913
import java.util.Arrays;
1014
import java.util.List;
15+
import java.util.Set;
1116
import org.apache.calcite.avatica.util.TimeUnit;
1217
import org.apache.calcite.rel.type.RelDataType;
1318
import org.apache.calcite.rex.RexBuilder;
@@ -19,6 +24,8 @@
1924
import org.apache.calcite.sql.type.SqlTypeName;
2025
import org.apache.calcite.sql.type.SqlTypeUtil;
2126
import org.opensearch.sql.ast.expression.SpanUnit;
27+
import org.opensearch.sql.calcite.type.ExprSqlType;
28+
import org.opensearch.sql.expression.function.PPLBuiltinOperators;
2229

2330
public class ExtendedRexBuilder extends RexBuilder {
2431

@@ -117,6 +124,16 @@ public RexNode makeCast(
117124
// SqlStdOperatorTable.NOT_EQUALS,
118125
// ImmutableList.of(exp, makeZeroLiteral(exp.getType())));
119126
}
127+
} else if (type instanceof ExprSqlType exprSqlType
128+
&& Set.of(EXPR_DATE, EXPR_TIME, EXPR_TIMESTAMP).contains(exprSqlType.getUdt())) {
129+
switch (exprSqlType.getUdt()) {
130+
case EXPR_DATE:
131+
return makeCall(type, PPLBuiltinOperators.DATE, List.of(exp));
132+
case EXPR_TIME:
133+
return makeCall(type, PPLBuiltinOperators.TIME, List.of(exp));
134+
case EXPR_TIMESTAMP:
135+
return makeCall(type, PPLBuiltinOperators.TIMESTAMP, List.of(exp));
136+
}
120137
}
121138
return super.makeCast(pos, type, exp, matchNullability, safe, format);
122139
}

0 commit comments

Comments
 (0)