37
37
import org .opensearch .sql .data .model .ExprValue ;
38
38
import org .opensearch .sql .expression .function .BuiltinFunctionName ;
39
39
import org .opensearch .sql .expression .function .BuiltinFunctionRepository ;
40
+ import org .opensearch .sql .expression .function .DefaultFunctionResolver ;
40
41
import org .opensearch .sql .expression .function .FunctionName ;
41
42
import org .opensearch .sql .expression .function .FunctionResolver ;
42
43
@@ -94,7 +95,7 @@ public void register(BuiltinFunctionRepository repository) {
94
95
* (STRING/DATETIME/TIMESTAMP, LONG) -> DATETIME
95
96
*/
96
97
97
- private FunctionResolver add_date (FunctionName functionName ) {
98
+ private DefaultFunctionResolver add_date (FunctionName functionName ) {
98
99
return define (functionName ,
99
100
impl (nullMissingHandling (DateTimeFunction ::exprAddDateInterval ),
100
101
DATETIME , STRING , INTERVAL ),
@@ -110,7 +111,7 @@ private FunctionResolver add_date(FunctionName functionName) {
110
111
);
111
112
}
112
113
113
- private FunctionResolver adddate () {
114
+ private DefaultFunctionResolver adddate () {
114
115
return add_date (BuiltinFunctionName .ADDDATE .getName ());
115
116
}
116
117
@@ -119,15 +120,15 @@ private FunctionResolver adddate() {
119
120
* Also to construct a date type. The supported signatures:
120
121
* STRING/DATE/DATETIME/TIMESTAMP -> DATE
121
122
*/
122
- private FunctionResolver date () {
123
+ private DefaultFunctionResolver date () {
123
124
return define (BuiltinFunctionName .DATE .getName (),
124
125
impl (nullMissingHandling (DateTimeFunction ::exprDate ), DATE , STRING ),
125
126
impl (nullMissingHandling (DateTimeFunction ::exprDate ), DATE , DATE ),
126
127
impl (nullMissingHandling (DateTimeFunction ::exprDate ), DATE , DATETIME ),
127
128
impl (nullMissingHandling (DateTimeFunction ::exprDate ), DATE , TIMESTAMP ));
128
129
}
129
130
130
- private FunctionResolver date_add () {
131
+ private DefaultFunctionResolver date_add () {
131
132
return add_date (BuiltinFunctionName .DATE_ADD .getName ());
132
133
}
133
134
@@ -138,7 +139,7 @@ private FunctionResolver date_add() {
138
139
* (DATE, LONG) -> DATE
139
140
* (STRING/DATETIME/TIMESTAMP, LONG) -> DATETIME
140
141
*/
141
- private FunctionResolver sub_date (FunctionName functionName ) {
142
+ private DefaultFunctionResolver sub_date (FunctionName functionName ) {
142
143
return define (functionName ,
143
144
impl (nullMissingHandling (DateTimeFunction ::exprSubDateInterval ),
144
145
DATETIME , STRING , INTERVAL ),
@@ -154,14 +155,14 @@ private FunctionResolver sub_date(FunctionName functionName) {
154
155
);
155
156
}
156
157
157
- private FunctionResolver date_sub () {
158
+ private DefaultFunctionResolver date_sub () {
158
159
return sub_date (BuiltinFunctionName .DATE_SUB .getName ());
159
160
}
160
161
161
162
/**
162
163
* DAY(STRING/DATE/DATETIME/TIMESTAMP). return the day of the month (1-31).
163
164
*/
164
- private FunctionResolver day () {
165
+ private DefaultFunctionResolver day () {
165
166
return define (BuiltinFunctionName .DAY .getName (),
166
167
impl (nullMissingHandling (DateTimeFunction ::exprDayOfMonth ), INTEGER , DATE ),
167
168
impl (nullMissingHandling (DateTimeFunction ::exprDayOfMonth ), INTEGER , DATETIME ),
@@ -175,7 +176,7 @@ private FunctionResolver day() {
175
176
* return the name of the weekday for date, including Monday, Tuesday, Wednesday,
176
177
* Thursday, Friday, Saturday and Sunday.
177
178
*/
178
- private FunctionResolver dayName () {
179
+ private DefaultFunctionResolver dayName () {
179
180
return define (BuiltinFunctionName .DAYNAME .getName (),
180
181
impl (nullMissingHandling (DateTimeFunction ::exprDayName ), STRING , DATE ),
181
182
impl (nullMissingHandling (DateTimeFunction ::exprDayName ), STRING , DATETIME ),
@@ -187,7 +188,7 @@ private FunctionResolver dayName() {
187
188
/**
188
189
* DAYOFMONTH(STRING/DATE/DATETIME/TIMESTAMP). return the day of the month (1-31).
189
190
*/
190
- private FunctionResolver dayOfMonth () {
191
+ private DefaultFunctionResolver dayOfMonth () {
191
192
return define (BuiltinFunctionName .DAYOFMONTH .getName (),
192
193
impl (nullMissingHandling (DateTimeFunction ::exprDayOfMonth ), INTEGER , DATE ),
193
194
impl (nullMissingHandling (DateTimeFunction ::exprDayOfMonth ), INTEGER , DATETIME ),
@@ -200,7 +201,7 @@ private FunctionResolver dayOfMonth() {
200
201
* DAYOFWEEK(STRING/DATE/DATETIME/TIMESTAMP).
201
202
* return the weekday index for date (1 = Sunday, 2 = Monday, …, 7 = Saturday).
202
203
*/
203
- private FunctionResolver dayOfWeek () {
204
+ private DefaultFunctionResolver dayOfWeek () {
204
205
return define (BuiltinFunctionName .DAYOFWEEK .getName (),
205
206
impl (nullMissingHandling (DateTimeFunction ::exprDayOfWeek ), INTEGER , DATE ),
206
207
impl (nullMissingHandling (DateTimeFunction ::exprDayOfWeek ), INTEGER , DATETIME ),
@@ -213,7 +214,7 @@ private FunctionResolver dayOfWeek() {
213
214
* DAYOFYEAR(STRING/DATE/DATETIME/TIMESTAMP).
214
215
* return the day of the year for date (1-366).
215
216
*/
216
- private FunctionResolver dayOfYear () {
217
+ private DefaultFunctionResolver dayOfYear () {
217
218
return define (BuiltinFunctionName .DAYOFYEAR .getName (),
218
219
impl (nullMissingHandling (DateTimeFunction ::exprDayOfYear ), INTEGER , DATE ),
219
220
impl (nullMissingHandling (DateTimeFunction ::exprDayOfYear ), INTEGER , DATETIME ),
@@ -225,15 +226,15 @@ private FunctionResolver dayOfYear() {
225
226
/**
226
227
* FROM_DAYS(LONG). return the date value given the day number N.
227
228
*/
228
- private FunctionResolver from_days () {
229
+ private DefaultFunctionResolver from_days () {
229
230
return define (BuiltinFunctionName .FROM_DAYS .getName (),
230
231
impl (nullMissingHandling (DateTimeFunction ::exprFromDays ), DATE , LONG ));
231
232
}
232
233
233
234
/**
234
235
* HOUR(STRING/TIME/DATETIME/TIMESTAMP). return the hour value for time.
235
236
*/
236
- private FunctionResolver hour () {
237
+ private DefaultFunctionResolver hour () {
237
238
return define (BuiltinFunctionName .HOUR .getName (),
238
239
impl (nullMissingHandling (DateTimeFunction ::exprHour ), INTEGER , STRING ),
239
240
impl (nullMissingHandling (DateTimeFunction ::exprHour ), INTEGER , TIME ),
@@ -255,7 +256,7 @@ private FunctionResolver maketime() {
255
256
/**
256
257
* MICROSECOND(STRING/TIME/DATETIME/TIMESTAMP). return the microsecond value for time.
257
258
*/
258
- private FunctionResolver microsecond () {
259
+ private DefaultFunctionResolver microsecond () {
259
260
return define (BuiltinFunctionName .MICROSECOND .getName (),
260
261
impl (nullMissingHandling (DateTimeFunction ::exprMicrosecond ), INTEGER , STRING ),
261
262
impl (nullMissingHandling (DateTimeFunction ::exprMicrosecond ), INTEGER , TIME ),
@@ -267,7 +268,7 @@ private FunctionResolver microsecond() {
267
268
/**
268
269
* MINUTE(STRING/TIME/DATETIME/TIMESTAMP). return the minute value for time.
269
270
*/
270
- private FunctionResolver minute () {
271
+ private DefaultFunctionResolver minute () {
271
272
return define (BuiltinFunctionName .MINUTE .getName (),
272
273
impl (nullMissingHandling (DateTimeFunction ::exprMinute ), INTEGER , STRING ),
273
274
impl (nullMissingHandling (DateTimeFunction ::exprMinute ), INTEGER , TIME ),
@@ -279,7 +280,7 @@ private FunctionResolver minute() {
279
280
/**
280
281
* MONTH(STRING/DATE/DATETIME/TIMESTAMP). return the month for date (1-12).
281
282
*/
282
- private FunctionResolver month () {
283
+ private DefaultFunctionResolver month () {
283
284
return define (BuiltinFunctionName .MONTH .getName (),
284
285
impl (nullMissingHandling (DateTimeFunction ::exprMonth ), INTEGER , DATE ),
285
286
impl (nullMissingHandling (DateTimeFunction ::exprMonth ), INTEGER , DATETIME ),
@@ -291,7 +292,7 @@ private FunctionResolver month() {
291
292
/**
292
293
* MONTHNAME(STRING/DATE/DATETIME/TIMESTAMP). return the full name of the month for date.
293
294
*/
294
- private FunctionResolver monthName () {
295
+ private DefaultFunctionResolver monthName () {
295
296
return define (BuiltinFunctionName .MONTHNAME .getName (),
296
297
impl (nullMissingHandling (DateTimeFunction ::exprMonthName ), STRING , DATE ),
297
298
impl (nullMissingHandling (DateTimeFunction ::exprMonthName ), STRING , DATETIME ),
@@ -303,7 +304,7 @@ private FunctionResolver monthName() {
303
304
/**
304
305
* QUARTER(STRING/DATE/DATETIME/TIMESTAMP). return the month for date (1-4).
305
306
*/
306
- private FunctionResolver quarter () {
307
+ private DefaultFunctionResolver quarter () {
307
308
return define (BuiltinFunctionName .QUARTER .getName (),
308
309
impl (nullMissingHandling (DateTimeFunction ::exprQuarter ), INTEGER , DATE ),
309
310
impl (nullMissingHandling (DateTimeFunction ::exprQuarter ), INTEGER , DATETIME ),
@@ -315,7 +316,7 @@ private FunctionResolver quarter() {
315
316
/**
316
317
* SECOND(STRING/TIME/DATETIME/TIMESTAMP). return the second value for time.
317
318
*/
318
- private FunctionResolver second () {
319
+ private DefaultFunctionResolver second () {
319
320
return define (BuiltinFunctionName .SECOND .getName (),
320
321
impl (nullMissingHandling (DateTimeFunction ::exprSecond ), INTEGER , STRING ),
321
322
impl (nullMissingHandling (DateTimeFunction ::exprSecond ), INTEGER , TIME ),
@@ -324,7 +325,7 @@ private FunctionResolver second() {
324
325
);
325
326
}
326
327
327
- private FunctionResolver subdate () {
328
+ private DefaultFunctionResolver subdate () {
328
329
return sub_date (BuiltinFunctionName .SUBDATE .getName ());
329
330
}
330
331
@@ -333,7 +334,7 @@ private FunctionResolver subdate() {
333
334
* Also to construct a time type. The supported signatures:
334
335
* STRING/DATE/DATETIME/TIME/TIMESTAMP -> TIME
335
336
*/
336
- private FunctionResolver time () {
337
+ private DefaultFunctionResolver time () {
337
338
return define (BuiltinFunctionName .TIME .getName (),
338
339
impl (nullMissingHandling (DateTimeFunction ::exprTime ), TIME , STRING ),
339
340
impl (nullMissingHandling (DateTimeFunction ::exprTime ), TIME , DATE ),
@@ -345,7 +346,7 @@ private FunctionResolver time() {
345
346
/**
346
347
* TIME_TO_SEC(STRING/TIME/DATETIME/TIMESTAMP). return the time argument, converted to seconds.
347
348
*/
348
- private FunctionResolver time_to_sec () {
349
+ private DefaultFunctionResolver time_to_sec () {
349
350
return define (BuiltinFunctionName .TIME_TO_SEC .getName (),
350
351
impl (nullMissingHandling (DateTimeFunction ::exprTimeToSec ), LONG , STRING ),
351
352
impl (nullMissingHandling (DateTimeFunction ::exprTimeToSec ), LONG , TIME ),
@@ -359,7 +360,7 @@ private FunctionResolver time_to_sec() {
359
360
* Also to construct a date type. The supported signatures:
360
361
* STRING/DATE/DATETIME/TIMESTAMP -> DATE
361
362
*/
362
- private FunctionResolver timestamp () {
363
+ private DefaultFunctionResolver timestamp () {
363
364
return define (BuiltinFunctionName .TIMESTAMP .getName (),
364
365
impl (nullMissingHandling (DateTimeFunction ::exprTimestamp ), TIMESTAMP , STRING ),
365
366
impl (nullMissingHandling (DateTimeFunction ::exprTimestamp ), TIMESTAMP , DATE ),
@@ -370,7 +371,7 @@ private FunctionResolver timestamp() {
370
371
/**
371
372
* TO_DAYS(STRING/DATE/DATETIME/TIMESTAMP). return the day number of the given date.
372
373
*/
373
- private FunctionResolver to_days () {
374
+ private DefaultFunctionResolver to_days () {
374
375
return define (BuiltinFunctionName .TO_DAYS .getName (),
375
376
impl (nullMissingHandling (DateTimeFunction ::exprToDays ), LONG , STRING ),
376
377
impl (nullMissingHandling (DateTimeFunction ::exprToDays ), LONG , TIMESTAMP ),
@@ -381,7 +382,7 @@ private FunctionResolver to_days() {
381
382
/**
382
383
* WEEK(DATE[,mode]). return the week number for date.
383
384
*/
384
- private FunctionResolver week () {
385
+ private DefaultFunctionResolver week () {
385
386
return define (BuiltinFunctionName .WEEK .getName (),
386
387
impl (nullMissingHandling (DateTimeFunction ::exprWeekWithoutMode ), INTEGER , DATE ),
387
388
impl (nullMissingHandling (DateTimeFunction ::exprWeekWithoutMode ), INTEGER , DATETIME ),
@@ -397,7 +398,7 @@ private FunctionResolver week() {
397
398
/**
398
399
* YEAR(STRING/DATE/DATETIME/TIMESTAMP). return the year for date (1000-9999).
399
400
*/
400
- private FunctionResolver year () {
401
+ private DefaultFunctionResolver year () {
401
402
return define (BuiltinFunctionName .YEAR .getName (),
402
403
impl (nullMissingHandling (DateTimeFunction ::exprYear ), INTEGER , DATE ),
403
404
impl (nullMissingHandling (DateTimeFunction ::exprYear ), INTEGER , DATETIME ),
@@ -414,7 +415,7 @@ private FunctionResolver year() {
414
415
* (DATETIME, STRING) -> STRING
415
416
* (TIMESTAMP, STRING) -> STRING
416
417
*/
417
- private FunctionResolver date_format () {
418
+ private DefaultFunctionResolver date_format () {
418
419
return define (BuiltinFunctionName .DATE_FORMAT .getName (),
419
420
impl (nullMissingHandling (DateTimeFormatterUtil ::getFormattedDate ),
420
421
STRING , STRING , STRING ),
@@ -711,6 +712,7 @@ private ExprValue exprToDays(ExprValue date) {
711
712
712
713
/**
713
714
* Week for date implementation for ExprValue.
715
+ *
714
716
* @param date ExprValue of Date/Datetime/Timestamp/String type.
715
717
* @param mode ExprValue of Integer type.
716
718
*/
@@ -722,6 +724,7 @@ private ExprValue exprWeek(ExprValue date, ExprValue mode) {
722
724
/**
723
725
* Week for date implementation for ExprValue.
724
726
* When mode is not specified default value mode 0 is used for default_week_format.
727
+ *
725
728
* @param date ExprValue of Date/Datetime/Timestamp/String type.
726
729
* @return ExprValue.
727
730
*/
0 commit comments