2626import org .apache .calcite .sql .type .SqlTypeTransforms ;
2727import org .apache .calcite .sql .util .ReflectiveSqlOperatorTable ;
2828import org .apache .calcite .util .BuiltInMethod ;
29+ import org .opensearch .sql .calcite .utils .PPLOperandTypes ;
2930import org .opensearch .sql .calcite .utils .PPLReturnTypes ;
3031import org .opensearch .sql .calcite .utils .UserDefinedFunctionUtils ;
3132import org .opensearch .sql .data .type .ExprCoreType ;
@@ -76,7 +77,8 @@ public class PPLBuiltinOperators extends ReflectiveSqlOperatorTable {
7677 DateTimeFunctions .class ,
7778 "exprDate" ,
7879 PPLReturnTypes .DATE_FORCE_NULLABLE ,
79- NullPolicy .ARG0 )
80+ NullPolicy .ARG0 ,
81+ PPLOperandTypes .DATE_OR_TIMESTAMP_OR_STRING )
8082 .toUDF ("DATE" );
8183 public static final SqlOperator YEARWEEK = new YearweekFunction ().toUDF ("YEARWEEK" );
8284 public static final SqlOperator WEEKDAY = new WeekdayFunction ().toUDF ("WEEKDAY" );
@@ -88,14 +90,16 @@ public class PPLBuiltinOperators extends ReflectiveSqlOperatorTable {
8890 DateTimeFunctions .class ,
8991 "exprAddTime" ,
9092 PPLReturnTypes .TIME_APPLY_RETURN_TYPE ,
91- NullPolicy .ANY )
93+ NullPolicy .ANY ,
94+ PPLOperandTypes .DATETIME_DATETIME )
9295 .toUDF ("ADDTIME" );
9396 public static final SqlOperator SUBTIME =
9497 adaptExprMethodWithPropertiesToUDF (
9598 DateTimeFunctions .class ,
9699 "exprSubTime" ,
97100 PPLReturnTypes .TIME_APPLY_RETURN_TYPE ,
98- NullPolicy .ANY )
101+ NullPolicy .ANY ,
102+ PPLOperandTypes .DATETIME_DATETIME )
99103 .toUDF ("SUBTIME" );
100104 public static final SqlOperator ADDDATE = new AddSubDateFunction (true ).toUDF ("ADDDATE" );
101105 public static final SqlOperator SUBDATE = new AddSubDateFunction (false ).toUDF ("SUBDATE" );
@@ -117,7 +121,8 @@ public class PPLBuiltinOperators extends ReflectiveSqlOperatorTable {
117121 DateTimeFunctions .class ,
118122 "exprMinuteOfDay" ,
119123 PPLReturnTypes .INTEGER_FORCE_NULLABLE ,
120- NullPolicy .ARG0 )
124+ NullPolicy .ARG0 ,
125+ PPLOperandTypes .TIME_OR_TIMESTAMP_OR_STRING )
121126 .toUDF ("MINUTE_OF_DAY" );
122127 public static final SqlOperator SECOND = new DatePartFunction (TimeUnit .SECOND ).toUDF ("SECOND" );
123128 public static final SqlOperator MICROSECOND =
@@ -139,14 +144,22 @@ public class PPLBuiltinOperators extends ReflectiveSqlOperatorTable {
139144 DateTimeFunctions .class ,
140145 "exprConvertTZ" ,
141146 PPLReturnTypes .TIMESTAMP_FORCE_NULLABLE ,
142- NullPolicy .ANY )
147+ NullPolicy .ANY ,
148+ UDFOperandMetadata .wrap (
149+ (CompositeOperandTypeChecker )
150+ OperandTypes .STRING_STRING_STRING .or (
151+ OperandTypes .family (
152+ SqlTypeFamily .TIMESTAMP ,
153+ SqlTypeFamily .STRING ,
154+ SqlTypeFamily .STRING ))))
143155 .toUDF ("CONVERT_TZ" );
144156 public static final SqlOperator DATEDIFF =
145157 adaptExprMethodWithPropertiesToUDF (
146158 DateTimeFunctions .class ,
147159 "exprDateDiff" ,
148160 ReturnTypes .BIGINT_FORCE_NULLABLE ,
149- NullPolicy .ANY )
161+ NullPolicy .ANY ,
162+ PPLOperandTypes .DATETIME_DATETIME )
150163 .toUDF ("DATEDIFF" );
151164 public static final SqlOperator TIMESTAMPDIFF =
152165 new TimestampDiffFunction ().toUDF ("TIMESTAMPDIFF" );
@@ -156,50 +169,57 @@ public class PPLBuiltinOperators extends ReflectiveSqlOperatorTable {
156169 DateTimeFunctions .class ,
157170 "exprFromDays" ,
158171 PPLReturnTypes .DATE_FORCE_NULLABLE ,
159- NullPolicy .ANY )
172+ NullPolicy .ANY ,
173+ PPLOperandTypes .INTEGER )
160174 .toUDF ("FROM_DAYS" );
161175 public static final SqlOperator FROM_UNIXTIME = new FromUnixTimeFunction ().toUDF ("FROM_UNIXTIME" );
162176 public static final SqlOperator GET_FORMAT =
163177 adaptExprMethodToUDF (
164178 DateTimeFunctions .class ,
165179 "exprGetFormat" ,
166180 ReturnTypes .VARCHAR .andThen (SqlTypeTransforms .FORCE_NULLABLE ),
167- NullPolicy .ANY )
181+ NullPolicy .ANY ,
182+ PPLOperandTypes .STRING_STRING )
168183 .toUDF ("GET_FORMAT" );
169184 public static final SqlOperator MAKEDATE =
170185 adaptExprMethodToUDF (
171186 DateTimeFunctions .class ,
172187 "exprMakeDate" ,
173188 PPLReturnTypes .DATE_FORCE_NULLABLE ,
174- NullPolicy .ANY )
189+ NullPolicy .ANY ,
190+ PPLOperandTypes .NUMERIC_NUMERIC )
175191 .toUDF ("MAKEDATE" );
176192 public static final SqlOperator MAKETIME =
177193 adaptExprMethodToUDF (
178194 DateTimeFunctions .class ,
179195 "exprMakeTime" ,
180196 PPLReturnTypes .TIME_FORCE_NULLABLE ,
181- NullPolicy .ANY )
197+ NullPolicy .ANY ,
198+ PPLOperandTypes .NUMERIC_NUMERIC_NUMERIC )
182199 .toUDF ("MAKETIME" );
183200 public static final SqlOperator PERIOD_DIFF =
184201 adaptExprMethodToUDF (
185202 DateTimeFunctions .class ,
186203 "exprPeriodDiff" ,
187204 PPLReturnTypes .INTEGER_FORCE_NULLABLE ,
188- NullPolicy .ANY )
205+ NullPolicy .ANY ,
206+ PPLOperandTypes .INTEGER_INTEGER )
189207 .toUDF ("PERIOD_DIFF" );
190208 public static final SqlOperator PERIOD_ADD =
191209 adaptExprMethodToUDF (
192210 DateTimeFunctions .class ,
193211 "exprPeriodAdd" ,
194212 PPLReturnTypes .INTEGER_FORCE_NULLABLE ,
195- NullPolicy .ANY )
213+ NullPolicy .ANY ,
214+ PPLOperandTypes .INTEGER_INTEGER )
196215 .toUDF ("PERIOD_ADD" );
197216 public static final SqlOperator STR_TO_DATE =
198217 adaptExprMethodWithPropertiesToUDF (
199218 DateTimeFunctions .class ,
200219 "exprStrToDate" ,
201220 PPLReturnTypes .TIMESTAMP_FORCE_NULLABLE ,
202- NullPolicy .ANY )
221+ NullPolicy .ANY ,
222+ PPLOperandTypes .STRING_STRING )
203223 .toUDF ("STR_TO_DATE" );
204224 public static final SqlOperator SYSDATE = new SysdateFunction ().toUDF ("SYSDATE" );
205225 public static final SqlOperator SEC_TO_TIME = new SecToTimeFunction ().toUDF ("SEC_TO_TIME" );
@@ -208,55 +228,58 @@ public class PPLBuiltinOperators extends ReflectiveSqlOperatorTable {
208228 DateTimeFunctions .class ,
209229 "exprTime" ,
210230 PPLReturnTypes .TIME_FORCE_NULLABLE ,
211- NullPolicy .ARG0 )
231+ NullPolicy .ARG0 ,
232+ PPLOperandTypes .DATETIME_OR_STRING )
212233 .toUDF ("TIME" );
213234 public static final SqlOperator TIME_TO_SEC =
214235 adaptExprMethodToUDF (
215236 DateTimeFunctions .class ,
216237 "exprTimeToSec" ,
217238 ReturnTypes .BIGINT_FORCE_NULLABLE ,
218- NullPolicy .ARG0 )
239+ NullPolicy .ARG0 ,
240+ PPLOperandTypes .TIME_OR_TIMESTAMP_OR_STRING )
219241 .toUDF ("TIME_TO_SEC" );
220242 public static final SqlOperator TIMEDIFF =
221243 UserDefinedFunctionUtils .adaptExprMethodToUDF (
222244 DateTimeFunctions .class ,
223245 "exprTimeDiff" ,
224246 PPLReturnTypes .TIME_FORCE_NULLABLE ,
225247 NullPolicy .ANY ,
226- UDFOperandMetadata .wrap (
227- (CompositeOperandTypeChecker )
228- OperandTypes .family (SqlTypeFamily .TIME , SqlTypeFamily .TIME )
229- .or (OperandTypes .family (SqlTypeFamily .STRING , SqlTypeFamily .STRING ))))
248+ PPLOperandTypes .DATETIME_OR_STRING_DATETIME_OR_STRING )
230249 .toUDF ("TIME_DIFF" );
231250 public static final SqlOperator TIMESTAMPADD = new TimestampAddFunction ().toUDF ("TIMESTAMPADD" );
232251 public static final SqlOperator TO_DAYS =
233252 adaptExprMethodToUDF (
234253 DateTimeFunctions .class ,
235254 "exprToDays" ,
236255 ReturnTypes .BIGINT_FORCE_NULLABLE ,
237- NullPolicy .ARG0 )
256+ NullPolicy .ARG0 ,
257+ PPLOperandTypes .DATE_OR_TIMESTAMP_OR_STRING )
238258 .toUDF ("TO_DAYS" );
239259 public static final SqlOperator DATETIME = new DatetimeFunction ().toUDF ("DATETIME" );
240260 public static final SqlOperator UTC_DATE =
241261 adaptExprMethodWithPropertiesToUDF (
242262 DateTimeFunctions .class ,
243263 "exprUtcDate" ,
244264 PPLReturnTypes .DATE_FORCE_NULLABLE ,
245- NullPolicy .NONE )
265+ NullPolicy .NONE ,
266+ PPLOperandTypes .EMPTY )
246267 .toUDF ("UTC_DATE" );
247268 public static final SqlOperator UTC_TIME =
248269 adaptExprMethodWithPropertiesToUDF (
249270 DateTimeFunctions .class ,
250271 "exprUtcTime" ,
251272 PPLReturnTypes .TIME_FORCE_NULLABLE ,
252- NullPolicy .NONE )
273+ NullPolicy .NONE ,
274+ PPLOperandTypes .EMPTY )
253275 .toUDF ("UTC_TIME" );
254276 public static final SqlOperator UTC_TIMESTAMP =
255277 adaptExprMethodWithPropertiesToUDF (
256278 DateTimeFunctions .class ,
257279 "exprUtcTimestamp" ,
258280 PPLReturnTypes .TIMESTAMP_FORCE_NULLABLE ,
259- NullPolicy .NONE )
281+ NullPolicy .NONE ,
282+ PPLOperandTypes .EMPTY )
260283 .toUDF ("UTC_TIMESTAMP" );
261284 public static final SqlOperator WEEK = new WeekFunction ().toUDF ("WEEK" );
262285
0 commit comments