Author: tomdz
Date: Thu Jun 15 10:43:09 2006
New Revision: 414641

URL: http://svn.apache.org/viewvc?rev=414641&view=rev
Log:
Added special handling of Clobs/Blobs of size 0 as suggested by Kathey Marsden

Modified:
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java

Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java?rev=414641&r1=414640&r2=414641&view=diff
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java 
(original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/PlatformImplBase.java 
Thu Jun 15 10:43:09 2006
@@ -1952,26 +1952,58 @@
                    case Types.CLOB:
                        Clob clob = resultSet.getClob(columnName);
 
-                       if ((clob == null) || (clob.length() > 
Integer.MAX_VALUE))
-                       {
-                           value = clob;
-                       }
-                       else
-                       {
-                           value = clob.getSubString(1l, (int)clob.length());
-                       }
+                if (clob == null)
+                {
+                    value = null;
+                }
+                else
+                {
+                    long length = clob.length();
+    
+                       if (length > Integer.MAX_VALUE)
+                       {
+                           value = clob;
+                       }
+                    else if (length == 0)
+                    {
+                        // the javadoc is not clear about whether 
Clob.getSubString
+                        // can be used with a substring length of 0
+                        // thus we do the safe thing and handle it ourselves
+                        value = "";
+                    }
+                       else
+                       {
+                           value = clob.getSubString(1l, (int)length);
+                       }
+                }
                        break;
                    case Types.BLOB:
                        Blob blob = resultSet.getBlob(columnName);
 
-                       if ((blob == null) || (blob.length() > 
Integer.MAX_VALUE))
-                       {
-                           value = blob;
-                       }
-                       else
-                       {
-                           value = blob.getBytes(1l, (int)blob.length());
-                       }
+                if (blob == null)
+                {
+                    value = null;
+                }
+                else
+                {
+                    long length = blob.length();
+    
+                       if (length > Integer.MAX_VALUE)
+                       {
+                           value = blob;
+                       }
+                    else if (length == 0)
+                    {
+                        // the javadoc is not clear about whether Blob.getBytes
+                        // can be used with for 0 bytes to be copied
+                        // thus we do the safe thing and handle it ourselves
+                        value = new byte[0];
+                    }
+                       else
+                       {
+                           value = blob.getBytes(1l, (int)length);
+                       }
+                }
                        break;
                    case Types.ARRAY:
                        value = resultSet.getArray(columnName);


Reply via email to