Changeset: 8aa70bd8d21f for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/8aa70bd8d21f
Added Files:
a.bin
b.bin
c.bin
src/main/java/org/monetdb/jdbc/MonetUploader.java
src/main/java/org/monetdb/util/FileTransfer.java
x.csv
Removed Files:
src/main/java/org/monetdb/jdbc/MonetFileTransfer.java
Modified Files:
src/main/java/org/monetdb/jdbc/MonetConnection.java
Branch: onclient
Log Message:
Register upload handler and download handler separately
diffs (222 lines):
diff --git a/a.bin b/a.bin
new file mode 100644
index
0000000000000000000000000000000000000000..2c6aacdecdc212596c5e82ae940eaaa7de2f9437
GIT binary patch
literal 40
fc$^Kxi46cC3<RLl`gQ+>g@hy-PRr%?czw1X0=xh&
diff --git a/b.bin b/b.bin
new file mode 100644
index
0000000000000000000000000000000000000000..dd67d8d40c9f01d10b8b788b1d9b4dbc482a77c5
GIT binary patch
literal 40
fc$^Kxi46cC3<RL_t-AlfLPAT@9Zr|q@_2oI1DF6f
diff --git a/c.bin b/c.bin
new file mode 100644
index
0000000000000000000000000000000000000000..73bcaea4a0df193d7d57d9756c05396197d75906
GIT binary patch
literal 50
mc$~}3D=}cm%quYj5k?@w7(|$W2vZPY1|rNsgawGOWB>q%7!LdZ
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
@@ -10,8 +10,6 @@ package org.monetdb.jdbc;
import java.io.File;
import java.io.IOException;
-import java.io.PrintStream;
-import java.io.UnsupportedEncodingException;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.sql.CallableStatement;
@@ -154,7 +152,7 @@ public class MonetConnection
private DatabaseMetaData dbmd;
/** A handler for ON CLIENT requests */
- private MonetFileTransfer fileTransfer;
+ private MonetUploader uploader;
/**
* Constructor of a Connection for MonetDB. At this moment the
@@ -1199,19 +1197,19 @@ public class MonetConnection
}
/**
- * Registers a MonetFileTransfer handler to support for example COPY ON
CLIENT
+ * Registers a MonetUploader to support for example COPY ON CLIENT
*
- * @param fileTransfer the handler to register, or null to deregister
+ * @param uploader the handler to register, or null to deregister
*/
- public void setFileTransfer(MonetFileTransfer fileTransfer) {
- this.fileTransfer = fileTransfer;
+ public void setUploader(MonetUploader uploader) {
+ this.uploader = uploader;
}
/**
- * Returns the currently registerered MonetFileTransfer handler, or null
+ * Returns the currently registerered MonetUploader, or null
*/
- public MonetFileTransfer setFileTransfer() {
- return fileTransfer;
+ public MonetUploader getUploader() {
+ return uploader;
}
/**
@@ -3209,17 +3207,17 @@ public class MonetConnection
}
private String handleUpload(String path, boolean textMode, int offset)
throws IOException {
- if (fileTransfer == null) {
+ if (uploader == null) {
return "No file transfer handler has been registered";
}
MonetUploadHandle handle = new MonetUploadHandle(server);
boolean wasFaking = server.setInsertFakeFlushes(false);
try {
- fileTransfer.handleUpload(handle, path, textMode,
offset);
+ uploader.handleUpload(handle, path, textMode, offset);
if (!handle.hasBeenUsed()) {
String message = String.format("Call to
%s.handleUpload for path '%s' sent neither data nor an error message",
-
fileTransfer.getClass().getCanonicalName(), path);
+
uploader.getClass().getCanonicalName(), path);
throw new IOException(message);
}
handle.close();
diff --git a/src/main/java/org/monetdb/jdbc/MonetFileTransfer.java
b/src/main/java/org/monetdb/jdbc/MonetFileTransfer.java
deleted file mode 100644
--- a/src/main/java/org/monetdb/jdbc/MonetFileTransfer.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.monetdb.jdbc;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.FileSystems;
-import java.nio.file.Files;
-import java.nio.file.Path;
-
-public abstract class MonetFileTransfer {
- public void handleUpload(MonetUploadHandle handle, String name, boolean
textMode, int offset) throws IOException {
- throw new UnsupportedOperationException("This client is not
prepared to handle uploads");
- }
-
- public static class UploadFromDirectory extends MonetFileTransfer {
- private final Path root;
- private final boolean utf8Encoded;
-
- public UploadFromDirectory(Path dir, boolean utf8Encoded) {
- root = dir.toAbsolutePath().normalize();
- this.utf8Encoded = utf8Encoded;
- }
-
- public UploadFromDirectory(String dir, boolean utf8Encoded) {
- this(FileSystems.getDefault().getPath(dir),
utf8Encoded);
- }
-
- @Override
- public void handleUpload(MonetUploadHandle handle, String name,
boolean textMode, int offset) throws IOException {
- Path path = root.resolve(name).normalize();
- if (!path.startsWith(root)) {
- handle.sendError("File is not in upload
directory");
- return;
- }
- if (!Files.isReadable(path)) {
- handle.sendError("Cannot read " + name);
- return;
- }
- if (textMode && (offset > 1 || !utf8Encoded)) {
- Charset encoding = utf8Encoded ?
StandardCharsets.UTF_8 : Charset.defaultCharset();
- BufferedReader reader =
Files.newBufferedReader(path, encoding);
- int toSkip = offset > 1 ? offset - 1 : 0;
- for (int i = 0; i < toSkip; i++) {
- reader.readLine();
- }
- handle.uploadFrom(reader);
- } else {
- handle.uploadFrom(Files.newInputStream(path));
- }
- }
- }
-}
diff --git a/src/main/java/org/monetdb/jdbc/MonetUploader.java
b/src/main/java/org/monetdb/jdbc/MonetUploader.java
new file mode 100644
--- /dev/null
+++ b/src/main/java/org/monetdb/jdbc/MonetUploader.java
@@ -0,0 +1,7 @@
+package org.monetdb.jdbc;
+
+import java.io.IOException;
+
+public interface MonetUploader {
+ void handleUpload(MonetUploadHandle handle, String name, boolean
textMode, int offset) throws IOException;
+}
diff --git a/src/main/java/org/monetdb/util/FileTransfer.java
b/src/main/java/org/monetdb/util/FileTransfer.java
new file mode 100644
--- /dev/null
+++ b/src/main/java/org/monetdb/util/FileTransfer.java
@@ -0,0 +1,49 @@
+package org.monetdb.util;
+
+import org.monetdb.jdbc.MonetUploader;
+import org.monetdb.jdbc.MonetUploadHandle;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+public class FileTransfer implements MonetUploader {
+ private final Path root;
+ private final boolean utf8Encoded;
+
+ public FileTransfer(Path dir, boolean utf8Encoded) {
+ root = dir.toAbsolutePath().normalize();
+ this.utf8Encoded = utf8Encoded;
+ }
+
+ public FileTransfer(String dir, boolean utf8Encoded) {
+ this(FileSystems.getDefault().getPath(dir), utf8Encoded);
+ }
+
+ public void handleUpload(MonetUploadHandle handle, String name, boolean
textMode, int offset) throws IOException {
+ Path path = root.resolve(name).normalize();
+ if (!path.startsWith(root)) {
+ handle.sendError("File is not in upload directory");
+ return;
+ }
+ if (!Files.isReadable(path)) {
+ handle.sendError("Cannot read " + name);
+ return;
+ }
+ if (textMode && (offset > 1 || !utf8Encoded)) {
+ Charset encoding = utf8Encoded ? StandardCharsets.UTF_8
: Charset.defaultCharset();
+ BufferedReader reader = Files.newBufferedReader(path,
encoding);
+ int toSkip = offset > 1 ? offset - 1 : 0;
+ for (int i = 0; i < toSkip; i++) {
+ reader.readLine();
+ }
+ handle.uploadFrom(reader);
+ } else {
+ handle.uploadFrom(Files.newInputStream(path));
+ }
+ }
+}
diff --git a/x.csv b/x.csv
new file mode 100644
--- /dev/null
+++ b/x.csv
@@ -0,0 +1,3 @@
+1
+2
+3
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list