8484import org .hibernate .sql .ast .tree .Statement ;
8585import org .hibernate .sql .exec .spi .JdbcOperation ;
8686import org .hibernate .tool .schema .spi .Exporter ;
87+ import org .hibernate .type .BasicType ;
8788import org .hibernate .type .BasicTypeRegistry ;
8889import org .hibernate .type .NullType ;
8990import org .hibernate .type .SqlTypes ;
103104import jakarta .persistence .TemporalType ;
104105
105106import static org .hibernate .exception .spi .TemplatedViolatedConstraintNameExtractor .extractUsingTemplate ;
107+ import static org .hibernate .query .sqm .produce .function .FunctionParameterType .ANY ;
106108import static org .hibernate .query .sqm .produce .function .FunctionParameterType .NUMERIC ;
109+ import static org .hibernate .query .sqm .produce .function .FunctionParameterType .STRING ;
107110import static org .hibernate .type .SqlTypes .BIGINT ;
108111import static org .hibernate .type .SqlTypes .BINARY ;
109112import static org .hibernate .type .SqlTypes .BIT ;
@@ -582,23 +585,19 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
582585 commonFunctionFactory .hypotheticalOrderedSetAggregates_windowEmulation ();
583586 commonFunctionFactory .inverseDistributionOrderedSetAggregates_windowEmulation ();
584587 commonFunctionFactory .listagg_groupConcat ();
585- functionContributions .getFunctionRegistry ()
588+ SqmFunctionRegistry functionRegistry = functionContributions .getFunctionRegistry ();
589+ BasicTypeRegistry basicTypeRegistry = functionContributions .getTypeConfiguration ().getBasicTypeRegistry ();
590+ functionRegistry
586591 .namedDescriptorBuilder ( "time" )
587592 .setExactArgumentCount ( 1 )
588- .setInvariantType ( functionContributions .getTypeConfiguration ()
589- .getBasicTypeRegistry ()
590- .resolve ( StandardBasicTypes .STRING ) )
593+ .setInvariantType ( basicTypeRegistry .resolve ( StandardBasicTypes .STRING ) )
591594 .register ();
592- functionContributions . getFunctionRegistry ()
595+ functionRegistry
593596 .patternDescriptorBuilder ( "median" , "median(?1) over ()" )
594- .setInvariantType ( functionContributions .getTypeConfiguration ()
595- .getBasicTypeRegistry ()
596- .resolve ( StandardBasicTypes .DOUBLE ) )
597+ .setInvariantType ( basicTypeRegistry .resolve ( StandardBasicTypes .DOUBLE ) )
597598 .setExactArgumentCount ( 1 )
598599 .setParameterTypes ( NUMERIC )
599600 .register ();
600- BasicTypeRegistry basicTypeRegistry = functionContributions .getTypeConfiguration ().getBasicTypeRegistry ();
601- SqmFunctionRegistry functionRegistry = functionContributions .getFunctionRegistry ();
602601 functionRegistry .noArgsBuilder ( "localtime" )
603602 .setInvariantType ( basicTypeRegistry .resolve ( StandardBasicTypes .TIMESTAMP ) )
604603 .setUseParenthesesWhenNoArgs ( false )
@@ -611,6 +610,45 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
611610 .setParameterTypes ( FunctionParameterType .INTEGER )
612611 .register ();
613612 functionRegistry .registerAlternateKey ( "char" , "chr" );
613+ BasicType <Boolean > booleanType = basicTypeRegistry .resolve ( StandardBasicTypes .BOOLEAN );
614+ functionRegistry .namedDescriptorBuilder ( "json_array_contains_string" )
615+ .setInvariantType ( booleanType )
616+ .setExactArgumentCount ( 2 )
617+ .setParameterTypes ( ANY , STRING )
618+ .register ();
619+ functionRegistry .registerAlternateKey ( "json_array_contains" , "json_array_contains_string" );
620+ functionRegistry .namedDescriptorBuilder ( "json_array_contains_json" )
621+ .setInvariantType ( booleanType )
622+ .setExactArgumentCount ( 2 )
623+ .setParameterTypes ( ANY , ANY )
624+ .register ();
625+ functionRegistry .namedDescriptorBuilder ( "json_array_contains_double" )
626+ .setInvariantType ( booleanType )
627+ .setExactArgumentCount ( 2 )
628+ .setParameterTypes ( ANY , NUMERIC )
629+ .register ();
630+ functionRegistry .namedDescriptorBuilder ( "json_match_any_exists" )
631+ .setInvariantType ( booleanType )
632+ .setMinArgumentCount ( 1 )
633+ .register ();
634+ functionRegistry .namedDescriptorBuilder ( "json_match_any" )
635+ .setInvariantType ( booleanType )
636+ .setMinArgumentCount ( 1 )
637+ .register ();
638+ functionRegistry .namedDescriptorBuilder ( "json_extract_string" )
639+ .setInvariantType ( basicTypeRegistry .resolve ( StandardBasicTypes .STRING ) )
640+ .setMinArgumentCount ( 1 )
641+ .register ();
642+ functionRegistry .namedDescriptorBuilder ( "json_extract_double" )
643+ .setInvariantType ( basicTypeRegistry .resolve ( StandardBasicTypes .DOUBLE ) )
644+ .setMinArgumentCount ( 1 )
645+ .register ();
646+ functionRegistry .namedDescriptorBuilder ( "json_extract_bigint" )
647+ .setInvariantType ( basicTypeRegistry .resolve ( StandardBasicTypes .BIG_INTEGER ) )
648+ .setMinArgumentCount ( 1 )
649+ .register ();
650+ functionRegistry .registerAlternateKey ( "json_extract" , "json_extract_string" );
651+ functionRegistry .registerAlternateKey ( "json_extract_json" , "json_extract_string" );
614652 }
615653
616654
0 commit comments