Skip to content

Commit daaeedb

Browse files
committed
fix problems with unaliased tables on Informix
1 parent 523eb84 commit daaeedb

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.hibernate.community.dialect.unique.InformixUniqueDelegate;
2525
import org.hibernate.dialect.DatabaseVersion;
2626
import org.hibernate.dialect.Dialect;
27+
import org.hibernate.dialect.DmlTargetColumnQualifierSupport;
2728
import org.hibernate.dialect.NullOrdering;
2829
import org.hibernate.dialect.Replacer;
2930
import org.hibernate.dialect.SelectItemReferenceStrategy;
@@ -1083,4 +1084,9 @@ public IdentifierHelper buildIdentifierHelper(IdentifierHelperBuilder builder, @
10831084
}
10841085
return super.buildIdentifierHelper( builder, metadata );
10851086
}
1087+
1088+
@Override
1089+
public DmlTargetColumnQualifierSupport getDmlTargetColumnQualifierSupport() {
1090+
return DmlTargetColumnQualifierSupport.TABLE_ALIAS;
1091+
}
10861092
}

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@
2323
import org.hibernate.sql.ast.tree.expression.SelfRenderingExpression;
2424
import org.hibernate.sql.ast.tree.expression.SqlTuple;
2525
import org.hibernate.sql.ast.tree.expression.Summarization;
26+
import org.hibernate.sql.ast.tree.from.NamedTableReference;
2627
import org.hibernate.sql.ast.tree.from.ValuesTableReference;
2728
import org.hibernate.sql.ast.tree.insert.ConflictClause;
2829
import org.hibernate.sql.ast.tree.insert.InsertSelectStatement;
2930
import org.hibernate.sql.ast.tree.select.QueryGroup;
3031
import org.hibernate.sql.ast.tree.select.QueryPart;
3132
import org.hibernate.sql.ast.tree.select.QuerySpec;
3233
import org.hibernate.sql.ast.tree.select.SelectClause;
34+
import org.hibernate.sql.ast.tree.update.UpdateStatement;
3335
import org.hibernate.sql.exec.spi.JdbcOperation;
3436
import org.hibernate.sql.model.internal.TableInsertStandard;
3537

@@ -342,4 +344,22 @@ public void visitBinaryArithmeticExpression(BinaryArithmeticExpression arithmeti
342344
}
343345
super.visitBinaryArithmeticExpression( arithmeticExpression );
344346
}
347+
348+
@Override
349+
protected void renderDmlTargetTableExpression(NamedTableReference tableReference) {
350+
super.renderDmlTargetTableExpression( tableReference );
351+
if ( getClauseStack().getCurrent() != Clause.INSERT ) {
352+
renderTableReferenceIdentificationVariable( tableReference );
353+
}
354+
}
355+
356+
@Override
357+
protected void visitUpdateStatementOnly(UpdateStatement statement) {
358+
if ( hasNonTrivialFromClause( statement.getFromClause() ) ) {
359+
visitUpdateStatementEmulateMerge( statement );
360+
}
361+
else {
362+
super.visitUpdateStatementOnly( statement );
363+
}
364+
}
345365
}

hibernate-core/src/test/java/org/hibernate/orm/test/query/QueryTimeOutTest.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import java.util.Map;
1111

1212
import org.hibernate.cfg.AvailableSettings;
13-
import org.hibernate.community.dialect.InformixDialect;
1413
import org.hibernate.dialect.AbstractTransactSQLDialect;
1514
import org.hibernate.dialect.OracleDialect;
1615
import org.hibernate.dialect.SybaseDialect;
@@ -79,9 +78,6 @@ else if ( DialectContext.getDialect() instanceof SybaseDialect ) {
7978
else if ( DialectContext.getDialect() instanceof AbstractTransactSQLDialect ) {
8079
baseQuery = "update ae1_0 set name=? from AnEntity ae1_0";
8180
}
82-
else if (DialectContext.getDialect() instanceof InformixDialect ) {
83-
baseQuery = "update AnEntity set name=?";
84-
}
8581
else {
8682
baseQuery = "update AnEntity ae1_0 set name=?";
8783
}

0 commit comments

Comments
 (0)