Changeset: 687034945b3f for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/687034945b3f
Modified Files:
        src/main/java/org/monetdb/client/JdbcClient.java
        src/main/java/org/monetdb/util/FileTransferHandler.java
        tests/OnClientTester.java
Branch: onclient
Log Message:

Pass expected encoding as a constructor parameter to FileTransferHandler


diffs (126 lines):

diff --git a/src/main/java/org/monetdb/client/JdbcClient.java 
b/src/main/java/org/monetdb/client/JdbcClient.java
--- a/src/main/java/org/monetdb/client/JdbcClient.java
+++ b/src/main/java/org/monetdb/client/JdbcClient.java
@@ -27,6 +27,7 @@ import java.io.File;
 import java.io.PrintWriter;
 import java.net.HttpURLConnection;
 import java.net.URL;
+import java.nio.charset.Charset;
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.DriverManager; // this import is required as it will trigger 
loading the org.monetdb.jdbc.MonetDriver class
@@ -353,7 +354,7 @@ public class JdbcClient {   /* cannot (yet
                                // check if provided csvdir is an existing dir
                                // else a download of data into file will 
terminate the JDBC connection!!
                                if 
(java.nio.file.Files.isDirectory(java.nio.file.Paths.get(csvdir))) {
-                                       final FileTransferHandler FThandler = 
new FileTransferHandler(csvdir, true);
+                                       final FileTransferHandler FThandler = 
new FileTransferHandler(csvdir, Charset.defaultCharset());
 
                                        // register file data uploadHandler to 
allow support
                                        // for: COPY INTO mytable FROM 
'data.csv' ON CLIENT;
diff --git a/src/main/java/org/monetdb/util/FileTransferHandler.java 
b/src/main/java/org/monetdb/util/FileTransferHandler.java
--- a/src/main/java/org/monetdb/util/FileTransferHandler.java
+++ b/src/main/java/org/monetdb/util/FileTransferHandler.java
@@ -10,6 +10,7 @@ package org.monetdb.util;
 
 import org.monetdb.jdbc.MonetConnection;
 
+import java.io.BufferedReader;
 import java.io.IOException;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
@@ -27,17 +28,16 @@ import java.nio.file.StandardOpenOption;
  */
 public class FileTransferHandler implements MonetConnection.UploadHandler, 
MonetConnection.DownloadHandler {
        private final Path root;
-       private final boolean utf8Encoded;
+       private final Charset encoding;
 
        /**
         * Create a new FileTransferHandler which serves the given directory.
-        *
         * @param dir directory to read and write files from
-        * @param utf8Encoded set this to true if all files in the directory 
are known to be utf-8 encoded.
+        * @param encoding set this to true if all files in the directory are 
known to be utf-8 encoded.
         */
-       public FileTransferHandler(final Path dir, final boolean utf8Encoded) {
-               root = dir.toAbsolutePath().normalize();
-               this.utf8Encoded = utf8Encoded;
+       public FileTransferHandler(final Path dir, final Charset encoding) {
+               this.root = dir.toAbsolutePath().normalize();
+               this.encoding = encoding;
        }
 
        /**
@@ -46,8 +46,8 @@ public class FileTransferHandler impleme
         * @param dir directory to read and write files from
         * @param utf8Encoded set this to true if all files in the directory 
are known to be utf-8 encoded.
         */
-       public FileTransferHandler(final String dir, final boolean utf8Encoded) 
{
-               this(FileSystems.getDefault().getPath(dir), utf8Encoded);
+       public FileTransferHandler(final String dir, final Charset encoding) {
+               this(FileSystems.getDefault().getPath(dir), encoding);
        }
 
        public void handleUpload(final MonetConnection.Upload handle, final 
String name, final boolean textMode, final long linesToSkip) throws IOException 
{
@@ -60,9 +60,9 @@ public class FileTransferHandler impleme
                        handle.sendError("Cannot read " + name);
                        return;
                }
-               if (textMode && (linesToSkip > 0 || !utf8Encoded)) {
-                       final Charset encoding = utf8Encoded ? 
StandardCharsets.UTF_8 : Charset.defaultCharset();
-                       handle.uploadFrom(Files.newBufferedReader(path, 
encoding), linesToSkip);
+               if (textMode && (linesToSkip > 0 || !isUtf8Encoded())) {
+                       final BufferedReader reader = 
Files.newBufferedReader(path, encoding);
+                       handle.uploadFrom(reader, linesToSkip);
                } else {
                        handle.uploadFrom(Files.newInputStream(path));
                }
@@ -80,4 +80,8 @@ public class FileTransferHandler impleme
                }
                handle.downloadTo(Files.newOutputStream(path, 
StandardOpenOption.CREATE_NEW));
        }
+
+       public boolean isUtf8Encoded() {
+               return encoding.equals(StandardCharsets.UTF_8);
+       }
 }
diff --git a/tests/OnClientTester.java b/tests/OnClientTester.java
--- a/tests/OnClientTester.java
+++ b/tests/OnClientTester.java
@@ -365,7 +365,7 @@ public final class OnClientTester extend
                ps.println("2|two");
                ps.println("3|three");
                ps.close();
-               conn.setUploadHandler(new FileTransferHandler(d, true));
+               conn.setUploadHandler(new FileTransferHandler(d, 
StandardCharsets.UTF_8));
                update("COPY INTO foo FROM 'data.txt' ON CLIENT");
                assertQueryInt("SELECT SUM(i) FROM foo", 6);
        }
@@ -382,7 +382,7 @@ public final class OnClientTester extend
                ps.close();
 
                Path d2 = getTmpDir(currentTestName + "2");
-               conn.setUploadHandler(new FileTransferHandler(d2, false));
+               conn.setUploadHandler(new FileTransferHandler(d2, 
StandardCharsets.UTF_8));
                String quoted = f.toAbsolutePath().toString().replaceAll("'", 
"''");
                expectError("COPY INTO foo FROM R'"+ quoted + "' ON CLIENT", 
"not in upload directory");
                // connection is still alive
@@ -393,7 +393,7 @@ public final class OnClientTester extend
                prepare();
                update("INSERT INTO foo VALUES (42, 'forty-two')");
                Path d = getTmpDir(currentTestName);
-               conn.setDownloadHandler(new FileTransferHandler(d, false));
+               conn.setDownloadHandler(new FileTransferHandler(d, 
StandardCharsets.UTF_8));
                update("COPY SELECT * FROM foo INTO 'data.txt' ON CLIENT");
                List<String> lines = Files.readAllLines(d.resolve("data.txt"));
                assertEq("lines written", lines.size(), 1);
@@ -408,7 +408,7 @@ public final class OnClientTester extend
                update("INSERT INTO foo VALUES (42, 'forty-two')");
                Path d = getTmpDir(currentTestName);
                Path d2 = getTmpDir(currentTestName + "2");
-               conn.setDownloadHandler(new FileTransferHandler(d2, false));
+               conn.setDownloadHandler(new FileTransferHandler(d2, 
StandardCharsets.UTF_8));
                String quoted = 
d.resolve("data.txt").toAbsolutePath().toString().replaceAll("'", "''");
                expectError("COPY SELECT * FROM foo INTO R'" + quoted + "' ON 
CLIENT", "not in download directory");
                if (level.compareTo(BugFixLevel.CanRefuseDownload) >= 0) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to