Skip to content

Commit 10b01f3

Browse files
committed
HHH-3404 emulate regexp_like() on MariaDB
1 parent 1a27f44 commit 10b01f3

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

hibernate-core/src/main/java/org/hibernate/dialect/MariaDBDialect.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
import org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorMariaDBDatabaseImpl;
4646
import org.hibernate.tool.schema.extract.spi.SequenceInformationExtractor;
4747
import org.hibernate.type.SqlTypes;
48-
import org.hibernate.type.StandardBasicTypes;
4948
import org.hibernate.type.descriptor.jdbc.JdbcType;
5049
import org.hibernate.type.descriptor.jdbc.VarcharUUIDJdbcType;
5150
import org.hibernate.type.descriptor.jdbc.spi.JdbcTypeRegistry;
@@ -60,10 +59,14 @@
6059
import static org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtractor.extractUsingTemplate;
6160
import static org.hibernate.internal.util.JdbcExceptionHelper.extractSqlState;
6261
import static org.hibernate.query.sqm.produce.function.FunctionParameterType.NUMERIC;
62+
import static org.hibernate.query.sqm.produce.function.FunctionParameterType.STRING;
63+
import static org.hibernate.query.sqm.produce.function.StandardFunctionReturnTypeResolvers.invariant;
6364
import static org.hibernate.type.SqlTypes.GEOMETRY;
6465
import static org.hibernate.type.SqlTypes.OTHER;
6566
import static org.hibernate.type.SqlTypes.UUID;
6667
import static org.hibernate.type.SqlTypes.VARBINARY;
68+
import static org.hibernate.type.StandardBasicTypes.BOOLEAN;
69+
import static org.hibernate.type.StandardBasicTypes.DOUBLE;
6770

6871
/**
6972
* A {@linkplain Dialect SQL dialect} for MariaDB 10.6 and above.
@@ -121,15 +124,15 @@ public NationalizationSupport getNationalizationSupport() {
121124
public void initializeFunctionRegistry(FunctionContributions functionContributions) {
122125
super.initializeFunctionRegistry( functionContributions );
123126

127+
final var functionRegistry = functionContributions.getFunctionRegistry();
124128
final var commonFunctionFactory = new CommonFunctionFactory( functionContributions );
129+
final var basicTypeRegistry = functionContributions.getTypeConfiguration().getBasicTypeRegistry();
125130

126131
commonFunctionFactory.windowFunctions();
127132
commonFunctionFactory.hypotheticalOrderedSetAggregates_windowEmulation();
128-
functionContributions.getFunctionRegistry().registerNamed(
133+
functionRegistry.registerNamed(
129134
"json_valid",
130-
functionContributions.getTypeConfiguration()
131-
.getBasicTypeRegistry()
132-
.resolve( StandardBasicTypes.BOOLEAN )
135+
basicTypeRegistry.resolve( BOOLEAN )
133136
);
134137
commonFunctionFactory.jsonValue_mariadb();
135138
commonFunctionFactory.jsonArray_mariadb();
@@ -141,11 +144,16 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
141144
commonFunctionFactory.jsonTable_mysql();
142145

143146
commonFunctionFactory.inverseDistributionOrderedSetAggregates_windowEmulation();
144-
functionContributions.getFunctionRegistry().patternDescriptorBuilder( "median", "median(?1) over ()" )
145-
.setInvariantType( functionContributions.getTypeConfiguration().getBasicTypeRegistry().resolve( StandardBasicTypes.DOUBLE ) )
147+
functionRegistry.patternDescriptorBuilder( "median", "median(?1) over ()" )
148+
.setInvariantType( basicTypeRegistry.resolve( DOUBLE ) )
146149
.setExactArgumentCount( 1 )
147150
.setParameterTypes(NUMERIC)
148151
.register();
152+
153+
functionRegistry.patternDescriptorBuilder( "regexp_like", "?1 regexp ?2" )
154+
.setParameterTypes( STRING, STRING )
155+
.setReturnTypeResolver( invariant( basicTypeRegistry.resolve( BOOLEAN ) ) )
156+
.register();
149157
}
150158

151159
@Override
@@ -332,11 +340,6 @@ public IdentifierHelper buildIdentifierHelper(IdentifierHelperBuilder builder, D
332340
return super.buildIdentifierHelper( builder, metadata );
333341
}
334342

335-
@Override
336-
public String getDual() {
337-
return "dual";
338-
}
339-
340343
public ViolatedConstraintNameExtractor getViolatedConstraintNameExtractor() {
341344
return EXTRACTOR;
342345
}

0 commit comments

Comments
 (0)