modifications to the way the protocol is handled to be consistent with
authorDave Cramer
Thu, 21 Mar 2002 02:52:37 +0000 (02:52 +0000)
committerDave Cramer
Thu, 21 Mar 2002 02:52:37 +0000 (02:52 +0000)
QueryExecutor. This includes:
1) only exit after we receive a 'Z' packet
2) append error messages to a buffer and throw the exception at the end

src/interfaces/jdbc/org/postgresql/fastpath/Fastpath.java

index 5c7850147f2a74827cb7883f5911a3087178b688..2581f59b52c79cf5e619d5e4612010e0771bbfa8 100644 (file)
@@ -98,7 +98,9 @@ public class Fastpath
 
            // Now loop, reading the results
            Object result = null; // our result
-           while (true)
+           StringBuffer errorMessage = null;
+           boolean loop = true;
+           while (loop)
            {
                int in = stream.ReceiveChar();
                //DriverManager.println("ReceiveChar() = "+in+" '"+((char)in)+"'");
@@ -128,8 +130,10 @@ public class Fastpath
                        //------------------------------
                        // Error message returned
                    case 'E':
-                       throw new PSQLException("postgresql.fp.error", stream.ReceiveString(conn.getEncoding()));
-
+                       if ( errorMessage == null )
+                           errorMessage = new StringBuffer();
+                       errorMessage.append(stream.ReceiveString(conn.getEncoding()));
+                       break;
                        //------------------------------
                        // Notice from backend
                    case 'N':
@@ -143,15 +147,22 @@ public class Fastpath
                        // processed earlier. If no result, this already contains null
                    case '0':
                        //DriverManager.println("returning "+result);
-                       return result;
-
+                       // return result;
+                       break;
                    case 'Z':
+                       // cause the loop to exit
+                       loop = false;
                        break;
 
                    default:
                        throw new PSQLException("postgresql.fp.protocol", new Character((char)in));
                }
            }
+           
+           if ( errorMessage != null )
+               throw new PSQLException("postgresql.fp.error", errorMessage.toString());
+
+           return result;
        }
    }