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/08/27 23:50:57 UTC
svn commit: r240460 [1/2] - in /db/ddlutils/trunk: ./ lib/ src/java/
src/java/org/apache/ddlutils/ src/java/org/apache/ddlutils/builder/
src/java/org/apache/ddlutils/dynabean/ src/java/org/apache/ddlutils/io/
src/java/org/apache/ddlutils/model/ src/jav...
Author: tomdz
Date: Sat Aug 27 14:44:57 2005
New Revision: 240460
URL: http://svn.apache.org/viewcvs?rev=240460&view=rev
Log: (empty)
Added:
db/ddlutils/trunk/lib/commons-betwixt-0.7.jar (with props)
db/ddlutils/trunk/src/java/mapping.xml
db/ddlutils/trunk/src/java/org/apache/ddlutils/DdlUtilsException.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DatabaseIO.java
- copied, changed from r226549, db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DatabaseReader.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/model/ModelException.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/model/NonUniqueIndex.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/model/UniqueIndex.java
- copied, changed from r226549, db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Unique.java
db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestDatabaseIO.java
Removed:
db/ddlutils/trunk/lib/commons-betwixt-0.5.jar
db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DatabaseReader.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DatabaseWriter.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Column.betwixt
db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Table.betwixt
db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Unique.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/model/UniqueColumn.java
Modified:
db/ddlutils/trunk/.classpath
db/ddlutils/trunk/src/java/org/apache/ddlutils/DynaSqlException.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/InterbaseBuilder.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/PostgreSqlBuilder.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/SqlBuilder.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaClass.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataDtdWriter.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataReader.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataToDatabaseSink.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataWriter.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/io/JdbcModelReader.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Column.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Database.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/model/ForeignKey.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Index.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Reference.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Table.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DdlToDatabaseTask.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToFileCommand.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToFileCommand.java
db/ddlutils/trunk/src/test/org/apache/ddlutils/TestPlatformBase.java
db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestDataReader.java
Modified: db/ddlutils/trunk/.classpath
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/.classpath?rev=240460&r1=240459&r2=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/.classpath (original)
+++ db/ddlutils/trunk/.classpath Sat Aug 27 14:44:57 2005
@@ -5,7 +5,6 @@
<classpathentry sourcepath="JRE_SRC" kind="var" path="JRE_LIB"/>
<classpathentry kind="lib" path="lib/commons-logging-1.0.4.jar"/>
<classpathentry kind="lib" path="lib/junit-3.8.1.jar"/>
- <classpathentry kind="lib" path="lib/commons-betwixt-0.5.jar"/>
<classpathentry kind="lib" path="lib/dom4j-1.4.jar"/>
<classpathentry kind="lib" path="lib/commons-beanutils-1.6.1.jar"/>
<classpathentry kind="lib" path="lib/commons-collections-3.1.jar"/>
@@ -13,5 +12,6 @@
<classpathentry kind="lib" path="lib/commons-dbcp-1.2.1.jar"/>
<classpathentry kind="lib" path="lib/commons-lang-2.0.jar"/>
<classpathentry kind="lib" path="lib/commons-digester-1.7.jar"/>
+ <classpathentry kind="lib" path="lib/commons-betwixt-0.7.jar"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
Added: db/ddlutils/trunk/lib/commons-betwixt-0.7.jar
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/lib/commons-betwixt-0.7.jar?rev=240460&view=auto
==============================================================================
Binary file - no diff available.
Propchange: db/ddlutils/trunk/lib/commons-betwixt-0.7.jar
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: db/ddlutils/trunk/src/java/mapping.xml
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/mapping.xml?rev=240460&view=auto
==============================================================================
--- db/ddlutils/trunk/src/java/mapping.xml (added)
+++ db/ddlutils/trunk/src/java/mapping.xml Sat Aug 27 14:44:57 2005
@@ -0,0 +1,75 @@
+<?xml version='1.0'?>
+<betwixt-config>
+ <class name="org.apache.ddlutils.model.Database">
+ <element name="database">
+ <attribute name="name" property="name"/>
+ <attribute name="defaultIdMethod" property="idMethod"/>
+ <attribute name="version" property="version"/>
+
+ <element property="tables" updater="addTable"/>
+ </element>
+ </class>
+
+ <class name="org.apache.ddlutils.model.Table">
+ <element name="table">
+ <attribute name="name" property="name"/>
+ <attribute name="description" property="description"/>
+
+ <element name="column" property="columns" updater="addColumn"/>
+ <element name="foreign-key" property="foreignKeys" updater="addForeignKey"/>
+ <element property="indices" updater="addIndex"/>
+ </element>
+ </class>
+
+ <class name="org.apache.ddlutils.model.Column">
+ <element name="column">
+ <attribute name="name" property="name"/>
+ <attribute name="primaryKey" property="primaryKey"/>
+ <attribute name="required" property="required"/>
+ <attribute name="type" property="type"/>
+ <attribute name="size" property="size"/>
+ <attribute name="default" property="defaultValue"/>
+ <attribute name="autoIncrement" property="autoIncrement"/>
+ <attribute name="description" property="description"/>
+ </element>
+ </class>
+
+ <class name="org.apache.ddlutils.model.ForeignKey">
+ <element name="foreign-key">
+ <attribute name="foreignTable" property="foreignTableName"/>
+ <attribute name="name" property="name"/>
+
+ <element property="references" updater="addReference"/>
+ </element>
+ </class>
+
+ <class name="org.apache.ddlutils.model.Reference">
+ <element name="reference">
+ <attribute name="local" property="localColumnName"/>
+ <attribute name="foreign" property="foreignColumnName"/>
+ </element>
+ </class>
+
+ <class name="org.apache.ddlutils.model.NonUniqueIndex">
+ <element name="index">
+ <attribute name="name" property="name"/>
+
+ <element name="index-column" property="columns" updater="addColumn"/>
+ </element>
+ </class>
+
+ <class name="org.apache.ddlutils.model.IndexColumn">
+ <element name="index-column">
+ <attribute name="name" property="name"/>
+ <attribute name="size" property="size"/>
+ </element>
+ </class>
+
+ <class name="org.apache.ddlutils.model.UniqueIndex">
+ <element name="unique">
+ <attribute name="name" property="name"/>
+
+ <element name="unique-column" property="columns" updater="addColumn"/>
+ </element>
+ </class>
+</betwixt-config>
\ No newline at end of file
Added: db/ddlutils/trunk/src/java/org/apache/ddlutils/DdlUtilsException.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/DdlUtilsException.java?rev=240460&view=auto
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/DdlUtilsException.java (added)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/DdlUtilsException.java Sat Aug 27 14:44:57 2005
@@ -0,0 +1,68 @@
+package org.apache.ddlutils;
+
+/*
+ * Copyright 1999-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.commons.lang.exception.NestableRuntimeException;
+
+/**
+ * Base class for DdlUtils exceptions
+ */
+public class DdlUtilsException extends NestableRuntimeException
+{
+ /** Constant for serializing instances of this class */
+ private static final long serialVersionUID = 5624776387174310551L;
+
+ /**
+ * Creates a new empty exception object.
+ */
+ public DdlUtilsException()
+ {
+ super();
+ }
+
+ /**
+ * Creates a new exception object.
+ *
+ * @param msg The exception message
+ */
+ public DdlUtilsException(String msg)
+ {
+ super(msg);
+ }
+
+ /**
+ * Creates a new exception object.
+ *
+ * @param baseEx The base exception
+ */
+ public DdlUtilsException(Throwable baseEx)
+ {
+ super(baseEx);
+ }
+
+ /**
+ * Creates a new exception object.
+ *
+ * @param msg The exception message
+ * @param baseEx The base exception
+ */
+ public DdlUtilsException(String msg, Throwable baseEx)
+ {
+ super(msg, baseEx);
+ }
+
+}
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/DynaSqlException.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/DynaSqlException.java?rev=240460&r1=240459&r2=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/DynaSqlException.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/DynaSqlException.java Sat Aug 27 14:44:57 2005
@@ -1,13 +1,28 @@
package org.apache.ddlutils;
-import org.apache.commons.lang.exception.NestableRuntimeException;
+/*
+ * Copyright 1999-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
/**
* Is thrown when by the {@link org.apache.ddlutils.dynabean.DynaSql} and
* related classes when a database operation fails, but a normal
* {@link java.sql.SQLException} cannot be generated.
*/
-public class DynaSqlException extends NestableRuntimeException
+public class DynaSqlException extends DdlUtilsException
{
/** Constant for serializing instances of this class */
private static final long serialVersionUID = 7524362294381844776L;
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/InterbaseBuilder.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/InterbaseBuilder.java?rev=240460&r1=240459&r2=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/InterbaseBuilder.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/InterbaseBuilder.java Sat Aug 27 14:44:57 2005
@@ -69,7 +69,7 @@
protected void writeExternalForeignKeyCreateStmt(Database database, Table table, ForeignKey key) throws IOException
{
super.writeExternalForeignKeyCreateStmt(database, table, key);
- if (key.getForeignTable() != null)
+ if (key.getForeignTableName() != null)
{
print("COMMIT");
printEndOfStatement();
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/PostgreSqlBuilder.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/PostgreSqlBuilder.java?rev=240460&r1=240459&r2=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/PostgreSqlBuilder.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/PostgreSqlBuilder.java Sat Aug 27 14:44:57 2005
@@ -18,7 +18,6 @@
import java.io.IOException;
import java.sql.Types;
-import java.util.Iterator;
import org.apache.ddlutils.PlatformInfo;
import org.apache.ddlutils.model.Column;
@@ -60,9 +59,9 @@
*/
public void createTable(Database database, Table table) throws IOException
{
- for (Iterator it = table.getColumns().iterator(); it.hasNext();)
+ for (int idx = 0; idx < table.getColumnCount(); idx++)
{
- Column column = (Column)it.next();
+ Column column = table.getColumn(idx);
if (column.isAutoIncrement())
{
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/SqlBuilder.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/SqlBuilder.java?rev=240460&r1=240459&r2=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/SqlBuilder.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/builder/SqlBuilder.java Sat Aug 27 14:44:57 2005
@@ -24,7 +24,6 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
-import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -252,9 +251,9 @@
dropTables(database);
}
- for (Iterator it = database.getTables().iterator(); it.hasNext(); )
+ for (int idx = 0; idx < database.getTableCount(); idx++)
{
- Table table = (Table)it.next();
+ Table table = database.getTable(idx);
writeTableComment(table);
createTable(database, table);
@@ -292,9 +291,9 @@
{
ArrayList newTables = new ArrayList();
- for (Iterator tableIt = desiredModel.getTables().iterator(); tableIt.hasNext();)
+ for (int tableIdx = 0; tableIdx < desiredModel.getTableCount(); tableIdx++)
{
- Table desiredTable = (Table)tableIt.next();
+ Table desiredTable = desiredModel.getTable(tableIdx);
Table currentTable = currentModel.findTable(desiredTable.getName());
if (currentTable == null)
@@ -309,9 +308,9 @@
}
else
{
- for (Iterator columnIt = desiredTable.getColumns().iterator(); columnIt.hasNext();)
+ for (int columnIdx = 0; columnIdx < desiredTable.getColumnCount(); columnIdx++)
{
- Column desiredColumn = (Column)columnIt.next();
+ Column desiredColumn = desiredTable.getColumn(columnIdx);
Column currentColumn = currentTable.findColumn(desiredColumn.getName());
if (null == currentColumn)
@@ -348,8 +347,9 @@
}
// add fk constraints
- for (Iterator fkIt = desiredTable.getForeignKeys().iterator(); fkIt.hasNext();) {
- ForeignKey desiredFk = (ForeignKey) fkIt.next();
+ for (int fkIdx = 0; fkIdx < desiredTable.getForeignKeyCount(); fkIdx++)
+ {
+ ForeignKey desiredFk = desiredTable.getForeignKey(fkIdx);
ForeignKey currentFk = currentTable.findForeignKey(desiredFk);
if ( currentFk == null ) {
if (_log.isInfoEnabled())
@@ -362,9 +362,9 @@
// TODO: should we check the index fields for differences?
//create new indexes
- for (Iterator indexIt = desiredTable.getIndexes().iterator(); indexIt.hasNext();)
+ for (int indexIdx = 0; indexIdx < desiredTable.getIndexCount(); indexIdx++)
{
- Index desiredIndex = (Index)indexIt.next();
+ Index desiredIndex = desiredTable.getIndex(indexIdx);
Index currentIndex = currentTable.findIndex(desiredIndex.getName());
if (null == currentIndex)
@@ -378,8 +378,9 @@
}
// drop fk constraints
- for (Iterator fkIt = currentTable.getForeignKeys().iterator(); fkIt.hasNext();) {
- ForeignKey currentFk = (ForeignKey) fkIt.next();
+ for (int fkIdx = 0; fkIdx < currentTable.getForeignKeyCount(); fkIdx++)
+ {
+ ForeignKey currentFk = currentTable.getForeignKey(fkIdx);
ForeignKey desiredFk = desiredTable.findForeignKey(currentFk);
if ( desiredFk == null ) {
@@ -395,9 +396,9 @@
//Drop columns
- for (Iterator columnIt = currentTable.getColumns().iterator(); columnIt.hasNext();)
+ for (int columnIdx = 0; columnIdx < currentTable.getColumnCount(); columnIdx++)
{
- Column currentColumn = (Column)columnIt.next();
+ Column currentColumn = currentTable.getColumn(columnIdx);
Column desiredColumn = desiredTable.findColumn(currentColumn.getName());
if (null == desiredColumn)
@@ -424,9 +425,9 @@
}
//Drop indexes
- for (Iterator indexIt = currentTable.getIndexes().iterator(); indexIt.hasNext();)
+ for (int indexIdx = 0; indexIdx < currentTable.getIndexCount(); indexIdx++)
{
- Index currentIndex = (Index)indexIt.next();
+ Index currentIndex = currentTable.getIndex(indexIdx);
Index desiredIndex = desiredTable.findIndex(currentIndex.getName());
if (null == desiredIndex)
@@ -434,7 +435,7 @@
// make sure this isn't the primary key index
boolean isPk = true;
- for (Iterator columnIt = currentIndex.getIndexColumns().iterator(); columnIt.hasNext();)
+ for (Iterator columnIt = currentIndex.getColumns().iterator(); columnIt.hasNext();)
{
IndexColumn indexColumn = (IndexColumn)columnIt.next();
Column column = currentTable.findColumn(indexColumn.getName());
@@ -470,9 +471,9 @@
}
// check for table drops
- for (Iterator tableIt = currentModel.getTables().iterator(); tableIt.hasNext();)
+ for (int idx = 0; idx < currentModel.getTableCount(); idx++)
{
- Table currentTable = (Table)tableIt.next();
+ Table currentTable = currentModel.getTable(idx);
Table desiredTable = desiredModel.findTable(currentTable.getName());
if ((desiredTable == null) && (currentTable.getName() != null) && (currentTable.getName().length() > 0))
@@ -547,9 +548,9 @@
*/
public void createExternalForeignKeys(Database database) throws IOException
{
- for (Iterator it = database.getTables().iterator(); it.hasNext(); )
+ for (int idx = 0; idx < database.getTableCount(); idx++)
{
- createExternalForeignKeys(database, (Table)it.next());
+ createExternalForeignKeys(database, database.getTable(idx));
}
}
@@ -563,11 +564,9 @@
{
if (!getPlatformInfo().isForeignKeysEmbedded())
{
- int numKey = 1;
-
- for (Iterator it = table.getForeignKeys().iterator(); it.hasNext(); numKey++)
+ for (int idx = 0; idx < table.getForeignKeyCount(); idx++)
{
- writeExternalForeignKeyCreateStmt(database, table, (ForeignKey)it.next());
+ writeExternalForeignKeyCreateStmt(database, table, table.getForeignKey(idx));
}
}
}
@@ -579,12 +578,10 @@
*/
public void dropTables(Database database) throws IOException
{
- List tables = database.getTables();
-
// we're dropping the external foreignkeys first
- for (int idx = tables.size() - 1; idx >= 0; idx--)
+ for (int idx = database.getTableCount() - 1; idx >= 0; idx--)
{
- Table table = (Table)tables.get(idx);
+ Table table = database.getTable(idx);
if ((table.getName() != null) &&
(table.getName().length() > 0))
@@ -597,9 +594,9 @@
// TODO: It might be more useful to either (or both)
// * determine an order in which the tables can be dropped safely (via the foreignkeys)
// * alter the tables first to drop the internal foreignkeys
- for (int idx = tables.size() - 1; idx >= 0; idx--)
+ for (int idx = database.getTableCount() - 1; idx >= 0; idx--)
{
- Table table = (Table)tables.get(idx);
+ Table table = database.getTable(idx);
if ((table.getName() != null) &&
(table.getName().length() > 0))
@@ -631,11 +628,9 @@
{
if (!getPlatformInfo().isForeignKeysEmbedded())
{
- int numKey = 1;
-
- for (Iterator it = table.getForeignKeys().iterator(); it.hasNext(); numKey++)
+ for (int idx = 0; idx < table.getForeignKeyCount(); idx++)
{
- writeExternalForeignKeyDropStmt(table, (ForeignKey)it.next());
+ writeExternalForeignKeyDropStmt(table, table.getForeignKey(idx));
}
}
}
@@ -659,9 +654,9 @@
buffer.append(getTableName(table));
buffer.append(" (");
- for (Iterator it = table.getColumns().iterator(); it.hasNext();)
+ for (int idx = 0; idx < table.getColumnCount(); idx++)
{
- Column column = (Column)it.next();
+ Column column = table.getColumn(idx);
if (columnValues.containsKey(column.getName()))
{
@@ -690,9 +685,9 @@
else
{
addComma = false;
- for (Iterator it = table.getColumns().iterator(); it.hasNext();)
+ for (int idx = 0; idx < table.getColumnCount(); idx++)
{
- Column column = (Column)it.next();
+ Column column = table.getColumn(idx);
if (columnValues.containsKey(column.getName()))
{
@@ -729,9 +724,9 @@
buffer.append(getTableName(table));
buffer.append(" SET ");
- for (Iterator it = table.getColumns().iterator(); it.hasNext();)
+ for (int idx = 0; idx < table.getColumnCount(); idx++)
{
- Column column = (Column)it.next();
+ Column column = table.getColumn(idx);
if (!column.isPrimaryKey() && columnValues.containsKey(column.getName()))
{
@@ -754,9 +749,9 @@
}
buffer.append(" WHERE ");
addSep = false;
- for (Iterator it = table.getColumns().iterator(); it.hasNext();)
+ for (int idx = 0; idx < table.getColumnCount(); idx++)
{
- Column column = (Column)it.next();
+ Column column = table.getColumn(idx);
if (column.isPrimaryKey() && columnValues.containsKey(column.getName()))
{
@@ -922,11 +917,11 @@
*/
protected void writeColumns(Table table) throws IOException
{
- for (Iterator it = table.getColumns().iterator(); it.hasNext();)
+ for (int idx = 0; idx < table.getColumnCount(); idx++)
{
printIndent();
- writeColumn(table, (Column)it.next());
- if (it.hasNext())
+ writeColumn(table, table.getColumn(idx));
+ if (idx < table.getColumnCount() - 1)
{
println(",");
}
@@ -1195,7 +1190,7 @@
protected String getForeignKeyName(ForeignKey fk) {
//table and local column should be sufficient - is it possible for one
//column to reference multiple tables
- return fk.firstReference().getLocal() + "_" + fk.getForeignTable();
+ return fk.getFirstReference().getLocalColumnName() + "_" + fk.getForeignTableName();
}
/**
@@ -1234,9 +1229,9 @@
*/
protected void writeEmbeddedPrimaryKeysStmt(Table table) throws IOException
{
- List primaryKeyColumns = table.getPrimaryKeyColumns();
+ Column[] primaryKeyColumns = table.getPrimaryKeyColumns();
- if (!primaryKeyColumns.isEmpty() && shouldGeneratePrimaryKeys(primaryKeyColumns))
+ if ((primaryKeyColumns.length > 0) && shouldGeneratePrimaryKeys(primaryKeyColumns))
{
println(",");
printIndent();
@@ -1251,9 +1246,9 @@
*/
protected void writeExternalPrimaryKeysCreateStmt(Table table) throws IOException
{
- List primaryKeyColumns = table.getPrimaryKeyColumns();
+ Column[] primaryKeyColumns = table.getPrimaryKeyColumns();
- if (!primaryKeyColumns.isEmpty() && shouldGeneratePrimaryKeys(primaryKeyColumns))
+ if ((primaryKeyColumns.length > 0) && shouldGeneratePrimaryKeys(primaryKeyColumns))
{
print("ALTER TABLE ");
println(getTableName(table));
@@ -1275,11 +1270,11 @@
* @param primaryKeyColumns The pk columns
* @return <code>true</code> if a pk statement should be generated for the columns
*/
- protected boolean shouldGeneratePrimaryKeys(List primaryKeyColumns)
+ protected boolean shouldGeneratePrimaryKeys(Column[] primaryKeyColumns)
{
- for (Iterator it = primaryKeyColumns.iterator(); it.hasNext();)
+ for (int idx = 0; idx < primaryKeyColumns.length; idx++)
{
- if (!((Column)it.next()).isAutoIncrement())
+ if (!primaryKeyColumns[idx].isAutoIncrement())
{
return true;
}
@@ -1293,13 +1288,13 @@
* @param table The table
* @param primaryKeyColumns The primary columns
*/
- protected void writePrimaryKeyStmt(Table table, List primaryKeyColumns) throws IOException
+ protected void writePrimaryKeyStmt(Table table, Column[] primaryKeyColumns) throws IOException
{
print("PRIMARY KEY (");
- for (Iterator it = primaryKeyColumns.iterator(); it.hasNext();)
+ for (int idx = 0; idx < primaryKeyColumns.length; idx++)
{
- print(getColumnName((Column)it.next()));
- if (it.hasNext())
+ print(getColumnName(primaryKeyColumns[idx]));
+ if (idx < primaryKeyColumns.length - 1)
{
print(", ");
}
@@ -1326,9 +1321,9 @@
*/
protected void writeExternalIndicesCreateStmt(Table table) throws IOException
{
- for (Iterator it = table.getIndexes().iterator(); it.hasNext();)
+ for (int idx = 0; idx < table.getIndexCount(); idx++)
{
- writeExternalIndexCreateStmt(table, (Index)it.next());
+ writeExternalIndexCreateStmt(table, table.getIndex(idx));
}
}
@@ -1367,7 +1362,7 @@
print(getTableName(table));
print(" (");
- for (Iterator it = index.getIndexColumns().iterator(); it.hasNext();)
+ for (Iterator it = index.getColumns().iterator(); it.hasNext();)
{
IndexColumn idxColumn = (IndexColumn)it.next();
@@ -1419,13 +1414,11 @@
*/
protected void writeEmbeddedForeignKeysStmt(Database database, Table table) throws IOException
{
- int numKey = 1;
-
- for (Iterator it = table.getForeignKeys().iterator(); it.hasNext(); numKey++)
+ for (int idx = 0; idx < table.getForeignKeyCount(); idx++)
{
- ForeignKey key = (ForeignKey)it.next();
+ ForeignKey key = table.getForeignKey(idx);
- if (key.getForeignTable() == null)
+ if (key.getForeignTableName() == null)
{
_log.warn("Foreign key table is null for key " + key);
}
@@ -1437,13 +1430,13 @@
if (getPlatformInfo().isEmbeddedForeignKeysNamed())
{
print("CONSTRAINT ");
- print(getConstraintName(null, table, "FK", Integer.toString(numKey)));
+ print(getConstraintName(null, table, "FK", Integer.toString(idx)));
print(" ");
}
print("FOREIGN KEY (");
writeLocalReferences(key);
print(") REFERENCES ");
- print(getTableName(database.findTable(key.getForeignTable())));
+ print(getTableName(database.findTable(key.getForeignTableName())));
print(" (");
writeForeignReferences(key);
print(")");
@@ -1461,7 +1454,7 @@
*/
protected void writeExternalForeignKeyCreateStmt(Database database, Table table, ForeignKey key) throws IOException
{
- if (key.getForeignTable() == null)
+ if (key.getForeignTableName() == null)
{
_log.warn("Foreign key table is null for key " + key);
}
@@ -1474,7 +1467,7 @@
print(" FOREIGN KEY (");
writeLocalReferences(key);
print(") REFERENCES ");
- print(getTableName(database.findTable(key.getForeignTable())));
+ print(getTableName(database.findTable(key.getForeignTableName())));
print(" (");
writeForeignReferences(key);
print(")");
@@ -1491,7 +1484,7 @@
{
for (Iterator it = key.getReferences().iterator(); it.hasNext();)
{
- print(((Reference)it.next()).getLocal());
+ print(((Reference)it.next()).getLocalColumnName());
if (it.hasNext())
{
print(", ");
@@ -1508,7 +1501,7 @@
{
for (Iterator it = key.getReferences().iterator(); it.hasNext();)
{
- print(((Reference)it.next()).getForeign());
+ print(((Reference)it.next()).getForeignColumnName());
if (it.hasNext())
{
print(", ");
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaClass.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaClass.java?rev=240460&r1=240459&r2=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaClass.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaClass.java Sat Aug 27 14:44:57 2005
@@ -17,14 +17,12 @@
*/
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
import org.apache.commons.beanutils.BasicDynaClass;
import org.apache.commons.beanutils.DynaProperty;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.ddlutils.model.Column;
import org.apache.ddlutils.model.Table;
/**
@@ -46,13 +44,17 @@
/**
* Creates a new SqlDynaClass instance from a Table model.
*/
- public static SqlDynaClass newInstance(Table table) {
+ public static SqlDynaClass newInstance(Table table)
+ {
List properties = new ArrayList();
- for (Iterator iter = table.getColumns().iterator(); iter.hasNext(); ) {
- Column column = (Column) iter.next();
- properties.add( new SqlDynaProperty(column));
+
+ for (int idx = 0; idx < table.getColumnCount(); idx++)
+ {
+ properties.add(new SqlDynaProperty(table.getColumn(idx)));
}
+
SqlDynaProperty[] array = new SqlDynaProperty[properties.size()];
+
properties.toArray(array);
return new SqlDynaClass(table, array);
}
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataDtdWriter.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataDtdWriter.java?rev=240460&r1=240459&r2=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataDtdWriter.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataDtdWriter.java Sat Aug 27 14:44:57 2005
@@ -19,7 +19,6 @@
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
-import java.util.Iterator;
import org.apache.ddlutils.model.Column;
import org.apache.ddlutils.model.Database;
@@ -47,12 +46,12 @@
writer.println("<!-- DTD for XML data files for database "+model.getName()+" -->\n");
writer.println("<!ELEMENT data (");
- for (Iterator tableIt = model.getTables().iterator(); tableIt.hasNext();)
+ for (int idx = 0; idx < model.getTableCount(); idx++)
{
- Table table = (Table)tableIt.next();
+ Table table = model.getTable(idx);
writer.print(" "+table.getName());
- if (tableIt.hasNext())
+ if (idx < model.getTableCount() - 1)
{
writer.println(" |");
}
@@ -62,9 +61,9 @@
}
}
writer.println(")*>");
- for (Iterator tableIt = model.getTables().iterator(); tableIt.hasNext();)
+ for (int idx = 0; idx < model.getTableCount(); idx++)
{
- writeTableElement((Table)tableIt.next(), writer);
+ writeTableElement(model.getTable(idx), writer);
}
}
@@ -78,11 +77,10 @@
{
writer.println("\n<!ELEMENT "+table.getName()+" EMPTY>");
writer.println("<!ATTLIST "+table.getName());
- for (Iterator columnIt = table.getColumns().iterator(); columnIt.hasNext();)
- {
- Column column = (Column)columnIt.next();
- writeColumnAttributeEntry(column, writer);
+ for (int idx = 0; idx < table.getColumnCount(); idx++)
+ {
+ writeColumnAttributeEntry(table.getColumn(idx), writer);
}
writer.println(">");
}
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataReader.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataReader.java?rev=240460&r1=240459&r2=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataReader.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataReader.java Sat Aug 27 14:44:57 2005
@@ -18,7 +18,6 @@
import java.sql.Types;
import java.util.HashMap;
-import java.util.Iterator;
import org.apache.commons.digester.Digester;
import org.apache.ddlutils.io.converters.DateConverter;
@@ -200,16 +199,16 @@
rules.setCaseSensitive(isCaseSensitive());
setRules(rules);
- for (Iterator tableIt = _model.getTables().iterator(); tableIt.hasNext();)
+ for (int tableIdx = 0; tableIdx < _model.getTableCount(); tableIdx++)
{
// TODO: For now we hardcode the root as 'data' but ultimately we should wildcard it ('?')
- Table table = (Table)tableIt.next();
+ Table table = _model.getTable(tableIdx);
String path = "data/"+table.getName();
addRule(path, new DynaSqlCreateRule(_model, table, _sink));
- for (Iterator columnIt = table.getColumns().iterator(); columnIt.hasNext();)
+ for (int columnIdx = 0; columnIdx < table.getColumnCount(); columnIdx++)
{
- Column column = (Column)columnIt.next();
+ Column column = (Column)table.getColumn(columnIdx);
SqlTypeConverter converter = getRegisteredConverter(table, column);
addRule(path, new SetColumnPropertyRule(column, converter, isCaseSensitive()));
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataToDatabaseSink.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataToDatabaseSink.java?rev=240460&r1=240459&r2=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataToDatabaseSink.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataToDatabaseSink.java Sat Aug 27 14:44:57 2005
@@ -147,17 +147,17 @@
// lists of already-processed identities for these tables
_processedIdentities.clear();
_waitingObjects.clear();
- for (Iterator tableIt = _model.getTables().iterator(); tableIt.hasNext();)
+ for (int tableIdx = 0; tableIdx < _model.getTableCount(); tableIdx++)
{
- Table curTable = (Table)tableIt.next();
+ Table table = _model.getTable(tableIdx);
- for (Iterator fkIt = curTable.getForeignKeys().iterator(); fkIt.hasNext();)
+ for (int fkIdx = 0; fkIdx < table.getForeignKeyCount(); fkIdx++)
{
- ForeignKey curFk = (ForeignKey)fkIt.next();
+ ForeignKey curFk = table.getForeignKey(fkIdx);
- if (!_processedIdentities.containsKey(curFk.getForeignTable()))
+ if (!_processedIdentities.containsKey(curFk.getForeignTableName()))
{
- _processedIdentities.put(curFk.getForeignTable(), new HashSet());
+ _processedIdentities.put(curFk.getForeignTableName(), new HashSet());
}
}
}
@@ -178,18 +178,18 @@
{
Table table = _model.getDynaClassFor(bean).getTable();
- if (!table.getForeignKeys().isEmpty())
+ if (table.getForeignKeyCount() > 0)
{
WaitingObject waitingObj = new WaitingObject(bean);
- for (Iterator fkIt = table.getForeignKeys().iterator(); fkIt.hasNext();)
+ for (int idx = 0; idx < table.getForeignKeyCount(); idx++)
{
- ForeignKey fk = (ForeignKey)fkIt.next();
+ ForeignKey fk = table.getForeignKey(idx);
Identity fkIdentity = buildIdentityFromFK(table, fk, bean);
if (fkIdentity != null)
{
- HashSet identitiesForTable = (HashSet)_processedIdentities.get(fk.getForeignTable());
+ HashSet identitiesForTable = (HashSet)_processedIdentities.get(fk.getForeignTableName());
if (!identitiesForTable.contains(fkIdentity))
{
@@ -303,20 +303,20 @@
{
Reference ref = (Reference)it.next();
- result.append(ref.getLocal());
+ result.append(ref.getLocalColumnName());
if (it.hasNext())
{
result.append(",");
}
}
result.append("]->");
- result.append(fk.getForeignTable());
+ result.append(fk.getForeignTableName());
result.append("[");
for (Iterator it = fk.getReferences().iterator(); it.hasNext();)
{
Reference ref = (Reference)it.next();
- result.append(ref.getForeign());
+ result.append(ref.getForeignColumnName());
if (it.hasNext())
{
result.append(",");
@@ -339,9 +339,9 @@
{
Identity identity = new Identity(table.getName());
- for (Iterator it = table.getPrimaryKeyColumns().iterator(); it.hasNext();)
+ for (int idx = 0; idx < table.getColumnCount(); idx++)
{
- Column column = (Column)it.next();
+ Column column = table.getColumn(idx);
identity.setIdentityColumn(column.getName(), bean.get(column.getName()));
}
@@ -359,18 +359,18 @@
*/
private Identity buildIdentityFromFK(Table owningTable, ForeignKey fk, DynaBean bean)
{
- Identity identity = new Identity(fk.getForeignTable(), getFKName(owningTable, fk));
+ Identity identity = new Identity(fk.getForeignTableName(), getFKName(owningTable, fk));
for (Iterator refIt = fk.getReferences().iterator(); refIt.hasNext();)
{
Reference reference = (Reference)refIt.next();
- Object value = bean.get(reference.getLocal());
+ Object value = bean.get(reference.getLocalColumnName());
if (value == null)
{
return null;
}
- identity.setIdentityColumn(reference.getForeign(), value);
+ identity.setIdentityColumn(reference.getForeignColumnName(), value);
}
return identity;
}
@@ -389,11 +389,11 @@
Table targetTable = ((SqlDynaClass)referencedBean.getDynaClass()).getTable();
ForeignKey fk = null;
- for (Iterator it = sourceTable.getForeignKeys().iterator(); it.hasNext();)
+ for (int idx = 0; idx < sourceTable.getForeignKeyCount(); idx++)
{
- ForeignKey curFk = (ForeignKey)it.next();
+ ForeignKey curFk = sourceTable.getForeignKey(idx);
- if (curFk.getForeignTable().equalsIgnoreCase(targetTable.getName()))
+ if (curFk.getForeignTableName().equalsIgnoreCase(targetTable.getName()))
{
if (fkName.equals(getFKName(sourceTable, curFk)))
{
@@ -407,8 +407,8 @@
for (Iterator it = fk.getReferences().iterator(); it.hasNext();)
{
Reference curRef = (Reference)it.next();
- Column sourceColumn = sourceTable.findColumn(curRef.getLocal());
- Column targetColumn = targetTable.findColumn(curRef.getForeign());
+ Column sourceColumn = sourceTable.findColumn(curRef.getLocalColumnName());
+ Column targetColumn = targetTable.findColumn(curRef.getForeignColumnName());
referencingBean.set(sourceColumn.getName(), referencedBean.get(targetColumn.getName()));
}
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataWriter.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataWriter.java?rev=240460&r1=240459&r2=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataWriter.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DataWriter.java Sat Aug 27 14:44:57 2005
@@ -110,9 +110,9 @@
Table table = dynaClass.getTable();
_output.println(" <" + table.getName());
- for (Iterator it = table.getColumns().iterator(); it.hasNext();)
+ for (int idx = 0; idx < table.getColumnCount(); idx++)
{
- Column column = (Column)it.next();
+ Column column = table.getColumn(idx);
Object value = bean.get(column.getName());
if (value != null)
Copied: db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DatabaseIO.java (from r226549, db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DatabaseReader.java)
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DatabaseIO.java?p2=db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DatabaseIO.java&p1=db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DatabaseReader.java&r1=226549&r2=240460&rev=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DatabaseReader.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/io/DatabaseIO.java Sat Aug 27 14:44:57 2005
@@ -17,33 +17,38 @@
*/
import java.beans.IntrospectionException;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Writer;
-import org.apache.commons.betwixt.XMLIntrospector;
import org.apache.commons.betwixt.io.BeanReader;
+import org.apache.commons.betwixt.io.BeanWriter;
import org.apache.commons.betwixt.strategy.HyphenatedNameMapper;
+import org.apache.ddlutils.DdlUtilsException;
import org.apache.ddlutils.model.Database;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
/**
- * This class parsers XML and creates a fully populated Database bean.
- * This class is-a Digester and so can support configuration via custom rules.
+ * This class provides functions to read and write database models from/to XML.
*
* @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
+ * @author Matthew Hawthorne
+ * @author <a href="mailto:tomdz@apache.org">Thomas Dudziak</a>
* @version $Revision$
*/
-public class DatabaseReader extends BeanReader
+public class DatabaseIO
{
/** Whether to use the internal dtd that comes with commons-sql */
- private boolean _useInternalDtd = false;
-
- public DatabaseReader() throws IntrospectionException
- {
- setXMLIntrospector(newXMLIntrospector());
- registerBeanClass(Database.class);
- setValidating(false);
- }
+ private boolean _useInternalDtd = true;
/**
- * Returns whether the internal dtd that comes with commons-sql is used.
+ * Returns whether the internal dtd that comes with DdlUtils is used.
*
* @return <code>true</code> if parsing uses the internal dtd
*/
@@ -60,32 +65,166 @@
public void setUseInternalDtd(boolean useInternalDtd)
{
_useInternalDtd = useInternalDtd;
- if (_useInternalDtd)
+ }
+
+ /**
+ * Returns a new bean reader configured to read database models.
+ *
+ * @return The reader
+ */
+ protected BeanReader getReader() throws IntrospectionException, SAXException, IOException
+ {
+ BeanReader reader = new BeanReader();
+
+ reader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(true);
+ reader.getXMLIntrospector().getConfiguration().setWrapCollectionsInElement(false);
+ reader.getXMLIntrospector().getConfiguration().setElementNameMapper(new HyphenatedNameMapper());
+ if (isUseInternalDtd())
{
- setEntityResolver(new LocalEntityResolver());
+ reader.setEntityResolver(new LocalEntityResolver());
}
- else
+ reader.registerMultiMapping(new InputSource(getClass().getResourceAsStream("/mapping.xml")));
+
+ return reader;
+ }
+
+ /**
+ * Returns a new bean writer configured to writer database models.
+ *
+ * @param output The target output writer
+ * @return The writer
+ */
+ protected BeanWriter getWriter(Writer output) throws IntrospectionException, SAXException, IOException
+ {
+ BeanWriter writer = new BeanWriter(output);
+
+ writer.getXMLIntrospector().register(new InputSource(getClass().getResourceAsStream("/mapping.xml")));
+ writer.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(true);
+ writer.getXMLIntrospector().getConfiguration().setWrapCollectionsInElement(false);
+ writer.getXMLIntrospector().getConfiguration().setElementNameMapper(new HyphenatedNameMapper());
+ writer.getBindingConfiguration().setMapIDs(false);
+ writer.enablePrettyPrint();
+
+ return writer;
+ }
+
+ /**
+ * Reads the database model contained in the specified file.
+ *
+ * @param filename The model file name
+ * @return The database model
+ */
+ public Database read(String filename) throws DdlUtilsException
+ {
+ Database model = null;
+
+ try
+ {
+ model = (Database)getReader().parse(filename);
+ }
+ catch (Exception ex)
{
- setEntityResolver(this);
+ throw new DdlUtilsException(ex);
}
+ model.initialize();
+ return model;
}
/**
- * A factory method to create the default introspector used to turn
- * the Database object model into XML
- */
- protected static XMLIntrospector newXMLIntrospector()
+ * Reads the database model contained in the specified file.
+ *
+ * @param file The model file
+ * @return The database model
+ */
+ public Database read(File file) throws DdlUtilsException
{
- XMLIntrospector introspector = new XMLIntrospector();
+ Database model = null;
- // configure the style of the XML, to brief and attribute based
- introspector.setAttributesForPrimitives(true);
- introspector.setWrapCollectionsInElement(false);
+ try
+ {
+ model = (Database)getReader().parse(file);
+ }
+ catch (Exception ex)
+ {
+ throw new DdlUtilsException(ex);
+ }
+ model.initialize();
+ return model;
+ }
- // set the mixed case name mapper
- introspector.setElementNameMapper(new HyphenatedNameMapper());
- //introspector.setElementNameMapper(new DecapitalizeNameMapper());
+ /**
+ * Reads the database model given by the reader.
+ *
+ * @param reader The reader that returns the model XML
+ * @return The database model
+ */
+ public Database read(Reader reader) throws DdlUtilsException
+ {
+ Database model = null;
+
+ try
+ {
+ model = (Database)getReader().parse(reader);
+ }
+ catch (Exception ex)
+ {
+ throw new DdlUtilsException(ex);
+ }
+ model.initialize();
+ return model;
+ }
+
+ /**
+ * Writes the database model to the specified file.
+ *
+ * @param model The database model
+ * @param filename The model file name
+ */
+ public void write(Database model, String filename) throws DdlUtilsException
+ {
+ try
+ {
+ getWriter(new BufferedWriter(new FileWriter(filename))).write(model);
+ }
+ catch (Exception ex)
+ {
+ throw new DdlUtilsException(ex);
+ }
+ }
- return introspector;
+ /**
+ * Writes the database model to the given output stream.
+ *
+ * @param model The database model
+ * @param output The output stream
+ */
+ public void write(Database model, OutputStream output) throws DdlUtilsException
+ {
+ try
+ {
+ getWriter(new OutputStreamWriter(output)).write(model);
+ }
+ catch (Exception ex)
+ {
+ throw new DdlUtilsException(ex);
+ }
+ }
+
+ /**
+ * Writes the database model to the given output writer.
+ *
+ * @param model The database model
+ * @param output The output writer
+ */
+ public void write(Database model, Writer output) throws DdlUtilsException
+ {
+ try
+ {
+ getWriter(output).write(model);
+ }
+ catch (Exception ex)
+ {
+ throw new DdlUtilsException(ex);
+ }
}
}
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/io/JdbcModelReader.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/io/JdbcModelReader.java?rev=240460&r1=240459&r2=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/io/JdbcModelReader.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/io/JdbcModelReader.java Sat Aug 27 14:44:57 2005
@@ -38,6 +38,8 @@
import org.apache.ddlutils.model.Database;
import org.apache.ddlutils.model.ForeignKey;
import org.apache.ddlutils.model.Index;
+import org.apache.ddlutils.model.UniqueIndex;
+import org.apache.ddlutils.model.NonUniqueIndex;
import org.apache.ddlutils.model.IndexColumn;
import org.apache.ddlutils.model.Reference;
import org.apache.ddlutils.model.Table;
@@ -165,7 +167,7 @@
table.setType(getValueAsString(tableData, "TABLE_TYPE", availableColumns, "UNKNOWN"));
table.setCatalog(getValueAsString(tableData, "TABLE_CAT", availableColumns, null));
table.setSchema(getValueAsString(tableData, "TABLE_SCHEM", availableColumns, null));
- table.setRemarks(getValueAsString(tableData, "REMARKS", availableColumns, ""));
+ table.setDescription(getValueAsString(tableData, "REMARKS", availableColumns, ""));
tables.add(table);
}
}
@@ -329,13 +331,13 @@
fks.add(currFk);
}
currFk = new ForeignKey(getValueAsString(fkData, "FK_NAME", availableColumns, null));
- currFk.setForeignTable(pkTable);
+ currFk.setForeignTableName(pkTable);
prevPkTable = pkTable;
}
Reference ref = new Reference();
- ref.setForeign(getValueAsString(fkData, "PKCOLUMN_NAME", availableColumns, null));
- ref.setLocal(getValueAsString(fkData, "FKCOLUMN_NAME", availableColumns, null));
+ ref.setForeignColumnName(getValueAsString(fkData, "PKCOLUMN_NAME", availableColumns, null));
+ ref.setLocalColumnName(getValueAsString(fkData, "FKCOLUMN_NAME", availableColumns, null));
currFk.addReference(ref);
}
if (currFk != null)
@@ -378,15 +380,22 @@
while (indexData.next())
{
- String indexName = getValueAsString(indexData, "INDEX_NAME", availableColumns, null);
- Index index = (Index)indicesByName.get(indexName);
+ String indexName = getValueAsString(indexData, "INDEX_NAME", availableColumns, null);
+ boolean isUnique = !getValueAsBoolean(indexData, "NON_UNIQUE", availableColumns, true);
+ Index index = (Index)indicesByName.get(indexName);
if ((index == null) && (indexName != null))
{
- index = new Index();
+ if (isUnique)
+ {
+ index = new UniqueIndex();
+ }
+ else
+ {
+ index = new NonUniqueIndex();
+ }
index.setName(indexName);
- index.setUnique(!getValueAsBoolean(indexData, "NON_UNIQUE", availableColumns, true));
indicesByName.put(indexName, index);
}
if (index != null)
@@ -394,7 +403,7 @@
IndexColumn ic = new IndexColumn();
ic.setName(getValueAsString(indexData, "COLUMN_NAME", availableColumns, null));
- index.addIndexColumn(ic);
+ index.addColumn(ic);
}
}
indices.addAll(indicesByName.values());
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Column.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Column.java?rev=240460&r1=240459&r2=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Column.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Column.java Sat Aug 27 14:44:57 2005
@@ -18,8 +18,10 @@
public class Column implements Cloneable
{
+ // TODO: Implement equals and hashcode
private String name;
private String javaName;
+ private String description;
private boolean primaryKey = false;
private boolean required = false;
private boolean autoIncrement = false;
@@ -133,6 +135,26 @@
public void setJavaName(String javaName)
{
this.javaName = javaName;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return The description
+ */
+ public String getDescription()
+ {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description The description
+ */
+ public void setDescription(String description)
+ {
+ this.description = description;
}
public boolean isPrimaryKey()
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Database.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Database.java?rev=240460&r1=240459&r2=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Database.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Database.java Sat Aug 27 14:44:57 2005
@@ -16,11 +16,14 @@
* limitations under the License.
*/
+import java.io.Serializable;
+import java.sql.Types;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.Iterator;
-import java.util.List;
import org.apache.commons.beanutils.DynaBean;
+import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.ddlutils.DynaSqlException;
import org.apache.ddlutils.dynabean.DynaClassCache;
import org.apache.ddlutils.dynabean.SqlDynaClass;
@@ -35,8 +38,11 @@
* @author <a href="mailto:tomdz@apache.org">Thomas Dudziak</a>
* @version $Revision$
*/
-public class Database
+public class Database implements Serializable, Cloneable
{
+ /** Unique ID for serialization purposes */
+ private static final long serialVersionUID = -3160443396757573868L;
+
/** The name of the database model */
private String _name;
/** The method for generating primary keys (currently ignored) */
@@ -44,7 +50,7 @@
/** The version of the model */
private String _version;
/** The tables */
- private List _tables = new ArrayList();
+ private ArrayList _tables = new ArrayList();
/** The dyna class cache for this model */
private DynaClassCache _dynaClassCache = new DynaClassCache();
@@ -139,24 +145,34 @@
}
/**
- * Returns the list of tables in this model.
+ * Returns the number of tables in this model.
+ *
+ * @return The number of tables
+ */
+ public int getTableCount()
+ {
+ return _tables.size();
+ }
+
+ /**
+ * Returns the tables in this model.
*
* @return The tables
*/
- public List getTables()
+ public Table[] getTables()
{
- return _tables;
+ return (Table[])_tables.toArray(new Table[_tables.size()]);
}
/**
* Returns the table at the specified position.
*
- * @param index The index of the table
+ * @param idx The index of the table
* @return The table
*/
- public Table getTable(int index)
+ public Table getTable(int idx)
{
- return (Table)_tables.get(index);
+ return (Table)_tables.get(idx);
}
/**
@@ -166,25 +182,211 @@
*/
public void addTable(Table table)
{
- _tables.add(table);
+ if (table != null)
+ {
+ _tables.add(table);
+ }
+ }
+
+ /**
+ * Adds a table at the specified position.
+ *
+ * @param idx The index where to insert the table
+ * @param table The table to add
+ */
+ public void addTable(int idx, Table table)
+ {
+ if (table != null)
+ {
+ _tables.add(idx, table);
+ }
+ }
+
+ /**
+ * Removes the given table.
+ *
+ * @param table The table to remove
+ */
+ public void removeTable(Table table)
+ {
+ if (table != null)
+ {
+ _tables.remove(table);
+ }
}
/**
- * Replaces the table at the specified position.
+ * Removes the indicated table.
*
- * @param index The index of the table
- * @param table The new table
+ * @param idx The index of the table to remove
*/
- public void setTable(int index, Table table)
+ public void removeTable(int idx)
{
- _tables.set(index, table);
+ _tables.remove(idx);
}
// Helper methods
/**
+ * Initializes the model by establishing the relationships between elements in this model encoded
+ * eg. in foreign keys etc. Also checks that the model elements are valid (table and columns have
+ * a name, foreign keys rference existing tables etc.)
+ */
+ public void initialize() throws ModelException
+ {
+ // we have to setup
+ // * target tables in foreign keys
+ // * columns in foreign key references
+ // * columns in indices
+ // * columns in uniques
+ HashSet namesOfProcessedTables = new HashSet();
+ HashSet namesOfProcessedColumns = new HashSet();
+ HashSet namesOfProcessedFks = new HashSet();
+ HashSet namesOfProcessedIndices = new HashSet();
+ int tableIdx = 0;
+
+ if ((getName() == null) || (getName().length() == 0))
+ {
+ throw new ModelException("The database model has no name");
+ }
+
+ for (Iterator tableIt = _tables.iterator(); tableIt.hasNext(); tableIdx++)
+ {
+ Table curTable = (Table)tableIt.next();
+
+ if ((curTable.getName() == null) || (curTable.getName().length() == 0))
+ {
+ throw new ModelException("The table nr. "+tableIdx+" has no name");
+ }
+ if (namesOfProcessedTables.contains(curTable.getName()))
+ {
+ throw new ModelException("There are multiple tables with the name "+curTable.getName());
+ }
+ namesOfProcessedTables.add(curTable.getName());
+
+ namesOfProcessedColumns.clear();
+ namesOfProcessedFks.clear();
+ namesOfProcessedIndices.clear();
+
+ for (int idx = 0; idx < curTable.getColumnCount(); idx++)
+ {
+ Column column = curTable.getColumn(idx);
+
+ if ((column.getName() == null) || (column.getName().length() == 0))
+ {
+ throw new ModelException("The column nr. "+idx+" in table "+curTable.getName()+" has no name");
+ }
+ if (namesOfProcessedColumns.contains(column.getName()))
+ {
+ throw new ModelException("There are multiple column with the name "+column.getName()+" in the table "+curTable.getName());
+ }
+ namesOfProcessedColumns.add(column.getName());
+
+ if ((column.getType() == null) || (column.getType().length() == 0))
+ {
+ throw new ModelException("The column nr. "+idx+" in table "+curTable.getName()+" has no type");
+ }
+ if ((column.getTypeCode() == Types.OTHER) && !"OTHER".equalsIgnoreCase(column.getType()))
+ {
+ throw new ModelException("The column nr. "+idx+" in table "+curTable.getName()+" has an unknown type "+column.getType());
+ }
+ namesOfProcessedColumns.add(column.getName());
+ }
+
+ for (int idx = 0; idx < curTable.getForeignKeyCount(); idx++)
+ {
+ ForeignKey fk = curTable.getForeignKey(idx);
+ String fkName = (fk.getName() == null ? "" : fk.getName());
+ String fkDesc = (fkName.length() == 0 ? "nr. " + idx : fkName);
+
+ if (fkName.length() > 0)
+ {
+ if (namesOfProcessedFks.contains(fkName))
+ {
+ throw new ModelException("There are multiple foreign keys in table "+curTable.getName()+" with the name "+fkName);
+ }
+ namesOfProcessedFks.add(fkName);
+ }
+
+ if (fk.getForeignTable() == null)
+ {
+ Table targetTable = findTable(fk.getForeignTableName(), true);
+
+ if (targetTable == null)
+ {
+ throw new ModelException("The foreignkey "+fkDesc+" in table "+curTable.getName()+" references the undefined table "+fk.getForeignTableName());
+ }
+ else
+ {
+ fk.setForeignTable(targetTable);
+ }
+ }
+ for (Iterator refIt = fk.getReferences().iterator(); refIt.hasNext();)
+ {
+ Reference ref = (Reference)refIt.next();
+
+ if (ref.getLocalColumn() == null)
+ {
+ Column localColumn = curTable.findColumn(ref.getLocalColumnName(), true);
+
+ if (localColumn == null)
+ {
+ throw new ModelException("The foreignkey "+fkDesc+" in table "+curTable.getName()+" references the undefined local column "+ref.getLocalColumnName());
+ }
+ else
+ {
+ ref.setLocalColumn(localColumn);
+ }
+ }
+ if (ref.getForeignColumn() == null)
+ {
+ Column foreignColumn = fk.getForeignTable().findColumn(ref.getForeignColumnName(), true);
+
+ if (foreignColumn == null)
+ {
+ throw new ModelException("The foreignkey "+fkDesc+" in table "+curTable.getName()+" references the undefined local column "+ref.getForeignColumnName()+" in table "+fk.getForeignTable().getName());
+ }
+ else
+ {
+ ref.setForeignColumn(foreignColumn);
+ }
+ }
+ }
+ }
+
+ for (int idx = 0; idx < curTable.getIndexCount(); idx++)
+ {
+ Index index = curTable.getIndex(idx);
+ String indexName = (index.getName() == null ? "" : index.getName());
+ String indexDesc = (indexName.length() == 0 ? "nr. " + idx : indexName);
+
+ if (indexName.length() > 0)
+ {
+ if (namesOfProcessedIndices.contains(indexName))
+ {
+ throw new ModelException("There are multiple indices in table "+curTable.getName()+" with the name "+indexName);
+ }
+ namesOfProcessedIndices.add(indexName);
+ }
+
+ int indexColumnIdx = 0;
+
+ for (Iterator indexColumnIt = index.getColumns().iterator(); indexColumnIt.hasNext(); indexColumnIdx++)
+ {
+ IndexColumn indexColumn = (IndexColumn)indexColumnIt.next();
+
+ if (curTable.findColumn(indexColumn.getName(), true) == null)
+ {
+ throw new ModelException("The index "+indexDesc+" in table "+curTable.getName()+" references the undefined column "+indexColumn.getName());
+ }
+ }
+ }
+ }
+ }
+
+ /**
* Finds the table with the specified name, using case insensitive matching.
- * Note that this method is not called getTable(String) to avoid introspection
+ * Note that this method is not called getTable to avoid introspection
* problems.
*
* @param name The name of the table to find
@@ -197,7 +399,7 @@
/**
* Finds the table with the specified name, using case insensitive matching.
- * Note that this method is not called getTable(String) to avoid introspection
+ * Note that this method is not called getTable) to avoid introspection
* problems.
*
* @param name The name of the table to find
@@ -262,12 +464,55 @@
return _dynaClassCache.createNewInstance(table);
}
+ /* (non-Javadoc)
+ * @see java.lang.Object#clone()
+ */
+ protected Object clone() throws CloneNotSupportedException
+ {
+ Database result = new Database();
+
+ result._name = _name;
+ result._idMethod = _idMethod;
+ result._version = _version;
+ result._tables = (ArrayList)_tables.clone();
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof Database)
+ {
+ Database other = (Database)obj;
+
+ return _name.equals(other._name) &&
+ _tables.equals(other._tables);
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ public int hashCode()
+ {
+ return new HashCodeBuilder(17, 37)
+ .append(_name)
+ .append(_tables)
+ .toHashCode();
+ }
+
/*
* (non-Javadoc)
* @see java.lang.Object#toString()
*/
public String toString()
{
- return super.toString() + "[name=" + _name + ";tableCount=" + _tables.size() + "]";
+ return "Database " + _name + " [" + _tables.size() + " tables]";
}
}
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/model/ForeignKey.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/model/ForeignKey.java?rev=240460&r1=240459&r2=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/model/ForeignKey.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/model/ForeignKey.java Sat Aug 27 14:44:57 2005
@@ -20,17 +20,24 @@
import java.util.Collections;
import java.util.List;
-// TODO: Add a name property to the foreignkey that is respected by
-// create/alter/drop
+/**
+ * Represents a database foreign key.
+ */
public class ForeignKey implements Cloneable
{
- private String name;
- private String foreignTable;
-
- private ArrayList references = new ArrayList();
+ // TODO: Make the create/alter/drop functionality respect the name property
+
+ /** The name of the foreign key, may be <code>null</code> */
+ private String _name;
+ /** The target table */
+ private Table _foreignTable;
+ /** The name of the foreign table */
+ private String _foreignTableName;
+ /** The references between local and remote columns */
+ private ArrayList _references = new ArrayList();
/**
- * Creates a new foreign key object.
+ * Creates a new foreign key object that has no name.
*/
public ForeignKey()
{
@@ -40,68 +47,142 @@
/**
* Creates a new foreign key object.
*
- * @param name The name of the foreignkey
+ * @param name The name of the foreign key
*/
public ForeignKey(String name)
{
- this.name = name;
+ _name = name;
}
- /* (non-Javadoc)
- * @see java.lang.Object#clone()
+ /**
+ * Returns the name of this foreign key.
+ *
+ * @return The name
*/
- public Object clone() throws CloneNotSupportedException
+ public String getName()
{
- ForeignKey result = new ForeignKey();
-
- result.foreignTable = foreignTable;
- result.references = (ArrayList)references.clone();
- return result;
+ return _name;
}
/**
- * Returns the name of this foreign key.
+ * Sets the name of this foreign key.
*
- * @return The name
+ * @param name The name
*/
- public String getName()
+ public void setName(String name)
{
- return name;
+ _name = name;
}
-
- public String getForeignTable()
+
+ /**
+ * Returns the foreign table.
+ *
+ * @return The foreign table
+ */
+ public Table getForeignTable()
{
- return foreignTable;
+ return _foreignTable;
}
-
- public void setForeignTable(String foreignTable)
+
+ /**
+ * Sets the foreign table.
+ *
+ * @param foreignTable The foreign table
+ */
+ public void setForeignTable(Table foreignTable)
+ {
+ _foreignTable = foreignTable;
+ _foreignTableName = (foreignTable == null ? null : foreignTable.getName());
+ }
+
+ /**
+ * Returns the name of the foreign table.
+ *
+ * @return The table name
+ */
+ public String getForeignTableName()
{
- this.foreignTable= foreignTable;
+ return _foreignTableName;
}
+ /**
+ * Sets the name of the foreign table. Please note that you should not use this method
+ * when manually constructing or manipulating the database model. Rather utilize the
+ * {@link #setForeignTable(Table)} method.
+ *
+ * @param foreignTableName The table name
+ */
+ public void setForeignTableName(String foreignTableName)
+ {
+ if ((_foreignTable != null) && !_foreignTable.getName().equals(foreignTableName))
+ {
+ _foreignTable = null;
+ }
+ _foreignTableName = foreignTableName;
+ }
+
+ /**
+ * Adds a reference, ie. a mapping between a local column (in the table that owns this foreign key)
+ * and a remote column.
+ *
+ * @param reference The reference to add
+ */
public void addReference(Reference reference)
{
- references.add(reference);
+ _references.add(reference);
}
-
+
+ /**
+ * Returns the references.
+ *
+ * @return The references
+ */
public List getReferences()
{
- return references;
+ return _references;
}
- public Reference firstReference() {
- return (Reference) (references.size() == 0 ? null : references.get(0));
+ /**
+ * Returns the indicated reference.
+ *
+ * @param idx The index
+ * @return The reference
+ */
+ public Reference getReference(int idx)
+ {
+ return (Reference)_references.get(idx);
}
- public boolean equals(Object o) {
- boolean result = o != null && getClass().equals(o.getClass());
- if ( result ) {
- ForeignKey fk = (ForeignKey) o;
- result = this.foreignTable.equalsIgnoreCase(fk.foreignTable) && this.references.size() == fk.references.size();
- if ( result ) {
+ /**
+ * Returns the first reference if it exists.
+ *
+ * @return The first reference
+ */
+ public Reference getFirstReference()
+ {
+ return (Reference)(_references.isEmpty() ? null : _references.get(0));
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals(Object other)
+ {
+ boolean result = (other != null) && getClass().equals(other.getClass());
+
+ if (result)
+ {
+ ForeignKey fk = (ForeignKey) other;
+
+ result = _foreignTableName.equals(fk._foreignTableName) &&
+ (_references.size() == fk._references.size());
+
+ if (result)
+ {
//check all references - need to ensure order is same for valid comparison
- List copyThis = (List) this.references.clone();
- List copyThat = (List) fk.references.clone();
+ List copyThis = (List)_references.clone();
+ List copyThat = (List)fk._references.clone();
+
Collections.sort(copyThis);
Collections.sort(copyThat);
result = copyThis.equals(copyThat);
@@ -109,9 +190,25 @@
}
return result;
}
-
- public String toString() {
- return "ForeignKey[" + this.foreignTable + "]";
- //TODO show references
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ //TODO show name and references
+ return "ForeignKey[" + _foreignTableName + "]";
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#clone()
+ */
+ public Object clone() throws CloneNotSupportedException
+ {
+ ForeignKey result = new ForeignKey(_name);
+
+ result._foreignTableName = _foreignTableName;
+ result._references = (ArrayList)_references.clone();
+ return result;
}
}
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Index.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Index.java?rev=240460&r1=240459&r2=240460&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Index.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/model/Index.java Sat Aug 27 14:44:57 2005
@@ -16,58 +16,53 @@
* limitations under the License.
*/
-
-import java.util.ArrayList;
+import java.io.Serializable;
import java.util.List;
-public class Index implements Cloneable
+/**
+ * Represents an index definition for a table which may be either unique or non-unique.
+ */
+public interface Index extends Cloneable, Serializable
{
- protected String name;
- protected ArrayList indexColumns = new ArrayList();
- protected boolean unique = false;
-
- public Index() {}
-
- /* (non-Javadoc)
- * @see java.lang.Object#clone()
+ /**
+ * Determines whether this index is unique or not.
+ *
+ * @return <code>true</code> if the index is an unique one
*/
- public Object clone() throws CloneNotSupportedException
- {
- Index result = new Index();
+ public boolean isUnique();
- result.name = name;
- result.indexColumns = (ArrayList)indexColumns.clone();
- result.unique = unique;
- return result;
- }
-
- public String getName()
- {
- return name;
- }
-
- public void setName(String name)
- {
- if ( name == null ) throw new IllegalArgumentException("Null index name");
- this.name = name;
- }
-
- public void addIndexColumn(IndexColumn indexColumn)
- {
- indexColumns.add(indexColumn);
- }
+ /**
+ * Returns the name of the index.
+ *
+ * @return The name
+ */
+ public String getName();
- public List getIndexColumns()
- {
- return indexColumns;
- }
+ /**
+ * Sets the name of the index.
+ *
+ * @param name The name
+ */
+ public void setName(String name);
- public boolean isUnique() {
- return unique;
- }
+ /**
+ * Adds a column that makes up this index.
+ * @param column
+ */
+ public void addColumn(IndexColumn column);
- public void setUnique(boolean unique) {
- this.unique = unique;
- }
+ /**
+ * Returns the indicated column making up this index.
+ *
+ * @param idx The index of the column
+ * @return The column
+ */
+ public IndexColumn getColumn(int idx);
+ /**
+ * Returns the columns that make up this index.
+ *
+ * @return The columns
+ */
+ public List getColumns();
}
Added: db/ddlutils/trunk/src/java/org/apache/ddlutils/model/ModelException.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/model/ModelException.java?rev=240460&view=auto
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/model/ModelException.java (added)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/model/ModelException.java Sat Aug 27 14:44:57 2005
@@ -0,0 +1,68 @@
+package org.apache.ddlutils.model;
+
+/*
+ * Copyright 1999-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.ddlutils.DdlUtilsException;
+
+/**
+ * Indicates a model error.
+ */
+public class ModelException extends DdlUtilsException
+{
+ /** Constant for serializing instances of this class */
+ private static final long serialVersionUID = -694578915559780711L;
+
+ /**
+ * Creates a new empty exception object.
+ */
+ public ModelException()
+ {
+ super();
+ }
+
+ /**
+ * Creates a new exception object.
+ *
+ * @param msg The exception message
+ */
+ public ModelException(String msg)
+ {
+ super(msg);
+ }
+
+ /**
+ * Creates a new exception object.
+ *
+ * @param baseEx The base exception
+ */
+ public ModelException(Throwable baseEx)
+ {
+ super(baseEx);
+ }
+
+ /**
+ * Creates a new exception object.
+ *
+ * @param msg The exception message
+ * @param baseEx The base exception
+ */
+ public ModelException(String msg, Throwable baseEx)
+ {
+ super(msg, baseEx);
+ }
+
+}
Added: db/ddlutils/trunk/src/java/org/apache/ddlutils/model/NonUniqueIndex.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/model/NonUniqueIndex.java?rev=240460&view=auto
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/model/NonUniqueIndex.java (added)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/model/NonUniqueIndex.java Sat Aug 27 14:44:57 2005
@@ -0,0 +1,95 @@
+package org.apache.ddlutils.model;
+
+/*
+ * Copyright 1999-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Represents an index definition for a table.
+ */
+public class NonUniqueIndex implements Index
+{
+ /** Unique ID for serialization purposes */
+ private static final long serialVersionUID = -3591499395114850301L;
+
+ /** The name of the index */
+ protected String _name;
+ /** The columns making up the index */
+ protected ArrayList _columns = new ArrayList();
+
+
+ /* (non-Javadoc)
+ * @see org.apache.ddlutils.model.Index#isUnique()
+ */
+ public boolean isUnique()
+ {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.ddlutils.model.Index#getName()
+ */
+ public String getName()
+ {
+ return _name;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.ddlutils.model.Index#setName(java.lang.String)
+ */
+ public void setName(String name)
+ {
+ _name = name;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.ddlutils.model.Index#addColumn(org.apache.ddlutils.model.IndexColumn)
+ */
+ public void addColumn(IndexColumn column)
+ {
+ _columns.add(column);
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.ddlutils.model.Index#getColumn(int)
+ */
+ public IndexColumn getColumn(int idx)
+ {
+ return (IndexColumn)_columns.get(idx);
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.ddlutils.model.Index#getColumns()
+ */
+ public List getColumns()
+ {
+ return _columns;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#clone()
+ */
+ public Object clone() throws CloneNotSupportedException
+ {
+ NonUniqueIndex result = new NonUniqueIndex();
+
+ result._name = _name;
+ result._columns = (ArrayList)_columns.clone();
+ return result;
+ }
+}