[libpostgresql-jdbc-java] 01/14: Improve null handling. Allow setNull(1, Types.XXX) for ARRAY, NULL, DISTINCT, and STRUCT by mapping them to the unknown oid. Make setArray, setBlob, setClob, and setCharacterStream accept null parameters.

Emmanuel Bourg ebourg-guest at moszumanska.debian.org
Mon Jan 9 10:19:12 UTC 2017


This is an automated email from the git hooks/post-receive script.

ebourg-guest pushed a commit to tag REL8_0_312
in repository libpostgresql-jdbc-java.

commit 001c78f6a112289f5eca4edbe9072efeb28956f8
Author: Kris Jurka <books at ejurka.com>
Date:   Thu Apr 28 14:18:09 2005 +0000

    Improve null handling.  Allow setNull(1, Types.XXX) for ARRAY,
    NULL, DISTINCT, and STRUCT by mapping them to the unknown oid.
    Make setArray, setBlob, setClob, and setCharacterStream accept
    null parameters.
---
 org/postgresql/jdbc2/AbstractJdbc2Statement.java | 44 +++++++++++++++++++++---
 org/postgresql/test/jdbc2/ArrayTest.java         | 23 ++++++++++++-
 org/postgresql/test/jdbc2/BlobTest.java          | 25 +++++++++++++-
 3 files changed, 85 insertions(+), 7 deletions(-)

diff --git a/org/postgresql/jdbc2/AbstractJdbc2Statement.java b/org/postgresql/jdbc2/AbstractJdbc2Statement.java
index af0c648..50a3a33 100644
--- a/org/postgresql/jdbc2/AbstractJdbc2Statement.java
+++ b/org/postgresql/jdbc2/AbstractJdbc2Statement.java
@@ -3,7 +3,7 @@
 * Copyright (c) 2004-2005, PostgreSQL Global Development Group
 *
 * IDENTIFICATION
-*   $PostgreSQL: pgjdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.java,v 1.68.2.3 2005/02/15 09:09:31 jurka Exp $
+*   $PostgreSQL: pgjdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.java,v 1.68.2.4 2005/02/16 18:30:27 jurka Exp $
 *
 *-------------------------------------------------------------------------
 */
@@ -996,10 +996,14 @@ public abstract class AbstractJdbc2Statement implements BaseStatement
                 oid = Oid.OID;
             }
             break;
-	case Types.BLOB:
-	case Types.CLOB:
-	    oid = Oid.OID;
-	    break;
+        case Types.BLOB:
+        case Types.CLOB:
+            oid = Oid.OID;
+            break;
+        case Types.ARRAY:
+        case Types.DISTINCT:
+        case Types.STRUCT:
+        case Types.NULL:
         case Types.OTHER:
             oid = Oid.INVALID;
             break;
@@ -2558,6 +2562,12 @@ public abstract class AbstractJdbc2Statement implements BaseStatement
     {
         checkClosed();
 
+        if (null == x)
+        {
+            setNull(i, Types.ARRAY);
+            return;
+        }
+
         // This only works for Array implementations that return a valid array
         // literal from Array.toString(), such as the implementation we return
         // from ResultSet.getArray(). Eventually we need a proper implementation
@@ -2576,6 +2586,13 @@ public abstract class AbstractJdbc2Statement implements BaseStatement
     public void setBlob(int i, Blob x) throws SQLException
     {
         checkClosed();
+
+        if (x == null)
+        {
+            setNull(i, Types.BLOB);
+            return;
+        }
+
         InputStream l_inStream = x.getBinaryStream();
         LargeObjectManager lom = connection.getLargeObjectAPI();
         int oid = lom.create();
@@ -2620,6 +2637,16 @@ public abstract class AbstractJdbc2Statement implements BaseStatement
     public void setCharacterStream(int i, java.io.Reader x, int length) throws SQLException
     {
         checkClosed();
+
+        if (x == null) {
+            if (connection.haveMinimumServerVersion("7.2")) {
+                setNull(i, Types.VARCHAR);
+            } else {
+                setNull(i, Types.CLOB);
+            }
+            return;
+        }
+
         if (length < 0)
             throw new PSQLException(GT.tr("Invalid stream length {0}.", new Integer(length)),
                                     PSQLState.INVALID_PARAMETER_VALUE);
@@ -2690,6 +2717,13 @@ public abstract class AbstractJdbc2Statement implements BaseStatement
     public void setClob(int i, Clob x) throws SQLException
     {
         checkClosed();
+
+        if (x == null)
+        {
+            setNull(i, Types.CLOB);
+            return;
+        }
+
         InputStream l_inStream = x.getAsciiStream();
         int l_length = (int) x.length();
         LargeObjectManager lom = connection.getLargeObjectAPI();
diff --git a/org/postgresql/test/jdbc2/ArrayTest.java b/org/postgresql/test/jdbc2/ArrayTest.java
index 1346dfb..14d8455 100644
--- a/org/postgresql/test/jdbc2/ArrayTest.java
+++ b/org/postgresql/test/jdbc2/ArrayTest.java
@@ -3,7 +3,7 @@
 * Copyright (c) 2004-2005, PostgreSQL Global Development Group
 *
 * IDENTIFICATION
-*   $PostgreSQL: pgjdbc/org/postgresql/test/jdbc2/ArrayTest.java,v 1.7 2004/11/09 08:54:00 jurka Exp $
+*   $PostgreSQL: pgjdbc/org/postgresql/test/jdbc2/ArrayTest.java,v 1.8 2005/01/11 08:25:48 jurka Exp $
 *
 *-------------------------------------------------------------------------
 */
@@ -37,6 +37,27 @@ public class ArrayTest extends TestCase
         TestUtil.closeDB(conn);
     }
 
+    public void testSetNull() throws SQLException {
+        PreparedStatement pstmt = conn.prepareStatement("INSERT INTO arrtest VALUES (?,?,?)");
+        pstmt.setNull(1, Types.ARRAY);
+        pstmt.setNull(2, Types.ARRAY);
+        pstmt.setNull(3, Types.ARRAY);
+        pstmt.executeUpdate();
+
+        pstmt.setObject(1, null, Types.ARRAY);
+        pstmt.setObject(2, null);
+        pstmt.setObject(3, null);
+        pstmt.executeUpdate();
+
+        pstmt.setArray(1, null);
+        pstmt.setArray(2, null);
+        pstmt.setArray(3, null);
+        pstmt.executeUpdate();
+
+        pstmt.close();
+    }
+
+
     public void testRetrieveArrays() throws SQLException {
         Statement stmt = conn.createStatement();
 
diff --git a/org/postgresql/test/jdbc2/BlobTest.java b/org/postgresql/test/jdbc2/BlobTest.java
index 23df1b1..cc9ab4c 100644
--- a/org/postgresql/test/jdbc2/BlobTest.java
+++ b/org/postgresql/test/jdbc2/BlobTest.java
@@ -3,7 +3,7 @@
 * Copyright (c) 2004-2005, PostgreSQL Global Development Group
 *
 * IDENTIFICATION
-*   $PostgreSQL: pgjdbc/org/postgresql/test/jdbc2/BlobTest.java,v 1.13 2004/11/09 08:54:01 jurka Exp $
+*   $PostgreSQL: pgjdbc/org/postgresql/test/jdbc2/BlobTest.java,v 1.14 2005/01/11 08:25:48 jurka Exp $
 *
 *-------------------------------------------------------------------------
 */
@@ -47,6 +47,29 @@ public class BlobTest extends TestCase
         TestUtil.closeDB(con);
     }
 
+    public void testSetNull() throws Exception
+    {
+        PreparedStatement pstmt = con.prepareStatement("INSERT INTO testblob(lo) VALUES (?)");
+
+        pstmt.setBlob(1, null);
+        pstmt.executeUpdate();
+
+        pstmt.setNull(1, Types.BLOB);
+        pstmt.executeUpdate();
+
+        pstmt.setObject(1, null, Types.BLOB);
+        pstmt.executeUpdate();
+
+        pstmt.setClob(1, null);
+        pstmt.executeUpdate();
+
+        pstmt.setNull(1, Types.CLOB);
+        pstmt.executeUpdate();
+
+        pstmt.setObject(1, null, Types.CLOB);
+        pstmt.executeUpdate();
+    }
+
     /*
      * Tests one method of uploading a blob to the database
      */

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/libpostgresql-jdbc-java.git



More information about the pkg-java-commits mailing list