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]

Reply via email to