Mercurial > hg > monetdb-java
changeset 504:8aa70bd8d21f onclient
Register upload handler and download handler separately
author | Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com> |
---|---|
date | Thu, 19 Aug 2021 10:51:53 +0200 (2021-08-19) |
parents | 7e3987c16cde |
children | 8a014286dac2 |
files | a.bin b.bin c.bin src/main/java/org/monetdb/jdbc/MonetConnection.java src/main/java/org/monetdb/jdbc/MonetFileTransfer.java src/main/java/org/monetdb/jdbc/MonetUploader.java src/main/java/org/monetdb/util/FileTransfer.java x.csv |
diffstat | 8 files changed, 70 insertions(+), 66 deletions(-) [+] |
line wrap: on
line diff
new file mode 100644 index 0000000000000000000000000000000000000000..2c6aacdecdc212596c5e82ae940eaaa7de2f9437 GIT binary patch literal 40 dc$@{nhXDW}2mm0gT>n2DK;YowAyH@y79Rq<04@Lk
new file mode 100644 index 0000000000000000000000000000000000000000..dd67d8d40c9f01d10b8b788b1d9b4dbc482a77c5 GIT binary patch literal 40 ec$@{nfdK#z2mr9D2>&14wh%}ZHVzsW4<7>qm;g8c
new file mode 100644 index 0000000000000000000000000000000000000000..73bcaea4a0df193d7d57d9756c05396197d75906 GIT binary patch literal 50 mc$~}3D=}cm%quYj5k?@w7(|$W2vZPY1|rNsgawGOWB>q%7!LdZ
--- 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();
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)); - } - } - } -}
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; +}
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)); + } + } +}