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/07/18 08:59:26 UTC
svn commit: r422992 - in /db/ddlutils/trunk/src:
doc/src/documentation/content/xdocs/ java/org/apache/ddlutils/
java/org/apache/ddlutils/model/ java/org/apache/ddlutils/platform/
java/org/apache/ddlutils/task/
Author: tomdz
Date: Mon Jul 17 23:59:26 2006
New Revision: 422992
URL: http://svn.apache.org/viewvc?rev=422992&view=rev
Log:
Fix for DDLUTILS-89
Modified:
db/ddlutils/trunk/src/doc/src/documentation/content/xdocs/ant-tasks.xml
db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Table.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/JdbcModelReader.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseTaskBase.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/PlatformConfiguration.java
Modified: db/ddlutils/trunk/src/doc/src/documentation/content/xdocs/ant-tasks.xml
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/doc/src/documentation/content/xdocs/ant-tasks.xml?rev=422992&r1=422991&r2=422992&view=diff
==============================================================================
--- db/ddlutils/trunk/src/doc/src/documentation/content/xdocs/ant-tasks.xml (original)
+++ db/ddlutils/trunk/src/doc/src/documentation/content/xdocs/ant-tasks.xml Mon Jul 17 23:59:26 2006
@@ -150,6 +150,18 @@
</td>
</tr>
<tr>
+ <td>sortForeignKeys</td>
+ <td>no</td>
+ <td>true, false</td>
+ <td>false</td>
+ <td>
+ Whether DdlUtils shall sort (alphabetically) the foreign keys of a table read from a live
+ database or leave them in the order that they are returned by the database. Note that
+ the sort is case sensitive only if delimied identifier mode is on (useDelimitedSqlIdentifiers
+ is set to <code>true</code>).
+ </td>
+ </tr>
+ <tr>
<td>useDelimitedSqlIdentifiers</td>
<td>no</td>
<td>true, false</td>
@@ -732,6 +744,18 @@
The pattern is that of
<a href="ext:java/api/databaseMetaData-getTables">java.sql.DatabaseMetaData#getTables</a>.
The special pattern '%' indicates that every table schema shall be used.
+ </td>
+ </tr>
+ <tr>
+ <td>sortForeignKeys</td>
+ <td>no</td>
+ <td>true, false</td>
+ <td>false</td>
+ <td>
+ Whether DdlUtils shall sort (alphabetically) the foreign keys of a table read from a live
+ database or leave them in the order that they are returned by the database. Note that
+ the sort is case sensitive only if delimied identifier mode is on (useDelimitedSqlIdentifiers
+ is set to <code>true</code>).
</td>
</tr>
<tr>
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?rev=422992&r1=422991&r2=422992&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.java Mon Jul 17 23:59:26 2006
@@ -143,6 +143,22 @@
*/
public void setSqlCommentsOn(boolean sqlCommentsOn);
+ /**
+ * Determines whether foreign keys of a table read from a live database
+ * are alphabetically sorted.
+ *
+ * @return <code>true</code> if read foreign keys are sorted
+ */
+ public boolean isForeignKeysSorted();
+
+ /**
+ * Specifies whether foreign keys read from a live database, shall be
+ * alphabetically sorted.
+ *
+ * @param foreignKeysSorted <code>true</code> if read foreign keys shall be sorted
+ */
+ public void setForeignKeysSorted(boolean foreignKeysSorted);
+
// functionality
/**
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Table.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Table.java?rev=422992&r1=422991&r2=422992&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Table.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Table.java Mon Jul 17 23:59:26 2006
@@ -17,7 +17,10 @@
*/
import java.io.Serializable;
+import java.text.Collator;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Collection;
@@ -700,6 +703,34 @@
return (Column[])autoIncrColumns.toArray(new Column[autoIncrColumns.size()]);
}
+ /**
+ * Sorts the foreign keys alphabetically.
+ *
+ * @param caseSensitive Whether case matters
+ */
+ public void sortForeignKeys(final boolean caseSensitive)
+ {
+ if (!_foreignKeys.isEmpty())
+ {
+ final Collator collator = Collator.getInstance();
+
+ Collections.sort(_foreignKeys, new Comparator() {
+ public int compare(Object obj1, Object obj2)
+ {
+ String fk1Name = ((ForeignKey)obj1).getName();
+ String fk2Name = ((ForeignKey)obj2).getName();
+
+ if (!caseSensitive)
+ {
+ fk1Name = (fk1Name != null ? fk1Name.toLowerCase() : null);
+ fk2Name = (fk2Name != null ? fk2Name.toLowerCase() : null);
+ }
+ return collator.compare(fk1Name, fk2Name);
+ }
+ });
+ }
+ }
+
/**
* {@inheritDoc}
*/
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/JdbcModelReader.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/JdbcModelReader.java?rev=422992&r1=422991&r2=422992&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/JdbcModelReader.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/JdbcModelReader.java Mon Jul 17 23:59:26 2006
@@ -469,6 +469,12 @@
{
_connection = connection;
db.addTables(readTables(catalog, schema, tableTypes));
+ // Note that we do this here instead of in readTable since platforms may redefine the
+ // readTable method whereas it is highly unlikely that this method gets redefined
+ if (getPlatform().isForeignKeysSorted())
+ {
+ sortForeignKeys(db);
+ }
}
finally
{
@@ -1057,6 +1063,19 @@
}
}
+ /**
+ * Sorts the foreign keys in the tables of the model.
+ *
+ * @param model The model
+ */
+ protected void sortForeignKeys(Database model)
+ {
+ for (int tableIdx = 0; tableIdx < model.getTableCount(); tableIdx++)
+ {
+ model.getTable(tableIdx).sortForeignKeys(getPlatform().isDelimitedIdentifierModeOn());
+ }
+ }
+
/**
* Replaces a specific character sequence in the given text with the character sequence
* whose escaped version it is.
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?rev=422992&r1=422991&r2=422992&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java Mon Jul 17 23:59:26 2006
@@ -82,6 +82,8 @@
private boolean _sqlCommentsOn = true;
/** Whether delimited identifiers are used or not. */
private boolean _delimitedIdentifierModeOn = false;
+ /** Whether read foreign keys shall be sorted alphabetically. */
+ private boolean _foreignKeysSorted = false;
/**
* {@inheritDoc}
@@ -169,6 +171,22 @@
throw new DdlUtilsException("Platform " + getName() + " does not support delimited identifier");
}
_delimitedIdentifierModeOn = delimitedIdentifierModeOn;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isForeignKeysSorted()
+ {
+ return _foreignKeysSorted;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setForeignKeysSorted(boolean foreignKeysSorted)
+ {
+ _foreignKeysSorted = foreignKeysSorted;
}
/**
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseTaskBase.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseTaskBase.java?rev=422992&r1=422991&r2=422992&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseTaskBase.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseTaskBase.java Mon Jul 17 23:59:26 2006
@@ -130,6 +130,28 @@
}
/**
+ * Determines whether a table's foreign keys read from a live database
+ * shall be sorted alphabetically. Is <code>false</code> by default.
+ *
+ * @return <code>true</code> if the foreign keys shall be sorted
+ */
+ public boolean isSortForeignKeys()
+ {
+ return _platformConf.isSortForeignKeys();
+ }
+
+ /**
+ * Specifies whether a table's foreign keys read from a live database
+ * shall be sorted alphabetically.
+ *
+ * @param sortForeignKeys <code>true</code> if the foreign keys shall be sorted
+ */
+ public void setSortForeignKeys(boolean sortForeignKeys)
+ {
+ _platformConf.setSortForeignKeys(sortForeignKeys);
+ }
+
+ /**
* Determines whether the database shall be shut down after the task has finished.
*
* @return <code>true</code> if the database shall be shut down
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/task/PlatformConfiguration.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/PlatformConfiguration.java?rev=422992&r1=422991&r2=422992&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/task/PlatformConfiguration.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/task/PlatformConfiguration.java Mon Jul 17 23:59:26 2006
@@ -36,8 +36,10 @@
private BasicDataSource _dataSource;
/** Whether to use delimited SQL identifiers. */
private boolean _useDelimitedSqlIdentifiers;
+ /** Whether read foreign keys shall be sorted. */
+ private boolean _sortForeignKeys;
/** Whether to shutdown the database after the task has finished. */
- private boolean _shutdownDatabase = false;
+ private boolean _shutdownDatabase;
/** The catalog pattern. */
private String _catalogPattern;
/** The schema pattern. */
@@ -144,6 +146,28 @@
}
/**
+ * Determines whether a table's foreign keys read from a live database
+ * shall be sorted alphabetically. Is <code>false</code> by default.
+ *
+ * @return <code>true</code> if the foreign keys shall be sorted
+ */
+ public boolean isSortForeignKeys()
+ {
+ return _sortForeignKeys;
+ }
+
+ /**
+ * Specifies whether a table's foreign keys read from a live database
+ * shall be sorted alphabetically.
+ *
+ * @param sortForeignKeys <code>true</code> if the foreign keys shall be sorted
+ */
+ public void setSortForeignKeys(boolean sortForeignKeys)
+ {
+ _sortForeignKeys = sortForeignKeys;
+ }
+
+ /**
* Determines whether the database shall be shut down after the task has finished.
*
* @return <code>true</code> if the database shall be shut down
@@ -202,6 +226,7 @@
}
platform.setDataSource(_dataSource);
platform.setDelimitedIdentifierModeOn(isUseDelimitedSqlIdentifiers());
+ platform.setForeignKeysSorted(isSortForeignKeys());
return platform;
}