From 376ef717e92531cff14054ad4cd284560746f1ad Mon Sep 17 00:00:00 2001 From: Steve Ebersole Date: Fri, 16 Oct 2009 16:21:02 +0000 Subject: [PATCH] HHH-4486 : MySQL [DROP TEMPORARY TABLE] support git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@17782 1b8cb986-b30d-0410-93ca-fae66ebed9b2 --- .../main/java/org/hibernate/dialect/Dialect.java | 9 +++++++++ .../java/org/hibernate/dialect/MySQLDialect.java | 14 ++++++++++---- .../hql/ast/exec/AbstractStatementExecutor.java | 5 +++-- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/org/hibernate/dialect/Dialect.java b/core/src/main/java/org/hibernate/dialect/Dialect.java index bc39344078..5247deda38 100644 --- a/core/src/main/java/org/hibernate/dialect/Dialect.java +++ b/core/src/main/java/org/hibernate/dialect/Dialect.java @@ -1091,6 +1091,15 @@ public abstract class Dialect { return ""; } + /** + * Command used to drop a temporary table. + * + * @return The command used to drop a temporary table. + */ + public String getDropTemporaryTableString() { + return "drop table"; + } + /** * Does the dialect require that temporary table DDL statements occur in * isolation from other statements? This would be the case if the creation diff --git a/core/src/main/java/org/hibernate/dialect/MySQLDialect.java b/core/src/main/java/org/hibernate/dialect/MySQLDialect.java index a804672640..fb83903714 100644 --- a/core/src/main/java/org/hibernate/dialect/MySQLDialect.java +++ b/core/src/main/java/org/hibernate/dialect/MySQLDialect.java @@ -281,6 +281,16 @@ public class MySQLDialect extends Dialect { return "create temporary table if not exists"; } + public String getDropTemporaryTableString() { + return "drop temporary table"; + } + + public Boolean performTemporaryTableDDLInIsolation() { + // because we [drop *temporary* table...] we do not + // have to perform these in isolation. + return Boolean.FALSE; + } + public String getCastTypeName(int code) { if ( code==Types.INTEGER ) { return "signed"; @@ -324,10 +334,6 @@ public class MySQLDialect extends Dialect { return true; } - public Boolean performTemporaryTableDDLInIsolation() { - return Boolean.FALSE; - } - // Overridden informational metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/core/src/main/java/org/hibernate/hql/ast/exec/AbstractStatementExecutor.java b/core/src/main/java/org/hibernate/hql/ast/exec/AbstractStatementExecutor.java index 4085ff972a..e753c4a503 100644 --- a/core/src/main/java/org/hibernate/hql/ast/exec/AbstractStatementExecutor.java +++ b/core/src/main/java/org/hibernate/hql/ast/exec/AbstractStatementExecutor.java @@ -28,7 +28,6 @@ import java.sql.PreparedStatement; import java.sql.Connection; import java.sql.Statement; import java.util.List; -import java.util.Iterator; import java.util.Collections; import org.hibernate.HibernateException; @@ -182,8 +181,10 @@ public abstract class AbstractStatementExecutor implements StatementExecutor { public void doWork(Connection connection) throws HibernateException { Statement stmnt = null; try { + final String command = session.getFactory().getSettings().getDialect().getDropTemporaryTableString() + + " " + persister.getTemporaryIdTableName(); stmnt = connection.createStatement(); - stmnt.executeUpdate( "drop table " + persister.getTemporaryIdTableName() ); + stmnt.executeUpdate( command ); } catch( Throwable t ) { log.warn( "unable to drop temporary id table after use [" + t.getMessage() + "]" );