コード例 #1
0
  private static List<Column> getColumns(StatementClient client) {
    while (client.isValid()) {
      List<Column> columns = client.current().getColumns();
      if (columns != null) {
        return columns;
      }
      client.advance();
    }

    if (!client.isFailed()) {
      throw internalServerError("No columns");
    }
    throw internalServerError(failureMessage(client.finalResults()));
  }
コード例 #2
0
    @Override
    protected Iterable<List<Object>> computeNext() {
      while (client.isValid()) {
        Iterable<List<Object>> data = client.current().getData();
        client.advance();
        if (data != null) {
          return data;
        }
      }

      if (client.isFailed()) {
        throw internalServerError(failureMessage(client.finalResults()));
      }

      return endOfData();
    }
コード例 #3
0
ファイル: StatusPrinter.java プロジェクト: albertocsm/presto
  public void printInitialStatusUpdates() {
    long lastPrint = System.nanoTime();
    try {
      while (client.isValid()) {
        try {
          // exit status loop if there is there is pending output
          if (client.current().getData() != null) {
            return;
          }

          // check if time to update screen
          boolean update = nanosSince(lastPrint).getValue(SECONDS) >= 0.5;

          // check for keyboard input
          int key = readKey();
          if (key == CTRL_P) {
            partialCancel();
          } else if (key == CTRL_C) {
            updateScreen();
            update = false;
            client.close();
          } else if (toUpperCase(key) == 'D') {
            debug = !debug;
            console.resetScreen();
            update = true;
          }

          // update screen
          if (update) {
            updateScreen();
            lastPrint = System.nanoTime();
          }

          // fetch next results (server will wait for a while if no data)
          client.advance();
        } catch (RuntimeException e) {
          log.debug(e, "error printing status");
          if (debug) {
            e.printStackTrace(out);
          }
        }
      }
    } finally {
      console.resetScreen();
    }
  }
コード例 #4
0
ファイル: Query.java プロジェクト: earlredwolf/presto
  private void renderQueryOutput(PrintStream out, OutputFormat outputFormat, boolean interactive) {
    StatusPrinter statusPrinter = null;
    @SuppressWarnings("resource")
    PrintStream errorChannel = interactive ? out : System.err;

    if (interactive) {
      statusPrinter = new StatusPrinter(client, out);
      statusPrinter.printInitialStatusUpdates();
    } else {
      waitForData();
    }

    if ((!client.isFailed()) && (!client.isGone()) && (!client.isClosed())) {
      QueryResults results = client.isValid() ? client.current() : client.finalResults();
      if (results.getUpdateType() != null) {
        renderUpdate(out, results);
      } else if (results.getColumns() == null) {
        errorChannel.printf("Query %s has no columns\n", results.getId());
        return;
      } else {
        renderResults(out, outputFormat, interactive, results.getColumns());
      }
    }

    if (statusPrinter != null) {
      statusPrinter.printFinalInfo();
    }

    if (client.isClosed()) {
      errorChannel.println("Query aborted by user");
    } else if (client.isGone()) {
      errorChannel.println("Query is gone (server restarted?)");
    } else if (client.isFailed()) {
      renderFailure(errorChannel);
    }
  }
コード例 #5
0
ファイル: Query.java プロジェクト: earlredwolf/presto
 private void waitForData() {
   while (client.isValid() && (client.current().getData() == null)) {
     client.advance();
   }
 }