Changeset: 53ef497672bf for monetdb-java
URL: http://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=53ef497672bf
Modified Files:
        src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
        src/main/java/nl/cwi/monetdb/jdbc/MonetStatement.java
        src/main/java/nl/cwi/monetdb/mcl/connection/mapi/MapiConnection.java
Branch: embedded
Log Message:

Limit the StringBuilder size for the JDBC embedded connection.


diffs (59 lines):

diff --git a/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java 
b/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
--- a/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
+++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
@@ -164,6 +164,13 @@ public abstract class MonetConnection ex
     public abstract int getDefFetchsize();
 
     /**
+     * Gets the initial value for the StringBuilder size.
+     *
+     * @return The initial value for the StringBuilder size
+     */
+    public abstract int initialStringBuilderSize();
+
+    /**
      * Gets the underlying connection socket timeout.
      *
      * @return The underlying connection socket timeout
diff --git a/src/main/java/nl/cwi/monetdb/jdbc/MonetStatement.java 
b/src/main/java/nl/cwi/monetdb/jdbc/MonetStatement.java
--- a/src/main/java/nl/cwi/monetdb/jdbc/MonetStatement.java
+++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetStatement.java
@@ -191,11 +191,12 @@ public class MonetStatement extends Mone
                        boolean error = false;
 
                        BatchUpdateException e = new 
BatchUpdateException("Error(s) occurred while executing the batch, see next 
SQLExceptions for details", "22000", counts);
-                       StringBuilder tmpBatch = new 
StringBuilder(connection.getBlockSize());
+                       int builderSize = connection.initialStringBuilderSize();
+                       StringBuilder tmpBatch = new StringBuilder(builderSize);
                        String sep = 
connection.getLanguage().getQueryTemplateIndex(2);
                        for (int i = 0; i < batch.size(); i++) {
                                String tmp = batch.get(i);
-                               if (sep.length() + tmp.length() > 
connection.getBlockSize()) {
+                               if (sep.length() + tmp.length() > builderSize) {
                                        // The thing is too big. Way too big. 
Since it won't be optimal anyway, just add it to whatever we
                                        // have and continue.
                                        if (!first) {
@@ -209,7 +210,7 @@ public class MonetStatement extends Mone
                                        first = true;
                                        continue;
                                }
-                               if (tmpBatch.length() + sep.length() + 
tmp.length() >= connection.getBlockSize()) {
+                               if (tmpBatch.length() + sep.length() + 
tmp.length() >= builderSize) {
                                        // send and receive
                                        error |= 
internalBatch(tmpBatch.toString(), counts, offset, i + 1, e);
                                        offset = i;
diff --git 
a/src/main/java/nl/cwi/monetdb/mcl/connection/mapi/MapiConnection.java 
b/src/main/java/nl/cwi/monetdb/mcl/connection/mapi/MapiConnection.java
--- a/src/main/java/nl/cwi/monetdb/mcl/connection/mapi/MapiConnection.java
+++ b/src/main/java/nl/cwi/monetdb/mcl/connection/mapi/MapiConnection.java
@@ -191,6 +191,11 @@ public class MapiConnection extends Mone
         return DEF_FETCHSIZE;
     }
 
+    @Override
+    public int initialStringBuilderSize() {
+        return this.getBlockSize();
+    }
+
     /**
      * Closes the underlying connection implementation. On a MAPI connection, 
the underlying socket is closed.
      *
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to