You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by km...@apache.org on 2006/05/02 16:41:02 UTC

svn commit: r398944 - /db/derby/code/trunk/java/client/org/apache/derby/client/net/NetConnectionReply.java

Author: kmarsden
Date: Tue May  2 07:39:25 2006
New Revision: 398944

URL: http://svn.apache.org/viewcvs?rev=398944&view=rev
Log:
DERBY-900  Remove use of String(byte[]) and String(byte[], int, int) constructors in network client leading to non-portable behaviour

This patch derby900.p2_encodingChange.diff.txt makes the encoding related change to remove the non portable String.getBytes() method.
Additonal patch for cleanup will follow

Contributed by Sunitha Kambhampati

-- use correct encoding UTF8 for sqlstate in NetConnectionReply.::parseSQLDCGRP(Sqlca[] rowsetSqlca, int lastRow)



Modified:
    db/derby/code/trunk/java/client/org/apache/derby/client/net/NetConnectionReply.java

Modified: db/derby/code/trunk/java/client/org/apache/derby/client/net/NetConnectionReply.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/client/org/apache/derby/client/net/NetConnectionReply.java?rev=398944&r1=398943&r2=398944&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/net/NetConnectionReply.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/net/NetConnectionReply.java Tue May  2 07:39:25 2006
@@ -28,6 +28,7 @@
 import org.apache.derby.client.am.SqlException;
 import org.apache.derby.client.am.SqlState;
 import org.apache.derby.client.am.Sqlca;
+import java.io.UnsupportedEncodingException;
 
 public class NetConnectionReply extends Reply
         implements ConnectionReplyInterface {
@@ -3122,35 +3123,42 @@
     // SQLDCXGRP; PROTOCOL TYPE N-GDA; ENVLID 0xD3; Length Override 1
     private int parseSQLDCGRP(Sqlca[] rowsetSqlca, int lastRow) throws DisconnectException {
         int sqldcCode = readFastInt(); // SQLCODE
-        String sqldcState = readFastString(5, netAgent_.targetTypdef_.getCcsidSbcEncoding()); // SQLSTATE
+        String sqldcState = readFastString(5, Typdef.UTF8ENCODING); // SQLSTATE
         int sqldcReason = readFastInt();  // REASON_CODE
         int sqldcLinen = readFastInt(); // LINE_NUMBER
         int sqldcRown = (int) readFastLong(); // ROW_NUMBER
 
-        // save +20237 in the 0th entry of the rowsetSqlca's.
-        // this info is going to be used when a subsequent fetch prior is issued, and if already
-        // received a +20237 then we've gone beyond the first row and there is no need to
-        // flow another fetch to the server.
-        if (sqldcCode == 20237) {
-            rowsetSqlca[0] = new NetSqlca(netAgent_.netConnection_,
-                    sqldcCode,
-                    sqldcState.getBytes(),
-                    null,
-                    netAgent_.targetTypdef_.getCcsidSbc());
-        } else {
-            if (rowsetSqlca[sqldcRown] != null) {
-                rowsetSqlca[sqldcRown].resetRowsetSqlca(netAgent_.netConnection_,
+        try
+        {
+            // save +20237 in the 0th entry of the rowsetSqlca's.
+            // this info is going to be used when a subsequent fetch prior is issued, and if already
+            // received a +20237 then we've gone beyond the first row and there is no need to
+            // flow another fetch to the server.
+            if (sqldcCode == 20237) {
+                rowsetSqlca[0] = new NetSqlca(netAgent_.netConnection_,
                         sqldcCode,
-                        sqldcState.getBytes(),
+                        sqldcState.getBytes(Typdef.UTF8ENCODING),
                         null,
                         netAgent_.targetTypdef_.getCcsidSbc());
             } else {
-                rowsetSqlca[sqldcRown] = new NetSqlca(netAgent_.netConnection_,
-                        sqldcCode,
-                        sqldcState.getBytes(),
-                        null,
-                        netAgent_.targetTypdef_.getCcsidSbc());
+                if (rowsetSqlca[sqldcRown] != null) {
+                    rowsetSqlca[sqldcRown].resetRowsetSqlca(netAgent_.netConnection_,
+                            sqldcCode,
+                            sqldcState.getBytes(Typdef.UTF8ENCODING),
+                            null,
+                            netAgent_.targetTypdef_.getCcsidSbc());
+                } else {
+                    rowsetSqlca[sqldcRown] = new NetSqlca(netAgent_.netConnection_,
+                            sqldcCode,
+                            sqldcState.getBytes(Typdef.UTF8ENCODING),
+                            null,
+                            netAgent_.targetTypdef_.getCcsidSbc());
+                }
             }
+        }
+        catch(UnsupportedEncodingException uee)
+        {
+            throw new DisconnectException(uee,netAgent_); 
         }
 
         // reset all entries between lastRow and sqldcRown to null