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 2006/06/13 21:11:01 UTC

svn commit: r413954 - in /db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker: accesslayer/JdbcAccessImpl.java platforms/PlatformDefaultImpl.java

Author: arminw
Date: Tue Jun 13 12:11:01 2006
New Revision: 413954

URL: http://svn.apache.org/viewvc?rev=413954&view=rev
Log:
check fields for active LOB content

Modified:
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/JdbcAccessImpl.java
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDefaultImpl.java

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/JdbcAccessImpl.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/JdbcAccessImpl.java?rev=413954&r1=413953&r2=413954&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/JdbcAccessImpl.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/JdbcAccessImpl.java Tue Jun 13 12:11:01 2006
@@ -28,6 +28,7 @@
 import org.apache.ojb.broker.PersistenceBroker;
 import org.apache.ojb.broker.PersistenceBrokerException;
 import org.apache.ojb.broker.PersistenceBrokerSQLException;
+import org.apache.ojb.broker.lob.LobHandle;
 import org.apache.ojb.broker.accesslayer.sql.SelectStatement;
 import org.apache.ojb.broker.core.ValueContainer;
 import org.apache.ojb.broker.metadata.ArgumentDescriptor;
@@ -498,7 +499,23 @@
         {
             // workaround for issue with optimistic locking with enabled batch mode
             boolean batchSetting = preHandleBatchProcess(cld);
+
+            // we can only update LOB content when it's associated with current tx
+            if(cld.hasLobField())
+            {
+                FieldDescriptor[] fields = cld.getLobFields();
+                for(int i = 0; i < fields.length; i++)
+                {
+                    FieldDescriptor field = fields[i];
+                    Object o = field.getPersistentField().get(obj);
+                    if(o instanceof LobHandle)
+                    {
+                        ((LobHandle) o).checkActive();
+                    }
+                }
+            }
             stmt = sm.getUpdateStatement(cld);
+
             if (stmt == null)
             {
                 logger.error("getUpdateStatement returned a null statement");

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDefaultImpl.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDefaultImpl.java?rev=413954&r1=413953&r2=413954&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDefaultImpl.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDefaultImpl.java Tue Jun 13 12:11:01 2006
@@ -32,6 +32,7 @@
 import org.apache.ojb.broker.accesslayer.JoinSyntaxTypes;
 import org.apache.ojb.broker.lob.BlobHandle;
 import org.apache.ojb.broker.lob.ClobHandle;
+import org.apache.ojb.broker.lob.LobHandle;
 import org.apache.ojb.broker.metadata.JdbcConnectionDescriptor;
 import org.apache.ojb.broker.query.LikeCriteria;
 import org.apache.ojb.broker.util.SqlHelper;
@@ -319,19 +320,32 @@
             /*
             we use method advised by JDBC 3.0 specification (see 16.3.2)
             */
-            if(value instanceof BlobHandle && ((BlobHandle) value).isTransient())
+            if(value instanceof LobHandle)
             {
-                int length = (int) b.length();
-                if(b.length() < 0)
+                LobHandle handle = (LobHandle) value;
+                // found new LOB object value
+                if(handle.isTransient())
                 {
-                    /*
-                    We need the length of the specified stream to use #setBinaryStream
-                    This workaround seems to work for many DB (hsql, mysql, maxdb), the
-                    stream is read till EOF without throwing an exception
-                    */
-                    length = Integer.MAX_VALUE;
+                    int length = (int) b.length();
+                    if(b.length() < 0)
+                    {
+                        /*
+                        We need the length of the specified stream to use #setBinaryStream
+                        This workaround seems to work for many DB (hsql, mysql, maxdb), the
+                        stream is read till EOF without throwing an exception
+                        */
+                        length = Integer.MAX_VALUE;
+                    }
+                    ps.setBinaryStream(index, b.getBinaryStream(), length);
+                }
+                else
+                {
+                    if(detectLocatorsUpdateState(ps))
+                    {
+                        handle.checkActive();
+                        ps.setBlob(index, b);
+                    }
                 }
-                ps.setBinaryStream(index, b.getBinaryStream(), length);
             }
             else if(detectLocatorsUpdateState(ps))
             {
@@ -365,19 +379,32 @@
             /*
             we use method advised by JDBC 3.0 specification (see 16.3.2)
             */
-            if(value instanceof ClobHandle && ((ClobHandle) value).isTransient())
+            if(value instanceof LobHandle)
             {
-                int length = (int) c.length();
-                if(c.length() < 0)
+                LobHandle handle = (LobHandle) value;
+                // found new LOB object value
+                if(handle.isTransient())
                 {
-                    /*
-                    We need the length of the specified stream to use #setCharacterStream
-                    This workaround seems to work for many DB (hsql, mysql, maxdb), the
-                    reader is read till EOF without throwing an exception
-                    */
-                    length = Integer.MAX_VALUE;
+                    int length = (int) c.length();
+                    if(c.length() < 0)
+                    {
+                        /*
+                        We need the length of the specified stream to use #setCharacterStream
+                        This workaround seems to work for many DB (hsql, mysql, maxdb), the
+                        reader is read till EOF without throwing an exception
+                        */
+                        length = Integer.MAX_VALUE;
+                    }
+                    ps.setCharacterStream(index, c.getCharacterStream(), length);
+                }
+                else
+                {
+                    if(detectLocatorsUpdateState(ps))
+                    {
+                        handle.checkActive();
+                        ps.setClob(index, c);
+                    }
                 }
-                ps.setCharacterStream(index, c.getCharacterStream(), length);
             }
             else if(detectLocatorsUpdateState(ps))
             {



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