tomdz 2004/07/19 15:14:00 Modified: sql/src/java/org/apache/commons/sql/model Column.java IndexColumn.java Database.java Reference.java Table.java ForeignKey.java UniqueColumn.java Unique.java Index.java Added: sql/src/test-input jdbc-type-mappings.csv Log: Added ability to merge two database models Revision Changes Path 1.13 +22 -2 jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/Column.java Index: Column.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/Column.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- Column.java 18 Jul 2004 21:55:58 -0000 1.12 +++ Column.java 19 Jul 2004 22:14:00 -0000 1.13 @@ -15,8 +15,7 @@ */ package org.apache.commons.sql.model; - -public class Column +public class Column implements Cloneable { private String name; private String javaName; @@ -35,6 +34,27 @@ { } + /* (non-Javadoc) + * @see java.lang.Object#clone() + */ + public Object clone() throws CloneNotSupportedException + { + Column result = new Column(); + + result.name = name; + result.javaName = javaName; + result.primaryKey = primaryKey; + result.required = required; + result.autoIncrement = autoIncrement; + result.typeCode = typeCode; + result.type = type; + result.size = size; + result.defaultValue = defaultValue; + result.scale = scale; + result.precisionRadix = precisionRadix; + result.ordinalPosition = ordinalPosition; + return result; + } public Column(String name, String javaName, int typeCode, String size, boolean required, boolean primaryKey, boolean autoIncrement, String defaultValue) 1.4 +26 -4 jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/IndexColumn.java Index: IndexColumn.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/IndexColumn.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- IndexColumn.java 28 Feb 2004 03:35:48 -0000 1.3 +++ IndexColumn.java 19 Jul 2004 22:14:00 -0000 1.4 @@ -15,13 +15,25 @@ */ package org.apache.commons.sql.model; -public class IndexColumn +public class IndexColumn implements Cloneable { - private String name; - private String size; + protected String name; + protected String size; public IndexColumn() {} - + + /* (non-Javadoc) + * @see java.lang.Object#clone() + */ + public Object clone() throws CloneNotSupportedException + { + IndexColumn result = new IndexColumn(); + + result.name = name; + result.size = size; + return result; + } + public String getName() { return name; @@ -30,5 +42,15 @@ public void setName(String name) { this.name = name; + } + + public String getSize() + { + return size; + } + + public void setSize(String size) + { + this.size = size; } } 1.8 +28 -0 jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/Database.java Index: Database.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/Database.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- Database.java 28 Feb 2004 03:35:48 -0000 1.7 +++ Database.java 19 Jul 2004 22:14:00 -0000 1.8 @@ -41,6 +41,34 @@ { } + /** + * Adds all tables from the other database to this database. + * Note that the other database is not changed. + * + * @param otherDb The other database model + * @exception IllegalArgumentException If duplicated tables were found + */ + public void mergeWith(Database otherDb) throws IllegalArgumentException + { + for (Iterator it = otherDb.tables.iterator(); it.hasNext();) + { + Table table = (Table)it.next(); + + if (findTable(table.getName()) != null) + { + throw new IllegalArgumentException("Table "+table.getName()+" already defined in this database"); + } + try + { + addTable((Table)table.clone()); + } + catch (CloneNotSupportedException ex) + { + // won't happen + } + } + } + public String getName() { return name; 1.5 +15 -2 jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/Reference.java Index: Reference.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/Reference.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- Reference.java 28 Feb 2004 03:35:48 -0000 1.4 +++ Reference.java 19 Jul 2004 22:14:00 -0000 1.5 @@ -15,13 +15,26 @@ */ package org.apache.commons.sql.model; -public class Reference + +public class Reference implements Cloneable { private String local; private String foreign; public Reference() {} - + + /* (non-Javadoc) + * @see java.lang.Object#clone() + */ + public Object clone() throws CloneNotSupportedException + { + Reference result = new Reference(); + + result.local = local; + result.foreign = foreign; + return result; + } + public String getLocal() { return local; 1.14 +23 -4 jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/Table.java Index: Table.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/Table.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- Table.java 18 Jul 2004 21:55:58 -0000 1.13 +++ Table.java 19 Jul 2004 22:14:00 -0000 1.14 @@ -29,7 +29,7 @@ import org.apache.commons.collections.iterators.FilterIterator; import org.apache.commons.collections.Predicate; -public class Table +public class Table implements Cloneable { private static final Predicate UNIQUE_PREDICATE = new Predicate() { public boolean evaluate(Object input) { @@ -49,14 +49,33 @@ private String type = null; - private List columns = new ArrayList(); + private ArrayList columns = new ArrayList(); - private List foreignKeys = new ArrayList(); + private ArrayList foreignKeys = new ArrayList(); - private List indexes = new ArrayList(); + private ArrayList indexes = new ArrayList(); public Table() { + } + + /* (non-Javadoc) + * @see java.lang.Object#clone() + */ + public Object clone() throws CloneNotSupportedException + { + Table result = new Table(); + + result.catalog = catalog; + result.name = name; + result.javaName = javaName; + result.schema = schema; + result.remarks = remarks; + result.type = type; + result.columns = (ArrayList)columns.clone(); + result.foreignKeys = (ArrayList)foreignKeys.clone(); + result.indexes = (ArrayList)indexes.clone(); + return result; } public String getCatalog() 1.6 +14 -2 jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/ForeignKey.java Index: ForeignKey.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/ForeignKey.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ForeignKey.java 28 Feb 2004 03:35:48 -0000 1.5 +++ ForeignKey.java 19 Jul 2004 22:14:00 -0000 1.6 @@ -18,14 +18,26 @@ import java.util.ArrayList; import java.util.List; -public class ForeignKey +public class ForeignKey implements Cloneable { private String foreignTable; - private List references = new ArrayList(); + private ArrayList references = new ArrayList(); public ForeignKey() {} + /* (non-Javadoc) + * @see java.lang.Object#clone() + */ + public Object clone() throws CloneNotSupportedException + { + ForeignKey result = new ForeignKey(); + + result.foreignTable = foreignTable; + result.references = (ArrayList)references.clone(); + return result; + } + public String getForeignTable() { return foreignTable; 1.3 +27 -16 jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/UniqueColumn.java Index: UniqueColumn.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/UniqueColumn.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- UniqueColumn.java 28 Feb 2004 03:35:48 -0000 1.2 +++ UniqueColumn.java 19 Jul 2004 22:14:00 -0000 1.3 @@ -12,19 +12,30 @@ * 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. - */
-package org.apache.commons.sql.model; - -/** - * Provides compatibility with Torque-style xml with separate <index> and - * <unique> tags, but adds no functionality. All indexes are treated the - * same by the Table. - * - * @author <a href="mailto:[EMAIL PROTECTED]">John Marshall</a> - * @version $Revision$ - */ -public class UniqueColumn extends IndexColumn -{ - public UniqueColumn() {} - -} + */ +package org.apache.commons.sql.model; + +/** + * Provides compatibility with Torque-style xml with separate <index> and + * <unique> tags, but adds no functionality. All indexes are treated the + * same by the Table. + * + * @author <a href="mailto:[EMAIL PROTECTED]">John Marshall</a> + * @version $Revision$ + */ +public class UniqueColumn extends IndexColumn +{ + public UniqueColumn() {} + + /* (non-Javadoc) + * @see java.lang.Object#clone() + */ + public Object clone() throws CloneNotSupportedException + { + UniqueColumn result = new UniqueColumn(); + + result.name = name; + result.size = size; + return result; + } +} 1.4 +16 -2 jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/Unique.java Index: Unique.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/Unique.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Unique.java 2 Mar 2004 13:18:31 -0000 1.3 +++ Unique.java 19 Jul 2004 22:14:00 -0000 1.4 @@ -15,6 +15,7 @@ */ package org.apache.commons.sql.model; +import java.util.ArrayList; import java.util.List; /** @@ -30,7 +31,20 @@ public Unique() { setUnique( true ); } - + + /* (non-Javadoc) + * @see java.lang.Object#clone() + */ + public Object clone() throws CloneNotSupportedException + { + Unique result = new Unique(); + + result.name = name; + result.indexColumns = (ArrayList)indexColumns.clone(); + result.unique = unique; + return result; + } + public void setUnique(boolean unique) { if ( unique == false ) { throw new IllegalArgumentException( "Unique index cannot be made non-unique" ); 1.6 +18 -7 jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/Index.java Index: Index.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/Index.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- Index.java 28 Feb 2004 03:35:48 -0000 1.5 +++ Index.java 19 Jul 2004 22:14:00 -0000 1.6 @@ -18,16 +18,27 @@ import java.util.ArrayList; import java.util.List; -public class Index +public class Index implements Cloneable { - private String name; - - private List indexColumns = new ArrayList(); - - private boolean unique = false; + protected String name; + protected ArrayList indexColumns = new ArrayList(); + protected boolean unique = false; public Index() {} - + + /* (non-Javadoc) + * @see java.lang.Object#clone() + */ + public Object clone() throws CloneNotSupportedException + { + Index result = new Index(); + + result.name = name; + result.indexColumns = (ArrayList)indexColumns.clone(); + result.unique = unique; + return result; + } + public String getName() { return name; 1.1 jakarta-commons-sandbox/sql/src/test-input/jdbc-type-mappings.csv Index: jdbc-type-mappings.csv =================================================================== Jdbc 3 Type;Axion;DB2;HsqlDb;Mckoi;MSSql;MySql;Oracle;Postgresql;SapDB;Sybase BIGINT;BIGINT;BIGINT;BIGINT;BIGINT;BIGINT;BIGINT;NUMBER(20,0);BIGINT;FIXED(38,0);BIGINT BINARY;BINARY;CHAR FOR BIT DATA;BINARY;BINARY;BINARY;BLOB;BLOB;BYTEA;LONG BYTE;BINARY BIT;BIT;DECIMAL(1,0);BIT;TINYINT;BIT;BIT;NUMBER(1,0);BIT;FIXED(1,0);BIT BLOB;;BLOB;-;BLOB;IMAGE;LONGBLOB;BLOB;BYTEA;LONG BYTE;IMAGE BOOLEAN;;DECIMAL(1,0);BIT;BOOLEAN;BIT;BIT;NUMBER(1,0);BOOLEAN;BOOLEAN;BIT CHAR;VARCHAR;CHAR;CHAR;CHAR;NCHAR;CHAR;CHAR;CHAR;CHAR(n) UNICODE;UNICHAR CLOB;;CLOB;-;CLOB;NTEXT;LONGTEXT;CLOB;TEXT;LONG UNICODE;TEXT DATE;DATE;DATE;DATE;DATE;DATETIME;DATE;DATE;DATE;DATE;DATE DECIMAL;INTEGER;DECIMAL;DECIMAL;DECIMAL;DECIMAL;DECIMAL;NUMBER;DECIMAL;DECIMAL;DECIMAL DOUBLE;DOUBLE;DOUBLE;DOUBLE;DOUBLE;FLOAT;DOUBLE;FLOAT;DOUBLE PRECISION;DOUBLE PRECISION;DOUBLE PRECISION FLOAT;FLOAT;FLOAT;FLOAT;FLOAT;FLOAT;DOUBLE;FLOAT;DOUBLE PRECISION;FLOAT;DOUBLE PRECISION INTEGER;INTEGER;INTEGER;INTEGER;INTEGER;INT;INTEGER;NUMBER(38);INTEGER;INTEGER;INTEGER LONGVARBINARY;LONGVARBINARY;LONG VARCHAR FOR BIT DATA;LONGVARBINARY;LONGVARBINARY;IMAGE;MEDIUMBLOB;BLOB;BYTEA;LONG BYTE;IMAGE LONGVARCHAR;VARCHAR;LONG VARCHAR;VARCHAR;LONGVARCHAR;TEXT;MEDIUMTEXT;CLOB;BYTEA;LONG UNICODE;TEXT NUMERIC;NUMERIC;NUMERIC;NUMERIC;NUMERIC;NUMERIC;NUMERIC;NUMBER;NUMERIC;NUMERIC;NUMERIC REAL;REAL;REAL;REAL;FLOAT;REAL;FLOAT;FLOAT;REAL;REAL;REAL SMALLINT;SMALLINT;SMALLINT;SMALLINT;SMALLINT;SMALLINT;SMALLINT;NUMBER(5,0);SMALLINT;SMALLINT;SMALLINT TIME;TIME;TIME;TIME;TIME;DATETIME;TIME;DATE;TIME;TIME;TIME TIMESTAMP;TIMESTAMP;TIMESTAMP;TIMESTAMP;TIMESTAMP;DATETIME;TIMESTAMP;DATE;TIMESTAMP;TIMESTAMP;DATETIME TINYINT;TINYINT;SMALLINT;TINYINT;TINYINT;TINYINT;TINYINT;NUMBER(3,0);SMALLINT;SMALLINT;TINYINT VARBINARY;BINARY;VARCHAR FOR BIT DATA;VARBINARY;VARBINARY;VARBINARY;BLOB;BLOB;BYTEA;LONG BYTE;VARBINARY VARCHAR;VARCHAR;VARCHAR;VARCHAR;VARCHAR;NVARCHAR;VARCHAR;VARCHAR2(n);VARCHAR;VARCHAR(n) UNICODE;UNIVARCHAR --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]