Changeset: 84f6d86ed590 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=84f6d86ed590
Modified Files:
        src/main/java/org/monetdb/jdbc/MonetConnection.java
Branch: default
Log Message:

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.


diffs (130 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
@@ -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;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to