Skip to content

Commit 6fd1de1

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 96e180e commit 6fd1de1

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
@@ -113,10 +113,12 @@
113113
import java.sql.Types;
114114
import java.time.temporal.ChronoField;
115115
import java.time.temporal.TemporalAccessor;
116+
import java.util.List;
116117
import java.util.TimeZone;
117118
import java.util.regex.Matcher;
118119
import java.util.regex.Pattern;
119120

121+
import static java.lang.String.join;
120122
import static java.util.regex.Pattern.CASE_INSENSITIVE;
121123
import static org.hibernate.cfg.DialectSpecificSettings.ORACLE_USE_BINARY_FLOATS;
122124
import static org.hibernate.dialect.type.OracleJdbcHelper.getArrayJdbcTypeConstructor;
@@ -1337,6 +1339,16 @@ public boolean useFollowOnLocking(String sql, QueryOptions queryOptions) {
13371339
|| queryOptions.hasLimit() && queryOptions.getLimit().getFirstRow() != null;
13381340
}
13391341

1342+
public String getQueryHintString(String query, List<String> hintList) {
1343+
if ( hintList.isEmpty() ) {
1344+
return query;
1345+
}
1346+
else {
1347+
final String hints = join( " ", hintList );
1348+
return isEmpty( hints ) ? query : getQueryHintString( query, hints );
1349+
}
1350+
}
1351+
13401352
@Override
13411353
public String getQueryHintString(String sql, String hints) {
13421354
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)