Skip to content

Commit 5377216

Browse files
committed
Refactor: Move type comparison earlier in format function implementation
Signed-off-by: Yuanchun Shen <yuanchu@amazon.com>
1 parent 17d0f5e commit 5377216

1 file changed

Lines changed: 35 additions & 25 deletions

File tree

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

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,12 @@
55

66
package org.opensearch.sql.expression.function.udf.datetime;
77

8-
import static org.opensearch.sql.calcite.utils.datetime.DateTimeApplyUtils.transferInputToExprValue;
98
import static org.opensearch.sql.expression.datetime.DateTimeFormatterUtil.getFormattedDate;
109
import static org.opensearch.sql.expression.datetime.DateTimeFormatterUtil.getFormattedDateOfToday;
1110
import static org.opensearch.sql.expression.datetime.DateTimeFormatterUtil.getFormattedTime;
1211

1312
import java.util.List;
1413
import lombok.RequiredArgsConstructor;
15-
import org.apache.calcite.DataContext;
1614
import org.apache.calcite.adapter.enumerable.NotNullImplementor;
1715
import org.apache.calcite.adapter.enumerable.NullPolicy;
1816
import org.apache.calcite.adapter.enumerable.RexToLixTranslator;
@@ -24,6 +22,7 @@
2422
import org.opensearch.sql.calcite.utils.OpenSearchTypeFactory;
2523
import org.opensearch.sql.calcite.utils.PPLReturnTypes;
2624
import org.opensearch.sql.calcite.utils.UserDefinedFunctionUtils;
25+
import org.opensearch.sql.calcite.utils.datetime.DateTimeApplyUtils;
2726
import org.opensearch.sql.data.model.ExprStringValue;
2827
import org.opensearch.sql.data.model.ExprValue;
2928
import org.opensearch.sql.expression.function.FunctionProperties;
@@ -63,34 +62,45 @@ public Expression implement(
6362
SqlTypeName type =
6463
OpenSearchTypeFactory.convertRelDataTypeToSqlTypeName(
6564
call.getOperands().getFirst().getType());
66-
String methodName = functionType == SqlTypeName.TIME ? "timeFormat" : "dateFormat";
67-
return Expressions.call(
68-
DataFormatImplementor.class,
69-
methodName,
70-
translatedOperands.get(0),
71-
Expressions.constant(type),
72-
translatedOperands.get(1),
73-
translator.getRoot());
74-
}
65+
Expression functionProperties =
66+
Expressions.call(
67+
UserDefinedFunctionUtils.class, "restoreFunctionProperties", translator.getRoot());
68+
Expression datetime =
69+
Expressions.call(
70+
DateTimeApplyUtils.class,
71+
"transferInputToExprValue",
72+
translatedOperands.get(0),
73+
Expressions.constant(type));
74+
Expression format = Expressions.new_(ExprStringValue.class, translatedOperands.get(1));
7575

76-
public static String dateFormat(
77-
Object date, SqlTypeName type, String format, DataContext propertyContext) {
78-
FunctionProperties restored =
79-
UserDefinedFunctionUtils.restoreFunctionProperties(propertyContext);
80-
ExprValue candidateValue = transferInputToExprValue(date, type);
81-
if (type == SqlTypeName.TIME) {
82-
return getFormattedDateOfToday(
83-
new ExprStringValue(format), candidateValue, restored.getQueryStartClock())
84-
.stringValue();
76+
if (SqlTypeName.TIME.equals(functionType)) {
77+
return Expressions.call(DataFormatImplementor.class, "timeFormat", datetime, format);
78+
} else {
79+
if (SqlTypeName.TIME.equals(type)) {
80+
return Expressions.call(
81+
DataFormatImplementor.class,
82+
"dateFormatForTime",
83+
functionProperties,
84+
format,
85+
datetime);
86+
} else {
87+
return Expressions.call(DataFormatImplementor.class, "dateFormat", datetime, format);
88+
}
8589
}
86-
return getFormattedDate(candidateValue, new ExprStringValue(format)).stringValue();
8790
}
8891

89-
public static String timeFormat(
90-
Object time, SqlTypeName sqlTypeName, String format, Object propertyContext) {
91-
return getFormattedTime(
92-
transferInputToExprValue(time, sqlTypeName), new ExprStringValue(format))
92+
public static String dateFormat(ExprValue date, ExprStringValue format) {
93+
return getFormattedDate(date, format).stringValue();
94+
}
95+
96+
public static String dateFormatForTime(
97+
FunctionProperties functionProperties, ExprStringValue format, ExprValue time) {
98+
return getFormattedDateOfToday(format, time, functionProperties.getQueryStartClock())
9399
.stringValue();
94100
}
101+
102+
public static String timeFormat(ExprValue time, ExprStringValue format) {
103+
return getFormattedTime(time, format).stringValue();
104+
}
95105
}
96106
}

0 commit comments

Comments
 (0)