Changeset: c5e47b8a509c for monetdb-java URL: https://dev.monetdb.org/hg/monetdb-java/rev/c5e47b8a509c Modified Files: src/main/java/org/monetdb/jdbc/MonetConnection.java src/main/java/org/monetdb/mcl/net/Parameter.java src/main/java/org/monetdb/mcl/net/Target.java Branch: default Log Message:
Prefer getters of class Target.Validated over class Target This makes it easier to check that all settings are used. diffs (193 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 @@ -39,6 +39,7 @@ import org.monetdb.mcl.io.LineType; import org.monetdb.mcl.net.ClientInfo; import org.monetdb.mcl.net.MapiSocket; import org.monetdb.mcl.net.Target; +import org.monetdb.mcl.net.ValidationError; import org.monetdb.mcl.parser.HeaderLineParser; import org.monetdb.mcl.parser.MCLParseException; import org.monetdb.mcl.parser.StartOfHeaderParser; @@ -152,12 +153,18 @@ public class MonetConnection throws SQLException, IllegalArgumentException { this.target = target; + Target.Validated validated; + try { + validated = target.validate(); + } catch (ValidationError e) { + throw new SQLNonTransientConnectionException(e.getMessage()); + } server = new MapiSocket(); // we're debugging here... uhm, should be off in real life - if (target.isDebug()) { + if (validated.isDebug()) { try { - String fname = target.getLogfile(); + String fname = validated.getLogfile(); if (fname == null) fname = "monet_" + System.currentTimeMillis() + ".log"; @@ -180,7 +187,7 @@ public class MonetConnection } SqlOptionsCallback callback = null; - switch (target.getLanguage()) { + switch (validated.getLanguage()) { case "sql": lang = LANG_SQL; queryTempl[0] = "s"; // pre @@ -188,7 +195,7 @@ public class MonetConnection queryTempl[2] = "\n;\n"; // separator commandTempl[0] = "X"; // pre commandTempl[1] = ""; // post - callback = new SqlOptionsCallback(); + callback = new SqlOptionsCallback(validated); break; case "mal": lang = LANG_MAL; @@ -231,11 +238,11 @@ public class MonetConnection throw sqle; } - if (server.canClientInfo() && target.sendClientInfo()) { + if (server.canClientInfo() && validated.sendClientInfo()) { ClientInfo info = new ClientInfo(); info.setDefaults(); - String clientApplication = target.getClientApplication(); - String clientRemark = target.getClientRemark(); + String clientApplication = validated.getClientApplication(); + String clientRemark = validated.getClientRemark(); if (!clientApplication.isEmpty()) info.set("ApplicationName", clientApplication); if (!clientRemark.isEmpty()) @@ -246,23 +253,23 @@ public class MonetConnection // Now take care of any options not handled during the handshake curReplySize = defaultFetchSize; if (lang == LANG_SQL) { - if (autoCommit != target.isAutocommit()) { - setAutoCommit(target.isAutocommit()); + if (autoCommit != validated.isAutocommit()) { + setAutoCommit(validated.isAutocommit()); } if (!callback.sizeHeaderEnabled) { sendControlCommand("sizeheader 1"); } if (!callback.timeZoneSet) { - setTimezone(60 * target.getTimezone()); + setTimezone(60 * validated.getTimezone()); } } // we're absolutely not closed, since we're brand new closed = false; - if (!target.getSchema().isEmpty()) { + if (!validated.getSchema().isEmpty()) { try (Statement stmt = this.createStatement()) { - String escaped = target.getSchema().replaceAll("\"", "\"\""); + String escaped = validated.getSchema().replaceAll("\"", "\"\""); stmt.execute("SET SCHEMA \"" + escaped + "\""); } } @@ -3863,10 +3870,16 @@ public class MonetConnection private class SqlOptionsCallback extends MapiSocket.OptionsCallback { + private final Target.Validated validated; private int level; boolean sizeHeaderEnabled = false; // used during handshake boolean timeZoneSet = false; // used during handshake + public SqlOptionsCallback(Target.Validated validated) { + super(); + this.validated = validated; + } + @Override public void addOptions(String lang, int level) { @@ -3875,10 +3888,10 @@ public class MonetConnection this.level = level; // Try to add options and record that this happened if it succeeds. - if (contribute(SqlOption.Autocommit, target.isAutocommit() ? 1 : 0)) + if (contribute(SqlOption.Autocommit, validated.isAutocommit() ? 1 : 0)) autoCommit = target.isAutocommit(); - if (contribute(SqlOption.ReplySize, target.getReplySize())) - defaultFetchSize = target.getReplySize(); + if (contribute(SqlOption.ReplySize, validated.getReplySize())) + defaultFetchSize = validated.getReplySize(); if (contribute(SqlOption.SizeHeader, 1)) sizeHeaderEnabled = true; if (contribute(SqlOption.TimeZone, 60 * target.getTimezone())) diff --git a/src/main/java/org/monetdb/mcl/net/Parameter.java b/src/main/java/org/monetdb/mcl/net/Parameter.java --- a/src/main/java/org/monetdb/mcl/net/Parameter.java +++ b/src/main/java/org/monetdb/mcl/net/Parameter.java @@ -222,6 +222,24 @@ public enum Parameter { for (Parameter parm: Parameter.values()) { if (!includeTls && parm.isTlsRelated) continue; + switch (parm) { + case TABLESCHEMA: + case TABLE: + case SOCK: + case SOCKDIR: + case BINARY: + case CLOB_AS_VARCHAR: + case BLOB_AS_BINARY: + // hide, not supported in Java + continue; + case FETCHSIZE: + // hide, alias of REPLYSIZE + continue; + case LANGUAGE: + case HASH: + // hide, we don't want users to mess with this + continue; + } if (parm == Parameter.FETCHSIZE) // alias of REPLYSIZE continue; String value = info == null ? null : info.getProperty(parm.name); diff --git a/src/main/java/org/monetdb/mcl/net/Target.java b/src/main/java/org/monetdb/mcl/net/Target.java --- a/src/main/java/org/monetdb/mcl/net/Target.java +++ b/src/main/java/org/monetdb/mcl/net/Target.java @@ -766,7 +766,7 @@ public final class Target { return language; } - public boolean getAutocommit() { + public boolean isAutocommit() { return autocommit; } @@ -791,7 +791,7 @@ public final class Target { return hash; } - public boolean getDebug() { + public boolean isDebug() { return debug; } @@ -811,6 +811,18 @@ public final class Target { return treatBlobAsBinary; } + public boolean sendClientInfo() { + return clientInfo; + } + + public String getClientApplication() { + return clientApplication; + } + + public String getClientRemark() { + return clientRemark; + } + public boolean connectScan() { if (database.isEmpty()) return false; _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org