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 br...@apache.org on 2006/01/22 10:28:04 UTC

svn commit: r371251 - in /db/ojb/trunk/src/java/org/apache/ojb/broker: accesslayer/ accesslayer/sql/ util/

Author: brj
Date: Sun Jan 22 01:27:57 2006
New Revision: 371251

URL: http://svn.apache.org/viewcvs?rev=371251&view=rev
Log:
applied armins fix for OJB-91

Modified:
    db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/JdbcAccessImpl.java
    db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/RowReaderDefaultImpl.java
    db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SelectStatement.java
    db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SqlProcedureFKStatement.java
    db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SqlProcedureStatement.java
    db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SqlSelectStatement.java
    db/ojb/trunk/src/java/org/apache/ojb/broker/util/SqlHelper.java

Modified: db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/JdbcAccessImpl.java
URL: http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/JdbcAccessImpl.java?rev=371251&r1=371250&r2=371251&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/JdbcAccessImpl.java (original)
+++ db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/JdbcAccessImpl.java Sun Jan 22 01:27:57 2006
@@ -620,6 +620,11 @@
                 {
                     return sql;
                 }
+
+                public boolean isUseOjbClassColumn()
+                {
+                    return false;
+                }
             });
         }
         catch(PersistenceBrokerException e)

Modified: db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/RowReaderDefaultImpl.java
URL: http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/RowReaderDefaultImpl.java?rev=371251&r1=371250&r2=371251&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/RowReaderDefaultImpl.java (original)
+++ db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/RowReaderDefaultImpl.java Sun Jan 22 01:27:57 2006
@@ -282,7 +282,7 @@
             }
             else
             {
-                String ojbClass = SqlHelper.getOjbClassName(rs_stmt.m_rs);
+                String ojbClass = SqlHelper.getOjbClassName(rs_stmt);
                 if (ojbClass != null)
                 {
                     ClassDescriptor cld = classDescriptor.getRepository().getDescriptorFor(ojbClass);
@@ -304,7 +304,7 @@
      */
     public void readPkValuesFrom(ResultSetAndStatement rs_stmt, Map row)
     {       
-        String ojbClass = SqlHelper.getOjbClassName(rs_stmt.m_rs);
+        String ojbClass = SqlHelper.getOjbClassName(rs_stmt);
         ClassDescriptor cld;
         
         if (ojbClass != null)

Modified: db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SelectStatement.java
URL: http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SelectStatement.java?rev=371251&r1=371250&r2=371251&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SelectStatement.java (original)
+++ db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SelectStatement.java Sun Jan 22 01:27:57 2006
@@ -15,11 +15,8 @@
  * limitations under the License.
  */
 
-import java.lang.Object;
-import java.sql.ResultSet;
-
-import org.apache.ojb.broker.query.Query;
 import org.apache.ojb.broker.metadata.FieldDescriptor;
+import org.apache.ojb.broker.query.Query;
 
 /**
  * This class
@@ -46,4 +43,12 @@
      * column index is not supported.
      */
     public int getColumnIndex(FieldDescriptor fld);
+    
+    /**
+     * If "table-per-subclass"-inheritance is used for the class specified in
+     * the {@link org.apache.ojb.broker.query.Query} the name of the "real" class to
+     * instantiate for each row of the result set was hold by a pseudo column - In this
+     * case this method returns <em>true</em>.
+     */
+    public boolean isUseOjbClassColumn();
 }

Modified: db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SqlProcedureFKStatement.java
URL: http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SqlProcedureFKStatement.java?rev=371251&r1=371250&r2=371251&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SqlProcedureFKStatement.java (original)
+++ db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SqlProcedureFKStatement.java Sun Jan 22 01:27:57 2006
@@ -40,7 +40,6 @@
  */
 public class SqlProcedureFKStatement implements SelectStatement
 {
-
     /**
      * The descriptor that defines the procedure to invoke.
      */
@@ -81,9 +80,11 @@
     {
         // Collect criteria name/values
         HashMap values = new HashMap();
-        for (Enumeration e = query.getCriteria().getElements(); e.hasMoreElements();) {
+        for (Enumeration e = query.getCriteria().getElements(); e.hasMoreElements();)
+        {
             SelectionCriteria c = (SelectionCriteria) e.nextElement();
-            if (c.getValue() != null) {
+            if (c.getValue() != null)
+            {
                 values.put(c.getAttribute(), c.getValue());
             }
         }
@@ -106,9 +107,12 @@
         {
             ArgumentDescriptor argument = (ArgumentDescriptor) i.next();
             Object value = values.get(argument.getFieldRefName());
-            if (value == null) {
+            if (value == null)
+            {
                 sb.append("NULL");
-            } else {
+            } 
+            else
+            {
                 sb.append("?");
             }
 
@@ -128,5 +132,13 @@
     public int getColumnIndex(FieldDescriptor fld)
     {
         return JdbcType.MIN_INT;
+    }
+
+    /**
+     * @see org.apache.ojb.broker.accesslayer.sql.SelectStatement#isUseOjbClassColumn()
+     */
+    public boolean isUseOjbClassColumn()
+    {
+        return false;
     }
 }

Modified: db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SqlProcedureStatement.java
URL: http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SqlProcedureStatement.java?rev=371251&r1=371250&r2=371251&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SqlProcedureStatement.java (original)
+++ db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SqlProcedureStatement.java Sun Jan 22 01:27:57 2006
@@ -32,7 +32,6 @@
 
 public class SqlProcedureStatement implements SelectStatement
 {
-
     /**
      * The descriptor that defines the procedure to invoke.
      */
@@ -100,5 +99,13 @@
     public int getColumnIndex(FieldDescriptor fld)
     {
         return JdbcType.MIN_INT;
+    }
+
+    /**
+     * @see org.apache.ojb.broker.accesslayer.sql.SelectStatement#isUseOjbClassColumn()
+     */
+    public boolean isUseOjbClassColumn()
+    {
+        return false;
     }
 }

Modified: db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SqlSelectStatement.java
URL: http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SqlSelectStatement.java?rev=371251&r1=371250&r2=371251&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SqlSelectStatement.java (original)
+++ db/ojb/trunk/src/java/org/apache/ojb/broker/accesslayer/sql/SqlSelectStatement.java Sun Jan 22 01:27:57 2006
@@ -45,6 +45,7 @@
 public class SqlSelectStatement extends SqlQueryStatement implements SelectStatement
 {
     private WeakReference fieldsForSelect;
+    private boolean useOjbClassColumn;
 
     /**
      * Constructor for SqlSelectStatement.
@@ -165,6 +166,9 @@
         }
         buf.append(" ELSE '").append(cld.getClassNameOfObject()).append("'");
         buf.append(" END AS " + SqlHelper.OJB_CLASS_COLUMN);
+
+        // signal the use of the ojbClassColumn
+        setUseOjbClassColumn(true);
     }
 
     /**
@@ -447,5 +451,18 @@
             }
         }
         return index;
+    }
+    
+    /**
+     * @see org.apache.ojb.broker.accesslayer.sql.SelectStatement#isUseOjbClassColumn()
+     */
+    public boolean isUseOjbClassColumn()
+    {
+        return useOjbClassColumn;
+    }
+
+    protected void setUseOjbClassColumn(boolean useOjbClassColumn)
+    {
+        this.useOjbClassColumn = useOjbClassColumn;
     }
 }

Modified: db/ojb/trunk/src/java/org/apache/ojb/broker/util/SqlHelper.java
URL: http://svn.apache.org/viewcvs/db/ojb/trunk/src/java/org/apache/ojb/broker/util/SqlHelper.java?rev=371251&r1=371250&r2=371251&view=diff
==============================================================================
--- db/ojb/trunk/src/java/org/apache/ojb/broker/util/SqlHelper.java (original)
+++ db/ojb/trunk/src/java/org/apache/ojb/broker/util/SqlHelper.java Sun Jan 22 01:27:57 2006
@@ -4,6 +4,9 @@
 import java.sql.SQLException;
 import java.util.StringTokenizer;
 
+import org.apache.ojb.broker.PersistenceBrokerException;
+import org.apache.ojb.broker.accesslayer.ResultSetAndStatement;
+
 /* Copyright 2002-2004 The Apache Software Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -137,15 +140,20 @@
      * @param rs the Resultset
      * @return null if the column is not available
      */
-    public static String getOjbClassName(ResultSet rs)
+    public static String getOjbClassName(ResultSetAndStatement rsAndStmt)
     {
-        try
-        {
-            return rs.getString(OJB_CLASS_COLUMN);
-        }
-        catch (SQLException e)
+        String result = null;
+        if (rsAndStmt.m_sql != null && rsAndStmt.m_sql.isUseOjbClassColumn())
         {
-            return null;
+            try
+            {
+                result = rsAndStmt.m_rs.getString(OJB_CLASS_COLUMN);
+            }
+            catch (SQLException e)
+            {
+                throw new PersistenceBrokerException("Cannot access " + OJB_CLASS_COLUMN, e);
+            }
         }
+        return result;
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org