You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2007/12/25 23:46:50 UTC

svn commit: r606823 - in /cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src: main/java/org/apache/cayenne/access/ main/java/org/apache/cayenne/dba/ main/java/org/apache/cayenne/dba/frontbase/ main/java/org/apache/cayenne/dba/mysql/ main/java/...

Author: aadamchik
Date: Tue Dec 25 14:46:49 2007
New Revision: 606823

URL: http://svn.apache.org/viewvc?rev=606823&view=rev
Log:
CAY-116 Improve DbAdapter to support cascading drop constraints when DB does not
(support for a collection of statements for "drop table" operation)

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbGenerator.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/DbAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DropTableToDb.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/dba/MockDbAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/AbstractAccessStack.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/MySQLStackAdapter.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbGenerator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbGenerator.java?rev=606823&r1=606822&r2=606823&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbGenerator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbGenerator.java Tue Dec 25 14:46:49 2007
@@ -66,7 +66,7 @@
     protected DataDomain domain;
 
     // stores generated SQL statements
-    protected Map<String, String> dropTables;
+    protected Map<String, Collection<String>> dropTables;
     protected Map<String, String> createTables;
     protected Map<String, List<String>> createConstraints;
     protected List<String> createPK;
@@ -149,7 +149,7 @@
      * this method.
      */
     protected void buildStatements() {
-        dropTables = new HashMap<String, String>();
+        dropTables = new HashMap<String, Collection<String>>();
         createTables = new HashMap<String, String>();
         createConstraints = new HashMap<String, List<String>>();
 
@@ -161,7 +161,7 @@
             String name = dbe.getName();
 
             // build "DROP TABLE"
-            dropTables.put(name, adapter.dropTable(dbe));
+            dropTables.put(name, adapter.dropTableStatements(dbe));
 
             // build "CREATE TABLE"
             createTables.put(name, adapter.createTable(dbe));
@@ -213,7 +213,7 @@
                     .listIterator(dbEntitiesInInsertOrder.size());
             while (it.hasPrevious()) {
                 DbEntity ent = it.previous();
-                list.add(dropTables.get(ent.getName()));
+                list.addAll(dropTables.get(ent.getName()));
             }
         }
 
@@ -283,7 +283,9 @@
                         .listIterator(dbEntitiesInInsertOrder.size());
                 while (it.hasPrevious()) {
                     DbEntity ent = it.previous();
-                    safeExecute(connection, dropTables.get(ent.getName()));
+                    for (String statement : dropTables.get(ent.getName())) {
+                        safeExecute(connection, statement);
+                    }
                 }
             }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/AutoAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/AutoAdapter.java?rev=606823&r1=606822&r2=606823&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/AutoAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/AutoAdapter.java Tue Dec 25 14:46:49 2007
@@ -155,7 +155,8 @@
             }
         }
         catch (SQLException e) {
-            throw new CayenneRuntimeException("Error detecting database type: " + e.getLocalizedMessage(), e);
+            throw new CayenneRuntimeException("Error detecting database type: "
+                    + e.getLocalizedMessage(), e);
         }
 
         if (adapter == null) {
@@ -204,8 +205,15 @@
         return getAdapter().supportsBatchUpdates();
     }
 
+    /**
+     * @deprecated since 3.0 as the deocarated method is deprecated.
+     */
     public String dropTable(DbEntity entity) {
         return getAdapter().dropTable(entity);
+    }
+
+    public Collection<String> dropTableStatements(DbEntity table) {
+        return getAdapter().dropTableStatements(table);
     }
 
     public String createTable(DbEntity entity) {

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/DbAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/DbAdapter.java?rev=606823&r1=606822&r2=606823&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/DbAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/DbAdapter.java Tue Dec 25 14:46:49 2007
@@ -52,17 +52,17 @@
      * 
      * @since 1.0.4
      */
-    public String getBatchTerminator();
+    String getBatchTerminator();
 
     // TODO: deprecate and move into SQLAction implementation
-    public QualifierTranslator getQualifierTranslator(QueryAssembler queryAssembler);
+    QualifierTranslator getQualifierTranslator(QueryAssembler queryAssembler);
 
     /**
      * Returns an instance of SQLAction that should handle the query.
      * 
      * @since 1.2
      */
-    public SQLAction getAction(Query query, DataNode node);
+    SQLAction getAction(Query query, DataNode node);
 
     /**
      * Returns true if a target database supports FK constraints.
@@ -70,14 +70,14 @@
      * @deprecated since 3.0 - almost all DB's support FK's now and also this flag is less
      *             relevant for Cayenne now.
      */
-    public boolean supportsFkConstraints();
+    boolean supportsFkConstraints();
 
     /**
      * Returns true if a target database supports UNIQUE constraints.
      * 
      * @since 1.1
      */
-    public boolean supportsUniqueConstraints();
+    boolean supportsUniqueConstraints();
 
     /**
      * Returns true if a target database supports key autogeneration. This feature also
@@ -85,57 +85,65 @@
      * 
      * @since 1.2
      */
-    public boolean supportsGeneratedKeys();
+    boolean supportsGeneratedKeys();
 
     /**
      * Returns <code>true</code> if the target database supports batch updates.
      */
-    public boolean supportsBatchUpdates();
+    boolean supportsBatchUpdates();
 
     /**
      * Returns a SQL string that can be used to drop a database table corresponding to
-     * <code>ent</code> parameter.
+     * entity parameter.
+     * 
+     * @deprecated since 3.0 Cayenne supports 'dropTableStatements' to allow multiple
+     *             statements to be executed when dropping the table.
+     */
+    String dropTable(DbEntity entity);
+
+    /**
+     * Returns a collection of SQL statements needed to drop a database table.
+     * 
+     * @since 3.0
      */
-    public String dropTable(DbEntity entity);
+    Collection<String> dropTableStatements(DbEntity table);
 
     /**
      * Returns a SQL string that can be used to create database table corresponding to
      * <code>entity</code> parameter.
      */
-    public String createTable(DbEntity entity);
+    String createTable(DbEntity entity);
 
     /**
-     * Returns a DDL string to create a unique constraint over a set of columns, or null 
+     * Returns a DDL string to create a unique constraint over a set of columns, or null
      * if the unique constraints are not supported.
      * 
      * @since 1.1
      */
-    public String createUniqueConstraint(DbEntity source, Collection<DbAttribute> columns);
+    String createUniqueConstraint(DbEntity source, Collection<DbAttribute> columns);
 
     /**
      * Returns a SQL string that can be used to create a foreign key constraint for the
      * relationship, or null if foreign keys are not supported.
      */
-    public String createFkConstraint(DbRelationship rel);
+    String createFkConstraint(DbRelationship rel);
 
     /**
      * Returns an array of RDBMS types that can be used with JDBC <code>type</code>.
      * Valid JDBC types are defined in java.sql.Types.
      */
-    public String[] externalTypesForJdbcType(int type);
+    String[] externalTypesForJdbcType(int type);
 
     /**
      * Returns a map of ExtendedTypes that is used to translate values between Java and
      * JDBC layer.
-     * 
-     * @see org.apache.cayenne.access.types.ExtendedType
      */
-    public ExtendedTypeMap getExtendedTypes();
+    ExtendedTypeMap getExtendedTypes();
 
     /**
      * Returns primary key generator associated with this DbAdapter.
      */
-    public PkGenerator getPkGenerator();
+    PkGenerator getPkGenerator();
 
     /**
      * Creates and returns a DbAttribute based on supplied parameters (usually obtained
@@ -150,7 +158,7 @@
      *            less than zero)
      * @param allowNulls database column nullable parameter
      */
-    public DbAttribute buildAttribute(
+    DbAttribute buildAttribute(
             String name,
             String typeName,
             int type,
@@ -161,7 +169,7 @@
     /**
      * Binds an object value to PreparedStatement's numbered parameter.
      */
-    public void bindParameter(
+    void bindParameter(
             PreparedStatement statement,
             Object object,
             int pos,
@@ -172,13 +180,16 @@
      * Returns the name of the table type (as returned by
      * <code>DatabaseMetaData.getTableTypes</code>) for a simple user table.
      */
-    public String tableTypeForTable();
+    String tableTypeForTable();
 
     /**
      * Returns the name of the table type (as returned by
      * <code>DatabaseMetaData.getTableTypes</code>) for a view table.
      */
-    public String tableTypeForView();
-    
-    public MergerFactory mergerFactory();
+    String tableTypeForView();
+
+    /**
+     * @since 3.0
+     */
+    MergerFactory mergerFactory();
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java?rev=606823&r1=606822&r2=606823&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java Tue Dec 25 14:46:49 2007
@@ -24,6 +24,7 @@
 import java.sql.SQLException;
 import java.util.Calendar;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.GregorianCalendar;
 import java.util.Iterator;
 
@@ -217,10 +218,19 @@
     }
 
     /**
-     * Returns a SQL string to drop a table corresponding to <code>ent</code> DbEntity.
+     * Returns a SQL string to drop a table corresponding to table DbEntity.
+     * 
+     * @deprecated since 3.0 in favor of "dropTableStatements"
+     */
+    public String dropTable(DbEntity table) {
+        return dropTableStatements(table).iterator().next();
+    }
+
+    /**
+     * @since 3.0
      */
-    public String dropTable(DbEntity ent) {
-        return "DROP TABLE " + ent.getFullyQualifiedName();
+    public Collection<String> dropTableStatements(DbEntity table) {
+        return Collections.singleton("DROP TABLE " + table.getFullyQualifiedName());
     }
 
     /**

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java?rev=606823&r1=606822&r2=606823&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java Tue Dec 25 14:46:49 2007
@@ -20,6 +20,8 @@
 package org.apache.cayenne.dba.frontbase;
 
 import java.sql.Types;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
 
 import org.apache.cayenne.CayenneRuntimeException;
@@ -190,8 +192,11 @@
     /**
      * Adds the CASCADE option to the DROP TABLE clause.
      */
-    public String dropTable(DbEntity ent) {
-        return super.dropTable(ent) + " CASCADE";
+    @Override
+    public Collection<String> dropTableStatements(DbEntity table) {
+        return Collections.singleton("DROP TABLE "
+                + table.getFullyQualifiedName()
+                + " CASCADE");
     }
 
     protected PkGenerator createPkGenerator() {

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java?rev=606823&r1=606822&r2=606823&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java Tue Dec 25 14:46:49 2007
@@ -21,6 +21,8 @@
 
 import java.sql.Types;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Iterator;
@@ -46,13 +48,12 @@
  * <p>
  * Foreign key constraints are supported by InnoDB engine and NOT supported by MyISAM
  * engine. This adapter by default assumes MyISAM, so
- * {@link org.apache.cayenne.dba.JdbcAdapter#supportsFkConstraints()} will return
- * false. Users can manually change this by calling
- * <em>setSupportsFkConstraints(true)</em> or better by using an
- * {@link org.apache.cayenne.dba.AutoAdapter}, i.e. not entering the adapter name at
- * all for the DataNode, letting Cayenne guess it in runtime. In the later case Cayenne
- * will check the <em>table_type</em> MySQL variable to detect whether InnoDB is the
- * default, and configure the adapter accordingly.
+ * {@link org.apache.cayenne.dba.JdbcAdapter#supportsFkConstraints()} will return false.
+ * Users can manually change this by calling <em>setSupportsFkConstraints(true)</em> or
+ * better by using an {@link org.apache.cayenne.dba.AutoAdapter}, i.e. not entering the
+ * adapter name at all for the DataNode, letting Cayenne guess it in runtime. In the later
+ * case Cayenne will check the <em>table_type</em> MySQL variable to detect whether
+ * InnoDB is the default, and configure the adapter accordingly.
  * <h3>Sample Connection Settings</h3>
  * <ul>
  * <li>Adapter name: org.apache.cayenne.dba.mysql.MySQLAdapter</li>
@@ -81,8 +82,24 @@
                 .getEntityResolver()));
     }
 
-    public String dropTable(DbEntity entity) {
-        return "DROP TABLE IF EXISTS " + entity.getFullyQualifiedName() + " CASCADE";
+    /**
+     * @deprecated since 3.0
+     */
+    @Override
+    public String dropTable(DbEntity table) {
+        return "DROP TABLE IF EXISTS " + table.getFullyQualifiedName() + " CASCADE";
+    }
+
+    /**
+     * @since 3.0
+     */
+    @Override
+    public Collection<String> dropTableStatements(DbEntity table) {
+        // note that CASCADE is a noop as of MySQL 5.0, so we have to use FK checks
+        // statement
+        return Arrays.asList("SET FOREIGN_KEY_CHECKS=0", "DROP TABLE IF EXISTS "
+                + table.getFullyQualifiedName()
+                + " CASCADE", "SET FOREIGN_KEY_CHECKS=1");
     }
 
     /**
@@ -171,7 +188,7 @@
     protected PkGenerator createPkGenerator() {
         return new MySQLPkGenerator();
     }
-    
+
     /**
      * @since 3.0
      */
@@ -225,7 +242,7 @@
         // Note that according to MySQL docs, FK indexes are created automatically when
         // constraint is defined, starting at MySQL 4.1.2
         if (supportsFkConstraints()) {
-            for (Relationship r :  entity.getRelationships()) {
+            for (Relationship r : entity.getRelationships()) {
                 DbRelationship relationship = (DbRelationship) r;
                 if (relationship.getJoins().size() > 0
                         && relationship.isToPK()
@@ -233,7 +250,9 @@
 
                     sqlBuffer.append(", KEY (");
 
-                    Iterator<DbAttribute> columns = relationship.getSourceAttributes().iterator();
+                    Iterator<DbAttribute> columns = relationship
+                            .getSourceAttributes()
+                            .iterator();
                     DbAttribute column = columns.next();
                     sqlBuffer.append(column.getName());
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java?rev=606823&r1=606822&r2=606823&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java Tue Dec 25 14:46:49 2007
@@ -23,6 +23,8 @@
 import java.lang.reflect.Method;
 import java.sql.PreparedStatement;
 import java.sql.Types;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.cayenne.CayenneRuntimeException;
@@ -48,8 +50,8 @@
 import org.apache.cayenne.query.UpdateBatchQuery;
 
 /**
- * DbAdapter implementation for <a href="http://www.oracle.com">Oracle RDBMS </a>. Sample connection
- * settings to use with Oracle are shown below:
+ * DbAdapter implementation for <a href="http://www.oracle.com">Oracle RDBMS </a>. Sample
+ * connection settings to use with Oracle are shown below:
  * 
  * <pre>
  *          test-oracle.cayenne.adapter = org.apache.cayenne.dba.oracle.OracleAdapter
@@ -171,7 +173,7 @@
         // enable batch updates by default
         setSupportsBatchUpdates(true);
     }
-    
+
     /**
      * @since 3.0
      */
@@ -219,9 +221,14 @@
     /**
      * Returns a query string to drop a table corresponding to <code>ent</code>
      * DbEntity. Changes superclass behavior to drop all related foreign key constraints.
+     * 
+     * @since 3.0
      */
-    public String dropTable(DbEntity ent) {
-        return "DROP TABLE " + ent.getFullyQualifiedName() + " CASCADE CONSTRAINTS";
+    @Override
+    public Collection<String> dropTableStatements(DbEntity table) {
+        return Collections.singleton("DROP TABLE "
+                + table.getFullyQualifiedName()
+                + " CASCADE CONSTRAINTS");
     }
 
     /**

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java?rev=606823&r1=606822&r2=606823&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java Tue Dec 25 14:46:49 2007
@@ -20,6 +20,8 @@
 package org.apache.cayenne.dba.postgres;
 
 import java.sql.Types;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
 
 import org.apache.cayenne.CayenneRuntimeException;
@@ -224,11 +226,12 @@
 
     /**
      * Adds the CASCADE option to the DROP TABLE clause.
-     * 
-     * @see JdbcAdapter#dropTable(DbEntity)
      */
-    public String dropTable(DbEntity ent) {
-        return super.dropTable(ent) + " CASCADE";
+    @Override
+    public Collection<String> dropTableStatements(DbEntity table) {
+        return Collections.singleton("DROP TABLE "
+                + table.getFullyQualifiedName()
+                + " CASCADE");
     }
 
     /**
@@ -244,7 +247,7 @@
     protected PkGenerator createPkGenerator() {
         return new PostgresPkGenerator();
     }
-    
+
     public MergerFactory mergerFactory() {
         return new PostgresMergerFactory();
     }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DropTableToDb.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DropTableToDb.java?rev=606823&r1=606822&r2=606823&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DropTableToDb.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/DropTableToDb.java Tue Dec 25 14:46:49 2007
@@ -40,7 +40,7 @@
         sqls.addAll(adapter.getPkGenerator().dropAutoPkStatements(
                 Collections.singletonList(entity)));
          */
-        sqls.add(adapter.dropTable(entity));
+        sqls.addAll(adapter.dropTableStatements(entity));
         return sqls;
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/dba/MockDbAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/dba/MockDbAdapter.java?rev=606823&r1=606822&r2=606823&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/dba/MockDbAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/dba/MockDbAdapter.java Tue Dec 25 14:46:49 2007
@@ -85,6 +85,10 @@
         return null;
     }
 
+    public Collection<String> dropTableStatements(DbEntity table) {
+        return null;
+    }
+
     public String createTable(DbEntity ent) {
         return null;
     }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/AbstractAccessStack.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/AbstractAccessStack.java?rev=606823&r1=606822&r2=606823&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/AbstractAccessStack.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/AbstractAccessStack.java Tue Dec 25 14:46:49 2007
@@ -206,15 +206,16 @@
                     continue;
                 }
 
-                try {
-                    String dropSql = node.getAdapter().dropTable(ent);
-                    logObj.info(dropSql);
-                    stmt.execute(dropSql);
-                }
-                catch (SQLException sqe) {
-                    logObj.warn(
-                            "Can't drop table " + ent.getName() + ", ignoring...",
-                            sqe);
+                for (String dropSql : node.getAdapter().dropTableStatements(ent)) {
+                    try {
+                        logObj.info(dropSql);
+                        stmt.execute(dropSql);
+                    }
+                    catch (SQLException sqe) {
+                        logObj.warn(
+                                "Can't drop table " + ent.getName() + ", ignoring...",
+                                sqe);
+                    }
                 }
             }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/MySQLStackAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/MySQLStackAdapter.java?rev=606823&r1=606822&r2=606823&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/MySQLStackAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/MySQLStackAdapter.java Tue Dec 25 14:46:49 2007
@@ -22,7 +22,6 @@
 import java.sql.Connection;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Map;
 
 import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.map.DataMap;
@@ -72,33 +71,6 @@
             Connection conn,
             DataMap map,
             Collection<String> tablesToDrop) throws Exception {
-
-        // special DROP CONSTRAINT syntax for MySQL
-
-        Map<String, Collection<String>> constraintsMap = getConstraints(
-                conn,
-                map,
-                tablesToDrop);
-
-        for (Map.Entry<String, Collection<String>> entry : constraintsMap.entrySet()) {
-
-            Collection<String> constraints = entry.getValue();
-            if (constraints == null || constraints.isEmpty()) {
-                continue;
-            }
-
-            Object tableName = entry.getKey();
-
-            for (String constraint : constraints) {
-                StringBuffer drop = new StringBuffer();
-                drop
-                        .append("ALTER TABLE ")
-                        .append(tableName)
-                        .append(" DROP FOREIGN KEY ")
-                        .append(constraint);
-                executeDDL(conn, drop.toString());
-            }
-        }
 
         Procedure proc = map.getProcedure("cayenne_tst_select_proc");
         if (proc != null && proc.getDataMap() == map) {