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);
}