You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ddlutils-dev@db.apache.org by to...@apache.org on 2006/12/05 08:10:42 UTC

svn commit: r482531 - in /db/ddlutils/trunk/src/java/org/apache/ddlutils: Platform.java platform/PlatformImplBase.java platform/SqlBuilder.java

Author: tomdz
Date: Mon Dec  4 23:10:41 2006
New Revision: 482531

URL: http://svn.apache.org/viewvc?view=rev&rev=482531
Log:
Added convenience method to drop a single table

Modified:
    db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.java
    db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java
    db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.java?view=diff&rev=482531&r1=482530&r2=482531
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.java Mon Dec  4 23:10:41 2006
@@ -520,6 +520,35 @@
     public String getAlterTablesSql(Connection connection, String catalog, String schema, String[] tableTypes, Database desiredDb, CreationParameters params) throws DatabaseOperationException;
 
     /**
+     * Drops the specified table and all foreign keys pointing to it.
+     * 
+     * @param model           The database model
+     * @param table           The table to drop
+     * @param continueOnError Whether to continue executing the sql commands when an error occurred
+     */
+    public void dropTable(Database model, Table table, boolean continueOnError) throws DatabaseOperationException;
+
+    /**
+     * Returns the SQL for dropping the given table and all foreign keys pointing to it.
+     * 
+     * @param model           The database model
+     * @param table           The table to drop
+     * @param continueOnError Whether to continue executing the sql commands when an error occurred
+     * @return The SQL statements
+     */
+    public String getDropTableSql(Database model, Table table, boolean continueOnError);
+
+    /**
+     * Drops the specified table and all foreign keys pointing to it.
+     * 
+     * @param connection      The connection to the database
+     * @param model           The database model
+     * @param table           The table to drop
+     * @param continueOnError Whether to continue executing the sql commands when an error occurred
+     */
+    public void dropTable(Connection connection, Database model, Table table, boolean continueOnError) throws DatabaseOperationException; 
+
+    /**
      * Drops the tables defined in the given database.
      * 
      * @param model           The database model

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java?view=diff&rev=482531&r1=482530&r2=482531
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java Mon Dec  4 23:10:41 2006
@@ -748,6 +748,55 @@
 	/**
      * {@inheritDoc}
      */
+    public void dropTable(Connection connection, Database model, Table table, boolean continueOnError) throws DatabaseOperationException
+    {
+        String sql = getDropTableSql(model, table, continueOnError);
+
+        evaluateBatch(connection, sql, continueOnError);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void dropTable(Database model, Table table, boolean continueOnError) throws DatabaseOperationException
+    {
+        Connection connection = borrowConnection();
+
+        try
+        {
+            dropTable(connection, model, table, continueOnError);
+        }
+        finally
+        {
+            returnConnection(connection);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getDropTableSql(Database model, Table table, boolean continueOnError)
+    {
+        String sql = null;
+
+        try
+        {
+            StringWriter buffer = new StringWriter();
+
+            getSqlBuilder().setWriter(buffer);
+            getSqlBuilder().dropTable(model, table);
+            sql = buffer.toString();
+        }
+        catch (IOException e)
+        {
+            // won't happen because we're using a string writer
+        }
+        return sql;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     public void dropTables(Database model, boolean continueOnError) throws DatabaseOperationException
     {
         Connection connection = borrowConnection();

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java?view=diff&rev=482531&r1=482530&r2=482531
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java Mon Dec  4 23:10:41 2006
@@ -1321,7 +1321,37 @@
     }
 
     /**
-     * Outputs the DDL to drop the table.
+     * Outputs the DDL required to drop the given table. This method also
+     * drops foreign keys to the table.
+     * 
+     * @param database The database
+     * @param table    The table
+     */
+    public void dropTable(Database database, Table table) throws IOException
+    {
+        // we're dropping the foreignkeys to the table first
+        for (int idx = database.getTableCount() - 1; idx >= 0; idx--)
+        {
+            Table        otherTable = database.getTable(idx);
+            ForeignKey[] fks        = otherTable.getForeignKeys();
+
+            for (int fkIdx = 0; (fks != null) && (fkIdx < fks.length); fkIdx++)
+            {
+                if (fks[fkIdx].getForeignTable().equals(table))
+                {
+                    writeExternalForeignKeyDropStmt(otherTable, fks[fkIdx]);
+                }
+            }
+        }
+
+        writeTableComment(table);
+        dropTable(table);
+    }
+
+    /**
+     * Outputs the DDL to drop the table. Note that this method does not drop
+     * foreign keys to this table. Use {@link #dropTable(Database, Table)}
+     * if you want that.
      * 
      * @param table The table to drop
      */