You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2007/03/24 23:11:08 UTC

svn commit: r522118 - in /db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker: accesslayer/RsIterator.java accesslayer/RsQueryObject.java core/PersistenceBrokerImpl.java query/QueryFactory.java

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 {@link RsIterator} queries.
  *
- * @author <a href="mailto:armin@codeAuLait.de">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
+     * {@link 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: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org