From 274a69133ba8339d3e50497ff72d58f47a0a0a03 Mon Sep 17 00:00:00 2001 From: Christian Beikov Date: Tue, 4 Nov 2025 14:25:35 +0100 Subject: [PATCH 1/3] Disable parallel testing for DB2 11.5 --- docker_db.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/docker_db.sh b/docker_db.sh index e452103cee2c..000d2daef7c0 100755 --- a/docker_db.sh +++ b/docker_db.sh @@ -454,7 +454,6 @@ EOF OUTPUT=$($CONTAINER_CLI logs db2 2>&1) done $CONTAINER_CLI exec -t db2 su - orm_test bash -c ". /database/config/orm_test/sqllib/db2profile; /database/config/orm_test/sqllib/bin/db2 'connect to orm_test'; /database/config/orm_test/sqllib/bin/db2 'CREATE USER TEMPORARY TABLESPACE usr_tbsp MANAGED BY AUTOMATIC STORAGE'" - db2_setup } db2_12_1() { From 46c584079f6feed3d051ba440c3c839e4ba5e109 Mon Sep 17 00:00:00 2001 From: Christian Beikov Date: Tue, 4 Nov 2025 14:53:23 +0100 Subject: [PATCH 2/3] Revert "Handle lack of alias support for delete statements in MariaDB before version 11.6" This reverts commit 078a45252bd8c68c2e1dd112112343415f0ae2fc. --- .../sql/ast/MariaDBSqlAstTranslator.java | 29 ++----------------- 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/sql/ast/MariaDBSqlAstTranslator.java b/hibernate-core/src/main/java/org/hibernate/dialect/sql/ast/MariaDBSqlAstTranslator.java index eda162e8431a..30958f0fe4eb 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/sql/ast/MariaDBSqlAstTranslator.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/sql/ast/MariaDBSqlAstTranslator.java @@ -25,7 +25,6 @@ import org.hibernate.sql.ast.tree.from.DerivedTableReference; import org.hibernate.sql.ast.tree.from.NamedTableReference; import org.hibernate.sql.ast.tree.from.QueryPartTableReference; -import org.hibernate.sql.ast.tree.from.TableReference; import org.hibernate.sql.ast.tree.insert.ConflictClause; import org.hibernate.sql.ast.tree.insert.InsertSelectStatement; import org.hibernate.sql.ast.tree.predicate.BooleanExpressionPredicate; @@ -118,9 +117,7 @@ protected void renderDeleteClause(DeleteStatement statement) { final Stack clauseStack = getClauseStack(); try { clauseStack.push( Clause.DELETE ); - if ( supportsDeleteTableVariable() ) { - renderTableReferenceIdentificationVariable( statement.getTargetTable() ); - } + renderTableReferenceIdentificationVariable( statement.getTargetTable() ); if ( statement.getFromClause().getRoots().isEmpty() ) { appendSql( " from " ); renderDmlTargetTableExpression( statement.getTargetTable() ); @@ -148,28 +145,11 @@ protected void renderUpdateClause(UpdateStatement updateStatement) { @Override protected void renderDmlTargetTableExpression(NamedTableReference tableReference) { super.renderDmlTargetTableExpression( tableReference ); - final Clause currentClause = getClauseStack().getCurrent(); - if ( getClauseStack().getCurrent() != Clause.INSERT - && (currentClause != Clause.DELETE || supportsDeleteTableVariable()) ) { + if ( getClauseStack().getCurrent() != Clause.INSERT ) { renderTableReferenceIdentificationVariable( tableReference ); } } - @Override - protected void renderTableReferenceIdentificationVariable(TableReference tableReference) { - final Stack clauseStack = getCurrentClauseStack(); - if ( clauseStack.getCurrent() == Clause.FROM && clauseStack.depth() > 1 - && clauseStack.peek( 1 ) == Clause.DELETE && !supportsDeleteTableVariable() ) { - return; - } - super.renderTableReferenceIdentificationVariable( tableReference ); - } - - private boolean supportsDeleteTableVariable() { - // Until 11.6, a DELETE statement doesn't support aliasing tables - return getDialect().getVersion().isSameOrAfter( 11, 6 ); - } - @Override protected JdbcOperationQueryInsert translateInsert(InsertSelectStatement sqlAst) { visitInsertStatement( sqlAst ); @@ -198,10 +178,7 @@ protected String determineColumnReferenceQualifier(ColumnReference columnReferen || !( getCurrentDmlStatement() instanceof InsertSelectStatement insertSelectStatement ) || ( dmlAlias = insertSelectStatement.getTargetTable().getIdentificationVariable() ) == null || !dmlAlias.equals( columnReference.getQualifier() ) ) { - return !supportsDeleteTableVariable() && getCurrentDmlStatement() instanceof DeleteStatement statement - && statement.getTargetTable().getIdentificationVariable().equals( columnReference.getQualifier() ) - ? getCurrentDmlStatement().getTargetTable().getTableExpression() - : columnReference.getQualifier(); + return columnReference.getQualifier(); } // Qualify the column reference with the table expression also when in subqueries else if ( qualifierSupport != DmlTargetColumnQualifierSupport.NONE || !getQueryPartStack().isEmpty() ) { From 0bb085438a8bb96ce1e4cdbd05fcd8c3528072a5 Mon Sep 17 00:00:00 2001 From: Christian Beikov Date: Tue, 4 Nov 2025 14:54:44 +0100 Subject: [PATCH 3/3] Restore subtype matching behavior of @SkipForDialect for JUnit5-ified test --- .../java/org/hibernate/orm/test/hql/DeleteWithSubqueryTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/hql/DeleteWithSubqueryTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/hql/DeleteWithSubqueryTest.java index d381fd348af7..66e16dc5dff1 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/hql/DeleteWithSubqueryTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/hql/DeleteWithSubqueryTest.java @@ -33,7 +33,7 @@ public class DeleteWithSubqueryTest { @Test @JiraKey( value = "HHH-8318" ) - @SkipForDialect(dialectClass = MySQLDialect.class, + @SkipForDialect(dialectClass = MySQLDialect.class, matchSubTypes = true, reason = "Cannot use Attrvalue in the delete and from clauses simultaneously." ) public void testDeleteMemberOf(SessionFactoryScope factoryScope) { final String qry = """