# 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); + } +}