Skip to content

Commit 3e11e63

Browse files
committed
Refactor: Move type comparison earlier in weekday function implementation
Signed-off-by: Yuanchun Shen <yuanchu@amazon.com>
1 parent 131e5df commit 3e11e63

1 file changed

Lines changed: 30 additions & 13 deletions

File tree

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

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@
66
package org.opensearch.sql.expression.function.udf.datetime;
77

88
import static org.opensearch.sql.calcite.utils.UserDefinedFunctionUtils.*;
9-
import static org.opensearch.sql.calcite.utils.datetime.DateTimeApplyUtils.transferInputToExprValue;
109
import static org.opensearch.sql.expression.datetime.DateTimeFunctions.exprWeekday;
1110
import static org.opensearch.sql.expression.datetime.DateTimeFunctions.formatNow;
1211

1312
import java.util.List;
14-
import org.apache.calcite.DataContext;
1513
import org.apache.calcite.adapter.enumerable.NotNullImplementor;
1614
import org.apache.calcite.adapter.enumerable.NullPolicy;
1715
import org.apache.calcite.adapter.enumerable.RexToLixTranslator;
@@ -20,7 +18,11 @@
2018
import org.apache.calcite.rex.RexCall;
2119
import org.apache.calcite.sql.type.SqlReturnTypeInference;
2220
import org.apache.calcite.sql.type.SqlTypeName;
21+
import org.opensearch.sql.calcite.utils.OpenSearchTypeFactory;
2322
import org.opensearch.sql.calcite.utils.PPLReturnTypes;
23+
import org.opensearch.sql.calcite.utils.UserDefinedFunctionUtils;
24+
import org.opensearch.sql.calcite.utils.datetime.DateTimeApplyUtils;
25+
import org.opensearch.sql.data.model.ExprValue;
2426
import org.opensearch.sql.expression.function.FunctionProperties;
2527
import org.opensearch.sql.expression.function.ImplementorUDF;
2628

@@ -47,19 +49,34 @@ public SqlReturnTypeInference getReturnTypeInference() {
4749
public static class WeekdayImplementor implements NotNullImplementor {
4850
@Override
4951
public Expression implement(
50-
RexToLixTranslator rexToLixTranslator, RexCall rexCall, List<Expression> list) {
51-
List<Expression> newList = addTypeAndContext(list, rexCall, rexToLixTranslator.getRoot());
52-
return Expressions.call(WeekdayFunction.class, "weekday", newList);
52+
RexToLixTranslator rexToLixTranslator, RexCall rexCall, List<Expression> operands) {
53+
Expression functionProperties =
54+
Expressions.call(
55+
UserDefinedFunctionUtils.class,
56+
"restoreFunctionProperties",
57+
rexToLixTranslator.getRoot());
58+
SqlTypeName dateType =
59+
OpenSearchTypeFactory.convertRelDataTypeToSqlTypeName(
60+
rexCall.getOperands().getFirst().getType());
61+
Expression date =
62+
Expressions.call(
63+
DateTimeApplyUtils.class,
64+
"transferInputToExprValue",
65+
operands.getFirst(),
66+
Expressions.constant(dateType));
67+
68+
if (SqlTypeName.TIME.equals(dateType)) {
69+
return Expressions.call(WeekdayImplementor.class, "weekdayForTime", functionProperties);
70+
}
71+
return Expressions.call(WeekdayImplementor.class, "weekday", date);
72+
}
73+
74+
public static int weekday(ExprValue date) {
75+
return exprWeekday(date).integerValue();
5376
}
54-
}
5577

56-
public static Object weekday(Object date, SqlTypeName dateType, DataContext propertyContext) {
57-
FunctionProperties restored = restoreFunctionProperties(propertyContext);
58-
if (dateType == SqlTypeName.TIME) {
59-
// PPL Weekday returns 0 ~ 6; java.time.DayOfWeek returns 1 ~ 7.
60-
return formatNow(restored.getQueryStartClock()).getDayOfWeek().getValue() - 1;
61-
} else {
62-
return exprWeekday(transferInputToExprValue(date, dateType)).integerValue();
78+
public static int weekdayForTime(FunctionProperties functionProperties) {
79+
return formatNow(functionProperties.getQueryStartClock()).getDayOfWeek().getValue() - 1;
6380
}
6481
}
6582
}

0 commit comments

Comments
 (0)