OSDN Git Service

modifications to the way the protocol is handled to be consistent with
authorDave Cramer <davec@fastcrypt.com>
Thu, 21 Mar 2002 02:52:37 +0000 (02:52 +0000)
committerDave Cramer <davec@fastcrypt.com>
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 5c78501..2581f59 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;
                }
        }