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]