Changeset: 8a014286dac2 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/8a014286dac2
Added Files:
src/main/java/org/monetdb/jdbc/MonetDownloadHandle.java
src/main/java/org/monetdb/jdbc/MonetDownloader.java
Modified Files:
src/main/java/org/monetdb/jdbc/MonetConnection.java
Branch: onclient
Log Message:
Add stub code for downloading
diffs (129 lines):
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
@@ -151,8 +151,9 @@ public class MonetConnection
/** A cache to reduce the number of DatabaseMetaData objects created by
getMetaData() to maximum 1 per connection */
private DatabaseMetaData dbmd;
- /** A handler for ON CLIENT requests */
+ /** Handlers for ON CLIENT requests */
private MonetUploader uploader;
+ private MonetDownloader downloader;
/**
* Constructor of a Connection for MonetDB. At this moment the
@@ -1211,6 +1212,21 @@ public class MonetConnection
public MonetUploader getUploader() {
return uploader;
}
+ /**
+ * Registers a MonetDownloader to support for example COPY ON CLIENT
+ *
+ * @param downloader the handler to register, or null to deregister
+ */
+ public void setDownloader(MonetDownloader downloader) {
+ this.downloader = downloader;
+ }
+
+ /**
+ * Returns the currently registerered MonetDownloadHandler handler, or
null
+ */
+ public MonetDownloader getDownloader() {
+ return downloader;
+ }
/**
* Returns a string identifying this Connection to the MonetDB server.
@@ -3201,6 +3217,8 @@ public class MonetConnection
return handleUpload(parts[2], true, offset);
} else if (transferCommand.startsWith("rb ")) {
return handleUpload(transferCommand.substring(3),
false, 0);
+ } else if (transferCommand.startsWith("w ")) {
+ return handleDownload(transferCommand.substring(2));
} else {
return "JDBC does not support this file transfer yet: "
+ transferCommand;
}
@@ -3208,7 +3226,7 @@ public class MonetConnection
private String handleUpload(String path, boolean textMode, int offset)
throws IOException {
if (uploader == null) {
- return "No file transfer handler has been registered";
+ return "No file upload handler has been registered with
the JDBC driver";
}
MonetUploadHandle handle = new MonetUploadHandle(server);
@@ -3227,7 +3245,23 @@ public class MonetConnection
return handle.getError();
}
- private String handleDownload(String path) {
- return "JDBC driver does not support downloads yet";
+ private String handleDownload(String path) throws IOException {
+ if (downloader == null) {
+ return "No file download handler has been registered
with the JDBC driver";
+ }
+
+ MonetDownloadHandle handle = new MonetDownloadHandle(server);
+ try {
+ downloader.handleDownload(handle, path, true);
+ if (!handle.hasBeenUsed()) {
+ String message = String.format("Call to
%s.handleDownload for path '%s' sent neither data nor an error message",
+
downloader.getClass().getCanonicalName(), path);
+ throw new IOException(message);
+ }
+ handle.close();
+ } finally {
+ //
+ }
+ return handle.getError();
}
}
diff --git a/src/main/java/org/monetdb/jdbc/MonetDownloadHandle.java
b/src/main/java/org/monetdb/jdbc/MonetDownloadHandle.java
new file mode 100644
--- /dev/null
+++ b/src/main/java/org/monetdb/jdbc/MonetDownloadHandle.java
@@ -0,0 +1,32 @@
+package org.monetdb.jdbc;
+
+import org.monetdb.mcl.net.MapiSocket;
+
+import java.io.*;
+
+public class MonetDownloadHandle {
+ private final MapiSocket server;
+ private String error = null;
+
+ MonetDownloadHandle(MapiSocket server) {
+ this.server = server;
+ }
+
+ public void sendError(String errorMessage) throws IOException {
+ if (error != null) {
+ throw new IOException("another error has already been
sent: " + error);
+ }
+ error = errorMessage;
+ }
+
+ public boolean hasBeenUsed() {
+ return error != null;
+ }
+
+ public String getError() {
+ return error;
+ }
+
+ public void close() {
+ }
+}
diff --git a/src/main/java/org/monetdb/jdbc/MonetDownloader.java
b/src/main/java/org/monetdb/jdbc/MonetDownloader.java
new file mode 100644
--- /dev/null
+++ b/src/main/java/org/monetdb/jdbc/MonetDownloader.java
@@ -0,0 +1,7 @@
+package org.monetdb.jdbc;
+
+import java.io.IOException;
+
+public interface MonetDownloader {
+ void handleDownload(MonetDownloadHandle handle, String name, boolean
textMode) throws IOException;
+}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list