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 2005/12/28 15:03:14 UTC
svn commit: r359530 - in
/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform: MSSqlBuilder.java
SqlBuilder.java SybaseBuilder.java
Author: tomdz
Date: Wed Dec 28 06:03:08 2005
New Revision: 359530
URL: http://svn.apache.org/viewcvs?rev=359530&view=rev
Log:
Fixed bug with delimiter length for foreign key names
Modified:
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/MSSqlBuilder.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SybaseBuilder.java
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/MSSqlBuilder.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/MSSqlBuilder.java?rev=359530&r1=359529&r2=359530&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/MSSqlBuilder.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/MSSqlBuilder.java Wed Dec 28 06:03:08 2005
@@ -122,18 +122,6 @@
/**
* {@inheritDoc}
*/
- protected boolean shouldGeneratePrimaryKeys(Column[] primaryKeyColumns)
- {
- /*
- * requires primary key indication for autoincrement key columns
- * I'm not sure why the default skips the pk statement if all are identity
- */
- return primaryKeyColumns.length > 0;
- }
-
- /**
- * {@inheritDoc}
- */
public void writeExternalIndexDropStmt(Table table, Index index) throws IOException
{
print("DROP INDEX ");
@@ -159,7 +147,7 @@
*/
protected void writeExternalForeignKeyDropStmt(Table table, ForeignKey foreignKey) throws IOException
{
- String constraintName = foreignKey.getName() == null ? getConstraintName(null, table, "FK", getForeignKeyName(foreignKey)) : foreignKey.getName();
+ String constraintName = getForeignKeyName(table, foreignKey);
print("IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'RI' AND name = ");
printAlwaysSingleQuotedIdentifier(constraintName);
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java?rev=359530&r1=359529&r2=359530&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 Dec 28 06:03:08 2005
@@ -1326,24 +1326,31 @@
}
/**
- * Determines a unique name for the given foreign key.
+ * Returns the name to be used for the given foreign key. If the foreign key has no
+ * specified name, this method determines a unique name for it. The name will also
+ * be shortened to honor the maximum identifier length imposed by the platform.
*
- * @param fk The foreign key
+ * @param table The table for whith the foreign key is defined
+ * @param fk The foreign key
* @return The name
*/
- protected String getForeignKeyName(ForeignKey fk)
+ public String getForeignKeyName(Table table, ForeignKey fk)
{
- //table and local column should be sufficient - is it possible for one
- //column to reference multiple tables
- StringBuffer name = new StringBuffer();
+ String fkName = fk.getName();
- for (int idx = 0; idx < fk.getReferenceCount(); idx++)
+ if ((fkName == null) || (fkName.length() == 0))
{
- name.append(fk.getReference(idx).getLocalColumnName());
- name.append("_");
+ StringBuffer name = new StringBuffer();
+
+ for (int idx = 0; idx < fk.getReferenceCount(); idx++)
+ {
+ name.append(fk.getReference(idx).getLocalColumnName());
+ name.append("_");
+ }
+ name.append(fk.getForeignTableName());
+ fkName = getConstraintName(null, table, "FK", name.toString());
}
- name.append(fk.getForeignTableName());
- return name.toString();
+ return shortenName(fkName, getPlatformInfo().getMaxIdentifierLength());
}
/**
@@ -1416,15 +1423,15 @@
/**
* Determines whether we should generate a primary key constraint for the given
- * primary key columns. By default if there are no primary keys or the column(s) are
- * all auto increment (identity) columns then there is no need to generate a primary key
- * constraint.
+ * primary key columns.
*
* @param primaryKeyColumns The pk columns
* @return <code>true</code> if a pk statement should be generated for the columns
*/
protected boolean shouldGeneratePrimaryKeys(Column[] primaryKeyColumns)
{
+ return true;
+/*
for (int idx = 0; idx < primaryKeyColumns.length; idx++)
{
if (!primaryKeyColumns[idx].isAutoIncrement())
@@ -1433,6 +1440,7 @@
}
}
return false;
+*/
}
/**
@@ -1584,7 +1592,7 @@
if (getPlatformInfo().isEmbeddedForeignKeysNamed())
{
print("CONSTRAINT ");
- printIdentifier(getConstraintName(null, table, "FK", Integer.toString(idx)));
+ printIdentifier(getForeignKeyName(table, key));
print(" ");
}
print("FOREIGN KEY (");
@@ -1616,7 +1624,7 @@
writeTableAlterStmt(table);
print("ADD CONSTRAINT ");
- printIdentifier(key.getName() == null ? getConstraintName(null, table, "FK", getForeignKeyName(key)) : key.getName());
+ printIdentifier(getForeignKeyName(table, key));
print(" FOREIGN KEY (");
writeLocalReferences(key);
print(") REFERENCES ");
@@ -1673,7 +1681,7 @@
{
writeTableAlterStmt(table);
print("DROP CONSTRAINT ");
- printIdentifier(foreignKey.getName() == null ? getConstraintName(null, table, "FK", getForeignKeyName(foreignKey)) : foreignKey.getName());
+ printIdentifier(getForeignKeyName(table, foreignKey));
printEndOfStatement();
}
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SybaseBuilder.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SybaseBuilder.java?rev=359530&r1=359529&r2=359530&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SybaseBuilder.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SybaseBuilder.java Wed Dec 28 06:03:08 2005
@@ -83,7 +83,7 @@
*/
protected void writeExternalForeignKeyDropStmt(Table table, ForeignKey foreignKey) throws IOException
{
- String constraintName = foreignKey.getName() == null ? getConstraintName(null, table, "FK", getForeignKeyName(foreignKey)) : foreignKey.getName();
+ String constraintName = getForeignKeyName(table, foreignKey);
print("IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'RI' AND name = ");
printAlwaysSingleQuotedIdentifier(constraintName);