# HG changeset patch
# User Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
# Date 1629980671 -7200
# Node ID 6060ca8c5c1a4c404512a3d0a03c266ac590390a
# Parent  70ff796c42f72b9a9658c8ab4388dc03d7061faf
Add test for uploadFrom methods

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
@@ -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];
diff --git a/tests/OnClientTester.java b/tests/OnClientTester.java
--- 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);
+	}
+}