Skip to content

Commit ac030e4

Browse files
committed
Refactor: update add/sub time's implementation with adaptExprMethodWithPropertiesToUDF
Signed-off-by: Yuanchun Shen <yuanchu@amazon.com>
1 parent 714c908 commit ac030e4

4 files changed

Lines changed: 46 additions & 140 deletions

File tree

core/src/main/java/org/opensearch/sql/calcite/utils/PPLReturnTypes.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55

66
package org.opensearch.sql.calcite.utils;
77

8+
import org.apache.calcite.rel.type.RelDataType;
89
import org.apache.calcite.sql.type.ReturnTypes;
910
import org.apache.calcite.sql.type.SqlReturnTypeInference;
11+
import org.apache.calcite.sql.type.SqlTypeName;
1012
import org.apache.calcite.sql.type.SqlTypeTransforms;
1113

1214
/**
@@ -26,4 +28,13 @@ private PPLReturnTypes() {}
2628
ReturnTypes.INTEGER.andThen(SqlTypeTransforms.FORCE_NULLABLE);
2729
public static SqlReturnTypeInference STRING_FORCE_NULLABLE =
2830
ReturnTypes.VARCHAR.andThen(SqlTypeTransforms.FORCE_NULLABLE);
31+
public static SqlReturnTypeInference TIME_APPLY_RETURN_TYPE =
32+
opBinding -> {
33+
RelDataType temporalType = opBinding.getOperandType(0);
34+
if (OpenSearchTypeFactory.convertRelDataTypeToSqlTypeName(temporalType)
35+
== SqlTypeName.TIME) {
36+
return UserDefinedFunctionUtils.NULLABLE_TIME_UDT;
37+
}
38+
return UserDefinedFunctionUtils.NULLABLE_TIMESTAMP_UDT;
39+
};
2940
}

core/src/main/java/org/opensearch/sql/expression/datetime/DateTimeFunctions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1231,7 +1231,7 @@ public static ExprValue exprDateApplyDays(
12311231
* @param isAdd A flag: true to add, false to subtract.
12321232
* @return A value calculated.
12331233
*/
1234-
private ExprValue exprApplyTime(
1234+
public static ExprValue exprApplyTime(
12351235
FunctionProperties functionProperties,
12361236
ExprValue temporal,
12371237
ExprValue temporalDelta,

core/src/main/java/org/opensearch/sql/expression/function/PPLBuiltinOperators.java

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55

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

8+
import static org.opensearch.sql.calcite.utils.UserDefinedFunctionUtils.adaptExprMethodToUDF;
9+
import static org.opensearch.sql.calcite.utils.UserDefinedFunctionUtils.adaptExprMethodWithPropertiesToUDF;
10+
811
import java.lang.reflect.InvocationTargetException;
912
import java.lang.reflect.Method;
1013
import java.util.List;
@@ -22,10 +25,8 @@
2225
import org.apache.calcite.sql.util.ReflectiveSqlOperatorTable;
2326
import org.apache.calcite.util.BuiltInMethod;
2427
import org.opensearch.sql.calcite.utils.PPLReturnTypes;
25-
import org.opensearch.sql.calcite.utils.UserDefinedFunctionUtils;
2628
import org.opensearch.sql.expression.datetime.DateTimeFunctions;
2729
import org.opensearch.sql.expression.function.udf.datetime.AddSubDateFunction;
28-
import org.opensearch.sql.expression.function.udf.datetime.AddSubTimeFunction;
2930
import org.opensearch.sql.expression.function.udf.datetime.CurrentFunction;
3031
import org.opensearch.sql.expression.function.udf.datetime.DateAddSubFunction;
3132
import org.opensearch.sql.expression.function.udf.datetime.DateFunction;
@@ -77,8 +78,20 @@ public class PPLBuiltinOperators extends ReflectiveSqlOperatorTable {
7778
public static final SqlOperator UNIX_TIMESTAMP =
7879
new UnixTimestampFunction().toUDF("UNIX_TIMESTAMP");
7980
public static final SqlOperator TO_SECONDS = new ToSecondsFunction().toUDF("TO_SECONDS");
80-
public static final SqlOperator ADDTIME = new AddSubTimeFunction(true).toUDF("ADDTIME");
81-
public static final SqlOperator SUBTIME = new AddSubTimeFunction(false).toUDF("SUBTIME");
81+
public static final SqlOperator ADDTIME =
82+
adaptExprMethodWithPropertiesToUDF(
83+
DateTimeFunctions.class,
84+
"exprAddTime",
85+
PPLReturnTypes.TIME_APPLY_RETURN_TYPE,
86+
NullPolicy.ANY)
87+
.toUDF("ADDTIME");
88+
public static final SqlOperator SUBTIME =
89+
adaptExprMethodWithPropertiesToUDF(
90+
DateTimeFunctions.class,
91+
"exprSubTime",
92+
PPLReturnTypes.TIME_APPLY_RETURN_TYPE,
93+
NullPolicy.ANY)
94+
.toUDF("SUBTIME");
8295
public static final SqlOperator ADDDATE = new AddSubDateFunction(true).toUDF("ADDDATE");
8396
public static final SqlOperator SUBDATE = new AddSubDateFunction(false).toUDF("SUBDATE");
8497
public static final SqlOperator DATE_ADD = new DateAddSubFunction(true).toUDF("DATE_ADD");
@@ -95,7 +108,7 @@ public class PPLBuiltinOperators extends ReflectiveSqlOperatorTable {
95108
public static final SqlOperator HOUR = new DatePartFunction(TimeUnit.HOUR).toUDF("HOUR");
96109
public static final SqlOperator MINUTE = new DatePartFunction(TimeUnit.MINUTE).toUDF("MINUTE");
97110
public static final SqlOperator MINUTE_OF_DAY =
98-
UserDefinedFunctionUtils.adaptExprMethodToUDF(
111+
adaptExprMethodToUDF(
99112
DateTimeFunctions.class,
100113
"exprMinuteOfDay",
101114
PPLReturnTypes.INTEGER_FORCE_NULLABLE,
@@ -117,14 +130,14 @@ public class PPLBuiltinOperators extends ReflectiveSqlOperatorTable {
117130
public static final SqlOperator MONTHNAME =
118131
new PeriodNameFunction(TimeUnit.MONTH).toUDF("MONTHNAME");
119132
public static final SqlOperator CONVERT_TZ =
120-
UserDefinedFunctionUtils.adaptExprMethodToUDF(
133+
adaptExprMethodToUDF(
121134
DateTimeFunctions.class,
122135
"exprConvertTZ",
123136
PPLReturnTypes.TIMESTAMP_FORCE_NULLABLE,
124137
NullPolicy.ANY)
125138
.toUDF("CONVERT_TZ");
126139
public static final SqlOperator DATEDIFF =
127-
UserDefinedFunctionUtils.adaptExprMethodWithPropertiesToUDF(
140+
adaptExprMethodWithPropertiesToUDF(
128141
DateTimeFunctions.class,
129142
"exprDateDiff",
130143
ReturnTypes.BIGINT_FORCE_NULLABLE,
@@ -134,50 +147,50 @@ public class PPLBuiltinOperators extends ReflectiveSqlOperatorTable {
134147
new TimestampDiffFunction().toUDF("TIMESTAMPDIFF");
135148
public static final SqlOperator LAST_DAY = new LastDayFunction().toUDF("LAST_DAY");
136149
public static final SqlOperator FROM_DAYS =
137-
UserDefinedFunctionUtils.adaptExprMethodToUDF(
150+
adaptExprMethodToUDF(
138151
DateTimeFunctions.class,
139152
"exprFromDays",
140153
PPLReturnTypes.DATE_FORCE_NULLABLE,
141154
NullPolicy.ANY)
142155
.toUDF("FROM_DAYS");
143156
public static final SqlOperator FROM_UNIXTIME = new FromUnixTimeFunction().toUDF("FROM_UNIXTIME");
144157
public static final SqlOperator GET_FORMAT =
145-
UserDefinedFunctionUtils.adaptExprMethodToUDF(
158+
adaptExprMethodToUDF(
146159
DateTimeFunctions.class,
147160
"exprGetFormat",
148161
ReturnTypes.VARCHAR.andThen(SqlTypeTransforms.FORCE_NULLABLE),
149162
NullPolicy.ANY)
150163
.toUDF("GET_FORMAT");
151164
public static final SqlOperator MAKEDATE =
152-
UserDefinedFunctionUtils.adaptExprMethodToUDF(
165+
adaptExprMethodToUDF(
153166
DateTimeFunctions.class,
154167
"exprMakeDate",
155168
PPLReturnTypes.DATE_FORCE_NULLABLE,
156169
NullPolicy.ANY)
157170
.toUDF("MAKEDATE");
158171
public static final SqlOperator MAKETIME =
159-
UserDefinedFunctionUtils.adaptExprMethodToUDF(
172+
adaptExprMethodToUDF(
160173
DateTimeFunctions.class,
161174
"exprMakeTime",
162175
PPLReturnTypes.TIME_FORCE_NULLABLE,
163176
NullPolicy.ANY)
164177
.toUDF("MAKETIME");
165178
public static final SqlOperator PERIOD_DIFF =
166-
UserDefinedFunctionUtils.adaptExprMethodToUDF(
179+
adaptExprMethodToUDF(
167180
DateTimeFunctions.class,
168181
"exprPeriodDiff",
169182
PPLReturnTypes.INTEGER_FORCE_NULLABLE,
170183
NullPolicy.ANY)
171184
.toUDF("PERIOD_DIFF");
172185
public static final SqlOperator PERIOD_ADD =
173-
UserDefinedFunctionUtils.adaptExprMethodToUDF(
186+
adaptExprMethodToUDF(
174187
DateTimeFunctions.class,
175188
"exprPeriodAdd",
176189
PPLReturnTypes.INTEGER_FORCE_NULLABLE,
177190
NullPolicy.ANY)
178191
.toUDF("PERIOD_ADD");
179192
public static final SqlOperator STR_TO_DATE =
180-
UserDefinedFunctionUtils.adaptExprMethodWithPropertiesToUDF(
193+
adaptExprMethodWithPropertiesToUDF(
181194
DateTimeFunctions.class,
182195
"exprStrToDate",
183196
PPLReturnTypes.TIMESTAMP_FORCE_NULLABLE,
@@ -186,51 +199,51 @@ public class PPLBuiltinOperators extends ReflectiveSqlOperatorTable {
186199
public static final SqlOperator SYSDATE = new SysdateFunction().toUDF("SYSDATE");
187200
public static final SqlOperator SEC_TO_TIME = new SecToTimeFunction().toUDF("SEC_TO_TIME");
188201
public static final SqlOperator TIME =
189-
UserDefinedFunctionUtils.adaptExprMethodToUDF(
202+
adaptExprMethodToUDF(
190203
DateTimeFunctions.class,
191204
"exprTime",
192205
PPLReturnTypes.TIME_FORCE_NULLABLE,
193206
NullPolicy.ARG0)
194207
.toUDF("TIME");
195208
public static final SqlOperator TIME_TO_SEC =
196-
UserDefinedFunctionUtils.adaptExprMethodToUDF(
209+
adaptExprMethodToUDF(
197210
DateTimeFunctions.class,
198211
"exprTimeToSec",
199212
ReturnTypes.BIGINT_FORCE_NULLABLE,
200213
NullPolicy.ARG0)
201214
.toUDF("TIME_TO_SEC");
202215
public static final SqlOperator TIMEDIFF =
203-
UserDefinedFunctionUtils.adaptExprMethodToUDF(
216+
adaptExprMethodToUDF(
204217
DateTimeFunctions.class,
205218
"exprTimeDiff",
206219
PPLReturnTypes.TIME_FORCE_NULLABLE,
207220
NullPolicy.ANY)
208221
.toUDF("TIME_DIFF");
209222
public static final SqlOperator TIMESTAMPADD = new TimestampAddFunction().toUDF("TIMESTAMPADD");
210223
public static final SqlOperator TO_DAYS =
211-
UserDefinedFunctionUtils.adaptExprMethodToUDF(
224+
adaptExprMethodToUDF(
212225
DateTimeFunctions.class,
213226
"exprToDays",
214227
ReturnTypes.BIGINT_FORCE_NULLABLE,
215228
NullPolicy.ARG0)
216229
.toUDF("TO_DAYS");
217230
public static final SqlOperator DATETIME = new DatetimeFunction().toUDF("DATETIME");
218231
public static final SqlOperator UTC_DATE =
219-
UserDefinedFunctionUtils.adaptExprMethodWithPropertiesToUDF(
232+
adaptExprMethodWithPropertiesToUDF(
220233
DateTimeFunctions.class,
221234
"exprUtcDate",
222235
PPLReturnTypes.DATE_FORCE_NULLABLE,
223236
NullPolicy.NONE)
224237
.toUDF("UTC_DATE");
225238
public static final SqlOperator UTC_TIME =
226-
UserDefinedFunctionUtils.adaptExprMethodWithPropertiesToUDF(
239+
adaptExprMethodWithPropertiesToUDF(
227240
DateTimeFunctions.class,
228241
"exprUtcTime",
229242
PPLReturnTypes.TIME_FORCE_NULLABLE,
230243
NullPolicy.NONE)
231244
.toUDF("UTC_TIME");
232245
public static final SqlOperator UTC_TIMESTAMP =
233-
UserDefinedFunctionUtils.adaptExprMethodWithPropertiesToUDF(
246+
adaptExprMethodWithPropertiesToUDF(
234247
DateTimeFunctions.class,
235248
"exprUtcTimestamp",
236249
PPLReturnTypes.TIMESTAMP_FORCE_NULLABLE,

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

Lines changed: 0 additions & 118 deletions
This file was deleted.

0 commit comments

Comments
 (0)