Mercurial > hg > monetdb-java
diff src/main/java/org/monetdb/jdbc/MonetConnection.java @ 557:ce2b616ed22e onclient
Add a cancellation callback to UploadHandler
author | Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com> |
---|---|
date | Thu, 16 Sep 2021 15:12:26 +0200 (2021-09-16) |
parents | 87feb93330a6 |
children | 7f10d662a788 |
line wrap: on
line diff
--- a/src/main/java/org/monetdb/jdbc/MonetConnection.java +++ b/src/main/java/org/monetdb/jdbc/MonetConnection.java @@ -3236,7 +3236,7 @@ public class MonetConnection } long linesToSkip = offset >= 1 ? offset - 1 : 0; - Upload handle = new Upload(server); + Upload handle = new Upload(server, uploadHandler::uploadCancelled); boolean wasFaking = server.setInsertFakePrompts(false); try { uploadHandler.handleUpload(handle, path, textMode, linesToSkip); @@ -3290,6 +3290,13 @@ public class MonetConnection * where both 0 and 1 mean 'upload everything' */ void handleUpload(Upload handle, String name, boolean textMode, long linesToSkip) throws IOException; + + /** + * Called when the upload is cancelled halfway by the server. + * + * The default implementation does nothing. + */ + default void uploadCancelled() {} } /** @@ -3316,12 +3323,14 @@ public class MonetConnection */ public static class Upload { private final MapiSocket server; + private final Runnable cancellationCallback; private PrintStream print = null; private String error = null; private int customChunkSize = -1; - Upload(MapiSocket server) { + Upload(MapiSocket server, Runnable cancellationCallback) { this.server = server; + this.cancellationCallback = cancellationCallback; } /** @@ -3362,6 +3371,7 @@ public class MonetConnection if (print == null) { try { MapiSocket.UploadStream up = customChunkSize >= 0 ? server.uploadStream(customChunkSize) : server.uploadStream(); + up.setCancellationCallback(cancellationCallback); print = new PrintStream(up, false, "UTF-8"); up.write('\n'); } catch (UnsupportedEncodingException e) {