changeset 843:3f288787fd77 monetdbs

Merge 'default' into 'monetdbs'
author Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
date Wed, 03 Jan 2024 11:36:52 +0100 (15 months ago)
parents 99ed7dbb2e05 (current diff) 93b256bf29a7 (diff)
children f2689a3e9a95
files src/main/java/org/monetdb/jdbc/MonetConnection.java src/main/java/org/monetdb/mcl/net/MapiSocket.java
diffstat 7 files changed, 19 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/org/monetdb/jdbc/MonetBlob.java
+++ b/src/main/java/org/monetdb/jdbc/MonetBlob.java
@@ -299,8 +299,8 @@ public final class MonetBlob implements 
 		try {
 			offset--;
 			/* transactions? what are you talking about? */
-			for (int i = (int)pos; i < len; i++)
-				buf[i] = bytes[offset + i];
+            if (len - (int) pos >= 0)
+                System.arraycopy(bytes, offset + (int) pos, buf, (int) pos, len - (int) pos);
 		} catch (IndexOutOfBoundsException e) {
 			throw new SQLException(e.getMessage(), "M0M10");
 		}
--- a/src/main/java/org/monetdb/jdbc/MonetConnection.java
+++ b/src/main/java/org/monetdb/jdbc/MonetConnection.java
@@ -24,12 +24,8 @@ import java.sql.SQLNonTransientConnectio
 import java.sql.SQLWarning;
 import java.sql.Savepoint;
 import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.WeakHashMap;
 import java.util.concurrent.Executor;
 
 import org.monetdb.mcl.io.BufferedMCLReader;
@@ -2765,8 +2761,7 @@ public class MonetConnection
 		@Override
 		public void close() {
 			// feed all rows to the garbage collector
-			for (int i = 0; i < data.length; i++)
-				data[i] = null;
+            Arrays.fill(data, null);
 		}
 
 		/**
--- a/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
+++ b/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
@@ -1317,7 +1317,7 @@ public final class MonetDatabaseMetaData
 	 */
 	@Override
 	public int getMaxBinaryLiteralLength() {
-		return 2*1024*1024*1024 - 2;	// MonetDB supports null terminated strings of max 2GB, see function: int UTF8_strlen()
+		return 0x7ffffffe;	// MonetDB supports null terminated strings of max 2GB, see function: int UTF8_strlen()
 	}
 
 	/**
@@ -1327,7 +1327,7 @@ public final class MonetDatabaseMetaData
 	 */
 	@Override
 	public int getMaxCharLiteralLength() {
-		return 2*1024*1024*1024 - 2;	// MonetDB supports null terminated strings of max 2GB, see function: int UTF8_strlen()
+		return 0x7ffffffe;	// MonetDB supports null terminated strings of max 2GB, see function: int UTF8_strlen()
 	}
 
 	/**
@@ -1492,7 +1492,7 @@ public final class MonetDatabaseMetaData
 	 */
 	@Override
 	public int getMaxStatementLength() {
-		return 2*1024*1024*1024 - 2;	// MonetDB supports null terminated strings of max 2GB, see function: int UTF8_strlen()
+		return 0x7ffffffe;	// MonetDB supports null terminated strings of max 2GB, see function: int UTF8_strlen()
 	}
 
 	/**
--- a/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java
+++ b/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java
@@ -944,7 +944,13 @@ public class MonetPreparedStatement
 		// simply serialise the Reader data into a large buffer
 		final CharBuffer buf = CharBuffer.allocate((int)length); // have to down cast
 		try {
-			reader.read(buf);
+			long foo = 0;
+			while (foo < length) {
+				int n = reader.read(buf);
+				if (n < 0)
+					throw new SQLException("Stream ended unexpectedly at position " + foo + " out of " + length);
+				foo += n;
+			}
 			// We have to rewind the buffer, because otherwise toString() returns "".
 			buf.rewind();
 			setString(parameterIndex, buf.toString());
--- a/src/main/java/org/monetdb/jdbc/MonetStatement.java
+++ b/src/main/java/org/monetdb/jdbc/MonetStatement.java
@@ -689,7 +689,7 @@ public class MonetStatement
 	 */
 	@Override
 	public int getMaxFieldSize() {
-		return 2*1024*1024*1024 - 2;	// MonetDB supports null terminated strings of max 2GB, see function: int UTF8_strlen()
+		return 0x7ffffffe;	// MonetDB supports null terminated strings of max 2GB, see function: int UTF8_strlen()
 	}
 
 	/**
@@ -1571,9 +1571,7 @@ final class MonetVirtualResultSet extend
 		if (row < 1 || row > tupleCount)
 			return false;
 
-		for (int i = 0; i < results[row - 1].length; i++) {
-			tlp.values[i] = results[row - 1][i];
-		}
+        System.arraycopy(results[row - 1], 0, tlp.values, 0, results[row - 1].length);
 
 		return true;
 	}
--- a/src/main/java/org/monetdb/mcl/net/MapiSocket.java
+++ b/src/main/java/org/monetdb/mcl/net/MapiSocket.java
@@ -1067,7 +1067,7 @@ public final class MapiSocket {
 			if (isDebug())
 				log("RX ", new String(block, readPos, 1, StandardCharsets.UTF_8), true);
 
-			return (int)block[readPos++];
+			return block[readPos++] & 0xFF;
 		}
 
 		@Override
@@ -1453,7 +1453,7 @@ public final class MapiSocket {
 			final byte[] buf = { 0 };
 			final int nread = read(buf, 0, 1);
 			if (nread == 1)
-				return buf[0];
+				return buf[0] & 0xFF;
 			else
 				return -1;
 		}
--- a/src/main/java/org/monetdb/mcl/parser/TupleLineParser.java
+++ b/src/main/java/org/monetdb/mcl/parser/TupleLineParser.java
@@ -112,7 +112,7 @@ public final class TupleLineParser exten
 							if (fieldHasEscape) {
 								if (uesc == null) {
 									// first time use, create it with enough capacity, minimum 1024
-									uesc = new StringBuilder(fieldlen > 1024 ? fieldlen : 1024);
+									uesc = new StringBuilder(Math.max(fieldlen, 1024));
 								} else {
 									// reuse the StringBuilder by cleaning it
 									uesc.setLength(0);