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