Changeset: 72efb3e34436 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=72efb3e34436
Modified Files:
        src/main/java/nl/cwi/monetdb/mcl/io/BufferedMCLReader.java
        src/main/java/nl/cwi/monetdb/mcl/io/BufferedMCLWriter.java
Branch: default
Log Message:

Improve setLineType()
Add initialisation of lineType.
Add != null check to prevent NPE
Add and update comments


diffs (143 lines):

diff --git a/src/main/java/nl/cwi/monetdb/mcl/io/BufferedMCLReader.java 
b/src/main/java/nl/cwi/monetdb/mcl/io/BufferedMCLReader.java
--- a/src/main/java/nl/cwi/monetdb/mcl/io/BufferedMCLReader.java
+++ b/src/main/java/nl/cwi/monetdb/mcl/io/BufferedMCLReader.java
@@ -62,7 +62,7 @@ public class BufferedMCLReader extends B
        public final static int INFO     = '#';
 
        /** The type of the last line read */
-       private int lineType;
+       private int lineType = UNKNOWN;
 
        /**
         * Create a buffering character-input stream that uses a
@@ -97,8 +97,7 @@ public class BufferedMCLReader extends B
         *
         * Warning: until the server properly prefixes all of its error
         * messages with SQLSTATE codes, this method prefixes all errors it
-        * sees without sqlstate with the generic data exception code
-        * (22000).
+        * sees without sqlstate with the generic data exception code (22000).
         *
         * @return A String containing the contents of the line, not
         *         including any line-termination characters, or null if the
@@ -109,8 +108,9 @@ public class BufferedMCLReader extends B
        public String readLine() throws IOException {
                String r = super.readLine();
                setLineType(r);
-               if (lineType == ERROR && !r.matches("^![0-9A-Z]{5}!.+"))
+               if (lineType == ERROR && r != null && 
!r.matches("^![0-9A-Z]{5}!.+")) {
                        r = "!22000!" + r.substring(1);
+               }
                return r;
        }
        
@@ -121,37 +121,38 @@ public class BufferedMCLReader extends B
         * @param line the string to examine
         */
        public void setLineType(String line) {
-               lineType = UNKNOWN;
-               if (line == null || line.length() == 0)
+               if (line == null || line.isEmpty()) {
+                       lineType = UNKNOWN;
                        return;
+               }
                switch (line.charAt(0)) {
-                       case '!':
-                               lineType = ERROR;
-                               break;
-                       case '&':
-                               lineType = SOHEADER;
-                               break;
-                       case '%':
-                               lineType = HEADER;
-                               break;
-                       case '[':
-                               lineType = RESULT;
-                               break;
-                       case '=':
-                               lineType = RESULT;
-                               break;
-                       case '^':
-                               lineType = REDIRECT;
-                               break;
-                       case '#':
-                               lineType = INFO;
-                               break;
                        case '.':
                                lineType = PROMPT;
                                break;
                        case ',':
                                lineType = MORE;
                                break;
+                       case '[':       /* multi field result */
+                       case '=':       /* single value result */
+                               lineType = RESULT;
+                               break;
+                       case '%':
+                               lineType = HEADER;
+                               break;
+                       case '&':
+                               lineType = SOHEADER;
+                               break;
+                       case '#':
+                               lineType = INFO;
+                               break;
+                       case '!':
+                               lineType = ERROR;
+                               break;
+                       case '^':
+                               lineType = REDIRECT;
+                               break;
+                       default:
+                               lineType = UNKNOWN;
                }
        }
 
@@ -159,8 +160,8 @@ public class BufferedMCLReader extends B
         * getLineType returns the type of the last line read.
         *
         * @return an integer representing the kind of line this is, one of the
-        *         following constants: UNKNOWN, HEADER, ERROR, PROMPT,
-        *         RESULT, REDIRECT, INFO
+        *         following constants: UNKNOWN, HEADER, ERROR, PROMPT, MORE,
+        *         RESULT, SOHEADER, REDIRECT, INFO
         */
        public int getLineType() {
                return lineType;
@@ -169,8 +170,7 @@ public class BufferedMCLReader extends B
        /**
         * Reads up till the MonetDB prompt, indicating the server is ready
         * for a new command.  All read data is discarded.  If the last line
-        * read by readLine() was a prompt, this method will immediately
-        * return.
+        * read by readLine() was a prompt, this method will immediately return.
         *
         * If there are errors present in the lines that are read, then they
         * are put in one string and returned <b>after</b> the prompt has
@@ -184,6 +184,7 @@ public class BufferedMCLReader extends B
        final public synchronized String waitForPrompt() throws IOException {
                String tmp;
                StringBuilder ret = new StringBuilder(128);
+
                while (lineType != PROMPT) {
                        tmp = readLine();
                        if (tmp == null)
diff --git a/src/main/java/nl/cwi/monetdb/mcl/io/BufferedMCLWriter.java 
b/src/main/java/nl/cwi/monetdb/mcl/io/BufferedMCLWriter.java
--- a/src/main/java/nl/cwi/monetdb/mcl/io/BufferedMCLWriter.java
+++ b/src/main/java/nl/cwi/monetdb/mcl/io/BufferedMCLWriter.java
@@ -74,7 +74,6 @@ public class BufferedMCLWriter extends B
                write('\n');
        }
 
-
        /**
         * Registers the given reader in this writer.  A registered reader
         * receives a linetype reset when a line is written from this
@@ -97,6 +96,7 @@ public class BufferedMCLWriter extends B
        public void writeLine(String line) throws IOException {
                write(line);
                flush();
+
                // reset reader state, last line isn't valid any more now
                if (reader != null)
                        reader.setLineType(null);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to