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();