Skip to content

Commit 9197fd3

Browse files
committed
HHH-19261 - query hints in Oracle are not concatenated with comma's, but with spaces
Signed-off-by: Jan Schatteman <[email protected]>
1 parent 20274de commit 9197fd3

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.sql.Types;
1212
import java.time.temporal.ChronoField;
1313
import java.time.temporal.TemporalAccessor;
14+
import java.util.List;
1415
import java.util.Locale;
1516
import java.util.TimeZone;
1617
import java.util.regex.Matcher;
@@ -119,8 +120,10 @@
119120
import jakarta.persistence.GenerationType;
120121
import jakarta.persistence.TemporalType;
121122

123+
import static java.lang.String.join;
122124
import static java.util.regex.Pattern.CASE_INSENSITIVE;
123125
import static org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtractor.extractUsingTemplate;
126+
import static org.hibernate.internal.util.StringHelper.isEmpty;
124127
import static org.hibernate.query.common.TemporalUnit.DAY;
125128
import static org.hibernate.query.common.TemporalUnit.HOUR;
126129
import static org.hibernate.query.common.TemporalUnit.MINUTE;
@@ -1275,6 +1278,16 @@ public boolean useFollowOnLocking(String sql, QueryOptions queryOptions) {
12751278
);
12761279
}
12771280

1281+
public String getQueryHintString(String query, List<String> hintList) {
1282+
if ( hintList.isEmpty() ) {
1283+
return query;
1284+
}
1285+
else {
1286+
final String hints = join( " ", hintList );
1287+
return isEmpty( hints ) ? query : getQueryHintString( query, hints );
1288+
}
1289+
}
1290+
12781291
@Override
12791292
public String getQueryHintString(String sql, String hints) {
12801293
final String statementType = statementType( sql );

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,13 @@
114114
import java.sql.Types;
115115
import java.time.temporal.ChronoField;
116116
import java.time.temporal.TemporalAccessor;
117+
import java.util.List;
117118
import java.util.TimeZone;
118119
import java.util.regex.Matcher;
119120
import java.util.regex.Pattern;
120121
import org.jboss.logging.Logger;
121122

123+
import static java.lang.String.join;
122124
import static java.util.regex.Pattern.CASE_INSENSITIVE;
123125
import static org.hibernate.cfg.DialectSpecificSettings.ORACLE_USE_BINARY_FLOATS;
124126
import static org.hibernate.cfg.DialectSpecificSettings.ORACLE_OSON_DISABLED;
@@ -1360,6 +1362,16 @@ public boolean useFollowOnLocking(String sql, QueryOptions queryOptions) {
13601362
|| queryOptions.hasLimit() && queryOptions.getLimit().getFirstRow() != null;
13611363
}
13621364

1365+
public String getQueryHintString(String query, List<String> hintList) {
1366+
if ( hintList.isEmpty() ) {
1367+
return query;
1368+
}
1369+
else {
1370+
final String hints = join( " ", hintList );
1371+
return isEmpty( hints ) ? query : getQueryHintString( query, hints );
1372+
}
1373+
}
1374+
13631375
@Override
13641376
public String getQueryHintString(String sql, String hints) {
13651377
final String statementType = statementType( sql );

hibernate-core/src/test/java/org/hibernate/orm/test/queryhint/OracleQueryHintTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public void testQueryHint(SessionFactoryScope scope) {
9494
} );
9595

9696
statementInspector.assertExecutedCount( 1 );
97-
assertTrue( statementInspector.getSqlQueries().get( 0 ).contains( "select /*+ ALL_ROWS, USE_CONCAT */" ) );
97+
assertTrue( statementInspector.getSqlQueries().get( 0 ).contains( "select /*+ ALL_ROWS USE_CONCAT */" ) );
9898
statementInspector.clear();
9999

100100
// ensure the insertion logic can handle a comment appended to the front

0 commit comments

Comments
 (0)