Skip to content

Commit 47f7841

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 30c9faf commit 47f7841

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
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;
@@ -109,7 +110,9 @@
109110

110111
import jakarta.persistence.TemporalType;
111112

113+
import static java.lang.String.join;
112114
import static org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtractor.extractUsingTemplate;
115+
import static org.hibernate.internal.util.StringHelper.isEmpty;
113116
import static org.hibernate.query.sqm.TemporalUnit.DAY;
114117
import static org.hibernate.query.sqm.TemporalUnit.HOUR;
115118
import static org.hibernate.query.sqm.TemporalUnit.MINUTE;
@@ -1109,6 +1112,17 @@ public boolean useFollowOnLocking(String sql, QueryOptions queryOptions) {
11091112
);
11101113
}
11111114

1115+
@Override
1116+
public String getQueryHintString(String query, List<String> hintList) {
1117+
if ( hintList.isEmpty() ) {
1118+
return query;
1119+
}
1120+
else {
1121+
final String hints = join( " ", hintList );
1122+
return isEmpty( hints ) ? query : getQueryHintString( query, hints );
1123+
}
1124+
}
1125+
11121126
@Override
11131127
public String getQueryHintString(String sql, String hints) {
11141128
final String statementType = statementType( sql );

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

Lines changed: 13 additions & 1 deletion
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;
@@ -81,7 +82,6 @@
8182
import org.hibernate.type.StandardBasicTypes;
8283
import org.hibernate.type.descriptor.java.PrimitiveByteArrayJavaType;
8384
import org.hibernate.type.descriptor.jdbc.AggregateJdbcType;
84-
import org.hibernate.type.descriptor.jdbc.ArrayJdbcType;
8585
import org.hibernate.type.descriptor.jdbc.BlobJdbcType;
8686
import org.hibernate.type.descriptor.jdbc.JdbcType;
8787
import org.hibernate.type.descriptor.jdbc.NullJdbcType;
@@ -94,6 +94,7 @@
9494

9595
import jakarta.persistence.TemporalType;
9696

97+
import static java.lang.String.join;
9798
import static java.util.regex.Pattern.CASE_INSENSITIVE;
9899
import static org.hibernate.LockOptions.NO_WAIT;
99100
import static org.hibernate.LockOptions.SKIP_LOCKED;
@@ -1119,6 +1120,17 @@ public boolean useFollowOnLocking(String sql, QueryOptions queryOptions) {
11191120
|| queryOptions.hasLimit() && queryOptions.getLimit().getFirstRow() != null;
11201121
}
11211122

1123+
@Override
1124+
public String getQueryHintString(String query, List<String> hintList) {
1125+
if ( hintList.isEmpty() ) {
1126+
return query;
1127+
}
1128+
else {
1129+
final String hints = join( " ", hintList );
1130+
return isEmpty( hints ) ? query : getQueryHintString( query, hints );
1131+
}
1132+
}
1133+
11221134
@Override
11231135
public String getQueryHintString(String sql, String hints) {
11241136
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)