88import static org .apache .calcite .sql .type .SqlTypeFamily .IGNORE ;
99import static org .opensearch .sql .calcite .utils .OpenSearchTypeFactory .getLegacyTypeName ;
1010import static org .opensearch .sql .expression .function .BuiltinFunctionName .*;
11- import static org .opensearch .sql .expression .function .PPLTypeChecker .family ;
12- import static org .opensearch .sql .expression .function .PPLTypeChecker .wrapComparable ;
13- import static org .opensearch .sql .expression .function .PPLTypeChecker .wrapComposite ;
14- import static org .opensearch .sql .expression .function .PPLTypeChecker .wrapFamily ;
1511
1612import com .google .common .collect .ImmutableMap ;
1713import java .math .BigDecimal ;
@@ -66,7 +62,7 @@ default PPLTypeChecker getTypeChecker() {
6662 public interface FunctionImp1 extends FunctionImp {
6763 RexNode resolve (RexBuilder builder , RexNode arg1 );
6864
69- PPLTypeChecker IGNORE_1 = family (IGNORE );
65+ PPLTypeChecker IGNORE_1 = PPLTypeChecker . family (IGNORE );
7066
7167 @ Override
7268 default RexNode resolve (RexBuilder builder , RexNode ... args ) {
@@ -83,7 +79,7 @@ default PPLTypeChecker getTypeChecker() {
8379 }
8480
8581 public interface FunctionImp2 extends FunctionImp {
86- PPLTypeChecker IGNORE_2 = family (IGNORE , IGNORE );
82+ PPLTypeChecker IGNORE_2 = PPLTypeChecker . family (IGNORE , IGNORE );
8783
8884 RexNode resolve (RexBuilder builder , RexNode arg1 , RexNode arg2 );
8985
@@ -235,7 +231,7 @@ public RexNode resolve(RexBuilder builder, RexNode... args) {
235231 @ Override
236232 public PPLTypeChecker getTypeChecker () {
237233 try {
238- return wrapComposite (typeChecker , checkCompositionType );
234+ return PPLTypeChecker . wrapComposite (typeChecker , checkCompositionType );
239235 } catch (IllegalArgumentException | UnsupportedOperationException e ) {
240236 logger .debug (
241237 String .format (
@@ -259,7 +255,7 @@ public RexNode resolve(RexBuilder builder, RexNode... args) {
259255
260256 @ Override
261257 public PPLTypeChecker getTypeChecker () {
262- return wrapFamily (typeChecker );
258+ return PPLTypeChecker . wrapFamily (typeChecker );
263259 }
264260 };
265261 }
@@ -274,7 +270,7 @@ public RexNode resolve(RexBuilder builder, RexNode... args) {
274270
275271 @ Override
276272 public PPLTypeChecker getTypeChecker () {
277- return wrapComparable (typeChecker );
273+ return PPLTypeChecker . wrapComparable (typeChecker );
278274 }
279275 };
280276 }
@@ -469,7 +465,7 @@ void populate() {
469465 builder .makeFlag (Flag .BOTH ),
470466 builder .makeLiteral (" " ),
471467 arg ),
472- family (SqlTypeFamily .STRING )));
468+ PPLTypeChecker . family (SqlTypeFamily .STRING )));
473469
474470 register (
475471 LTRIM ,
@@ -480,7 +476,7 @@ void populate() {
480476 builder .makeFlag (Flag .LEADING ),
481477 builder .makeLiteral (" " ),
482478 arg ),
483- family (SqlTypeFamily .STRING )));
479+ PPLTypeChecker . family (SqlTypeFamily .STRING )));
484480 register (
485481 RTRIM ,
486482 createFunctionImpWithTypeChecker (
@@ -490,12 +486,12 @@ void populate() {
490486 builder .makeFlag (Flag .TRAILING ),
491487 builder .makeLiteral (" " ),
492488 arg ),
493- family (SqlTypeFamily .STRING )));
489+ PPLTypeChecker . family (SqlTypeFamily .STRING )));
494490 register (
495491 STRCMP ,
496492 createFunctionImpWithTypeChecker (
497493 (builder , arg1 , arg2 ) -> builder .makeCall (SqlLibraryOperators .STRCMP , arg2 , arg1 ),
498- family (SqlTypeFamily .STRING , SqlTypeFamily .STRING )));
494+ PPLTypeChecker . family (SqlTypeFamily .STRING , SqlTypeFamily .STRING )));
499495 // SqlStdOperatorTable.SUBSTRING.getOperandTypeChecker is null. We manually create a type
500496 // checker for it.
501497 register (
@@ -516,7 +512,7 @@ void populate() {
516512 LOG ,
517513 createFunctionImpWithTypeChecker (
518514 (builder , arg1 , arg2 ) -> builder .makeCall (SqlLibraryOperators .LOG , arg2 , arg1 ),
519- family (SqlTypeFamily .NUMERIC , SqlTypeFamily .NUMERIC )));
515+ PPLTypeChecker . family (SqlTypeFamily .NUMERIC , SqlTypeFamily .NUMERIC )));
520516 register (
521517 LOG ,
522518 createFunctionImpWithTypeChecker (
@@ -525,7 +521,7 @@ void populate() {
525521 SqlLibraryOperators .LOG ,
526522 arg ,
527523 builder .makeApproxLiteral (BigDecimal .valueOf (Math .E ))),
528- family (SqlTypeFamily .NUMERIC )));
524+ PPLTypeChecker . family (SqlTypeFamily .NUMERIC )));
529525 // SqlStdOperatorTable.SQRT is declared but not implemented. The call to SQRT in Calcite is
530526 // converted to POWER(x, 0.5).
531527 register (
@@ -536,7 +532,7 @@ void populate() {
536532 SqlStdOperatorTable .POWER ,
537533 arg ,
538534 builder .makeApproxLiteral (BigDecimal .valueOf (0.5 ))),
539- family (SqlTypeFamily .NUMERIC )));
535+ PPLTypeChecker . family (SqlTypeFamily .NUMERIC )));
540536 register (
541537 TYPEOF ,
542538 (FunctionImp1 )
@@ -553,24 +549,26 @@ void populate() {
553549 OperandTypes .family (SqlTypeFamily .BOOLEAN , SqlTypeFamily .ANY , SqlTypeFamily .ANY )));
554550 register (
555551 NULLIF ,
556- ( FunctionImp2 )
552+ createFunctionImpWithTypeChecker (
557553 (builder , arg1 , arg2 ) ->
558554 builder .makeCall (
559555 SqlStdOperatorTable .CASE ,
560556 builder .makeCall (SqlStdOperatorTable .EQUALS , arg1 , arg2 ),
561557 builder .makeNullLiteral (arg1 .getType ()),
562- arg1 ));
558+ arg1 ),
559+ PPLTypeChecker .wrapComparable ((SameOperandTypeChecker ) OperandTypes .SAME_SAME )));
563560 register (
564561 IS_EMPTY ,
565- (( FunctionImp1 )
562+ createFunctionImpWithTypeChecker (
566563 (builder , arg ) ->
567564 builder .makeCall (
568565 SqlStdOperatorTable .OR ,
569566 builder .makeCall (SqlStdOperatorTable .IS_NULL , arg ),
570- builder .makeCall (SqlStdOperatorTable .IS_EMPTY , arg ))));
567+ builder .makeCall (SqlStdOperatorTable .IS_EMPTY , arg )),
568+ PPLTypeChecker .family (SqlTypeFamily .ANY )));
571569 register (
572570 IS_BLANK ,
573- (( FunctionImp1 )
571+ createFunctionImpWithTypeChecker (
574572 (builder , arg ) ->
575573 builder .makeCall (
576574 SqlStdOperatorTable .OR ,
@@ -581,7 +579,8 @@ void populate() {
581579 SqlStdOperatorTable .TRIM ,
582580 builder .makeFlag (Flag .BOTH ),
583581 builder .makeLiteral (" " ),
584- arg )))));
582+ arg ))),
583+ PPLTypeChecker .family (SqlTypeFamily .ANY )));
585584 }
586585 }
587586
@@ -614,7 +613,7 @@ public RexNode resolve(RexBuilder builder, RexNode arg1, RexNode arg2) {
614613 @ Override
615614 public PPLTypeChecker getTypeChecker () {
616615 SqlTypeFamily booleanFamily = SqlTypeName .BOOLEAN .getFamily ();
617- return family (booleanFamily , booleanFamily );
616+ return PPLTypeChecker . family (booleanFamily , booleanFamily );
618617 }
619618 }
620619}
0 commit comments