changeset 526:6060ca8c5c1a onclient

Add test for uploadFrom methods
author Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
date Thu, 26 Aug 2021 14:24:31 +0200 (2021-08-26)
parents 70ff796c42f7
children ccf9c7fbdb50
files src/main/java/org/monetdb/jdbc/MonetConnection.java tests/OnClientTester.java
diffstat 2 files changed, 50 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/org/monetdb/jdbc/MonetConnection.java
+++ b/src/main/java/org/monetdb/jdbc/MonetConnection.java
@@ -3336,7 +3336,7 @@ public class MonetConnection
 			uploadFrom(reader);
 		}
 
-		public void uploadFrom(BufferedReader reader) throws IOException {
+		public void uploadFrom(Reader reader) throws IOException {
 			OutputStream s = getStream();
 			OutputStreamWriter writer = new OutputStreamWriter(s, StandardCharsets.UTF_8);
 			char[] buffer = new char[64 * 1024];
--- a/tests/OnClientTester.java
+++ b/tests/OnClientTester.java
@@ -5,6 +5,7 @@ import org.monetdb.jdbc.MonetUploadHandl
 import java.io.*;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.nio.charset.StandardCharsets;
 import java.sql.*;
 
 public final class OnClientTester {
@@ -437,4 +438,51 @@ public final class OnClientTester {
 		test_Download(4_000_000);
 	}
 
-}
\ No newline at end of file
+	public void test_UploadFromStream() throws SQLException, Failure {
+		prepare();
+		MonetUploadHandler handler = new MonetUploadHandler() {
+			String data = "1|one\n2|two\n3|three\n";
+
+			@Override
+			public void handleUpload(MonetConnection.Upload handle, String name, boolean textMode, int offset) throws IOException {
+				ByteArrayInputStream s = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8));
+				handle.uploadFrom(s);
+			}
+		};
+		conn.setUploadHandler(handler);
+		update("COPY INTO foo FROM 'banana' ON CLIENT", 3);
+		queryInt("SELECT i FROM foo WHERE t = 'three'", 3);
+	}
+
+	public void test_UploadFromReader() throws SQLException, Failure {
+		prepare();
+		MonetUploadHandler handler = new MonetUploadHandler() {
+			String data = "1|one\n2|two\n3|three\n";
+
+			@Override
+			public void handleUpload(MonetConnection.Upload handle, String name, boolean textMode, int offset) throws IOException {
+				StringReader r = new StringReader(data);
+				handle.uploadFrom(r);
+			}
+		};
+		conn.setUploadHandler(handler);
+		update("COPY INTO foo FROM 'banana' ON CLIENT", 3);
+		queryInt("SELECT i FROM foo WHERE t = 'three'", 3);
+	}
+
+	public void test_UploadFromReaderOffset() throws SQLException, Failure {
+		prepare();
+		MonetUploadHandler handler = new MonetUploadHandler() {
+			String data = "1|one\n2|two\n3|three\n";
+
+			@Override
+			public void handleUpload(MonetConnection.Upload handle, String name, boolean textMode, int offset) throws IOException {
+				BufferedReader r = new BufferedReader(new StringReader(data));
+				handle.uploadFrom(r, offset);
+			}
+		};
+		conn.setUploadHandler(handler);
+		update("COPY OFFSET 2 INTO foo FROM 'banana' ON CLIENT", 2);
+		queryInt("SELECT i FROM foo WHERE t = 'three'", 3);
+	}
+}