public boolean renderOutput(PrintStream out, OutputFormat outputFormat, boolean interactive) { Thread clientThread = Thread.currentThread(); SignalHandler oldHandler = Signal.handle(SIGINT, signal -> { if (ignoreUserInterrupt.get() || client.isClientAborted()) { return; } client.close(); clientThread.interrupt(); }); try { return renderQueryOutput(out, outputFormat, interactive); } finally { Signal.handle(SIGINT, oldHandler); Thread.interrupted(); // clear interrupt status } }
private StatementStats execute(ClientSession session, String query, Consumer<QueryData> queryDataConsumer, Consumer<QueryError> queryErrorConsumer) { // start query try (StatementClient client = newStatementClient(okHttpClient, session, query)) { // read query output while (client.isRunning()) { queryDataConsumer.accept(client.currentData()); if (!client.advance()) { break; } } // verify final state if (client.isClientAborted()) { throw new IllegalStateException("Query aborted by user"); } if (client.isClientError()) { throw new IllegalStateException("Query is gone (server restarted?)"); } verify(client.isFinished()); QueryError resultsError = client.finalStatusInfo().getError(); if (resultsError != null) { queryErrorConsumer.accept(resultsError); } return client.finalStatusInfo().getStats(); } }
private void pageOutput(OutputFormat format, List<String> fieldNames) throws IOException { try (Pager pager = Pager.create(); ThreadInterruptor clientThread = new ThreadInterruptor(); Writer writer = createWriter(pager); OutputHandler handler = createOutputHandler(format, writer, fieldNames)) { if (!pager.isNullPager()) { // ignore the user pressing ctrl-C while in the pager ignoreUserInterrupt.set(true); pager.getFinishFuture().thenRun(() -> { ignoreUserInterrupt.set(false); client.close(); clientThread.interrupt(); }); } handler.processRows(client); } catch (RuntimeException | IOException e) { if (client.isClientAborted() && !(e instanceof QueryAbortedException)) { throw new QueryAbortedException(e); } throw e; } }
if (client.isClientAborted()) { errorChannel.println("Query aborted by user"); return false;
public boolean renderOutput(PrintStream out, OutputFormat outputFormat, boolean interactive) { Thread clientThread = Thread.currentThread(); SignalHandler oldHandler = Signal.handle(SIGINT, signal -> { if (ignoreUserInterrupt.get() || client.isClientAborted()) { return; } client.close(); clientThread.interrupt(); }); try { return renderQueryOutput(out, outputFormat, interactive); } finally { Signal.handle(SIGINT, oldHandler); Thread.interrupted(); // clear interrupt status } }
private void pageOutput(OutputFormat format, List<String> fieldNames) throws IOException { try (Pager pager = Pager.create(); ThreadInterruptor clientThread = new ThreadInterruptor(); Writer writer = createWriter(pager); OutputHandler handler = createOutputHandler(format, writer, fieldNames)) { if (!pager.isNullPager()) { // ignore the user pressing ctrl-C while in the pager ignoreUserInterrupt.set(true); pager.getFinishFuture().thenRun(() -> { ignoreUserInterrupt.set(false); client.close(); clientThread.interrupt(); }); } handler.processRows(client); } catch (RuntimeException | IOException e) { if (client.isClientAborted() && !(e instanceof QueryAbortedException)) { throw new QueryAbortedException(e); } throw e; } }
if (client.isClientAborted()) { errorChannel.println("Query aborted by user"); return false;