Skip to content

Commit 714c908

Browse files
committed
Refactor: Move type comparison earlier in Add/Sub Date function implementation
Signed-off-by: Yuanchun Shen <yuanchu@amazon.com>
1 parent 3a49e15 commit 714c908

1 file changed

Lines changed: 28 additions & 7 deletions

File tree

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

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77

88
import static org.opensearch.sql.calcite.utils.UserDefinedFunctionUtils.NULLABLE_DATE_UDT;
99
import static org.opensearch.sql.calcite.utils.UserDefinedFunctionUtils.NULLABLE_TIMESTAMP_UDT;
10+
import static org.opensearch.sql.utils.DateTimeUtils.extractTimestamp;
1011

12+
import java.time.ZoneOffset;
1113
import java.time.temporal.TemporalAmount;
1214
import java.util.List;
1315
import java.util.Objects;
@@ -25,6 +27,8 @@
2527
import org.opensearch.sql.calcite.utils.OpenSearchTypeFactory;
2628
import org.opensearch.sql.calcite.utils.UserDefinedFunctionUtils;
2729
import org.opensearch.sql.calcite.utils.datetime.DateTimeApplyUtils;
30+
import org.opensearch.sql.data.model.ExprDateValue;
31+
import org.opensearch.sql.data.model.ExprTimestampValue;
2832
import org.opensearch.sql.data.model.ExprValue;
2933
import org.opensearch.sql.expression.datetime.DateTimeFunctions;
3034
import org.opensearch.sql.expression.function.FunctionProperties;
@@ -90,9 +94,14 @@ public Expression implement(
9094
UserDefinedFunctionUtils.class, "restoreFunctionProperties", translator.getRoot());
9195

9296
if (SqlTypeFamily.NUMERIC.contains(temporalDeltaType)) {
97+
String dateApplyFuncName =
98+
SqlTypeName.DATE.equals(
99+
OpenSearchTypeFactory.convertRelDataTypeToSqlTypeName(temporalType))
100+
? "dateApplyDaysOnDate"
101+
: "dateApplyDaysOnTimestamp";
93102
return Expressions.call(
94103
AddSubDateImplementor.class,
95-
"dateApplyDays",
104+
dateApplyFuncName,
96105
properties,
97106
base,
98107
Expressions.convert_(temporalDelta, long.class),
@@ -121,16 +130,28 @@ public Expression implement(
121130
}
122131
}
123132

124-
public static Object dateApplyDays(
133+
public static String dateApplyDaysOnDate(
134+
FunctionProperties ignored, ExprValue datetime, long days, boolean isAdd) {
135+
return (String)
136+
new ExprDateValue(
137+
isAdd
138+
? datetime.dateValue().plusDays(days)
139+
: datetime.dateValue().minusDays(days))
140+
.valueForCalcite();
141+
}
142+
143+
public static String dateApplyDaysOnTimestamp(
125144
FunctionProperties properties, ExprValue datetime, long days, boolean isAdd) {
126-
return DateTimeFunctions.exprDateApplyDays(properties, datetime, days, isAdd)
127-
.valueForCalcite();
145+
var dt = extractTimestamp(datetime, properties).atZone(ZoneOffset.UTC).toLocalDateTime();
146+
return (String)
147+
new ExprTimestampValue(isAdd ? dt.plusDays(days) : dt.minusDays(days)).valueForCalcite();
128148
}
129149

130-
public static Object dateApplyInterval(
150+
public static String dateApplyInterval(
131151
FunctionProperties properties, ExprValue datetime, TemporalAmount interval, boolean isAdd) {
132-
return DateTimeFunctions.exprDateApplyInterval(properties, datetime, interval, isAdd)
133-
.valueForCalcite();
152+
return (String)
153+
DateTimeFunctions.exprDateApplyInterval(properties, datetime, interval, isAdd)
154+
.valueForCalcite();
134155
}
135156
}
136157
}

0 commit comments

Comments
 (0)