Changeset: aed7f32e029a for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/aed7f32e029a
Added Files:
src/main/java/org/monetdb/mcl/io/LineType.java
Modified Files:
src/main/java/org/monetdb/jdbc/MonetConnection.java
src/main/java/org/monetdb/mcl/io/BufferedMCLReader.java
src/main/java/org/monetdb/mcl/net/MapiSocket.java
src/main/java/org/monetdb/merovingian/Control.java
src/main/java/org/monetdb/util/SQLRestore.java
Branch: onclient
Log Message:
Refactor LineType to be an enum
Makes it easier to catch them all when changing things.
diffs (282 lines):
diff --git a/src/main/java/org/monetdb/jdbc/MonetConnection.java
b/src/main/java/org/monetdb/jdbc/MonetConnection.java
--- a/src/main/java/org/monetdb/jdbc/MonetConnection.java
+++ b/src/main/java/org/monetdb/jdbc/MonetConnection.java
@@ -35,6 +35,7 @@ import java.util.concurrent.Executor;
import org.monetdb.mcl.io.BufferedMCLReader;
import org.monetdb.mcl.io.BufferedMCLWriter;
+import org.monetdb.mcl.io.LineType;
import org.monetdb.mcl.net.HandshakeOptions;
import org.monetdb.mcl.net.MapiSocket;
import org.monetdb.mcl.parser.HeaderLineParser;
@@ -2100,7 +2101,7 @@ public class MonetConnection
* @return a non-null String if the line is invalid,
* or additional lines are not allowed.
*/
- public abstract String addLine(String line, int linetype);
+ public abstract String addLine(String line, LineType linetype);
/**
* Returns whether this Response expects more lines to be added
@@ -2259,12 +2260,12 @@ public class MonetConnection
*/
// {{{ addLine
@Override
- public String addLine(final String tmpLine, final int linetype)
{
+ public String addLine(final String tmpLine, final LineType
linetype) {
if (isSet[LENS] && isSet[TYPES] && isSet[TABLES] &&
isSet[NAMES]) {
return resultBlocks[0].addLine(tmpLine,
linetype);
}
- if (linetype != BufferedMCLReader.HEADER)
+ if (linetype != LineType.HEADER)
return "header expected, got: " + tmpLine;
// depending on the name of the header, we continue
@@ -2634,8 +2635,8 @@ public class MonetConnection
* or additional lines are not allowed.
*/
@Override
- public String addLine(final String line, final int linetype) {
- if (linetype != BufferedMCLReader.RESULT)
+ public String addLine(final String line, final LineType
linetype) {
+ if (linetype != LineType.RESULT)
return "protocol violation: unexpected line in
data block: " + line;
// add to the backing array
data[++pos] = line;
@@ -2725,7 +2726,7 @@ public class MonetConnection
}
@Override
- public String addLine(final String line, final int linetype) {
+ public String addLine(final String line, final LineType
linetype) {
return "Header lines are not supported for an
UpdateResponse";
}
@@ -2762,7 +2763,7 @@ public class MonetConnection
public final int state = Statement.SUCCESS_NO_INFO;
@Override
- public String addLine(final String line, final int linetype) {
+ public String addLine(final String line, final LineType
linetype) {
return "Header lines are not supported for a
SchemaResponse";
}
@@ -2990,12 +2991,12 @@ public class MonetConnection
// go for new results
String tmpLine = in.readLine();
- int linetype = in.getLineType();
+ LineType linetype = in.getLineType();
Response res = null;
- while (linetype !=
BufferedMCLReader.PROMPT) {
+ while (linetype != LineType.PROMPT) {
// each response should start
with a start of header (or error)
switch (linetype) {
- case BufferedMCLReader.SOHEADER:
+ case SOHEADER:
// make the response
object, and fill it
try {
switch
(sohp.parse(tmpLine)) {
@@ -3100,7 +3101,7 @@ public class MonetConnection
tmpLine = in.readLine();
linetype =
in.getLineType();
break;
- case BufferedMCLReader.INFO:
+ case INFO:
addWarning(tmpLine.substring(1), "01000");
// read the next line
(can be prompt, new result, error, etc.)
// before we start the
loop over
@@ -3111,7 +3112,7 @@ public class MonetConnection
// we have something we
don't expect/understand, let's make it an error message
tmpLine =
"!M0M10!protocol violation, unexpected line: " + tmpLine;
// don't break; fall
through...
- case BufferedMCLReader.ERROR:
+ case ERROR:
// read everything till
the prompt (should be
// error) we don't know
if we ignore some
// garbage here... but
the log should reveal that
diff --git a/src/main/java/org/monetdb/mcl/io/BufferedMCLReader.java
b/src/main/java/org/monetdb/mcl/io/BufferedMCLReader.java
--- a/src/main/java/org/monetdb/mcl/io/BufferedMCLReader.java
+++ b/src/main/java/org/monetdb/mcl/io/BufferedMCLReader.java
@@ -14,6 +14,8 @@ import java.io.InputStream;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
+import static org.monetdb.mcl.io.LineType.*;
+
/**
* Read text from a character-input stream, buffering characters so as
* to provide a means for efficient reading of characters, arrays and
@@ -41,27 +43,9 @@ import java.io.UnsupportedEncodingExcept
* @see org.monetdb.mcl.io.BufferedMCLWriter
*/
public final class BufferedMCLReader extends BufferedReader {
- /** "there is currently no line", or the the type is unknown is
represented by UNKNOWN */
- public final static int UNKNOWN = 0;
- /** a line starting with ! indicates ERROR */
- public final static int ERROR = '!';
- /** a line starting with % indicates HEADER */
- public final static int HEADER = '%';
- /** a line starting with [ indicates RESULT */
- public final static int RESULT = '[';
- /** a line which matches the pattern of prompt1 is a PROMPT */
- public final static int PROMPT = '.';
- /** a line which matches the pattern of prompt2 is a MORE */
- public final static int MORE = ',';
- /** a line starting with & indicates the start of a header block */
- public final static int SOHEADER = '&';
- /** a line starting with ^ indicates REDIRECT */
- public final static int REDIRECT = '^';
- /** a line starting with # indicates INFO */
- public final static int INFO = '#';
/** The type of the last line read */
- private int lineType = UNKNOWN;
+ private LineType lineType = UNKNOWN;
/**
* Create a buffering character-input stream that uses a
@@ -162,7 +146,7 @@ public final class BufferedMCLReader ext
* following constants: UNKNOWN, HEADER, ERROR, PROMPT, MORE,
* RESULT, SOHEADER, REDIRECT, INFO
*/
- public int getLineType() {
+ public LineType getLineType() {
return lineType;
}
diff --git a/src/main/java/org/monetdb/mcl/io/LineType.java
b/src/main/java/org/monetdb/mcl/io/LineType.java
new file mode 100644
--- /dev/null
+++ b/src/main/java/org/monetdb/mcl/io/LineType.java
@@ -0,0 +1,32 @@
+package org.monetdb.mcl.io;
+
+public enum LineType {
+ /** "there is currently no line", or the the type is unknown is
represented by UNKNOWN */
+ UNKNOWN(0),
+ /** a line starting with ! indicates ERROR */
+ ERROR('!'),
+ /** a line starting with % indicates HEADER */
+ HEADER('%'),
+ /** a line starting with [ indicates RESULT */
+ RESULT('['),
+ /** a line which matches the pattern of prompt1 is a PROMPT */
+ PROMPT('.'),
+ /** a line which matches the pattern of prompt2 is a MORE */
+ MORE(','),
+ /** a line starting with & indicates the start of a header block */
+ SOHEADER('&'),
+ /** a line starting with ^ indicates REDIRECT */
+ REDIRECT('^'),
+ /** a line starting with # indicates INFO */
+ INFO('#');
+
+ private final byte chr;
+
+ LineType(int chr) {
+ this.chr = (byte) chr;
+ }
+
+ public byte chr() {
+ return this.chr;
+ }
+}
diff --git a/src/main/java/org/monetdb/mcl/net/MapiSocket.java
b/src/main/java/org/monetdb/mcl/net/MapiSocket.java
--- a/src/main/java/org/monetdb/mcl/net/MapiSocket.java
+++ b/src/main/java/org/monetdb/mcl/net/MapiSocket.java
@@ -31,6 +31,7 @@ import java.util.List;
import org.monetdb.mcl.MCLException;
import org.monetdb.mcl.io.BufferedMCLReader;
import org.monetdb.mcl.io.BufferedMCLWriter;
+import org.monetdb.mcl.io.LineType;
import org.monetdb.mcl.parser.MCLParseException;
/**
@@ -293,7 +294,7 @@ public class MapiSocket { /* cannot (yet
final ArrayList<String> redirects = new ArrayList<String>();
final List<String> warns = new ArrayList<String>();
String err = "", tmp;
- int lineType;
+ LineType lineType;
do {
tmp = reader.readLine();
if (tmp == null)
@@ -301,14 +302,14 @@ public class MapiSocket { /* cannot (yet
con.getInetAddress().getHostName() + ":" +
con.getPort() + ": End of
stream reached");
lineType = reader.getLineType();
- if (lineType == BufferedMCLReader.ERROR) {
+ if (lineType == LineType.ERROR) {
err += "\n" + tmp.substring(7);
- } else if (lineType == BufferedMCLReader.INFO) {
+ } else if (lineType == LineType.INFO) {
warns.add(tmp.substring(1));
- } else if (lineType == BufferedMCLReader.REDIRECT) {
+ } else if (lineType == LineType.REDIRECT) {
redirects.add(tmp.substring(1));
}
- } while (lineType != BufferedMCLReader.PROMPT);
+ } while (lineType != LineType.PROMPT);
if (err.length() > 0) {
close();
@@ -984,7 +985,7 @@ public class MapiSocket { /* cannot (yet
block[blockLen++] = '\n';
}
// insert 'fake' flush
- block[blockLen++] = BufferedMCLReader.PROMPT;
+ block[blockLen++] = LineType.PROMPT.chr();
block[blockLen++] = '\n';
if (debug)
log("RD ", "inserting prompt", true);
diff --git a/src/main/java/org/monetdb/merovingian/Control.java
b/src/main/java/org/monetdb/merovingian/Control.java
--- a/src/main/java/org/monetdb/merovingian/Control.java
+++ b/src/main/java/org/monetdb/merovingian/Control.java
@@ -207,17 +207,17 @@ public class Control {
mout.writeLine(database + " " + command + "\n");
ArrayList<String> l = new ArrayList<String>();
String tmpLine = min.readLine();
- int linetype = min.getLineType();
- if (linetype == BufferedMCLReader.ERROR)
+ LineType linetype = min.getLineType();
+ if (linetype == LineType.ERROR)
throw new MerovingianException(tmpLine.substring(6));
- if (linetype != BufferedMCLReader.RESULT)
+ if (linetype != LineType.RESULT)
throw new MerovingianException("unexpected line: " +
tmpLine);
if (!tmpLine.substring(1).equals(RESPONSE_OK))
throw new MerovingianException(tmpLine.substring(1));
tmpLine = min.readLine();
linetype = min.getLineType();
- while (linetype != BufferedMCLReader.PROMPT) {
- if (linetype != BufferedMCLReader.RESULT)
+ while (linetype != LineType.PROMPT) {
+ if (linetype != LineType.RESULT)
throw new MerovingianException("unexpected
line: " +
tmpLine);
diff --git a/src/main/java/org/monetdb/util/SQLRestore.java
b/src/main/java/org/monetdb/util/SQLRestore.java
--- a/src/main/java/org/monetdb/util/SQLRestore.java
+++ b/src/main/java/org/monetdb/util/SQLRestore.java
@@ -15,6 +15,7 @@ import java.util.concurrent.atomic.Atomi
import org.monetdb.mcl.io.BufferedMCLReader;
import org.monetdb.mcl.io.BufferedMCLWriter;
+import org.monetdb.mcl.io.LineType;
import org.monetdb.mcl.net.MapiSocket;
/**
@@ -53,9 +54,9 @@ public final class SQLRestore {
final String line = _is.readLine();
if (line == null)
break;
- final int result = _is.getLineType();
+ final LineType result =
_is.getLineType();
switch (result) {
- case BufferedMCLReader.ERROR:
+ case ERROR:
_errorMessage = line;
_errorState.set(true);
return;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list