Skip to content

Commit 1a27f44

Browse files
committed
HHH-3404 let's see how many databases support regexp_like()
1 parent add3b56 commit 1a27f44

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@
149149
import org.hibernate.tool.schema.spi.SchemaManagementTool;
150150
import org.hibernate.tool.schema.spi.TableMigrator;
151151
import org.hibernate.type.BasicType;
152-
import org.hibernate.type.BasicTypeRegistry;
153152
import org.hibernate.type.SqlTypes;
154153
import org.hibernate.type.StandardBasicTypes;
155154
import org.hibernate.type.descriptor.WrapperOptions;
@@ -230,12 +229,13 @@
230229
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
231230
import static org.hibernate.internal.util.StringHelper.splitAtCommas;
232231
import static org.hibernate.internal.util.collections.ArrayHelper.EMPTY_STRING_ARRAY;
232+
import static org.hibernate.query.sqm.produce.function.FunctionParameterType.STRING;
233+
import static org.hibernate.query.sqm.produce.function.StandardFunctionReturnTypeResolvers.invariant;
233234
import static org.hibernate.sql.ast.internal.NonLockingClauseStrategy.NON_CLAUSE_STRATEGY;
234235
import static org.hibernate.type.SqlTypes.ARRAY;
235236
import static org.hibernate.type.SqlTypes.BIGINT;
236237
import static org.hibernate.type.SqlTypes.BINARY;
237238
import static org.hibernate.type.SqlTypes.BLOB;
238-
import static org.hibernate.type.SqlTypes.BOOLEAN;
239239
import static org.hibernate.type.SqlTypes.CHAR;
240240
import static org.hibernate.type.SqlTypes.CLOB;
241241
import static org.hibernate.type.SqlTypes.DATE;
@@ -269,6 +269,7 @@
269269
import static org.hibernate.type.SqlTypes.isNumericOrDecimal;
270270
import static org.hibernate.type.SqlTypes.isVarbinaryType;
271271
import static org.hibernate.type.SqlTypes.isVarcharType;
272+
import static org.hibernate.type.StandardBasicTypes.BOOLEAN;
272273
import static org.hibernate.type.descriptor.DateTimeUtils.JDBC_ESCAPE_END;
273274
import static org.hibernate.type.descriptor.DateTimeUtils.JDBC_ESCAPE_START_DATE;
274275
import static org.hibernate.type.descriptor.DateTimeUtils.JDBC_ESCAPE_START_TIME;
@@ -434,7 +435,7 @@ protected void initDefaultProperties() {
434435
protected void registerColumnTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry) {
435436
final DdlTypeRegistry ddlTypeRegistry = typeContributions.getTypeConfiguration().getDdlTypeRegistry();
436437

437-
ddlTypeRegistry.addDescriptor( simpleSqlType( BOOLEAN ) );
438+
ddlTypeRegistry.addDescriptor( simpleSqlType( SqlTypes.BOOLEAN ) );
438439

439440
ddlTypeRegistry.addDescriptor( simpleSqlType( TINYINT ) );
440441
ddlTypeRegistry.addDescriptor( simpleSqlType( SMALLINT ) );
@@ -575,7 +576,7 @@ protected String columnType(int sqlTypeCode) {
575576
return switch (sqlTypeCode) {
576577
case ROWID -> "rowid";
577578

578-
case BOOLEAN -> "boolean";
579+
case SqlTypes.BOOLEAN -> "boolean";
579580

580581
case TINYINT -> "tinyint";
581582
case SMALLINT -> "smallint";
@@ -1374,6 +1375,11 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
13741375
functionRegistry.registerAlternateKey( "current_instant", "instant" ); //deprecated legacy!
13751376

13761377
functionRegistry.register( "sql", new SqlFunction() );
1378+
1379+
functionRegistry.namedDescriptorBuilder( "regexp_like" )
1380+
.setParameterTypes( STRING, STRING )
1381+
.setReturnTypeResolver( invariant( basicTypeRegistry.resolve( BOOLEAN ) ) )
1382+
.register();
13771383
}
13781384

13791385
/**
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package x;
6+
7+
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
8+
import org.hibernate.testing.orm.junit.Jpa;
9+
import org.junit.jupiter.api.Test;
10+
11+
import static org.junit.jupiter.api.Assertions.assertTrue;
12+
13+
@Jpa
14+
class RegexTest {
15+
@Test
16+
void test(EntityManagerFactoryScope scope) {
17+
scope.inEntityManager( em -> {
18+
assertTrue( em.createQuery( "select regexp_like('abcdef', 'ab.*')", Boolean.class ).getSingleResult() );
19+
} );
20+
}
21+
}

0 commit comments

Comments
 (0)