Author: arminw Date: Sat Mar 24 15:26:06 2007 New Revision: 522122 URL: http://svn.apache.org/viewvc?view=rev&rev=522122 Log: allow to execute arbitrary sql-statements using a report query
Modified: db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/RsQueryObject.java db/ojb/trunk/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java db/ojb/trunk/src/java/org/apache/ojb/broker/query/QueryFactory.java db/ojb/trunk/src/java/org/apache/ojb/broker/query/QueryFactoryNew.java db/ojb/trunk/src/java/org/apache/ojb/broker/query/QueryFactoryNewImpl.java Modified: db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/RsQueryObject.java URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/RsQueryObject.java?view=diff&rev=522122&r1=522121&r2=522122 ============================================================================== --- db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/RsQueryObject.java (original) +++ db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/RsQueryObject.java Sat Mar 24 15:26:06 2007 @@ -15,12 +15,10 @@ * limitations under the License. */ +import org.apache.ojb.broker.metadata.ClassDescriptor; import org.apache.ojb.broker.query.Query; import org.apache.ojb.broker.query.QueryByCriteria; import org.apache.ojb.broker.query.QueryBySQL; -import org.apache.ojb.broker.metadata.ClassDescriptor; -import org.apache.ojb.broker.accesslayer.ResultSetAndStatement; -import org.apache.ojb.broker.accesslayer.JdbcAccess; /** * Helper class for [EMAIL PROTECTED] RsIterator} queries. @@ -55,23 +53,27 @@ this.cld = cld; if(query instanceof QueryBySQL) { - setSQLBased(true); + isSQLBased = true; } } //******************************************* // public methods //******************************************* - /** * Execute the Query. Select all columns. * @param jdbcAccess - * @return + * @return The wrapped query result */ public ResultSetAndStatement performQuery(JdbcAccess jdbcAccess) { if (isSQLBased()) { + // If class-descriptor not set we expect an arbitrary sql-statement + if(cld == null) + { + return jdbcAccess.executeSQL(((QueryBySQL) query).getSql(), Query.SCROLLABLE); + } return jdbcAccess.executeSQL(((QueryBySQL) query).getSql(), Query.SCROLLABLE); } else @@ -84,7 +86,7 @@ * Execute the Query. Select the pk-columns only. * This is an optimization when using proxies. * @param jdbcAccess - * @return + * @return The wrapped query result */ public ResultSetAndStatement performPkQuery(JdbcAccess jdbcAccess) { @@ -116,6 +118,14 @@ return query; } + /** + * @return Returns the isSQLBased. + */ + public boolean isSQLBased() + { + return isSQLBased; + } + public String getSQLBasedQuery() { if(isSQLBased()) @@ -140,26 +150,9 @@ } } - /** - * @param isSQLBased The isSQLBased to set. - */ - private void setSQLBased(boolean isSQLBased) - { - this.isSQLBased = isSQLBased; - } - - /** - * @return Returns the isSQLBased. - */ - public boolean isSQLBased() - { - return isSQLBased; - } - public String toString() { return this.getClass().getName() + "[" + "query: " + query + ", class descriptor: " + cld.getClassNameOfObject() + "]"; } - } Modified: db/ojb/trunk/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java?view=diff&rev=522122&r1=522121&r2=522122 ============================================================================== --- db/ojb/trunk/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java (original) +++ db/ojb/trunk/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java Sat Mar 24 15:26:06 2007 @@ -2508,7 +2508,7 @@ */ public OJBIterator getReportQueryIteratorByQuery(Query query) throws PersistenceBrokerException { - ClassDescriptor cld = getClassDescriptor(query.getSearchClass()); + ClassDescriptor cld = query.getSearchClass() != null ? getClassDescriptor(query.getSearchClass()) : null; return getReportQueryIteratorFromQuery(query, cld); } Modified: db/ojb/trunk/src/java/org/apache/ojb/broker/query/QueryFactory.java URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/java/org/apache/ojb/broker/query/QueryFactory.java?view=diff&rev=522122&r1=522121&r2=522122 ============================================================================== --- db/ojb/trunk/src/java/org/apache/ojb/broker/query/QueryFactory.java (original) +++ db/ojb/trunk/src/java/org/apache/ojb/broker/query/QueryFactory.java Sat Mar 24 15:26:06 2007 @@ -19,8 +19,7 @@ /** * Factory to create Queries. - * @author <a href="mailto:[EMAIL PROTECTED]">Thomas Mahler<a> - * @author <a href="mailto:[EMAIL PROTECTED]">Jakob Braeuchi<a> + * * @version $Id$ */ public final class QueryFactory @@ -165,8 +164,23 @@ } /** + * Factory method for a arbitrary query by sql - it's not necessary that requested table + * is mapped in the metadata files. + * <br/> + * NOTE: This query object can only be used in conjunction with + * [EMAIL PROTECTED] org.apache.ojb.broker.PersistenceBroker#getReportQueryIteratorByQuery(org.apache.ojb.broker.query.Query)}. + * + * @param sql An arbitrary sql string. + * @return QueryBySQL The query object. + */ + public static QueryBySQL newQuery(String sql) + { + return theFactory.newQuery(sql); + } + + /** * Return a copy of a QueryByCriteria - * @param QueryByCriteria + * @param aQuery * @return QueryByCriteria */ public static QueryByCriteria copyQuery(QueryByCriteria aQuery) Modified: db/ojb/trunk/src/java/org/apache/ojb/broker/query/QueryFactoryNew.java URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/java/org/apache/ojb/broker/query/QueryFactoryNew.java?view=diff&rev=522122&r1=522121&r2=522122 ============================================================================== --- db/ojb/trunk/src/java/org/apache/ojb/broker/query/QueryFactoryNew.java (original) +++ db/ojb/trunk/src/java/org/apache/ojb/broker/query/QueryFactoryNew.java Sat Mar 24 15:26:06 2007 @@ -17,7 +17,7 @@ /** * Interface for Query-Factories. - * @author <a href="mailto:[EMAIL PROTECTED]">Jakob Braeuchi<a> + * * @version $Id$ */ public interface QueryFactoryNew @@ -126,6 +126,18 @@ * @return QueryBySQL */ QueryBySQL newQuery(Class classToSearchFrom, String anSqlStatement); + + /** + * Factory method for a arbitrary query by sql - it's not necessary that requested table + * is mapped in the metadata files. + * <br/> + * NOTE: This query object can only be used in conjunction with + * [EMAIL PROTECTED] org.apache.ojb.broker.PersistenceBroker#getReportQueryIteratorByQuery(org.apache.ojb.broker.query.Query)}. + * + * @param sql An arbitrary sql string. + * @return QueryBySQL The query object. + */ + public QueryBySQL newQuery(String sql); /** * Return a copy of a QueryByCriteria. Modified: db/ojb/trunk/src/java/org/apache/ojb/broker/query/QueryFactoryNewImpl.java URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/java/org/apache/ojb/broker/query/QueryFactoryNewImpl.java?view=diff&rev=522122&r1=522121&r2=522122 ============================================================================== --- db/ojb/trunk/src/java/org/apache/ojb/broker/query/QueryFactoryNewImpl.java (original) +++ db/ojb/trunk/src/java/org/apache/ojb/broker/query/QueryFactoryNewImpl.java Sat Mar 24 15:26:06 2007 @@ -166,6 +166,21 @@ } /** + * Factory method for a arbitrary query by sql - it's not necessary that requested table + * is mapped in the metadata files. + * <br/> + * NOTE: This query object can only be used in conjunction with + * [EMAIL PROTECTED] org.apache.ojb.broker.PersistenceBroker#getReportQueryIteratorByQuery(org.apache.ojb.broker.query.Query)}. + * + * @param sql An arbitrary sql string. + * @return QueryBySQL The query object. + */ + public QueryBySQL newQuery(String sql) + { + return new QueryBySQLImpl(null, sql); + } + + /** * Return a copy of a QueryByCriteria. * @param aQuery * @return QueryByCriteria --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]