Author: tomdz Date: Sat Oct 29 10:32:00 2005 New Revision: 329452 URL: http://svn.apache.org/viewcvs?rev=329452&view=rev Log: Integrated the model reader into the platform
Adapted the Ant tasks to use the platform rather than the model reader directly Added: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/DatabaseMetaDataWrapper.java db/ddlutils/trunk/src/java/org/apache/ddlutils/task/PlatformConfiguration.java Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.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/DatabaseCommand.java db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseTaskBase.java db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseToDdlTask.java db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.java URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.java?rev=329452&r1=329451&r2=329452&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.java Sat Oct 29 10:32:00 2005 @@ -27,6 +27,7 @@ import org.apache.commons.beanutils.DynaBean; import org.apache.ddlutils.model.Database; import org.apache.ddlutils.model.Table; +import org.apache.ddlutils.platform.JdbcModelReader; import org.apache.ddlutils.platform.SqlBuilder; /** @@ -53,13 +54,20 @@ public PlatformInfo getPlatformInfo(); /** - * Returns the sql builder for the this database. + * Returns the sql builder for the this platform. * * @return The sql builder */ public SqlBuilder getSqlBuilder(); /** + * Returns the model reader (which reads a database model from a live database) for this platform. + * + * @return The model reader + */ + public JdbcModelReader getModelReader(); + + /** * Returns the data source that this platform uses to access the database. * * @return The data source @@ -466,4 +474,46 @@ * @param connection The database connection */ public void delete(Database model, DynaBean dynaBean, Connection connection) throws DynaSqlException; + + /** + * Reads the database model from the live database as specified by the data source set for + * this platform. + * + * @return The database model + * @throws DynaSqlException If an error occurred during reading the model + */ + public Database readModelFromDatabase() throws DynaSqlException; + + /** + * Reads the database model from the live database as specified by the data source set for + * this platform. + * + * @param catalog The catalog to acess in the database; use <code>null</code> for the default value + * @param schema The schema to acess in the database; use <code>null</code> for the default value + * @param tableTypes The table types to process; use <code>null</code> or an empty list for the default ones + * @return The database model + * @throws DynaSqlException If an error occurred during reading the model + */ + public Database readModelFromDatabase(String catalog, String schema, String[] tableTypes) throws DynaSqlException; + + /** + * Reads the database model from the live database to which the given connection is pointing. + * + * @param connection The connection to the database + * @return The database model + * @throws DynaSqlException If an error occurred during reading the model + */ + public Database readModelFromDatabase(Connection connection) throws DynaSqlException; + + /** + * Reads the database model from the live database to which the given connection is pointing. + * + * @param connection The connection to the database + * @param catalog The catalog to acess in the database; use <code>null</code> for the default value + * @param schema The schema to acess in the database; use <code>null</code> for the default value + * @param tableTypes The table types to process; use <code>null</code> or an empty list for the default ones + * @return The database model + * @throws DynaSqlException If an error occurred during reading the model + */ + public Database readModelFromDatabase(Connection connection, String catalog, String schema, String[] tableTypes) throws DynaSqlException; } Added: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/DatabaseMetaDataWrapper.java URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/DatabaseMetaDataWrapper.java?rev=329452&view=auto ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/DatabaseMetaDataWrapper.java (added) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/DatabaseMetaDataWrapper.java Sat Oct 29 10:32:00 2005 @@ -0,0 +1,192 @@ +package org.apache.ddlutils.platform; + +/* + * Copyright 1999-2005 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.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * Wrapper class for database meta data that stores additional info. + * + * @author Thomas Dudziak + * @version $Revision: 329426 $ + */ +public class DatabaseMetaDataWrapper +{ + /** The database meta data. */ + private DatabaseMetaData _metaData; + /** The catalog to acess in the database. */ + private String _catalog; + /** The schema(s) to acess in the database. */ + private String _schemaPattern; + /** The table types to process. */ + private String[] _tableTypes; + + /** + * Returns the database meta data. + * + * @return The meta data + */ + public DatabaseMetaData getMetaData() + { + return _metaData; + } + + /** + * Sets the database meta data. + * + * @param metaData The meta data + */ + public void setMetaData(DatabaseMetaData metaData) + { + _metaData = metaData; + } + + /** + * Returns the catalog in the database to read. + * + * @return The catalog + */ + public String getCatalog() + { + return _catalog; + } + + /** + * Sets the catalog in the database to read. + * + * @param catalog The catalog + */ + public void setCatalog(String catalog) + { + _catalog = catalog; + } + + /** + * Returns the schema in the database to read. + * + * @return The schema + */ + public String getSchemaPattern() + { + return _schemaPattern; + } + + /** + * Sets the schema in the database to read. + * + * @param schema The schema + */ + public void setSchemaPattern(String schema) + { + _schemaPattern = schema; + } + + /** + * Returns the table types to recognize. + * + * @return The table types + */ + public String[] getTableTypes() + { + return _tableTypes; + } + + /** + * Sets the table types to recognize. + * + * @param types The table types + */ + public void setTableTypes(String[] types) + { + _tableTypes = types; + } + + /** + * Convenience method to return the table meta data using the configured catalog, + * schema pattern and table types. + * + * @param tableNamePattern The pattern identifying for which tables to return info + * @return The table meta data + * @throws SQLException If an error occurred retrieving the meta data + * @see DatabaseMetaData#getTables(java.lang.String, java.lang.String, java.lang.String, java.lang.String[]) + */ + public ResultSet getTables(String tableNamePattern) throws SQLException + { + return getMetaData().getTables(getCatalog(), getSchemaPattern(), tableNamePattern, getTableTypes()); + } + + /** + * Convenience method to return the column meta data using the configured catalog and + * schema pattern. + * + * @param tableNamePattern The pattern identifying for which tables to return info + * @param columnNamePattern The pattern identifying for which columns to return info + * @return The column meta data + * @throws SQLException If an error occurred retrieving the meta data + * @see DatabaseMetaData#getColumns(java.lang.String, java.lang.String, java.lang.String, java.lang.String) + */ + public ResultSet getColumns(String tableNamePattern, String columnNamePattern) throws SQLException + { + return getMetaData().getColumns(getCatalog(), getSchemaPattern(), tableNamePattern, columnNamePattern); + } + + /** + * Convenience method to return the primary key meta data using the configured catalog and + * schema pattern. + * + * @param tableNamePattern The pattern identifying for which tables to return info + * @return The primary key meta data + * @throws SQLException If an error occurred retrieving the meta data + * @see DatabaseMetaData#getPrimaryKeys(java.lang.String, java.lang.String, java.lang.String) + */ + public ResultSet getPrimaryKeys(String tableNamePattern) throws SQLException + { + return getMetaData().getPrimaryKeys(getCatalog(), getSchemaPattern(), tableNamePattern); + } + + /** + * Convenience method to return the foreign key meta data using the configured catalog and + * schema pattern. + * + * @param tableNamePattern The pattern identifying for which tables to return info + * @return The foreign key meta data + * @throws SQLException If an error occurred retrieving the meta data + * @see DatabaseMetaData#getImportedKeys(java.lang.String, java.lang.String, java.lang.String) + */ + public ResultSet getForeignKeys(String tableNamePattern) throws SQLException + { + return getMetaData().getImportedKeys(getCatalog(), getSchemaPattern(), tableNamePattern); + } + + /** + * Convenience method to return the index meta data using the configured catalog and + * schema pattern. + * + * @param tableNamePattern The pattern identifying for which tables to return info + * @param unique Whether to return only indices for unique values + * @param approximate Whether the result is allowed to reflect approximate or out of data values + * @return The index meta data + * @throws SQLException If an error occurred retrieving the meta data + * @see DatabaseMetaData#getIndexInfo(java.lang.String, java.lang.String, java.lang.String, boolean, boolean) + */ + public ResultSet getIndices(String tableNamePattern, boolean unique, boolean approximate) throws SQLException + { + return getMetaData().getImportedKeys(getCatalog(), getSchemaPattern(), tableNamePattern); + } +} Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/JdbcModelReader.java URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/JdbcModelReader.java?rev=329452&r1=329451&r2=329452&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 Sat Oct 29 10:32:00 2005 @@ -17,7 +17,6 @@ */ import java.sql.Connection; -import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; @@ -39,11 +38,11 @@ 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.NonUniqueIndex; import org.apache.ddlutils.model.Reference; import org.apache.ddlutils.model.Table; +import org.apache.ddlutils.model.UniqueIndex; /** * An utility class to create a Database model from a live database. @@ -55,85 +54,125 @@ public class JdbcModelReader { /** The Log to which logging calls will be made. */ - private final Log log = LogFactory.getLog(JdbcModelReader.class); + private final Log _log = LogFactory.getLog(JdbcModelReader.class); /** Contains default column sizes (minimum sizes that a JDBC-compliant db must support). */ - private HashMap defaultSizes = new HashMap(); - /** The database connection. */ - private Connection connection = null; - /** The database catalog to read. */ - private String catalog = "%"; - /** The database schema to read. */ - private String schema = "%"; - /** The table types to recognize. */ - private String[] tableTypes = { "TABLE" }; + private HashMap _defaultSizes = new HashMap(); + /** The default database catalog to read. */ + private String _defaultCatalog = "%"; + /** The sefault database schema(s) to read. */ + private String _defaultSchemaPattern = "%"; + /** The table types to recognize per default. */ + private String[] _defaultTableTypes = { "TABLE" }; /** The pattern to recognize when parsing a default value. */ - private Pattern defaultPattern = Pattern.compile("\\(\\'?(.*?)\\'?\\)"); + private Pattern _defaultPattern = Pattern.compile("\\(\\'?(.*?)\\'?\\)"); /** - * Creates a new model reader instance for the given connection. - * - * @param conn The database connection + * Creates a new model reader instance. + */ + public JdbcModelReader() + { + _defaultSizes.put(new Integer(Types.CHAR), "254"); + _defaultSizes.put(new Integer(Types.VARCHAR), "254"); + _defaultSizes.put(new Integer(Types.LONGVARCHAR), "254"); + _defaultSizes.put(new Integer(Types.BINARY), "254"); + _defaultSizes.put(new Integer(Types.VARBINARY), "254"); + _defaultSizes.put(new Integer(Types.LONGVARBINARY), "254"); + _defaultSizes.put(new Integer(Types.INTEGER), "32"); + _defaultSizes.put(new Integer(Types.BIGINT), "64"); + _defaultSizes.put(new Integer(Types.REAL), "7,0"); + _defaultSizes.put(new Integer(Types.FLOAT), "15,0"); + _defaultSizes.put(new Integer(Types.DOUBLE), "15,0"); + _defaultSizes.put(new Integer(Types.DECIMAL), "15,15"); + _defaultSizes.put(new Integer(Types.NUMERIC), "15,15"); + } + + /** + * Returns the catalog in the database to read per default. + * + * @return The default catalog */ - public JdbcModelReader(Connection conn) + public String getDefaultCatalog() { - connection = conn; - defaultSizes.put(new Integer(Types.CHAR), "254"); - defaultSizes.put(new Integer(Types.VARCHAR), "254"); - defaultSizes.put(new Integer(Types.LONGVARCHAR), "254"); - defaultSizes.put(new Integer(Types.BINARY), "254"); - defaultSizes.put(new Integer(Types.VARBINARY), "254"); - defaultSizes.put(new Integer(Types.LONGVARBINARY), "254"); - defaultSizes.put(new Integer(Types.INTEGER), "32"); - defaultSizes.put(new Integer(Types.BIGINT), "64"); - defaultSizes.put(new Integer(Types.REAL), "7,0"); - defaultSizes.put(new Integer(Types.FLOAT), "15,0"); - defaultSizes.put(new Integer(Types.DOUBLE), "15,0"); - defaultSizes.put(new Integer(Types.DECIMAL), "15,15"); - defaultSizes.put(new Integer(Types.NUMERIC), "15,15"); + return _defaultCatalog; } /** - * Sets the catalog in the database to read. + * Sets the catalog in the database to read per default. * * @param catalog The catalog */ - public void setCatalog(String catalog) + public void setDefaultCatalog(String catalog) { - this.catalog = catalog; + _defaultCatalog = catalog; } /** - * Sets the schema in the database to read. + * Returns the schema in the database to read per default. + * + * @return The default schema + */ + public String getDefaultSchemaPattern() + { + return _defaultSchemaPattern; + } + + /** + * Sets the schema in the database to read per default. * - * @param schema The schema + * @param schemaPattern The schema + */ + public void setDefaultSchemaPattern(String schemaPattern) + { + _defaultSchemaPattern = schemaPattern; + } + + /** + * Returns the table types to recognize per default. + * + * @return The default table types */ - public void setSchema(String schema) + public String[] getDefaultTableTypes() { - this.schema = schema; + return _defaultTableTypes; } /** - * Sets the table types to recognize. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", - * "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM". + * Sets the table types to recognize per default. Typical types are "TABLE", "VIEW", + * "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM". * * @param types The table types */ - public void setTableTypes(String[] types) + public void setDefaultTableTypes(String[] types) { - this.tableTypes = types; + _defaultTableTypes = types; } /** - * Creates the database model. + * Reads the database model from the given connection. * + * @param connection The connection * @return The database model */ - public Database getDatabase() throws SQLException + public Database getDatabase(Connection connection) throws SQLException + { + return getDatabase(connection, null, null, null); + } + + /** + * Reads the database model from the given connection. + * + * @param connection The connection + * @param catalog The catalog to acess in the database; use <code>null</code> for the default value + * @param schema The schema to acess in the database; use <code>null</code> for the default value + * @param tableTypes The table types to process; use <code>null</code> or an empty list for the default ones + * @return The database model + */ + public Database getDatabase(Connection connection, String catalog, String schema, String[] tableTypes) throws SQLException { Database db = new Database(); - for (Iterator it = getTables().iterator(); it.hasNext();) + for (Iterator it = getTables(connection, catalog, schema, tableTypes).iterator(); it.hasNext();) { db.addTable((Table)it.next()); } @@ -143,18 +182,27 @@ /** * Returns a list of [EMAIL PROTECTED] Table} instances for the tables in the database. * + * @param connection The connection + * @param catalog The catalog to acess in the database; use <code>null</code> for the default value + * @param schemaPattern The schema(s) to acess in the database; use <code>null</code> for the default value + * @param tableTypes The table types to process; use <code>null</code> or an empty list for the default ones * @return The list of tables */ - private List getTables() throws SQLException + private List getTables(Connection connection, String catalog, String schemaPattern, String[] tableTypes) throws SQLException { ResultSet tableData = null; try { - DatabaseMetaData metaData = connection.getMetaData(); + DatabaseMetaDataWrapper metaData = new DatabaseMetaDataWrapper(); - tableData = metaData.getTables(catalog, schema, "%", tableTypes); + metaData.setMetaData(connection.getMetaData()); + metaData.setCatalog(catalog == null ? getDefaultCatalog() : catalog); + metaData.setSchemaPattern(schemaPattern == null ? getDefaultSchemaPattern() : schemaPattern); + metaData.setTableTypes((tableTypes == null) || (tableTypes.length == 0) ? getDefaultTableTypes() : tableTypes); + tableData = metaData.getTables("%"); + Set availableColumns = determineAvailableColumns(tableData); List tables = new ArrayList(); @@ -210,13 +258,13 @@ * @param tableName The name of the table * @return The list of columns */ - private List getColumnsForTable(DatabaseMetaData metaData, String tableName) throws SQLException + private List getColumnsForTable(DatabaseMetaDataWrapper metaData, String tableName) throws SQLException { ResultSet columnData = null; try { - columnData = metaData.getColumns(catalog, schema, tableName, null); + columnData = metaData.getColumns(tableName, null); Set availableColumns = determineAvailableColumns(columnData); List columns = new ArrayList(); @@ -232,7 +280,7 @@ col.setScale(getValueAsInt(columnData, "DECIMAL_DIGITS", availableColumns, 0)); // we're setting the size after the precision and radix in case // the database prefers to return them in the size value - col.setSize(getValueAsString(columnData, "COLUMN_SIZE", availableColumns, (String)defaultSizes.get(new Integer(col.getTypeCode())))); + col.setSize(getValueAsString(columnData, "COLUMN_SIZE", availableColumns, (String)_defaultSizes.get(new Integer(col.getTypeCode())))); col.setRequired("NO".equalsIgnoreCase(getValueAsString(columnData, "IS_NULLABLE", availableColumns, "YES").trim())); if (primaryKeys.contains(col.getName())) { @@ -248,7 +296,7 @@ if (columnDefaultValue != null) { - Matcher m = defaultPattern.matcher(columnDefaultValue); + Matcher m = _defaultPattern.matcher(columnDefaultValue); if (m.matches()) { @@ -277,14 +325,14 @@ * @param tableName The name of the table from which to retrieve PK information * @return The list of the primary key column names */ - private List getPrimaryKeysForTable(DatabaseMetaData metaData, String tableName) throws SQLException + private List getPrimaryKeysForTable(DatabaseMetaDataWrapper metaData, String tableName) throws SQLException { List pks = new ArrayList(); ResultSet pkData = null; try { - pkData = metaData.getPrimaryKeys(catalog, schema, tableName); + pkData = metaData.getPrimaryKeys(tableName); while (pkData.next()) { pks.add(pkData.getString("COLUMN_NAME")); @@ -292,7 +340,7 @@ } catch (SQLException ex) { - log.warn("Could not determine the primary keys of table "+tableName, ex); + _log.warn("Could not determine the primary keys of table "+tableName, ex); } finally { @@ -311,14 +359,14 @@ * @param tableName The name of the table from which to retrieve FK information * @return The list of foreign keys */ - private List getForeignKeysForTable(DatabaseMetaData metaData, String tableName) throws SQLException + private List getForeignKeysForTable(DatabaseMetaDataWrapper metaData, String tableName) throws SQLException { List fks = new ArrayList(); ResultSet fkData = null; try { - fkData = metaData.getImportedKeys(catalog, schema, tableName); + fkData = metaData.getForeignKeys(tableName); Set availableColumns = determineAvailableColumns(fkData); String prevPkTable = null; @@ -354,7 +402,7 @@ } catch (SQLException ex) { - log.warn("Could not determine the foreignkeys of table "+tableName, ex); + _log.warn("Could not determine the foreignkeys of table "+tableName, ex); } finally { @@ -373,14 +421,14 @@ * @param tableName The name of the table * @return The list of indices */ - private List getIndicesForTable(DatabaseMetaData metaData, String tableName) throws SQLException + private List getIndicesForTable(DatabaseMetaDataWrapper metaData, String tableName) throws SQLException { ResultSet indexData = null; List indices = new ArrayList(); try { - indexData = metaData.getIndexInfo(catalog, schema, tableName, false, false); + indexData = metaData.getIndices(tableName, false, false); Set availableColumns = determineAvailableColumns(indexData); Map indicesByName = new LinkedMap(); @@ -417,7 +465,7 @@ } catch (SQLException ex) { - log.trace("Could determine the indices for the table "+tableName, ex); + _log.trace("Could determine the indices for the table "+tableName, ex); } finally { Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java?rev=329452&r1=329451&r2=329452&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 Sat Oct 29 10:32:00 2005 @@ -62,6 +62,8 @@ /** The sql builder for this platform. */ private SqlBuilder _builder; + /** The model reader for this platform. */ + private JdbcModelReader _modelReader = new JdbcModelReader(); /** * [EMAIL PROTECTED] @@ -84,6 +86,24 @@ /** * [EMAIL PROTECTED] */ + public JdbcModelReader getModelReader() + { + return _modelReader; + } + + /** + * Sets the model reader for this platform. + * + * @param modelReader The model reader + */ + protected void setModelReader(JdbcModelReader modelReader) + { + _modelReader = modelReader; + } + + /** + * [EMAIL PROTECTED] + */ public PlatformInfo getPlatformInfo() { return _builder.getPlatformInfo(); @@ -297,16 +317,7 @@ public void alterTables(Connection connection, Database desiredModel, boolean doDrops, boolean modifyColumns, boolean continueOnError) throws DynaSqlException { String sql = null; - Database currentModel = null; - - try - { - currentModel = new JdbcModelReader(connection).getDatabase(); - } - catch (SQLException ex) - { - throw new DynaSqlException("Error while reading the model from the database", ex); - } + Database currentModel = readModelFromDatabase(connection); try { @@ -1036,6 +1047,54 @@ finally { closeStatement(statement); + } + } + + /** + * [EMAIL PROTECTED] + */ + public Database readModelFromDatabase() throws DynaSqlException + { + return readModelFromDatabase(borrowConnection()); + } + + /** + * [EMAIL PROTECTED] + */ + public Database readModelFromDatabase(Connection connection) throws DynaSqlException + { + try + { + return getModelReader().getDatabase(connection); + } + catch (SQLException ex) + { + throw new DynaSqlException(ex); + } + } + + /** + * [EMAIL PROTECTED] + */ + public Database readModelFromDatabase(String catalog, String schema, String[] tableTypes) throws DynaSqlException + { + return readModelFromDatabase(borrowConnection(), catalog, schema, tableTypes); + } + + /** + * [EMAIL PROTECTED] + */ + public Database readModelFromDatabase(Connection connection, String catalog, String schema, String[] tableTypes) throws DynaSqlException + { + try + { + JdbcModelReader reader = getModelReader(); + + return reader.getDatabase(connection, catalog, schema, tableTypes); + } + catch (SQLException ex) + { + throw new DynaSqlException(ex); } } Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseCommand.java URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseCommand.java?rev=329452&r1=329451&r2=329452&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseCommand.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseCommand.java Sat Oct 29 10:32:00 2005 @@ -18,8 +18,6 @@ import org.apache.commons.dbcp.BasicDataSource; import org.apache.ddlutils.Platform; -import org.apache.ddlutils.PlatformFactory; -import org.apache.ddlutils.PlatformUtils; import org.apache.tools.ant.BuildException; /** @@ -30,14 +28,10 @@ */ public abstract class DatabaseCommand implements Command { - /** The type of the database. */ - private String _databaseType; - /** The data source to use for accessing the database. */ - private BasicDataSource _dataSource; + /** The platform configuration. */ + private PlatformConfiguration _platformConf = new PlatformConfiguration(); /** Whether to stop execution upon an error. */ private boolean _failOnError = true; - /** Whether to use delimited SQL identifiers. */ - private boolean _useDelimitedSqlIdentifiers = true; /** * Returns the database type. @@ -46,7 +40,7 @@ */ protected String getDatabaseType() { - return _databaseType; + return _platformConf.getDatabaseType(); } /** @@ -56,19 +50,17 @@ */ protected BasicDataSource getDataSource() { - return _dataSource; + return _platformConf.getDataSource(); } /** - * Sets the database info. + * Sets the platform configuration. * - * @param dataSource The data source pointing to the database - * @param type The database type + * @param platformConf The platform configuration */ - protected void setDatabaseInfo(BasicDataSource dataSource, String type) + protected void setPlatformConfiguration(PlatformConfiguration platformConf) { - _dataSource = dataSource; - _databaseType = type; + _platformConf = platformConf; } /** @@ -93,65 +85,12 @@ } /** - * Determines whether delimited SQL identifiers shall be used (the default). - * - * @return <code>true</code> if delimited SQL identifiers shall be used - */ - public boolean isUseDelimitedSqlIdentifiers() - { - return _useDelimitedSqlIdentifiers; - } - - /** - * Specifies whether delimited SQL identifiers shall be used. - * - * @param useDelimitedSqlIdentifiers <code>true</code> if delimited SQL identifiers shall be used - */ - public void setUseDelimitedSqlIdentifiers(boolean useDelimitedSqlIdentifiers) - { - _useDelimitedSqlIdentifiers = useDelimitedSqlIdentifiers; - } - - /** * Creates the platform for the configured database. * * @return The platform */ protected Platform getPlatform() throws BuildException { - Platform platform = null; - - if (_databaseType == null) - { - if (_dataSource == null) - { - throw new BuildException("No database specified."); - } - if (_databaseType == null) - { - _databaseType = new PlatformUtils().determineDatabaseType(_dataSource.getDriverClassName(), - _dataSource.getUrl()); - } - if (_databaseType == null) - { - _databaseType = new PlatformUtils().determineDatabaseType(_dataSource); - } - } - try - { - platform = PlatformFactory.createNewPlatformInstance(_databaseType); - } - catch (Exception ex) - { - throw new BuildException("Database type "+_databaseType+" is not supported.", ex); - } - if (platform == null) - { - throw new BuildException("Database type "+_databaseType+" is not supported."); - } - platform.setDataSource(_dataSource); - platform.getPlatformInfo().setUseDelimitedIdentifiers(isUseDelimitedSqlIdentifiers()); - - return platform; + return _platformConf.getPlatform(); } } Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseTaskBase.java URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseTaskBase.java?rev=329452&r1=329451&r2=329452&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 Sat Oct 29 10:32:00 2005 @@ -20,6 +20,7 @@ import java.util.Iterator; import org.apache.commons.dbcp.BasicDataSource; +import org.apache.ddlutils.Platform; import org.apache.ddlutils.model.Database; import org.apache.tools.ant.Task; @@ -31,10 +32,8 @@ */ public abstract class DatabaseTaskBase extends Task { - /** The type of the database. */ - private String _databaseType; - /** The data source to use for accessing the database. */ - private BasicDataSource _dataSource; + /** The platform configuration. */ + private PlatformConfiguration _platformConf = new PlatformConfiguration(); /** The sub tasks to execute. */ private ArrayList _commands = new ArrayList(); @@ -45,7 +44,7 @@ */ public String getDatabaseType() { - return _databaseType; + return _platformConf.getDatabaseType(); } /** @@ -55,7 +54,7 @@ */ public void setDatabaseType(String type) { - _databaseType = type; + _platformConf.setDatabaseType(type); } /** @@ -65,7 +64,7 @@ */ public BasicDataSource getDataSource() { - return _dataSource; + return _platformConf.getDataSource(); } /** @@ -75,7 +74,27 @@ */ public void addConfiguredDatabase(BasicDataSource dataSource) { - _dataSource = dataSource; + _platformConf.setDataSource(dataSource); + } + + /** + * Determines whether delimited SQL identifiers shall be used (the default). + * + * @return <code>true</code> if delimited SQL identifiers shall be used + */ + public boolean isUseDelimitedSqlIdentifiers() + { + return _platformConf.isUseDelimitedSqlIdentifiers(); + } + + /** + * Specifies whether delimited SQL identifiers shall be used. + * + * @param useDelimitedSqlIdentifiers <code>true</code> if delimited SQL identifiers shall be used + */ + public void setUseDelimitedSqlIdentifiers(boolean useDelimitedSqlIdentifiers) + { + _platformConf.setUseDelimitedSqlIdentifiers(useDelimitedSqlIdentifiers); } /** @@ -99,6 +118,16 @@ } /** + * Creates the platform for the configured database. + * + * @return The platform + */ + protected Platform getPlatform() + { + return _platformConf.getPlatform(); + } + + /** * Executes the commands. * * @param model The database model @@ -111,7 +140,7 @@ if (cmd instanceof DatabaseCommand) { - ((DatabaseCommand)cmd).setDatabaseInfo(getDataSource(), getDatabaseType()); + ((DatabaseCommand)cmd).setPlatformConfiguration(_platformConf); } cmd.execute(this, model); } Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseToDdlTask.java URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseToDdlTask.java?rev=329452&r1=329451&r2=329452&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseToDdlTask.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseToDdlTask.java Sat Oct 29 10:32:00 2005 @@ -20,7 +20,6 @@ import java.util.StringTokenizer; import org.apache.ddlutils.model.Database; -import org.apache.ddlutils.platform.JdbcModelReader; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; @@ -151,24 +150,7 @@ try { - JdbcModelReader reader = new JdbcModelReader(getDataSource().getConnection()); - - if ((_catalog != null) && (_catalog.length() > 0)) - { - reader.setCatalog(_catalog); - } - if ((_schema != null) && (_schema.length() > 0)) - { - reader.setSchema(_schema); - } - - String[] tableTypes = getTableTypes(); - - if (tableTypes.length > 0) - { - reader.setTableTypes(tableTypes); - } - return reader.getDatabase(); + return getPlatform().readModelFromDatabase(_catalog, _schema, getTableTypes()); } catch (Exception ex) { Added: db/ddlutils/trunk/src/java/org/apache/ddlutils/task/PlatformConfiguration.java URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/PlatformConfiguration.java?rev=329452&view=auto ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/task/PlatformConfiguration.java (added) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/task/PlatformConfiguration.java Sat Oct 29 10:32:00 2005 @@ -0,0 +1,142 @@ +package org.apache.ddlutils.task; + +/* + * Copyright 1999-2005 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.dbcp.BasicDataSource; +import org.apache.ddlutils.Platform; +import org.apache.ddlutils.PlatformFactory; +import org.apache.ddlutils.PlatformUtils; +import org.apache.tools.ant.BuildException; + +/** + * Encloses the platform configuration for the Ant tasks. + * + * @author Thomas Dudziak + * @version $Revision: 329426 $ + */ +public class PlatformConfiguration +{ + /** The type of the database. */ + private String _databaseType; + /** The data source to use for accessing the database. */ + private BasicDataSource _dataSource; + /** Whether to use delimited SQL identifiers. */ + private boolean _useDelimitedSqlIdentifiers = true; + + /** + * Returns the database type. + * + * @return The database type + */ + public String getDatabaseType() + { + return _databaseType; + } + + /** + * Sets the database type. + * + * @param type The database type + */ + public void setDatabaseType(String type) + { + _databaseType = type; + } + + /** + * Returns the data source to use for accessing the database. + * + * @return The data source + */ + public BasicDataSource getDataSource() + { + return _dataSource; + } + + /** + * Sets the data source to use for accessing the database. + * + * @param dataSource The data source pointing to the database + */ + public void setDataSource(BasicDataSource dataSource) + { + _dataSource = dataSource; + } + + /** + * Determines whether delimited SQL identifiers shall be used (the default). + * + * @return <code>true</code> if delimited SQL identifiers shall be used + */ + public boolean isUseDelimitedSqlIdentifiers() + { + return _useDelimitedSqlIdentifiers; + } + + /** + * Specifies whether delimited SQL identifiers shall be used. + * + * @param useDelimitedSqlIdentifiers <code>true</code> if delimited SQL identifiers shall be used + */ + public void setUseDelimitedSqlIdentifiers(boolean useDelimitedSqlIdentifiers) + { + _useDelimitedSqlIdentifiers = useDelimitedSqlIdentifiers; + } + + /** + * Creates the platform for the configured database. + * + * @return The platform + */ + public Platform getPlatform() throws BuildException + { + Platform platform = null; + + if (_databaseType == null) + { + if (_dataSource == null) + { + throw new BuildException("No database specified."); + } + if (_databaseType == null) + { + _databaseType = new PlatformUtils().determineDatabaseType(_dataSource.getDriverClassName(), + _dataSource.getUrl()); + } + if (_databaseType == null) + { + _databaseType = new PlatformUtils().determineDatabaseType(_dataSource); + } + } + try + { + platform = PlatformFactory.createNewPlatformInstance(_databaseType); + } + catch (Exception ex) + { + throw new BuildException("Database type "+_databaseType+" is not supported.", ex); + } + if (platform == null) + { + throw new BuildException("Database type "+_databaseType+" is not supported."); + } + platform.setDataSource(_dataSource); + platform.getPlatformInfo().setUseDelimitedIdentifiers(isUseDelimitedSqlIdentifiers()); + + return platform; + } +} Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java?rev=329452&r1=329451&r2=329452&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java Sat Oct 29 10:32:00 2005 @@ -23,7 +23,6 @@ import org.apache.ddlutils.Platform; import org.apache.ddlutils.model.Database; -import org.apache.ddlutils.platform.JdbcModelReader; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; @@ -121,9 +120,8 @@ { throw new BuildException("No database specified."); } - connection = getDataSource().getConnection(); - Database currentModel = new JdbcModelReader(connection).getDatabase(); + Database currentModel = platform.readModelFromDatabase(); platform.getSqlBuilder().alterDatabase(currentModel, model, _doDrops, true); }