public static StatementClient newStatementClient(OkHttpClient httpClient, ClientSession session, String query) { return new StatementClientV1(httpClient, session, query); } }
@Override public void cancelLeafStage() { checkState(!isClientAborted(), "client is closed"); URI uri = currentStatusInfo().getPartialCancelUri(); if (uri != null) { httpDelete(uri); } }
@Override public QueryStatusInfo finalStatusInfo() { checkState(!isRunning(), "current position is still valid"); return currentResults.get(); }
@Override public boolean advance() if (!isRunning()) { return false; URI nextUri = currentStatusInfo().getNextUri(); if (nextUri == null) { state.compareAndSet(State.RUNNING, State.FINISHED); Request request = prepareRequest(HttpUrl.get(nextUri)).build(); if (isClientAborted()) { return false; close(); processResponse(response.getHeaders(), response.getValue()); return true; throw requestFailedException("fetching next", request, response);
public StatementClientV1(OkHttpClient httpClient, ClientSession session, String query) { requireNonNull(httpClient, "httpClient is null"); requireNonNull(session, "session is null"); requireNonNull(query, "query is null"); this.httpClient = httpClient; this.timeZone = session.getTimeZone(); this.query = query; this.requestTimeoutNanos = session.getClientRequestTimeout(); this.user = session.getUser(); this.clientCapabilities = Joiner.on(",").join(ClientCapabilities.values()); Request request = buildQueryRequest(session, query); JsonResponse<QueryResults> response = JsonResponse.execute(QUERY_RESULTS_CODEC, httpClient, request); if ((response.getStatusCode() != HTTP_OK) || !response.hasValue()) { state.compareAndSet(State.RUNNING, State.CLIENT_ERROR); throw requestFailedException("starting query", request, response); } processResponse(response.getHeaders(), response.getValue()); }
Request.Builder builder = prepareRequest(url) .post(RequestBody.create(MEDIA_TYPE_TEXT, query)); builder.addHeader(PRESTO_PREPARED_STATEMENT, urlEncode(entry.getKey()) + "=" + urlEncode(entry.getValue()));
@Override public void close() { // If the query is not done, abort the query. if (state.compareAndSet(State.RUNNING, State.CLIENT_ABORTED)) { URI uri = currentResults.get().getNextUri(); if (uri != null) { httpDelete(uri); } } }
private void httpDelete(URI uri) { Request request = prepareRequest(HttpUrl.get(uri)) .delete() .build(); httpClient.newCall(request).enqueue(new NullCallback()); }
@Override public QueryStatusInfo currentStatusInfo() { checkState(isRunning(), "current position is not valid (cursor past end)"); return currentResults.get(); }
@Override public QueryData currentData() { checkState(isRunning(), "current position is not valid (cursor past end)"); return currentResults.get(); }