Skip to content

Commit b1795a6

Browse files
committed
HHH-18740 - Deprecate org.hibernate.dialect.hint
Signed-off-by: Jan Schatteman <[email protected]>
1 parent 044d914 commit b1795a6

File tree

9 files changed

+43
-50
lines changed

9 files changed

+43
-50
lines changed

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/H2LegacyDialect.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.hibernate.boot.model.TypeContributions;
2222
import org.hibernate.dialect.*;
2323
import org.hibernate.dialect.function.CommonFunctionFactory;
24-
import org.hibernate.dialect.hint.IndexQueryHintHandler;
2524
import org.hibernate.dialect.identity.H2FinalTableIdentityColumnSupport;
2625
import org.hibernate.dialect.identity.H2IdentityColumnSupport;
2726
import org.hibernate.dialect.identity.IdentityColumnSupport;
@@ -934,7 +933,7 @@ public int registerResultSetOutParameter(CallableStatement statement, int positi
934933

935934
@Override
936935
public String getQueryHintString(String query, String hints) {
937-
return IndexQueryHintHandler.INSTANCE.addQueryHints( query, hints );
936+
return addQueryHints( query, hints );
938937
}
939938

940939
@Override

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/MySQLLegacyDialect.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import org.hibernate.cfg.Environment;
1818
import org.hibernate.dialect.*;
1919
import org.hibernate.dialect.function.CommonFunctionFactory;
20-
import org.hibernate.dialect.hint.IndexQueryHintHandler;
2120
import org.hibernate.dialect.identity.IdentityColumnSupport;
2221
import org.hibernate.dialect.identity.MySQLIdentityColumnSupport;
2322
import org.hibernate.dialect.pagination.LimitHandler;
@@ -864,7 +863,7 @@ public String getEnumTypeDeclaration(String name, String[] values) {
864863
public String getQueryHintString(String query, String hints) {
865864
return getMySQLVersion().isBefore( 5 )
866865
? super.getQueryHintString( query, hints )
867-
: IndexQueryHintHandler.INSTANCE.addQueryHints( query, hints );
866+
: addQueryHints( query, hints );
868867
}
869868

870869
/**

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SingleStoreDialect.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import org.hibernate.dialect.Replacer;
3434
import org.hibernate.dialect.SelectItemReferenceStrategy;
3535
import org.hibernate.dialect.function.CommonFunctionFactory;
36-
import org.hibernate.dialect.hint.IndexQueryHintHandler;
3736
import org.hibernate.dialect.identity.IdentityColumnSupport;
3837
import org.hibernate.dialect.identity.MySQLIdentityColumnSupport;
3938
import org.hibernate.dialect.pagination.LimitHandler;
@@ -407,7 +406,7 @@ public String getEnumTypeDeclaration(String name, String[] values) {
407406

408407
@Override
409408
public String getQueryHintString(String query, String hints) {
410-
return IndexQueryHintHandler.INSTANCE.addQueryHints( query, hints );
409+
return addQueryHints( query, hints );
411410
}
412411

413412
@Override

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import java.util.Set;
4040
import java.util.TimeZone;
4141
import java.util.UUID;
42+
import java.util.regex.Matcher;
4243
import java.util.regex.Pattern;
4344

4445
import org.hibernate.HibernateException;
@@ -313,6 +314,7 @@ public abstract class Dialect implements ConversionContext, TypeContributor, Fun
313314

314315
private static final Pattern ESCAPE_CLOSING_COMMENT_PATTERN = Pattern.compile( "\\*/" );
315316
private static final Pattern ESCAPE_OPENING_COMMENT_PATTERN = Pattern.compile( "/\\*" );
317+
private static final Pattern QUERY_PATTERN = Pattern.compile( "^\\s*(select\\b.+?\\bfrom\\b.+?)(\\bwhere\\b.+?)$" );
316318

317319
private static final CoreMessageLogger LOG = Logger.getMessageLogger( MethodHandles.lookup(), CoreMessageLogger.class, Dialect.class.getName() );
318320

@@ -4790,6 +4792,33 @@ public String addSqlHintOrComment(
47904792
return sql;
47914793
}
47924794

4795+
/**
4796+
* Adds an INDEX query hint as follows:
4797+
*
4798+
* <pre>
4799+
* SELECT *
4800+
* FROM TEST
4801+
* USE INDEX (hint1, hint2)
4802+
* WHERE X=1
4803+
* </pre>
4804+
*/
4805+
public static String addQueryHints(String query, String hints) {
4806+
Matcher matcher = QUERY_PATTERN.matcher( query );
4807+
if ( matcher.matches() && matcher.groupCount() > 1 ) {
4808+
String startToken = matcher.group( 1 );
4809+
String endToken = matcher.group( 2 );
4810+
4811+
return startToken +
4812+
" use index (" +
4813+
hints +
4814+
") " +
4815+
endToken;
4816+
}
4817+
else {
4818+
return query;
4819+
}
4820+
}
4821+
47934822
/**
47944823
* Prepend a comment to the given SQL fragment.
47954824
*/

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.hibernate.boot.model.FunctionContributions;
2121
import org.hibernate.boot.model.TypeContributions;
2222
import org.hibernate.dialect.function.CommonFunctionFactory;
23-
import org.hibernate.dialect.hint.IndexQueryHintHandler;
2423
import org.hibernate.dialect.identity.H2FinalTableIdentityColumnSupport;
2524
import org.hibernate.dialect.identity.IdentityColumnSupport;
2625
import org.hibernate.dialect.pagination.LimitHandler;
@@ -909,7 +908,7 @@ public int registerResultSetOutParameter(CallableStatement statement, int positi
909908

910909
@Override
911910
public String getQueryHintString(String query, String hints) {
912-
return IndexQueryHintHandler.INSTANCE.addQueryHints( query, hints );
911+
return addQueryHints( query, hints );
913912
}
914913

915914
@Override

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.hibernate.boot.model.TypeContributions;
2323
import org.hibernate.cfg.Environment;
2424
import org.hibernate.dialect.function.CommonFunctionFactory;
25-
import org.hibernate.dialect.hint.IndexQueryHintHandler;
2625
import org.hibernate.dialect.identity.IdentityColumnSupport;
2726
import org.hibernate.dialect.identity.MySQLIdentityColumnSupport;
2827
import org.hibernate.dialect.pagination.LimitHandler;
@@ -922,7 +921,7 @@ public String getEnumTypeDeclaration(String name, String[] values) {
922921

923922
@Override
924923
public String getQueryHintString(String query, String hints) {
925-
return IndexQueryHintHandler.INSTANCE.addQueryHints( query, hints );
924+
return addQueryHints( query, hints );
926925
}
927926

928927
/**

hibernate-core/src/main/java/org/hibernate/dialect/hint/IndexQueryHintHandler.java

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,42 +4,16 @@
44
*/
55
package org.hibernate.dialect.hint;
66

7-
import java.util.regex.Matcher;
8-
import java.util.regex.Pattern;
7+
import org.hibernate.dialect.Dialect;
98

109
/**
11-
* Adds an INDEX query hint as follows:
12-
*
13-
* <code>
14-
* SELECT *
15-
* FROM TEST
16-
* USE INDEX (hint1, hint2)
17-
* WHERE X=1
18-
* </code>
19-
*
20-
* @author Vlad Mihalcea
10+
* @deprecated Moved to {@link org.hibernate.dialect.Dialect}
2111
*/
12+
@Deprecated(since = "7.0", forRemoval = true)
2213
public class IndexQueryHintHandler implements QueryHintHandler {
2314

24-
public static final IndexQueryHintHandler INSTANCE = new IndexQueryHintHandler();
25-
26-
private static final Pattern QUERY_PATTERN = Pattern.compile( "^\\s*(select\\b.+?\\bfrom\\b.+?)(\\bwhere\\b.+?)$" );
27-
2815
@Override
2916
public String addQueryHints(String query, String hints) {
30-
Matcher matcher = QUERY_PATTERN.matcher( query );
31-
if ( matcher.matches() && matcher.groupCount() > 1 ) {
32-
String startToken = matcher.group( 1 );
33-
String endToken = matcher.group( 2 );
34-
35-
return startToken +
36-
" use index (" +
37-
hints +
38-
") " +
39-
endToken;
40-
}
41-
else {
42-
return query;
43-
}
17+
return Dialect.addQueryHints( query, hints);
4418
}
4519
}

hibernate-core/src/main/java/org/hibernate/dialect/hint/QueryHintHandler.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
package org.hibernate.dialect.hint;
66

77
/**
8-
* Contract defining how query hints get applied.
9-
*
10-
* @author Vlad Mihalcea
8+
* @deprecated Moved to {@link org.hibernate.dialect.Dialect}
119
*/
10+
@Deprecated(since = "7.0", forRemoval = true)
1211
public interface QueryHintHandler {
1312

1413
/**
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
/*
2-
* Hibernate, Relational Persistence for Idiomatic Java
3-
*
4-
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
5-
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
64
*/
75

86
/**
9-
* Support for query hints using {@link org.hibernate.dialect.Dialect}-specific syntax.
10-
*
11-
* @see org.hibernate.dialect.hint.QueryHintHandler
7+
* @deprecated Moved to {@link org.hibernate.dialect.Dialect}
128
*/
139
package org.hibernate.dialect.hint;

0 commit comments

Comments
 (0)