Author: tomdz
Date: Wed Jul 19 23:20:09 2006
New Revision: 423799

URL: http://svn.apache.org/viewvc?rev=423799&view=rev
Log:
Introduced unique identifiers to the drop constraint part so that textual SQL 
scripts containing multiple table drops execute in one batch

Modified:
    db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybaseBuilder.java

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?rev=423799&r1=423798&r2=423799&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java 
(original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java Wed 
Jul 19 23:20:09 2006
@@ -18,6 +18,7 @@
 
 import java.io.IOException;
 import java.io.Writer;
+import java.rmi.server.UID;
 import java.sql.Types;
 import java.text.DateFormat;
 import java.text.NumberFormat;
@@ -2813,5 +2814,16 @@
     protected void printIndent() throws IOException
     {
         print(getIndent());
+    }
+
+    /**
+     * Creates a reasonably unique identifier only consisting of hexadecimal 
characters and underscores.
+     * It looks like <code>d578271282b42fce__2955b56e_107df3fbc96__8000</code> 
and is 48 characters long.
+     * 
+     * @return The identifier
+     */
+    protected String createUniqueIdentifier()
+    {
+        return new UID().toString().replace(':', '_').replace('-', '_');
     }
 }

Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java?rev=423799&r1=423798&r2=423799&view=diff
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java 
(original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java 
Wed Jul 19 23:20:09 2006
@@ -103,25 +103,27 @@
      */
     public void dropTable(Table table) throws IOException
     {
-        String tableName = getTableName(table);
+        String tableName         = getTableName(table);
+        String tableNameVar      = "tn" + createUniqueIdentifier();
+        String constraintNameVar = "cn" + createUniqueIdentifier();
 
         writeQuotationOnStatement();
         print("IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 
");
         printAlwaysSingleQuotedIdentifier(tableName);
         println(")");
         println("BEGIN");
-        println("  DECLARE @tablename nvarchar(256), @constraintname 
nvarchar(256)");
+        println("  DECLARE @" + tableNameVar + " nvarchar(256), @" + 
constraintNameVar + " nvarchar(256)");
         println("  DECLARE refcursor CURSOR FOR");
         println("  SELECT object_name(objs.parent_obj) tablename, objs.name 
constraintname");
         println("    FROM sysobjects objs JOIN sysconstraints cons ON objs.id 
= cons.constid");
         print("    WHERE objs.xtype != 'PK' AND object_name(objs.parent_obj) = 
");
         printAlwaysSingleQuotedIdentifier(tableName);
         println("  OPEN refcursor");
-        println("  FETCH NEXT FROM refcursor INTO @tablename, 
@constraintname");
+        println("  FETCH NEXT FROM refcursor INTO @" + tableNameVar + ", @" + 
constraintNameVar);
         println("  WHILE @@FETCH_STATUS = 0");
         println("    BEGIN");
-        println("      EXEC ('ALTER TABLE '[EMAIL PROTECTED]' DROP CONSTRAINT 
'[EMAIL PROTECTED])");
-        println("      FETCH NEXT FROM refcursor INTO @tablename, 
@constraintname");
+        println("      EXEC ('ALTER TABLE '+@" + tableNameVar + "+' DROP 
CONSTRAINT '+@" + constraintNameVar + ")");
+        println("      FETCH NEXT FROM refcursor INTO @" + tableNameVar + ", 
@" + constraintNameVar);
         println("    END");
         println("  CLOSE refcursor");
         println("  DEALLOCATE refcursor");
@@ -485,21 +487,23 @@
     {
         // TODO: this would be easier when named primary keys are supported
         //       because then we can use ALTER TABLE DROP
-        String tableName = getTableName(change.getChangedTable());
+        String tableName         = getTableName(change.getChangedTable());
+        String tableNameVar      = "tn" + createUniqueIdentifier();
+        String constraintNameVar = "cn" + createUniqueIdentifier();
 
         println("BEGIN");
-        println("  DECLARE @tablename nvarchar(256), @constraintname 
nvarchar(256)");
+        println("  DECLARE @" + tableNameVar + " nvarchar(256), @" + 
constraintNameVar + " nvarchar(256)");
         println("  DECLARE refcursor CURSOR FOR");
         println("  SELECT object_name(objs.parent_obj) tablename, objs.name 
constraintname");
         println("    FROM sysobjects objs JOIN sysconstraints cons ON objs.id 
= cons.constid");
         print("    WHERE objs.xtype = 'PK' AND object_name(objs.parent_obj) = 
");
         printAlwaysSingleQuotedIdentifier(tableName);
         println("  OPEN refcursor");
-        println("  FETCH NEXT FROM refcursor INTO @tablename, 
@constraintname");
+        println("  FETCH NEXT FROM refcursor INTO @" + tableNameVar + ", @" + 
constraintNameVar);
         println("  WHILE @@FETCH_STATUS = 0");
         println("    BEGIN");
-        println("      EXEC ('ALTER TABLE '[EMAIL PROTECTED]' DROP CONSTRAINT 
'[EMAIL PROTECTED])");
-        println("      FETCH NEXT FROM refcursor INTO @tablename, 
@constraintname");
+        println("      EXEC ('ALTER TABLE '+@" + tableNameVar + "+' DROP 
CONSTRAINT '+@" + constraintNameVar + ")");
+        println("      FETCH NEXT FROM refcursor INTO @" + tableNameVar + ", 
@" + constraintNameVar);
         println("    END");
         println("  CLOSE refcursor");
         println("  DEALLOCATE refcursor");
@@ -533,11 +537,13 @@
         if (hasDefault)
         {
             // we're dropping the old default
-            String tableName  = getTableName(sourceTable);
-            String columnName = getColumnName(sourceColumn);
+            String tableName         = getTableName(sourceTable);
+            String columnName        = getColumnName(sourceColumn);
+            String tableNameVar      = "tn" + createUniqueIdentifier();
+            String constraintNameVar = "cn" + createUniqueIdentifier();
 
             println("BEGIN");
-            println("  DECLARE @tablename nvarchar(256), @constraintname 
nvarchar(256)");
+            println("  DECLARE @" + tableNameVar + " nvarchar(256), @" + 
constraintNameVar + " nvarchar(256)");
             println("  DECLARE refcursor CURSOR FOR");
             println("  SELECT object_name(objs.parent_obj) tablename, 
objs.name constraintname");
             println("    FROM sysobjects objs JOIN sysconstraints cons ON 
objs.id = cons.constid");
@@ -550,11 +556,11 @@
             print("          object_name(objs.parent_obj) = ");
             printAlwaysSingleQuotedIdentifier(tableName);
             println("  OPEN refcursor");
-            println("  FETCH NEXT FROM refcursor INTO @tablename, 
@constraintname");
+            println("  FETCH NEXT FROM refcursor INTO @" + tableNameVar + ", 
@" + constraintNameVar);
             println("  WHILE @@FETCH_STATUS = 0");
             println("    BEGIN");
-            println("      EXEC ('ALTER TABLE '[EMAIL PROTECTED]' DROP 
CONSTRAINT '[EMAIL PROTECTED])");
-            println("      FETCH NEXT FROM refcursor INTO @tablename, 
@constraintname");
+            println("      EXEC ('ALTER TABLE '+@" + tableNameVar + "+' DROP 
CONSTRAINT '+@" + constraintNameVar + ")");
+            println("      FETCH NEXT FROM refcursor INTO @" + tableNameVar + 
", @" + constraintNameVar);
             println("    END");
             println("  CLOSE refcursor");
             println("  DEALLOCATE refcursor");

Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybaseBuilder.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybaseBuilder.java?rev=423799&r1=423798&r2=423799&view=diff
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybaseBuilder.java
 (original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/sybase/SybaseBuilder.java
 Wed Jul 19 23:20:09 2006
@@ -478,22 +478,24 @@
     {
         // TODO: this would be easier when named primary keys are supported
         //       because then we can use ALTER TABLE DROP
-        String tableName = getTableName(change.getChangedTable());
+        String tableName         = getTableName(change.getChangedTable());
+        String tableNameVar      = "tn" + createUniqueIdentifier();
+        String constraintNameVar = "cn" + createUniqueIdentifier();
 
         println("BEGIN");
-        println("  DECLARE @tablename nvarchar(60), @constraintname 
nvarchar(60)");
+        println("  DECLARE @" + tableNameVar + " nvarchar(60), @" + 
constraintNameVar + " nvarchar(60)");
         println("  WHILE EXISTS(SELECT sysindexes.name");
         println("                 FROM sysindexes, sysobjects");
         print("                 WHERE sysobjects.name = ");
         printAlwaysSingleQuotedIdentifier(tableName);
         println(" AND sysobjects.id = sysindexes.id AND (sysindexes.status & 
2048) > 0)");
         println("  BEGIN");
-        println("    SELECT @tablename = sysobjects.name, @constraintname = 
sysindexes.name");
+        println("    SELECT @" + tableNameVar + " = sysobjects.name, @" + 
constraintNameVar + " = sysindexes.name");
         println("      FROM sysindexes, sysobjects");
         print("      WHERE sysobjects.name = ");
         printAlwaysSingleQuotedIdentifier(tableName);
         print(" AND sysobjects.id = sysindexes.id AND (sysindexes.status & 
2048) > 0");
-        println("    EXEC ('ALTER TABLE '[EMAIL PROTECTED]' DROP CONSTRAINT 
'[EMAIL PROTECTED])");
+        println("    EXEC ('ALTER TABLE '+@" + tableNameVar + "+' DROP 
CONSTRAINT '+@" + constraintNameVar + ")");
         println("  END");
         print("END");
         printEndOfStatement();


Reply via email to