Skip to content

Commit 75b4872

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 ce0ff93 commit 75b4872

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.sql.Types;
1414
import java.time.temporal.ChronoField;
1515
import java.time.temporal.TemporalAccessor;
16+
import java.util.List;
1617
import java.util.Locale;
1718
import java.util.TimeZone;
1819
import java.util.regex.Matcher;
@@ -115,8 +116,10 @@
115116

116117
import jakarta.persistence.TemporalType;
117118

119+
import static java.lang.String.join;
118120
import static java.util.regex.Pattern.CASE_INSENSITIVE;
119121
import static org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtractor.extractUsingTemplate;
122+
import static org.hibernate.internal.util.StringHelper.isEmpty;
120123
import static org.hibernate.query.sqm.TemporalUnit.DAY;
121124
import static org.hibernate.query.sqm.TemporalUnit.HOUR;
122125
import static org.hibernate.query.sqm.TemporalUnit.MINUTE;
@@ -1216,6 +1219,17 @@ public boolean useFollowOnLocking(String sql, QueryOptions queryOptions) {
12161219
);
12171220
}
12181221

1222+
@Override
1223+
public String getQueryHintString(String query, List<String> hintList) {
1224+
if ( hintList.isEmpty() ) {
1225+
return query;
1226+
}
1227+
else {
1228+
final String hints = join( " ", hintList );
1229+
return isEmpty( hints ) ? query : getQueryHintString( query, hints );
1230+
}
1231+
}
1232+
12191233
@Override
12201234
public String getQueryHintString(String sql, String hints) {
12211235
final String statementType = statementType( sql );

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.sql.Types;
1414
import java.time.temporal.ChronoField;
1515
import java.time.temporal.TemporalAccessor;
16+
import java.util.List;
1617
import java.util.TimeZone;
1718
import java.util.regex.Matcher;
1819
import java.util.regex.Pattern;
@@ -104,6 +105,7 @@
104105

105106
import jakarta.persistence.TemporalType;
106107

108+
import static java.lang.String.join;
107109
import static java.util.regex.Pattern.CASE_INSENSITIVE;
108110
import static org.hibernate.LockOptions.NO_WAIT;
109111
import static org.hibernate.LockOptions.SKIP_LOCKED;
@@ -1299,6 +1301,17 @@ public boolean useFollowOnLocking(String sql, QueryOptions queryOptions) {
12991301
|| queryOptions.hasLimit() && queryOptions.getLimit().getFirstRow() != null;
13001302
}
13011303

1304+
@Override
1305+
public String getQueryHintString(String query, List<String> hintList) {
1306+
if ( hintList.isEmpty() ) {
1307+
return query;
1308+
}
1309+
else {
1310+
final String hints = join( " ", hintList );
1311+
return isEmpty( hints ) ? query : getQueryHintString( query, hints );
1312+
}
1313+
}
1314+
13021315
@Override
13031316
public String getQueryHintString(String sql, String hints) {
13041317
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
@@ -96,7 +96,7 @@ public void testQueryHint(SessionFactoryScope scope) {
9696
} );
9797

9898
statementInspector.assertExecutedCount( 1 );
99-
assertTrue( statementInspector.getSqlQueries().get( 0 ).contains( "select /*+ ALL_ROWS, USE_CONCAT */" ) );
99+
assertTrue( statementInspector.getSqlQueries().get( 0 ).contains( "select /*+ ALL_ROWS USE_CONCAT */" ) );
100100
statementInspector.clear();
101101

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

0 commit comments

Comments
 (0)