Skip to content

Commit 7a42ea2

Browse files
committed
HHH-18368 WRAP_ALL_PARAMETERS mode used for coalesce function
1 parent b9a3cec commit 7a42ea2

File tree

2 files changed

+11
-9
lines changed

2 files changed

+11
-9
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
@@ -317,7 +317,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
317317
);
318318
}
319319
else {
320-
functionFactory.coalesce( SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS );
320+
functionFactory.coalesce( SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS );
321321
functionFactory.locate_charindex();
322322
}
323323
functionContributions.getFunctionRegistry().register( "least", new CaseLeastGreatestEmulation( true ) );

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

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,7 @@ public abstract class AbstractSqlAstTranslator<T extends JdbcOperation> implemen
335335
private JdbcParameter offsetParameter;
336336
private JdbcParameter limitParameter;
337337
private ForUpdateClause forUpdate;
338+
private boolean wrappingStarted;
338339

339340
protected AbstractSqlAstTranslator(SessionFactoryImplementor sessionFactory, Statement statement) {
340341
this.sessionFactory = sessionFactory;
@@ -7152,15 +7153,16 @@ protected final void renderParameterAsParameter(JdbcParameter jdbcParameter) {
71527153

71537154
protected void renderWrappedParameter(JdbcParameter jdbcParameter) {
71547155
clauseStack.push( Clause.SELECT );
7155-
7156+
this.wrappingStarted = true;
71567157
try {
71577158
appendSql( "(select " );
7158-
visitParameterAsParameter( jdbcParameter );
7159+
renderCasted( jdbcParameter );
71597160
appendSql( getFromDualForSelectOnly() );
71607161
appendSql( ')' );
71617162
}
71627163
finally {
71637164
clauseStack.pop();
7165+
this.wrappingStarted = false;
71647166
}
71657167
}
71667168

@@ -7179,7 +7181,7 @@ protected void renderParameterAsParameter(int position, JdbcParameter jdbcParame
71797181
@Override
71807182
public void render(SqlAstNode sqlAstNode, SqlAstNodeRenderingMode renderingMode) {
71817183
SqlAstNodeRenderingMode original = this.parameterRenderingMode;
7182-
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS ) {
7184+
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && ( original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS || wrappingStarted ) ) {
71837185
this.parameterRenderingMode = renderingMode;
71847186
}
71857187
try {
@@ -7192,7 +7194,7 @@ public void render(SqlAstNode sqlAstNode, SqlAstNodeRenderingMode renderingMode)
71927194

71937195
protected void withParameterRenderingMode(SqlAstNodeRenderingMode renderingMode, Runnable runnable) {
71947196
SqlAstNodeRenderingMode original = this.parameterRenderingMode;
7195-
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS ) {
7197+
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && ( original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS || wrappingStarted ) ) {
71967198
this.parameterRenderingMode = renderingMode;
71977199
}
71987200
try {
@@ -7376,7 +7378,7 @@ protected void visitAnsiCaseSearchedExpression(
73767378
appendSql( "case" );
73777379
final SqlAstNodeRenderingMode original = this.parameterRenderingMode;
73787380
for ( CaseSearchedExpression.WhenFragment whenFragment : caseSearchedExpression.getWhenFragments() ) {
7379-
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS ) {
7381+
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && ( original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS || wrappingStarted ) ) {
73807382
this.parameterRenderingMode = SqlAstNodeRenderingMode.DEFAULT;
73817383
}
73827384
appendSql( " when " );
@@ -7404,7 +7406,7 @@ protected void visitDecodeCaseSearchedExpression(CaseSearchedExpression caseSear
74047406
for ( int i = 0; i < caseNumber; i++ ) {
74057407
final CaseSearchedExpression.WhenFragment whenFragment = whenFragments.get( i );
74067408
Predicate predicate = whenFragment.getPredicate();
7407-
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS ) {
7409+
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && ( original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS || wrappingStarted ) ) {
74087410
this.parameterRenderingMode = SqlAstNodeRenderingMode.DEFAULT;
74097411
}
74107412
if ( i != 0 ) {
@@ -7451,12 +7453,12 @@ protected void visitAnsiCaseSimpleExpression(
74517453
Consumer<Expression> resultRenderer) {
74527454
appendSql( "case " );
74537455
final SqlAstNodeRenderingMode original = this.parameterRenderingMode;
7454-
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS ) {
7456+
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && ( original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS || wrappingStarted ) ) {
74557457
this.parameterRenderingMode = SqlAstNodeRenderingMode.DEFAULT;
74567458
}
74577459
caseSimpleExpression.getFixture().accept( this );
74587460
for ( CaseSimpleExpression.WhenFragment whenFragment : caseSimpleExpression.getWhenFragments() ) {
7459-
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS ) {
7461+
if ( original != SqlAstNodeRenderingMode.INLINE_ALL_PARAMETERS && ( original != SqlAstNodeRenderingMode.WRAP_ALL_PARAMETERS || wrappingStarted ) ) {
74607462
this.parameterRenderingMode = SqlAstNodeRenderingMode.DEFAULT;
74617463
}
74627464
appendSql( " when " );

0 commit comments

Comments
 (0)