Author: arminw
Date: Sat Mar 24 15:11:07 2007
New Revision: 522118
URL: http://svn.apache.org/viewvc?view=rev&rev=522118
Log:
allow to execute arbitrary sql-statements using a report query
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RsIterator.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RsQueryObject.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/query/QueryFactory.java
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RsIterator.java
URL:
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RsIterator.java?view=diff&rev=522118&r1=522117&r2=522118
==============================================================================
---
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RsIterator.java
(original)
+++
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RsIterator.java
Sat Mar 24 15:11:07 2007
@@ -163,14 +163,17 @@
setBroker(broker);
setQueryObject(queryObject);
- Class classToPrefetch =
broker.getReferenceBroker().getClassToPrefetch();
- if ((classToPrefetch != null) &&
classToPrefetch.isAssignableFrom(queryObject.getClassDescriptor().getClassOfObject()))
+ if(queryObject.getClassDescriptor() != null)
{
- setItemProxyClass(null);
- }
- else
- {
-
setItemProxyClass(queryObject.getClassDescriptor().getProxyClass());
+ Class classToPrefetch =
broker.getReferenceBroker().getClassToPrefetch();
+ if ((classToPrefetch != null) &&
classToPrefetch.isAssignableFrom(queryObject.getClassDescriptor().getClassOfObject()))
+ {
+ setItemProxyClass(null);
+ }
+ else
+ {
+
setItemProxyClass(queryObject.getClassDescriptor().getProxyClass());
+ }
}
/*
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RsQueryObject.java
URL:
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RsQueryObject.java?view=diff&rev=522118&r1=522117&r2=522118
==============================================================================
---
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RsQueryObject.java
(original)
+++
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/RsQueryObject.java
Sat Mar 24 15:11:07 2007
@@ -18,11 +18,12 @@
import org.apache.ojb.broker.query.Query;
import org.apache.ojb.broker.query.QueryBySQL;
import org.apache.ojb.broker.metadata.ClassDescriptor;
+import org.apache.ojb.broker.metadata.DescriptorRepository;
+import org.apache.ojb.broker.core.ValueContainer;
/**
* Helper class for [EMAIL PROTECTED] RsIterator} queries.
*
- * @author <a href="mailto:[EMAIL PROTECTED]">Armin Waibel</a>
* @version $Id$
*/
public class RsQueryObject
@@ -60,11 +61,26 @@
//*******************************************
// public methods
//*******************************************
+ /*
+ TODO: Complete rework of this hack in OJB 2.0
+ arminw: This is a hack to enable report queries
+ based on arbitrary sql statements.
+ */
+ private static final ClassDescriptor CLD_HACK;
+ static
+ {
+ CLD_HACK = new ClassDescriptor(new DescriptorRepository());
+ CLD_HACK.setClassOfObject(Object.class);
+ }
public ResultSetAndStatement performQuery(JdbcAccess jdbcAccess)
{
if (isSQLBased())
{
-
+ // If class-descriptor not set we expect an arbitrary sql-statement
+ if(this.cld == null)
+ {
+ return jdbcAccess.executeSQL(((QueryBySQL) query).getSql(),
CLD_HACK, new ValueContainer[]{}, Query.NOT_SCROLLABLE);
+ }
return jdbcAccess.executeSQL(((QueryBySQL) query).getSql(), cld,
Query.SCROLLABLE);
}
else
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java
URL:
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java?view=diff&rev=522118&r1=522117&r2=522118
==============================================================================
---
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java
(original)
+++
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java
Sat Mar 24 15:11:07 2007
@@ -2160,7 +2160,7 @@
*/
public Iterator 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/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/query/QueryFactory.java
URL:
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/query/QueryFactory.java?view=diff&rev=522118&r1=522117&r2=522118
==============================================================================
---
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/query/QueryFactory.java
(original)
+++
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/query/QueryFactory.java
Sat Mar 24 15:11:07 2007
@@ -165,6 +165,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 static QueryBySQL newQuery(String sql)
+ {
+ return new QueryBySQL(null, sql);
+ }
+
+ /**
* Searches the class descriptor for the ojbConcrete class attribute
* if it finds the concrete class attribute, append a where clause which
* specifies we can load all classes that are this type or extents of this
type.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]