diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/Array.java b/src/interfaces/jdbc/org/postgresql/jdbc2/Array.java index 4b9931084f0689ec5b47eb56d6a027e7210bfdf0..5e0f86ea35e5cb3f7658c970fc7c61a4e4ac91f1 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc2/Array.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc2/Array.java @@ -25,10 +25,11 @@ import org.postgresql.util.*; public class Array implements java.sql.Array { - private org.postgresql.Connection conn = null; - private org.postgresql.Field field = null; - private org.postgresql.jdbc2.ResultSet rs = null; - private int idx = 0; + private org.postgresql.Connection conn = null; + private org.postgresql.Field field = null; + private org.postgresql.jdbc2.ResultSet rs = null; + private int idx = 0; + private String rawString = null; /** * Create a new Array @@ -38,11 +39,14 @@ public class Array implements java.sql.Array * @param field the Field descriptor for the field to load into this Array * @param rs the ResultSet from which to get the data for this Array */ - public Array( org.postgresql.Connection conn, int idx, Field field, org.postgresql.jdbc2.ResultSet rs ) { + public Array( org.postgresql.Connection conn, int idx, Field field, org.postgresql.jdbc2.ResultSet rs ) + throws SQLException + { this.conn = conn; this.field = field; this.rs = rs; this.idx = idx; + this.rawString = rs.getFixedString(idx); } public Object getArray() throws SQLException { @@ -66,9 +70,8 @@ public class Array implements java.sql.Array Object retVal = null; ArrayList array = new ArrayList(); - String raw = rs.getFixedString(idx); - if( raw != null ) { - char[] chars = raw.toCharArray(); + if( rawString != null ) { + char[] chars = rawString.toCharArray(); StringBuffer sbuf = new StringBuffer(); boolean foundOpen = false; boolean insideString = false; @@ -200,8 +203,8 @@ public class Array implements java.sql.Array fields[1] = new Field(conn, "VALUE", field.getOID("bool"), 1); for( int i=0; i<booleanArray.length; i++ ) { byte[][] tuple = new byte[2][0]; - tuple[0] = Integer.toString((int)index+i).getBytes(); // Index - tuple[1] = (booleanArray[i]?"YES":"NO").getBytes(); // Value + tuple[0] = conn.getEncoding().encode( Integer.toString((int)index+i) ); // Index + tuple[1] = conn.getEncoding().encode( (booleanArray[i]?"YES":"NO") ); // Value rows.addElement(tuple); } case Types.SMALLINT: @@ -212,8 +215,8 @@ public class Array implements java.sql.Array fields[1] = new Field(conn, "VALUE", field.getOID("int4"), 4); for( int i=0; i<intArray.length; i++ ) { byte[][] tuple = new byte[2][0]; - tuple[0] = Integer.toString((int)index+i).getBytes(); // Index - tuple[1] = Integer.toString(intArray[i]).getBytes(); // Value + tuple[0] = conn.getEncoding().encode( Integer.toString((int)index+i) ); // Index + tuple[1] = conn.getEncoding().encode( Integer.toString(intArray[i]) ); // Value rows.addElement(tuple); } break; @@ -222,8 +225,8 @@ public class Array implements java.sql.Array fields[1] = new Field(conn, "VALUE", field.getOID("int8"), 8); for( int i=0; i<longArray.length; i++ ) { byte[][] tuple = new byte[2][0]; - tuple[0] = Integer.toString((int)index+i).getBytes(); // Index - tuple[1] = Long.toString(longArray[i]).getBytes(); // Value + tuple[0] = conn.getEncoding().encode( Integer.toString((int)index+i) ); // Index + tuple[1] = conn.getEncoding().encode( Long.toString(longArray[i]) ); // Value rows.addElement(tuple); } break; @@ -232,8 +235,8 @@ public class Array implements java.sql.Array fields[1] = new Field(conn, "VALUE", field.getOID("numeric"), -1); for( int i=0; i<bdArray.length; i++ ) { byte[][] tuple = new byte[2][0]; - tuple[0] = Integer.toString((int)index+i).getBytes(); // Index - tuple[1] = bdArray[i].toString().getBytes(); // Value + tuple[0] = conn.getEncoding().encode( Integer.toString((int)index+i) ); // Index + tuple[1] = conn.getEncoding().encode( bdArray[i].toString() ); // Value rows.addElement(tuple); } break; @@ -242,8 +245,8 @@ public class Array implements java.sql.Array fields[1] = new Field(conn, "VALUE", field.getOID("float4"), 4); for( int i=0; i<floatArray.length; i++ ) { byte[][] tuple = new byte[2][0]; - tuple[0] = Integer.toString((int)index+i).getBytes(); // Index - tuple[1] = Float.toString(floatArray[i]).getBytes(); // Value + tuple[0] = conn.getEncoding().encode( Integer.toString((int)index+i) ); // Index + tuple[1] = conn.getEncoding().encode( Float.toString(floatArray[i]) ); // Value rows.addElement(tuple); } break; @@ -252,8 +255,8 @@ public class Array implements java.sql.Array fields[1] = new Field(conn, "VALUE", field.getOID("float8"), 8); for( int i=0; i<doubleArray.length; i++ ) { byte[][] tuple = new byte[2][0]; - tuple[0] = Integer.toString((int)index+i).getBytes(); // Index - tuple[1] = Double.toString(doubleArray[i]).getBytes(); // Value + tuple[0] = conn.getEncoding().encode( Integer.toString((int)index+i) ); // Index + tuple[1] = conn.getEncoding().encode( Double.toString(doubleArray[i]) ); // Value rows.addElement(tuple); } break; @@ -265,8 +268,8 @@ public class Array implements java.sql.Array fields[1] = new Field(conn, "VALUE", field.getOID("varchar"), -1); for( int i=0; i<strArray.length; i++ ) { byte[][] tuple = new byte[2][0]; - tuple[0] = Integer.toString((int)index+i).getBytes(); // Index - tuple[1] = strArray[i].getBytes(); // Value + tuple[0] = conn.getEncoding().encode( Integer.toString((int)index+i) ); // Index + tuple[1] = conn.getEncoding().encode( strArray[i] ); // Value rows.addElement(tuple); } break; @@ -275,8 +278,8 @@ public class Array implements java.sql.Array fields[1] = new Field(conn, "VALUE", field.getOID("date"), 4); for( int i=0; i<dateArray.length; i++ ) { byte[][] tuple = new byte[2][0]; - tuple[0] = Integer.toString((int)index+i).getBytes(); // Index - tuple[1] = dateArray[i].toString().getBytes(); // Value + tuple[0] = conn.getEncoding().encode( Integer.toString((int)index+i) ); // Index + tuple[1] = conn.getEncoding().encode( dateArray[i].toString() ); // Value rows.addElement(tuple); } break; @@ -285,8 +288,8 @@ public class Array implements java.sql.Array fields[1] = new Field(conn, "VALUE", field.getOID("time"), 8); for( int i=0; i<timeArray.length; i++ ) { byte[][] tuple = new byte[2][0]; - tuple[0] = Integer.toString((int)index+i).getBytes(); // Index - tuple[1] = timeArray[i].toString().getBytes(); // Value + tuple[0] = conn.getEncoding().encode( Integer.toString((int)index+i) ); // Index + tuple[1] = conn.getEncoding().encode( timeArray[i].toString() ); // Value rows.addElement(tuple); } break; @@ -295,8 +298,8 @@ public class Array implements java.sql.Array fields[1] = new Field(conn, "VALUE", field.getOID("timestamp"), 8); for( int i=0; i<timestampArray.length; i++ ) { byte[][] tuple = new byte[2][0]; - tuple[0] = Integer.toString((int)index+i).getBytes(); // Index - tuple[1] = timestampArray[i].toString().getBytes(); // Value + tuple[0] = conn.getEncoding().encode( Integer.toString((int)index+i) ); // Index + tuple[1] = conn.getEncoding().encode( timestampArray[i].toString() ); // Value rows.addElement(tuple); } break; @@ -308,5 +311,7 @@ public class Array implements java.sql.Array } return new ResultSet((org.postgresql.jdbc2.Connection)conn, fields, rows, "OK", 1 ); } + + public String toString() { return rawString; } } diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/CallableStatement.java b/src/interfaces/jdbc/org/postgresql/jdbc2/CallableStatement.java index fc2c60f29f45848af6b1cbe45ee8523e552b8b60..bd85696e0c8c8149da381daff77be34a9b64e33f 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc2/CallableStatement.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc2/CallableStatement.java @@ -308,7 +308,7 @@ public int getInt(int parameterIndex) throws SQLException { // ** JDBC 2 Extensions ** - public Array getArray(int i) throws SQLException + public java.sql.Array getArray(int i) throws SQLException { throw org.postgresql.Driver.notImplemented(); } diff --git a/src/interfaces/jdbc/org/postgresql/jdbc2/PreparedStatement.java b/src/interfaces/jdbc/org/postgresql/jdbc2/PreparedStatement.java index ab5601b026cf88269eb5e17e6a909c41aab87438..8532fe777fac86d27550a07738461e735930b473 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc2/PreparedStatement.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc2/PreparedStatement.java @@ -698,9 +698,9 @@ public class PreparedStatement extends Statement implements java.sql.PreparedSta return null; } - public void setArray(int i,Array x) throws SQLException + public void setArray(int i, java.sql.Array x) throws SQLException { - throw org.postgresql.Driver.notImplemented(); + setString(i, x.toString()); } /**