Mercurial > hg > monetdb-java
changeset 441:84f6d86ed590
Optimise composing the "SET TIME ZONE ..." string by using a StringBuilder. Less String copying.
Moved 2 utility methods to the end with the other utility methods.
author | Martin van Dinther <martin.van.dinther@monetdbsolutions.com> |
---|---|
date | Wed, 10 Feb 2021 19:38:22 +0100 (2021-02-10) |
parents | a851e6d6a71a |
children | de1b452b662b |
files | src/main/java/org/monetdb/jdbc/MonetConnection.java |
diffstat | 1 files changed, 46 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- a/src/main/java/org/monetdb/jdbc/MonetConnection.java +++ b/src/main/java/org/monetdb/jdbc/MonetConnection.java @@ -214,8 +214,8 @@ public class MonetConnection } else { addWarning("Fetch size must either be positive or -1. Value " + fetchsize + " ignored", "M1M05"); } - } catch (java.lang.NumberFormatException e) { - addWarning("Invalid fetch size. Value '" + fetchsize_prop + "' ignored", "M1M05"); + } catch (NumberFormatException e) { + addWarning("Unable to parse fetch size number from: " + fetchsize_prop, "M1M05"); } } @@ -278,10 +278,10 @@ public class MonetConnection server.setDatabase(database); server.setLanguage(language); - HandshakeOptions handshakeOptions = new HandshakeOptions(); final Calendar cal = Calendar.getInstance(); int offsetMillis = cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET); int offsetSeconds = offsetMillis / 1000; + final HandshakeOptions handshakeOptions = new HandshakeOptions(); handshakeOptions.setTimeZone(offsetSeconds); handshakeOptions.setReplySize(defaultFetchSize); server.setHandshakeOptions(handshakeOptions); @@ -379,12 +379,24 @@ public class MonetConnection // set our time zone on the server, if we haven't already if (handshakeOptions.mustSendTimeZone()) { + final StringBuilder tz = new StringBuilder(64); + tz.append("SET TIME ZONE INTERVAL '"); int offsetMinutes = handshakeOptions.getTimeZone() / 60; - String tz = offsetMinutes < 0 ? "-" : "+"; - tz += (Math.abs(offsetMinutes) / 60 < 10 ? "0" : "") + (Math.abs(offsetMinutes) / 60) + ":"; - offsetMinutes -= (offsetMinutes / 60) * 60; - tz += (offsetMinutes < 10 ? "0" : "") + offsetMinutes; - sendIndependentCommand("SET TIME ZONE INTERVAL '" + tz + "' HOUR TO MINUTE"); + if (offsetMinutes < 0) { + tz.append('-'); + offsetMinutes = -offsetMinutes; // make it positive + } else { + tz.append('+'); + } + int offsetHours = offsetMinutes / 60; + if (offsetHours < 10) + tz.append('0'); + tz.append(offsetHours).append(':'); + offsetMinutes -= offsetHours * 60; + if (offsetMinutes < 10) + tz.append('0'); + tz.append(offsetMinutes).append("' HOUR TO MINUTE"); + sendIndependentCommand(tz.toString()); } } @@ -1465,8 +1477,7 @@ public class MonetConnection return; } // only set value for supported property names, warn about the others - if (checkValidProperty(name, "setClientInfo")) - { + if (checkValidProperty(name, "setClientInfo")) { conn_props.setProperty(name, value); } } @@ -1503,31 +1514,6 @@ public class MonetConnection } } - private boolean checkValidProperty(String name, String context) { - boolean valid = isValidProperty(name); - if (!valid) { - addWarning(java.lang.String.format("%s: '%s' is not a recognised property", context, name), "01M07"); - } - return valid; - } - - private boolean isValidProperty(String name) { - return name.equals("host") || - name.equals("port") || - name.equals("user") || - name.equals("password") || - name.equals("database") || - name.equals("language") || - name.equals("so_timeout") || - name.equals("debug") || - name.equals("hash") || - name.equals("treat_blob_as_binary") || - name.equals("treat_clob_as_varchar") || - name.equals("fetchsize") || - name.equals("logfile") - ; - } - //== Java 1.7 methods (JDBC 4.1) /** @@ -1750,6 +1736,31 @@ public class MonetConnection return sb.toString(); } + private boolean checkValidProperty(String name, String context) { + if (isValidProperty(name)) + return true; + addWarning(context + ": '" + name + "' is not a recognised property", "01M07"); + return false; + } + + // supported MonetDB connection properties. + // See also MonetDatabaseMetaData.getClientInfoProperties() + private boolean isValidProperty(String name) { + return name.equals("host") || + name.equals("port") || + name.equals("user") || + name.equals("password") || + name.equals("language") || + name.equals("database") || + name.equals("debug") || + name.equals("logfile") || + name.equals("hash") || + name.equals("treat_blob_as_binary") || + name.equals("treat_clob_as_varchar") || + name.equals("so_timeout") || + name.equals("fetchsize"); // only supported by servers from version 11.41.1 onwards + } + // Internal caches for 3 static mserver environment values, so they aren't queried from mserver again and again private String env_current_user;