Author: tomdz
Date: Tue Sep 20 06:45:34 2005
New Revision: 290453
URL: http://svn.apache.org/viewcvs?rev=290453&view=rev
Log:
Added query hints that allow to specify the tables that are queried via the
Platform#query/#fetch methods
Modified:
db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/DynaSqlIterator.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaBean.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaClass.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaProperty.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.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=290453&r1=290452&r2=290453&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/Platform.java Tue Sep 20
06:45:34 2005
@@ -27,6 +27,7 @@
import org.apache.commons.beanutils.DynaBean;
import org.apache.ddlutils.builder.SqlBuilder;
import org.apache.ddlutils.model.Database;
+import org.apache.ddlutils.model.Table;
/**
* A platform encapsulates the database-related functionality such as
performing queries
@@ -218,6 +219,15 @@
public void dropTables(Connection connection, Database model, boolean
continueOnError) throws DynaSqlException;
/**
+ * Performs the given SQL query returning an iterator over the results.
+ *
+ * @param model The database model to use
+ * @param sql The sql query to perform
+ * @return An iterator for the dyna beans resulting from the query
+ */
+ public Iterator query(Database model, String sql) throws DynaSqlException;
+
+ /**
* Performs the given parameterized SQL query returning an iterator over
the results.
*
* @param model The database model to use
@@ -230,11 +240,23 @@
/**
* Performs the given SQL query returning an iterator over the results.
*
- * @param model The database model to use
- * @param sql The sql query to perform
+ * @param model The database model to use
+ * @param sql The sql query to perform
+ * @param queryHints The tables that are queried (optional)
* @return An iterator for the dyna beans resulting from the query
*/
- public Iterator query(Database model, String sql) throws DynaSqlException;
+ public Iterator query(Database model, String sql, Table[] queryHints)
throws DynaSqlException;
+
+ /**
+ * Performs the given parameterized SQL query returning an iterator over
the results.
+ *
+ * @param model The database model to use
+ * @param sql The sql query to perform
+ * @param parameters The query parameter values
+ * @param queryHints The tables that are queried (optional)
+ * @return An iterator for the dyna beans resulting from the query
+ */
+ public Iterator query(Database model, String sql, Collection parameters,
Table[] queryHints) throws DynaSqlException;
/**
* Queries for a list of dyna beans representing rows of the given query.
@@ -261,6 +283,30 @@
/**
* Queries for a list of dyna beans representing rows of the given query.
* In contrast to the [EMAIL PROTECTED] #query(String)} method all beans
will be
+ * materialized and the connection will be closed before returning the
beans.
+ *
+ * @param model The database model to use
+ * @param sql The sql query
+ * @param queryHints The tables that are queried (optional)
+ * @return The dyna beans resulting from the query
+ */
+ public List fetch(Database model, String sql, Table[] queryHints) throws
DynaSqlException;
+
+ /**
+ * Queries for a list of dyna beans representing rows of the given query.
+ * In contrast to the [EMAIL PROTECTED] #query(String, Collection)} method
all beans will be
+ * materialized and the connection will be closed before returning the
beans.
+ *
+ * @param sql The parameterized query
+ * @param parameters The parameter values
+ * @param queryHints The tables that are queried (optional)
+ * @return The dyna beans resulting from the query
+ */
+ public List fetch(Database model, String sql, Collection parameters,
Table[] queryHints) throws DynaSqlException;
+
+ /**
+ * Queries for a list of dyna beans representing rows of the given query.
+ * In contrast to the [EMAIL PROTECTED] #query(String)} method all beans
will be
* materialized and the connection will be closed before returning the
beans.
* Also, the two int parameters specify which rows of the result set to
use.
* If there are more rows than desired, they will be ignored (and not read
@@ -290,6 +336,41 @@
* @return The dyna beans resulting from the query
*/
public List fetch(Database model, String sql, Collection parameters, int
start, int end) throws DynaSqlException;
+
+ /**
+ * Queries for a list of dyna beans representing rows of the given query.
+ * In contrast to the [EMAIL PROTECTED] #query(String)} method all beans
will be
+ * materialized and the connection will be closed before returning the
beans.
+ * Also, the two int parameters specify which rows of the result set to
use.
+ * If there are more rows than desired, they will be ignored (and not read
+ * from the database).
+ *
+ * @param model The database model to use
+ * @param sql The sql query
+ * @param queryHints The tables that are queried (optional)
+ * @param start Row number to start from (0 for first row)
+ * @param end Row number to stop at (inclusively; -1 for last row)
+ * @return The dyna beans resulting from the query
+ */
+ public List fetch(Database model, String sql, Table[] queryHints, int
start, int end) throws DynaSqlException;
+
+ /**
+ * Queries for a list of dyna beans representing rows of the given query.
+ * In contrast to the [EMAIL PROTECTED] #query(String, Collection)} method
all beans will be
+ * materialized and the connection will be closed before returning the
beans.
+ * Also, the two int parameters specify which rows of the result set to
use.
+ * If there are more rows than desired, they will be ignored (and not read
+ * from the database).
+ *
+ * @param model The database model to use
+ * @param sql The parameterized sql query
+ * @param parameters The parameter values
+ * @param queryHints The tables that are queried (optional)
+ * @param start Row number to start from (0 for first row)
+ * @param end Row number to stop at (inclusively; -1 for last row)
+ * @return The dyna beans resulting from the query
+ */
+ public List fetch(Database model, String sql, Collection parameters,
Table[] queryHints, int start, int end) throws DynaSqlException;
/**
* Stores the given bean in the database, inserting it if there is no
primary key
Modified:
db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/DynaSqlIterator.java
URL:
http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/DynaSqlIterator.java?rev=290453&r1=290452&r2=290453&view=diff
==============================================================================
---
db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/DynaSqlIterator.java
(original)
+++
db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/DynaSqlIterator.java
Tue Sep 20 06:45:34 2005
@@ -5,6 +5,7 @@
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.NoSuchElementException;
@@ -48,10 +49,12 @@
* @param platformInfo The platform info
* @param model The database model
* @param resultSet The result set
+ * @param queryHints The tables that were queried in the query
that produced the given result set
+ * (optional)
* @param cleanUpAfterFinish Whether to close the statement and connection
after finishing
* the iteration, upon on exception, or when
this iterator is garbage collected
*/
- public DynaSqlIterator(PlatformInfo platformInfo, Database model,
ResultSet resultSet, boolean cleanUpAfterFinish) throws DynaSqlException
+ public DynaSqlIterator(PlatformInfo platformInfo, Database model,
ResultSet resultSet, Table[] queryHints, boolean cleanUpAfterFinish) throws
DynaSqlException
{
if (resultSet != null)
{
@@ -60,7 +63,7 @@
try
{
- initFromMetaData(platformInfo, model, resultSet);
+ initFromMetaData(platformInfo, model, resultSet, queryHints);
}
catch (SQLException ex)
{
@@ -80,33 +83,44 @@
* @param platformInfo The platform info
* @param model The database model
* @param resultSet The result set
+ * @param queryHints The tables that were queried in the query that
produced the given result set
*/
- private void initFromMetaData(PlatformInfo platformInfo, Database model,
ResultSet resultSet) throws SQLException
+ private void initFromMetaData(PlatformInfo platformInfo, Database model,
ResultSet resultSet, Table[] queryHints) throws SQLException
{
- ResultSetMetaData metaData = resultSet.getMetaData();
- String tableName = null;
- boolean singleKnownTable = true;
- boolean caseSensitive = platformInfo.isCaseSensitive();
+ ResultSetMetaData metaData = resultSet.getMetaData();
+ String tableName = null;
+ boolean singleKnownTable = true;
+ boolean caseSensitive =
platformInfo.isUseDelimitedIdentifiers();
+ Map preparedQueryHints = prepareQueryHints(queryHints,
caseSensitive);
for (int idx = 1; idx <= metaData.getColumnCount(); idx++)
{
+ String columnName = metaData.getColumnName(idx);
String tableOfColumn = metaData.getTableName(idx);
+ Table table = null;
if ((tableOfColumn != null) && (tableOfColumn.length() > 0))
{
- if (tableName == null)
- {
- tableName = tableOfColumn;
- }
- else if (!tableName.equals(tableOfColumn))
- {
- singleKnownTable = false;
- }
+ // the JDBC driver gave us enough meta data info
+ table = model.findTable(tableOfColumn, caseSensitive);
+ }
+ else
+ {
+ // not enough info in the meta data of the result set, lets
try the
+ // user-supplied query hints
+ table = (Table)preparedQueryHints.get(caseSensitive ?
columnName : columnName.toLowerCase());
+ tableOfColumn = (table == null ? null : table.getName());
+ }
+ if (tableName == null)
+ {
+ tableName = tableOfColumn;
+ }
+ else if (!tableName.equals(tableOfColumn))
+ {
+ singleKnownTable = false;
}
- Table table = model.findTable(tableOfColumn, caseSensitive);
- String columnName = metaData.getColumnName(idx);
- String propName = columnName;
+ String propName = columnName;
if (table != null)
{
@@ -134,6 +148,36 @@
}
_dynaClass = new BasicDynaClass("result", BasicDynaBean.class,
props);
}
+ }
+
+ /**
+ * Prepares the query hints by extracting the column names and using them
as keys
+ * into the resulting map pointing to the corresponding table.
+ *
+ * @param queryHints The query hints
+ * @return The column name -> table map
+ */
+ private Map prepareQueryHints(Table[] queryHints, boolean caseSensitive)
+ {
+ Map result = new HashMap();
+
+ for (int tableIdx = 0; (queryHints != null) && (tableIdx <
queryHints.length); tableIdx++)
+ {
+ for (int columnIdx = 0; columnIdx <
queryHints[tableIdx].getColumnCount(); columnIdx++)
+ {
+ String columnName =
queryHints[tableIdx].getColumn(columnIdx).getName();
+
+ if (caseSensitive)
+ {
+ columnName = columnName.toLowerCase();
+ }
+ if (!result.containsKey(columnName))
+ {
+ result.put(columnName, queryHints[tableIdx]);
+ }
+ }
+ }
+ return result;
}
/* (non-Javadoc)
Modified:
db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaBean.java
URL:
http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaBean.java?rev=290453&r1=290452&r2=290453&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaBean.java
(original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaBean.java
Tue Sep 20 06:45:34 2005
@@ -18,24 +18,52 @@
import org.apache.commons.beanutils.BasicDynaBean;
import org.apache.commons.beanutils.DynaClass;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.apache.commons.beanutils.DynaProperty;
/**
* SqlDynaBean is a DynaBean which can be persisted as a single row in
* a Database Table.
*
* @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a>
+ * @author <a href="mailto:[EMAIL PROTECTED]">Thomas Dudziak</a>
* @version $Revision$
*/
-public class SqlDynaBean extends BasicDynaBean {
+public class SqlDynaBean extends BasicDynaBean
+{
+ /** Unique ID for serializaion purposes */
+ private static final long serialVersionUID = -6946514447446174227L;
- /** The Log to which logging calls will be made. */
- private static final Log log = LogFactory.getLog( SqlDynaBean.class );
-
- public SqlDynaBean(DynaClass dynaClass) {
+ /**
+ * Creates a new dyna bean of the given class.
+ *
+ * @param dynaClass The dyna class
+ */
+ public SqlDynaBean(DynaClass dynaClass)
+ {
super(dynaClass);
}
-
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ StringBuffer result = new StringBuffer();
+ DynaClass type = getDynaClass();
+ DynaProperty[] props = type.getDynaProperties();
+
+ result.append(type.getName());
+ result.append(": ");
+ for (int idx = 0; idx < props.length; idx++)
+ {
+ if (idx > 0)
+ {
+ result.append(", ");
+ }
+ result.append(props[idx].getName());
+ result.append(" = ");
+ result.append(get(props[idx].getName()));
+ }
+ return result.toString();
+ }
}
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=290453&r1=290452&r2=290453&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
Tue Sep 20 06:45:34 2005
@@ -21,8 +21,6 @@
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.Table;
/**
@@ -30,19 +28,27 @@
* Table in a Database.
*
* @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a>
+ * @author <a href="mailto:[EMAIL PROTECTED]">Thomas Dudziak</a>
* @version $Revision$
*/
-public class SqlDynaClass extends BasicDynaClass {
-
- /** The Log to which logging calls will be made. */
- private static final Log log = LogFactory.getLog( SqlDynaClass.class );
-
- private Table table;
- private SqlDynaProperty[] primaryKeys;
- private SqlDynaProperty[] nonPrimaryKeyProperties;
-
- /**
- * Creates a new SqlDynaClass instance from a Table model.
+public class SqlDynaClass extends BasicDynaClass
+{
+ /** Unique ID for serializaion purposes */
+ private static final long serialVersionUID = -5768155698352911245L;
+
+ /** The table for which this dyna class is defined */
+ private Table _table;
+ /** The primary key dyna properties */
+ private SqlDynaProperty[] _primaryKeyProperties;
+ /** The non-primary key dyna properties */
+ private SqlDynaProperty[] _nonPrimaryKeyProperties;
+
+ /**
+ * Factory method for creating and initializing a new dyna class instance
+ * for the given table.
+ *
+ * @param table The table
+ * @return The dyna class for the table
*/
public static SqlDynaClass newInstance(Table table)
{
@@ -58,88 +64,109 @@
properties.toArray(array);
return new SqlDynaClass(table, array);
}
-
- public SqlDynaClass(Table table) {
- super(table.getName(), SqlDynaBean.class);
- this.table = table;
- }
- public SqlDynaClass(Table table, SqlDynaProperty[] properties) {
+ /**
+ * Creates a new dyna class instance for the given table that has the
given properties.
+ *
+ * @param table The table
+ * @param properties The dyna properties
+ */
+ public SqlDynaClass(Table table, SqlDynaProperty[] properties)
+ {
super(table.getName(), SqlDynaBean.class, properties);
- this.table = table;
+ _table = table;
}
/**
- * @return the database Table this DynaClass maps to
+ * Returns the table for which this dyna class is defined.
+ *
+ * @return The table
*/
- public Table getTable() {
- return table;
+ public Table getTable()
+ {
+ return _table;
}
// Helper methods
//-------------------------------------------------------------------------
/**
- * @return the name of the table
+ * Returns the table name for which this dyna class is defined.
+ *
+ * @return The table name
*/
- public String getTableName() {
+ public String getTableName()
+ {
return getTable().getName();
}
/**
- * @return the SqlDynaProperty objects of this class
+ * Returns the properties of this dyna class.
+ *
+ * @return The properties
*/
- public SqlDynaProperty[] getSqlDynaProperties() {
- return (SqlDynaProperty[]) getDynaProperties();
+ public SqlDynaProperty[] getSqlDynaProperties()
+ {
+ return (SqlDynaProperty[])getDynaProperties();
}
/**
- * @return an array of the primary key DynaProperty objects
+ * Returns the properties for the primary keys of the corresponding table.
+ *
+ * @return The properties
*/
- public SqlDynaProperty[] getPrimaryKeyProperties() {
- if ( primaryKeys == null ) {
+ public SqlDynaProperty[] getPrimaryKeyProperties()
+ {
+ if (_primaryKeyProperties == null)
+ {
initPrimaryKeys();
}
- return primaryKeys;
+ return _primaryKeyProperties;
}
/**
- * @return an array of the non-primary key DynaProperty objects
+ * Returns the properties for the non-primary keys of the corresponding
table.
+ *
+ * @return The properties
*/
- public SqlDynaProperty[] getNonPrimaryKeyProperties() {
- if ( nonPrimaryKeyProperties == null ) {
+ public SqlDynaProperty[] getNonPrimaryKeyProperties()
+ {
+ if (_nonPrimaryKeyProperties == null)
+ {
initPrimaryKeys();
}
- return nonPrimaryKeyProperties;
+ return _nonPrimaryKeyProperties;
}
// Implementation methods
//-------------------------------------------------------------------------
/**
- * Creates the primary key and non primary key property arrays, laziliy.
+ * Initializes the primary key and non primary key property arrays.
*/
- protected void initPrimaryKeys() {
- List primaryKeyList = new ArrayList();
- List otherList = new ArrayList();
-
+ protected void initPrimaryKeys()
+ {
+ List pkProps = new ArrayList();
+ List nonPkProps = new ArrayList();
DynaProperty[] properties = getDynaProperties();
- for (int i = 0, size = properties.length; i < size; i++ ) {
- DynaProperty property = properties[i];
- if (property instanceof SqlDynaProperty) {
- SqlDynaProperty sqlProperty = (SqlDynaProperty) property;
- if ( sqlProperty.isPrimaryKey() ) {
- primaryKeyList.add( sqlProperty );
+
+ for (int idx = 0; idx < properties.length; idx++)
+ {
+ if (properties[idx] instanceof SqlDynaProperty)
+ {
+ SqlDynaProperty sqlProperty = (SqlDynaProperty)properties[idx];
+
+ if (sqlProperty.isPrimaryKey())
+ {
+ pkProps.add(sqlProperty);
}
- else {
- otherList.add( sqlProperty );
+ else
+ {
+ nonPkProps.add(sqlProperty);
}
}
}
- this.primaryKeys = new SqlDynaProperty[primaryKeyList.size()];
- primaryKeyList.toArray(this.primaryKeys);
-
- this.nonPrimaryKeyProperties = new SqlDynaProperty[otherList.size()];
- otherList.toArray(this.nonPrimaryKeyProperties);
+ _primaryKeyProperties = (SqlDynaProperty[])pkProps.toArray(new
SqlDynaProperty[pkProps.size()]);
+ _nonPrimaryKeyProperties = (SqlDynaProperty[])nonPkProps.toArray(new
SqlDynaProperty[nonPkProps.size()]);
}
}
Modified:
db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaProperty.java
URL:
http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaProperty.java?rev=290453&r1=290452&r2=290453&view=diff
==============================================================================
---
db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaProperty.java
(original)
+++
db/ddlutils/trunk/src/java/org/apache/ddlutils/dynabean/SqlDynaProperty.java
Tue Sep 20 06:45:34 2005
@@ -17,8 +17,6 @@
*/
import org.apache.commons.beanutils.DynaProperty;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.apache.ddlutils.model.Column;
/**
@@ -28,51 +26,60 @@
* an autoIncrement column and the SQL type etc.
*
* @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a>
+ * @author <a href="mailto:[EMAIL PROTECTED]">Thomas Dudziak</a>
* @version $Revision$
*/
-public class SqlDynaProperty extends DynaProperty {
+public class SqlDynaProperty extends DynaProperty
+{
+ /** Unique ID for serializaion purposes */
+ private static final long serialVersionUID = -4491018827449106588L;
- /** The Log to which logging calls will be made. */
- private static final Log log = LogFactory.getLog( SqlDynaProperty.class );
-
- private Column column;
+ /** The column for which this dyna property is defined */
+ private Column _column;
/**
- * Construct a property that accepts any data type.
+ * Creates a property instance for the given column that accepts any data
type.
*
- * @param name Name of the property being described
- * @param column the database Column this property maps to
+ * @param column The column
*/
- public SqlDynaProperty(Column column) {
+ public SqlDynaProperty(Column column)
+ {
super(column.getName());
- this.column = column;
+ _column = column;
}
/**
- * Construct a property that accepts any data type.
+ * Creates a property instance for the given column that only accepts the
given type.
*
- * @param name Name of the property being described
- * @param column the database Column this property maps to
+ * @param column The column
+ * @param type The type of the property
*/
- public SqlDynaProperty(Column column, Class type) {
+ public SqlDynaProperty(Column column, Class type)
+ {
super(column.getName(), type);
- this.column = column;
+ _column = column;
}
/**
- * @return the database Column this property maps to
+ * Returns the column for which this property is defined.
+ *
+ * @return The column
*/
- public Column getColumn() {
- return column;
+ public Column getColumn()
+ {
+ return _column;
}
// Helper methods
//-------------------------------------------------------------------------
/**
- * @return whether the property is part of the primary key
+ * Determines whether this property is for a primary key column.
+ *
+ * @return <code>true</code> if the property is for a primary key column
*/
- public boolean isPrimaryKey() {
+ public boolean isPrimaryKey()
+ {
return getColumn().isPrimaryKey();
}
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=290453&r1=290452&r2=290453&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
Tue Sep 20 06:45:34 2005
@@ -377,6 +377,22 @@
*/
public Iterator query(Database model, String sql) throws DynaSqlException
{
+ return query(model, sql, (Table[])null);
+ }
+
+ /* (non-Javadoc)
+ * @see
org.apache.ddlutils.Platform#query(org.apache.ddlutils.model.Database,
java.lang.String, java.util.Collection)
+ */
+ public Iterator query(Database model, String sql, Collection parameters)
throws DynaSqlException
+ {
+ return query(model, sql, parameters, null);
+ }
+
+ /* (non-Javadoc)
+ * @see
org.apache.ddlutils.Platform#query(org.apache.ddlutils.model.Database,
java.lang.String, org.apache.ddlutils.model.Table[])
+ */
+ public Iterator query(Database model, String sql, Table[] queryHints)
throws DynaSqlException
+ {
Connection connection = borrowConnection();
Statement statement = null;
ResultSet resultSet = null;
@@ -386,7 +402,7 @@
{
statement = connection.createStatement();
resultSet = statement.executeQuery(sql);
- answer = createResultSetIterator(model, resultSet);
+ answer = createResultSetIterator(model, resultSet, queryHints);
return answer;
}
catch (SQLException ex)
@@ -406,9 +422,9 @@
}
/* (non-Javadoc)
- * @see
org.apache.ddlutils.Platform#query(org.apache.ddlutils.model.Database,
java.lang.String, java.util.Collection)
+ * @see
org.apache.ddlutils.Platform#query(org.apache.ddlutils.model.Database,
java.lang.String, java.util.Collection, org.apache.ddlutils.model.Table[])
*/
- public Iterator query(Database model, String sql, Collection parameters)
throws DynaSqlException
+ public Iterator query(Database model, String sql, Collection parameters,
Table[] queryHints) throws DynaSqlException
{
Connection connection = borrowConnection();
PreparedStatement statement = null;
@@ -426,7 +442,7 @@
statement.setObject(paramIdx, iter.next());
}
resultSet = statement.executeQuery();
- answer = createResultSetIterator(model, resultSet);
+ answer = createResultSetIterator(model, resultSet, queryHints);
return answer;
}
catch (SQLException ex)
@@ -450,7 +466,15 @@
*/
public List fetch(Database model, String sql) throws DynaSqlException
{
- return fetch(model, sql, 0, -1);
+ return fetch(model, sql, (Table[])null, 0, -1);
+ }
+
+ /* (non-Javadoc)
+ * @see
org.apache.ddlutils.Platform#fetch(org.apache.ddlutils.model.Database,
java.lang.String, org.apache.ddlutils.model.Table[])
+ */
+ public List fetch(Database model, String sql, Table[] queryHints) throws
DynaSqlException
+ {
+ return fetch(model, sql, queryHints, 0, -1);
}
/* (non-Javadoc)
@@ -458,6 +482,14 @@
*/
public List fetch(Database model, String sql, int start, int end) throws
DynaSqlException
{
+ return fetch(model, sql, (Table[])null, start, end);
+ }
+
+ /* (non-Javadoc)
+ * @see
org.apache.ddlutils.Platform#fetch(org.apache.ddlutils.model.Database,
java.lang.String, org.apache.ddlutils.model.Table[], int, int)
+ */
+ public List fetch(Database model, String sql, Table[] queryHints, int
start, int end) throws DynaSqlException
+ {
Connection connection = borrowConnection();
Statement statement = null;
ResultSet resultSet = null;
@@ -470,7 +502,7 @@
int rowIdx = 0;
- for (Iterator it = createResultSetIterator(model, resultSet);
((end < 0) || (rowIdx <= end)) && it.hasNext(); rowIdx++)
+ for (Iterator it = createResultSetIterator(model, resultSet,
queryHints); ((end < 0) || (rowIdx <= end)) && it.hasNext(); rowIdx++)
{
if (rowIdx >= start)
{
@@ -493,7 +525,7 @@
*/
public List fetch(Database model, String sql, Collection parameters)
throws DynaSqlException
{
- return fetch(model, sql, parameters, 0, -1);
+ return fetch(model, sql, parameters, null, 0, -1);
}
/* (non-Javadoc)
@@ -501,6 +533,22 @@
*/
public List fetch(Database model, String sql, Collection parameters, int
start, int end) throws DynaSqlException
{
+ return fetch(model, sql, parameters, null, start, end);
+ }
+
+ /* (non-Javadoc)
+ * @see
org.apache.ddlutils.Platform#fetch(org.apache.ddlutils.model.Database,
java.lang.String, java.util.Collection, org.apache.ddlutils.model.Table[])
+ */
+ public List fetch(Database model, String sql, Collection parameters,
Table[] queryHints) throws DynaSqlException
+ {
+ return fetch(model, sql, parameters, queryHints, 0, -1);
+ }
+
+ /* (non-Javadoc)
+ * @see
org.apache.ddlutils.Platform#fetch(org.apache.ddlutils.model.Database,
java.lang.String, java.util.Collection, org.apache.ddlutils.model.Table[], int,
int)
+ */
+ public List fetch(Database model, String sql, Collection parameters,
Table[] queryHints, int start, int end) throws DynaSqlException
+ {
Connection connection = borrowConnection();
PreparedStatement statement = null;
ResultSet resultSet = null;
@@ -520,7 +568,7 @@
int rowIdx = 0;
- for (Iterator it = createResultSetIterator(model, resultSet);
((end < 0) || (rowIdx <= end)) && it.hasNext(); rowIdx++)
+ for (Iterator it = createResultSetIterator(model, resultSet,
queryHints); ((end < 0) || (rowIdx <= end)) && it.hasNext(); rowIdx++)
{
if (rowIdx >= start)
{
@@ -1044,9 +1092,11 @@
*
* @param model The database model
* @param resultSet The result set to iterate over
+ * @param queryHints The tables that were queried in the query
that produced the given result set
+ * (optional)
*/
- protected DynaSqlIterator createResultSetIterator(Database model,
ResultSet resultSet)
+ protected DynaSqlIterator createResultSetIterator(Database model,
ResultSet resultSet, Table[] queryHints)
{
- return new DynaSqlIterator(getPlatformInfo(), model, resultSet, true);
+ return new DynaSqlIterator(getPlatformInfo(), model, resultSet,
queryHints, true);
}
}