Skip to content

Commit c77b5a0

Browse files
committed
HHH-18368 WRAP_ALL_PARAMETERS mode used for coalesce function
1 parent 060e59a commit c77b5a0

File tree

3 files changed

+13
-12
lines changed

3 files changed

+13
-12
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
295295
);
296296
}
297297
else {
298-
functionFactory.coalesce( SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS );
298+
functionFactory.coalesce( SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS );
299299
functionFactory.locate_charindex();
300300
}
301301
functionContributions.getFunctionRegistry().register( "least", new CaseLeastGreatestEmulation( true ) );

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,12 +174,12 @@ protected boolean supportsRowValueConstructorSyntaxInQuantifiedPredicates() {
174174

175175
@Override
176176
protected String getDual() {
177-
return "(select 0 from systables where tabid=1)";
177+
return "systables where tabid=1";
178178
}
179179

180180
@Override
181181
protected String getFromDualForSelectOnly() {
182-
return " from " + getDual() + " dual";
182+
return getDialect().getVersion().isBefore( 14) ? (" from " + getDual()) : "";
183183
}
184184

185185
@Override

hibernate-core/src/main/java/org/hibernate/sql/ast/spi/AbstractSqlAstTranslator.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ public abstract class AbstractSqlAstTranslator<T extends JdbcOperation> implemen
334334
private JdbcParameter offsetParameter;
335335
private JdbcParameter limitParameter;
336336
private ForUpdateClause forUpdate;
337+
private boolean wrappingStarted;
337338

338339
protected AbstractSqlAstTranslator(SessionFactoryImplementor sessionFactory, Statement statement) {
339340
this.sessionFactory = sessionFactory;
@@ -7078,16 +7079,16 @@ protected final void renderParameterAsParameter(JdbcParameter jdbcParameter) {
70787079

70797080
protected void renderWrappedParameter(JdbcParameter jdbcParameter) {
70807081
clauseStack.push( Clause.SELECT );
7081-
7082+
this.wrappingStarted = true;
70827083
try {
70837084
appendSql( "(select " );
7084-
7085-
render( jdbcParameter, SqlAstNodeRenderingMode.DEFAULT );
7085+
renderCasted( jdbcParameter );
70867086
appendSql( getFromDualForSelectOnly() );
70877087
appendSql( ')' );
70887088
}
70897089
finally {
70907090
clauseStack.pop();
7091+
this.wrappingStarted = false;
70917092
}
70927093
}
70937094

@@ -7106,7 +7107,7 @@ protected void renderParameterAsParameter(int position, JdbcParameter jdbcParame
71067107
@Override
71077108
public void render(SqlAstNode sqlAstNode, SqlAstNodeRenderingMode renderingMode) {
71087109
SqlAstNodeRenderingMode original = this.parameterRenderingMode;
7109-
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS ) {
7110+
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && ( original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS || wrappingStarted ) ) {
71107111
this.parameterRenderingMode = renderingMode;
71117112
}
71127113
try {
@@ -7119,7 +7120,7 @@ public void render(SqlAstNode sqlAstNode, SqlAstNodeRenderingMode renderingMode)
71197120

71207121
protected void withParameterRenderingMode(SqlAstNodeRenderingMode renderingMode, Runnable runnable) {
71217122
SqlAstNodeRenderingMode original = this.parameterRenderingMode;
7122-
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS ) {
7123+
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && ( original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS || wrappingStarted ) ) {
71237124
this.parameterRenderingMode = renderingMode;
71247125
}
71257126
try {
@@ -7303,7 +7304,7 @@ protected void visitAnsiCaseSearchedExpression(
73037304
appendSql( "case" );
73047305
final SqlAstNodeRenderingMode original = this.parameterRenderingMode;
73057306
for ( CaseSearchedExpression.WhenFragment whenFragment : caseSearchedExpression.getWhenFragments() ) {
7306-
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS ) {
7307+
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && ( original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS || wrappingStarted ) ) {
73077308
this.parameterRenderingMode = SqlAstNodeRenderingMode.DEFAULT;
73087309
}
73097310
appendSql( " when " );
@@ -7331,7 +7332,7 @@ protected void visitDecodeCaseSearchedExpression(CaseSearchedExpression caseSear
73317332
for ( int i = 0; i < caseNumber; i++ ) {
73327333
final CaseSearchedExpression.WhenFragment whenFragment = whenFragments.get( i );
73337334
Predicate predicate = whenFragment.getPredicate();
7334-
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS ) {
7335+
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && ( original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS || wrappingStarted ) ) {
73357336
this.parameterRenderingMode = SqlAstNodeRenderingMode.DEFAULT;
73367337
}
73377338
if ( i != 0 ) {
@@ -7378,12 +7379,12 @@ protected void visitAnsiCaseSimpleExpression(
73787379
Consumer<Expression> resultRenderer) {
73797380
appendSql( "case " );
73807381
final SqlAstNodeRenderingMode original = this.parameterRenderingMode;
7381-
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS ) {
7382+
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && ( original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS || wrappingStarted ) ) {
73827383
this.parameterRenderingMode = SqlAstNodeRenderingMode.DEFAULT;
73837384
}
73847385
caseSimpleExpression.getFixture().accept( this );
73857386
for ( CaseSimpleExpression.WhenFragment whenFragment : caseSimpleExpression.getWhenFragments() ) {
7386-
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS ) {
7387+
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && ( original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS || wrappingStarted ) ) {
73877388
this.parameterRenderingMode = SqlAstNodeRenderingMode.DEFAULT;
73887389
}
73897390
appendSql( " when " );

0 commit comments

Comments
 (0)