Skip to content

Commit 40bf38c

Browse files
committed
HHH-3404 cleanup
1 parent 47bf848 commit 40bf38c

File tree

4 files changed

+44
-21
lines changed

4 files changed

+44
-21
lines changed

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,6 @@
229229
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
230230
import static org.hibernate.internal.util.StringHelper.splitAtCommas;
231231
import static org.hibernate.internal.util.collections.ArrayHelper.EMPTY_STRING_ARRAY;
232-
import static org.hibernate.query.sqm.produce.function.FunctionParameterType.STRING;
233232
import static org.hibernate.sql.ast.internal.NonLockingClauseStrategy.NON_CLAUSE_STRATEGY;
234233
import static org.hibernate.type.SqlTypes.ARRAY;
235234
import static org.hibernate.type.SqlTypes.BIGINT;
@@ -268,7 +267,6 @@
268267
import static org.hibernate.type.SqlTypes.isNumericOrDecimal;
269268
import static org.hibernate.type.SqlTypes.isVarbinaryType;
270269
import static org.hibernate.type.SqlTypes.isVarcharType;
271-
import static org.hibernate.type.StandardBasicTypes.BOOLEAN;
272270
import static org.hibernate.type.descriptor.DateTimeUtils.JDBC_ESCAPE_END;
273271
import static org.hibernate.type.descriptor.DateTimeUtils.JDBC_ESCAPE_START_DATE;
274272
import static org.hibernate.type.descriptor.DateTimeUtils.JDBC_ESCAPE_START_TIME;
@@ -1375,11 +1373,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
13751373

13761374
functionRegistry.register( "sql", new SqlFunction() );
13771375

1378-
functionRegistry.namedDescriptorBuilder( "regexp_like" )
1379-
.setArgumentCountBetween( 2, 3 )
1380-
.setParameterTypes( STRING, STRING, STRING )
1381-
.setInvariantType( basicTypeRegistry.resolve( BOOLEAN ) )
1382-
.register();
1376+
functionFactory.regexpLike();
13831377
}
13841378

13851379
/**

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

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
129129

130130
commonFunctionFactory.windowFunctions();
131131
commonFunctionFactory.hypotheticalOrderedSetAggregates_windowEmulation();
132+
commonFunctionFactory.inverseDistributionOrderedSetAggregates_windowEmulation();
133+
commonFunctionFactory.median_medianOver();
134+
135+
commonFunctionFactory.regexpLike_regexp();
136+
132137
functionRegistry.registerNamed(
133138
"json_valid",
134139
basicTypeRegistry.resolve( BOOLEAN )
@@ -141,18 +146,6 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
141146
commonFunctionFactory.jsonArrayAppend_mariadb();
142147
commonFunctionFactory.unnest_emulated();
143148
commonFunctionFactory.jsonTable_mysql();
144-
145-
commonFunctionFactory.inverseDistributionOrderedSetAggregates_windowEmulation();
146-
functionRegistry.patternDescriptorBuilder( "median", "median(?1) over ()" )
147-
.setInvariantType( basicTypeRegistry.resolve( DOUBLE ) )
148-
.setExactArgumentCount( 1 )
149-
.setParameterTypes(NUMERIC)
150-
.register();
151-
152-
functionRegistry.patternDescriptorBuilder( "regexp_like", "?1 regexp ?2" )
153-
.setParameterTypes( STRING, STRING )
154-
.setInvariantType( basicTypeRegistry.resolve( BOOLEAN ) )
155-
.register();
156149
}
157150

158151
@Override

hibernate-core/src/main/java/org/hibernate/dialect/function/CommonFunctionFactory.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,20 @@ public void median_percentileCont_castDouble() {
403403
.register();
404404
}
405405

406+
/**
407+
* For MariaDB
408+
*/
409+
public void median_medianOver() {
410+
functionRegistry.patternDescriptorBuilder(
411+
"median",
412+
"median(?1) over ()"
413+
)
414+
.setInvariantType(doubleType)
415+
.setExactArgumentCount( 1 )
416+
.setParameterTypes(NUMERIC)
417+
.register();
418+
}
419+
406420
/**
407421
* Warning: the semantics of this function are inconsistent between DBs.
408422
* <ul>
@@ -2651,6 +2665,25 @@ public void dateTrunc_datetrunc() {
26512665
.register();
26522666
}
26532667

2668+
public void regexpLike() {
2669+
functionRegistry.namedDescriptorBuilder( "regexp_like" )
2670+
.setArgumentCountBetween( 2, 3 )
2671+
.setParameterTypes( STRING, STRING, STRING )
2672+
.setInvariantType( booleanType )
2673+
.register();
2674+
2675+
}
2676+
2677+
/**
2678+
* For MariaDB
2679+
*/
2680+
public void regexpLike_regexp() {
2681+
functionRegistry.patternDescriptorBuilder( "regexp_like", "?1 regexp ?2" )
2682+
.setParameterTypes( STRING, STRING )
2683+
.setInvariantType( booleanType )
2684+
.register();
2685+
}
2686+
26542687
/**
26552688
* H2, HSQL array() constructor function
26562689
*/

hibernate-core/src/test/java/x/RegexTest.java renamed to hibernate-core/src/test/java/org/hibernate/orm/test/query/hql/RegexTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* SPDX-License-Identifier: Apache-2.0
33
* Copyright Red Hat Inc. and Hibernate Authors
44
*/
5-
package x;
5+
package org.hibernate.orm.test.query.hql;
66

77
import org.hibernate.dialect.HSQLDialect;
88
import org.hibernate.dialect.MariaDBDialect;
@@ -21,7 +21,8 @@
2121
class RegexTest {
2222
@Test
2323
// @SkipForDialect(dialectClass = OracleDialect.class, majorVersion = 19)
24-
@SkipForDialect(dialectClass = OracleDialect.class, majorVersion = 21)
24+
@SkipForDialect(dialectClass = OracleDialect.class, majorVersion = 21,
25+
reason = "regexp_like must be a predicate in older versions")
2526
@SkipForDialect(dialectClass = SQLServerDialect.class,
2627
reason = "regexp_like coming in 2025")
2728
@SkipForDialect(dialectClass = SybaseASEDialect.class,
@@ -32,6 +33,7 @@ void testInSelect(EntityManagerFactoryScope scope) {
3233
assertTrue( em.createQuery( "select 'abcdef' like regexp 'ab.*'", Boolean.class ).getSingleResult() );
3334
} );
3435
}
36+
3537
@Test
3638
@SkipForDialect(dialectClass = MariaDBDialect.class)
3739
@SkipForDialect(dialectClass = HSQLDialect.class)
@@ -45,6 +47,7 @@ void testInSelectCaseInsensitive(EntityManagerFactoryScope scope) {
4547
assertTrue( em.createQuery( "select 'abcdef' ilike regexp 'ab.*'", Boolean.class ).getSingleResult() );
4648
} );
4749
}
50+
4851
@Test
4952
@SkipForDialect(dialectClass = SQLServerDialect.class,
5053
reason = "regexp_like coming in 2025")

0 commit comments

Comments
 (0)