5757import org .hibernate .query .sqm .mutation .internal .temptable .LocalTemporaryTableMutationStrategy ;
5858import org .hibernate .query .sqm .mutation .spi .SqmMultiTableInsertStrategy ;
5959import org .hibernate .query .sqm .mutation .spi .SqmMultiTableMutationStrategy ;
60+ import org .hibernate .query .sqm .produce .function .StandardFunctionArgumentTypeResolvers ;
6061import org .hibernate .query .sqm .sql .SqmTranslator ;
6162import org .hibernate .query .sqm .sql .SqmTranslatorFactory ;
6263import org .hibernate .query .sqm .sql .StandardSqmTranslatorFactory ;
7677import org .hibernate .tool .schema .internal .StandardTableExporter ;
7778import org .hibernate .tool .schema .spi .Exporter ;
7879import org .hibernate .type .JavaObjectType ;
80+ import org .hibernate .type .StandardBasicTypes ;
7981import org .hibernate .type .descriptor .jdbc .ClobJdbcType ;
8082import org .hibernate .type .descriptor .jdbc .ObjectNullAsBinaryTypeJdbcType ;
8183import org .hibernate .type .descriptor .jdbc .spi .JdbcTypeRegistry ;
8890import jakarta .persistence .TemporalType ;
8991
9092import static org .hibernate .exception .spi .TemplatedViolatedConstraintNameExtractor .extractUsingTemplate ;
93+ import static org .hibernate .query .sqm .produce .function .FunctionParameterType .STRING ;
9194import static org .hibernate .type .SqlTypes .BIGINT ;
9295import static org .hibernate .type .SqlTypes .BINARY ;
9396import static org .hibernate .type .SqlTypes .FLOAT ;
@@ -333,7 +336,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
333336 functionFactory .stddev ();
334337 functionFactory .variance ();
335338 functionFactory .bitLength_pattern ( "length(?1)*8" );
336-
339+
337340 if ( getVersion ().isSameOrAfter ( 12 ) ) {
338341 functionFactory .locate_charindex ();
339342 }
@@ -342,6 +345,20 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
342345
343346 functionContributions .getFunctionRegistry ().register ( "least" , new CaseLeastGreatestEmulation ( true ) );
344347 functionContributions .getFunctionRegistry ().register ( "greatest" , new CaseLeastGreatestEmulation ( false ) );
348+ functionContributions .getFunctionRegistry ().namedDescriptorBuilder ( "matches" )
349+ .setInvariantType ( functionContributions .getTypeConfiguration ()
350+ .getBasicTypeRegistry ()
351+ .resolve ( StandardBasicTypes .STRING )
352+ )
353+ .setExactArgumentCount ( 2 )
354+ .setArgumentTypeResolver (
355+ StandardFunctionArgumentTypeResolvers .impliedOrInvariant (
356+ functionContributions .getTypeConfiguration (),
357+ STRING
358+ )
359+ )
360+ .setArgumentListSignature ( "(STRING string, STRING pattern)" )
361+ .register ();
345362 if ( supportsWindowFunctions () ) {
346363 functionFactory .windowFunctions ();
347364 }
0 commit comments