From 512a3aef36591386640f34866c1acbe58c20ca6e Mon Sep 17 00:00:00 2001 From: Barry Lind Date: Tue, 30 Oct 2001 06:31:59 +0000 Subject: [PATCH] fixed change in behavior introduced in bytea / getBytes changes. This patch reverts back unintentional change in behavior to return raw value even when not bytea column --- .../jdbc/org/postgresql/jdbc1/ResultSet.java | 50 ++++++++++++++-------- .../jdbc/org/postgresql/jdbc2/ResultSet.java | 50 ++++++++++++++-------- 2 files changed, 62 insertions(+), 38 deletions(-) diff --git a/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java b/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java index bbde9d5bf9..07d5a998e6 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java @@ -391,31 +391,43 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu if (columnIndex < 1 || columnIndex > fields.length) throw new PSQLException("postgresql.res.colrange"); - //If the data is already binary then just return it - if (binaryCursor) - return this_row[columnIndex - 1]; - - if (connection.haveMinimumCompatibleVersion("7.2")) + wasNullFlag = (this_row[columnIndex - 1] == null); + if (!wasNullFlag) { + if (binaryCursor) + { + //If the data is already binary then just return it + return this_row[columnIndex - 1]; + } + else if (connection.haveMinimumCompatibleVersion("7.2")) + { //Version 7.2 supports the bytea datatype for byte arrays - return PGbytea.toBytes(getString(columnIndex)); - } - else - { + if (fields[columnIndex - 1].getPGType().equals("bytea")) + { + return PGbytea.toBytes(getString(columnIndex)); + } + else + { + return this_row[columnIndex - 1]; + } + } + else + { //Version 7.1 and earlier supports LargeObjects for byte arrays - wasNullFlag = (this_row[columnIndex - 1] == null); // Handle OID's as BLOBS - if (!wasNullFlag) + if ( fields[columnIndex - 1].getOID() == 26) { - if ( fields[columnIndex - 1].getOID() == 26) - { - LargeObjectManager lom = connection.getLargeObjectAPI(); - LargeObject lob = lom.open(getInt(columnIndex)); - byte buf[] = lob.read(lob.size()); - lob.close(); - return buf; - } + LargeObjectManager lom = connection.getLargeObjectAPI(); + LargeObject lob = lom.open(getInt(columnIndex)); + byte buf[] = lob.read(lob.size()); + lob.close(); + return buf; + } + else + { + return this_row[columnIndex - 1]; } + } } return null; } diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java b/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java index cd941d2179..4c2c61ce04 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java @@ -318,31 +318,43 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu if (columnIndex < 1 || columnIndex > fields.length) throw new PSQLException("postgresql.res.colrange"); - //If the data is already binary then just return it - if (binaryCursor) - return this_row[columnIndex - 1]; - - if (connection.haveMinimumCompatibleVersion("7.2")) + wasNullFlag = (this_row[columnIndex - 1] == null); + if (!wasNullFlag) { + if (binaryCursor) + { + //If the data is already binary then just return it + return this_row[columnIndex - 1]; + } + else if (connection.haveMinimumCompatibleVersion("7.2")) + { //Version 7.2 supports the bytea datatype for byte arrays - return PGbytea.toBytes(getString(columnIndex)); - } - else - { + if (fields[columnIndex - 1].getPGType().equals("bytea")) + { + return PGbytea.toBytes(getString(columnIndex)); + } + else + { + return this_row[columnIndex - 1]; + } + } + else + { //Version 7.1 and earlier supports LargeObjects for byte arrays - wasNullFlag = (this_row[columnIndex - 1] == null); // Handle OID's as BLOBS - if (!wasNullFlag) + if ( fields[columnIndex - 1].getOID() == 26) { - if ( fields[columnIndex - 1].getOID() == 26) - { - LargeObjectManager lom = connection.getLargeObjectAPI(); - LargeObject lob = lom.open(getInt(columnIndex)); - byte buf[] = lob.read(lob.size()); - lob.close(); - return buf; - } + LargeObjectManager lom = connection.getLargeObjectAPI(); + LargeObject lob = lom.open(getInt(columnIndex)); + byte buf[] = lob.read(lob.size()); + lob.close(); + return buf; + } + else + { + return this_row[columnIndex - 1]; } + } } return null; } -- 2.11.0