[libpostgresql-jdbc-java] 12/128: fix toString to handle binary integer and float types
Emmanuel Bourg
ebourg-guest at moszumanska.debian.org
Mon Jan 9 10:18:25 UTC 2017
This is an automated email from the git hooks/post-receive script.
ebourg-guest pushed a commit to annotated tag REL9_3_1100
in repository libpostgresql-jdbc-java.
commit 81f89b8c86ef71bc0e39df45a2828c0ce32a0016
Author: Dave Cramer <davecramer at gmail.com>
Date: Thu Nov 1 11:24:34 2012 -0400
fix toString to handle binary integer and float types
---
org/postgresql/core/v3/SimpleParameterList.java | 90 ++++++++++++++++++++-----
1 file changed, 73 insertions(+), 17 deletions(-)
diff --git a/org/postgresql/core/v3/SimpleParameterList.java b/org/postgresql/core/v3/SimpleParameterList.java
index 25d68a4..8c8bd00 100644
--- a/org/postgresql/core/v3/SimpleParameterList.java
+++ b/org/postgresql/core/v3/SimpleParameterList.java
@@ -14,10 +14,7 @@ import java.sql.SQLException;
import java.util.Arrays;
import org.postgresql.core.*;
-import org.postgresql.util.PSQLException;
-import org.postgresql.util.PSQLState;
-import org.postgresql.util.StreamWrapper;
-import org.postgresql.util.GT;
+import org.postgresql.util.*;
/**
* Parameter list for a single-statement V3 query.
@@ -44,14 +41,18 @@ class SimpleParameterList implements V3ParameterList {
public void registerOutParameter( int index, int sqlType ) throws SQLException
{
if (index < 1 || index > paramValues.length)
- throw new PSQLException(GT.tr("The column index is out of range: {0}, number of columns: {1}.", new Object[]{new Integer(index), new Integer(paramValues.length)}), PSQLState.INVALID_PARAMETER_VALUE );
+ {
+ throw new PSQLException(GT.tr("The column index is out of range: {0}, number of columns: {1}.", new Object[]{new Integer(index), new Integer(paramValues.length)}), PSQLState.INVALID_PARAMETER_VALUE);
+ }
flags[index-1] |= OUT;
}
private void bind(int index, Object value, int oid, int binary) throws SQLException {
if (index < 1 || index > paramValues.length)
- throw new PSQLException(GT.tr("The column index is out of range: {0}, number of columns: {1}.", new Object[]{new Integer(index), new Integer(paramValues.length)}), PSQLState.INVALID_PARAMETER_VALUE );
+ {
+ throw new PSQLException(GT.tr("The column index is out of range: {0}, number of columns: {1}.", new Object[]{new Integer(index), new Integer(paramValues.length)}), PSQLState.INVALID_PARAMETER_VALUE);
+ }
--index;
@@ -64,7 +65,9 @@ class SimpleParameterList implements V3ParameterList {
// send this value, and we don't want to overwrite and require a
// reparse.
if (oid == Oid.UNSPECIFIED && paramTypes[index] != Oid.UNSPECIFIED && value == NULL_OBJECT)
+ {
return;
+ }
paramTypes[index] = oid;
}
@@ -85,7 +88,9 @@ class SimpleParameterList implements V3ParameterList {
}
// Every function has at least one output.
if (count == 0)
+ {
count = 1;
+ }
return count;
}
@@ -104,10 +109,7 @@ class SimpleParameterList implements V3ParameterList {
public void setIntParameter(int index, int value) throws SQLException {
byte[] data = new byte[4];
- data[3] = (byte)value;
- data[2] = (byte)(value >> 8);
- data[1] = (byte)(value >> 16);
- data[0] = (byte)(value >> 24);
+ ByteConverter.int4(data,0,value);
bind(index, data, Oid.INT4, BINARY);
}
@@ -138,10 +140,44 @@ class SimpleParameterList implements V3ParameterList {
public String toString(int index) {
--index;
if (paramValues[index] == null)
+ {
return "?";
+ }
else if (paramValues[index] == NULL_OBJECT)
+ {
return "NULL";
- else {
+ }
+
+ else if ( (flags[index]& BINARY) == BINARY )
+ {
+ // handle some of the numeric types
+
+ switch (paramTypes[index])
+ {
+ case Oid.INT2:
+ short s = ByteConverter.int2((byte[])paramValues[index],0);
+ return Short.toString(s);
+
+ case Oid.INT4:
+ int i = ByteConverter.int4((byte[])paramValues[index],0);
+ return Integer.toString(i);
+
+ case Oid.INT8:
+ long l = ByteConverter.int8((byte[])paramValues[index],0);
+ return Long.toString(l);
+
+ case Oid.FLOAT4:
+ float f = ByteConverter.float4((byte[])paramValues[index],0);
+ return Float.toString(f);
+
+ case Oid.FLOAT8:
+ double d = ByteConverter.float8((byte[])paramValues[index],0);
+ return Double.toString(d);
+ }
+ return "?";
+ }
+ else
+ {
String param = paramValues[index].toString();
boolean hasBackslash = param.indexOf('\\') != -1;
@@ -150,18 +186,24 @@ class SimpleParameterList implements V3ParameterList {
boolean standardConformingStrings = false;
boolean supportsEStringSyntax = false;
- if (protoConnection != null) {
+ if (protoConnection != null)
+ {
standardConformingStrings = protoConnection.getStandardConformingStrings();
supportsEStringSyntax = protoConnection.getServerVersion().compareTo("8.1") >= 0;
}
if (hasBackslash && !standardConformingStrings && supportsEStringSyntax)
+ {
p.append('E');
+ }
p.append('\'');
- try {
+ try
+ {
p = Utils.appendEscapedLiteral(p, param, standardConformingStrings);
- } catch (SQLException sqle) {
+ }
+ catch (SQLException sqle)
+ {
// This should only happen if we have an embedded null
// and there's not much we can do if we do hit one.
//
@@ -180,7 +222,9 @@ class SimpleParameterList implements V3ParameterList {
for (int i = 0; i < paramTypes.length; ++i)
{
if (direction(i) != OUT && paramValues[i] == null)
+ {
throw new PSQLException(GT.tr("No value specified for parameter {0}.", new Integer(i + 1)), PSQLState.INVALID_PARAMETER_VALUE);
+ }
}
}
@@ -226,7 +270,9 @@ class SimpleParameterList implements V3ParameterList {
boolean hasUnresolvedTypes() {
for (int i=0; i< paramTypes.length; i++) {
if (paramTypes[i] == Oid.UNSPECIFIED)
+ {
return true;
+ }
}
return false;
}
@@ -257,15 +303,21 @@ class SimpleParameterList implements V3ParameterList {
// Null?
if (paramValues[index] == NULL_OBJECT)
+ {
throw new IllegalArgumentException("can't getV3Length() on a null parameter");
+ }
// Directly encoded?
if (paramValues[index] instanceof byte[])
- return ((byte[])paramValues[index]).length;
+ {
+ return ((byte[]) paramValues[index]).length;
+ }
// Binary-format bytea?
if (paramValues[index] instanceof StreamWrapper)
- return ((StreamWrapper)paramValues[index]).getLength();
+ {
+ return ((StreamWrapper) paramValues[index]).getLength();
+ }
// Already encoded?
if (encoded[index] == null)
@@ -282,7 +334,9 @@ class SimpleParameterList implements V3ParameterList {
// Null?
if (paramValues[index] == NULL_OBJECT)
+ {
throw new IllegalArgumentException("can't writeV3Value() on a null parameter");
+ }
// Directly encoded?
if (paramValues[index] instanceof byte[])
@@ -300,7 +354,9 @@ class SimpleParameterList implements V3ParameterList {
// Encoded string.
if (encoded[index] == null)
- encoded[index] = Utils.encodeUTF8((String)paramValues[index]);
+ {
+ encoded[index] = Utils.encodeUTF8((String) paramValues[index]);
+ }
pgStream.Send(encoded[index]);
}
--
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