package com.airbnb.airpal.presto;
import com.facebook.presto.client.ClientSession;
import com.facebook.presto.client.QueryResults;
import com.facebook.presto.client.StatementClient;
import io.airlift.http.client.HttpClient;
import io.airlift.json.JsonCodec;
import java.io.Closeable;
import static com.google.common.base.Preconditions.checkNotNull;
import static io.airlift.json.JsonCodec.jsonCodec;
public class QueryRunner
implements Closeable
{
private final JsonCodec<QueryResults> queryResultsCodec;
private final ClientSession session;
private final HttpClient httpClient;
protected QueryRunner(ClientSession session, JsonCodec<QueryResults> queryResultsCodec, HttpClient httpClient)
{
this.session = checkNotNull(session, "session is null");
this.queryResultsCodec = checkNotNull(queryResultsCodec, "queryResultsCodec is null");
this.httpClient = httpClient;
}
public StatementClient startInternalQuery(String query)
{
return new StatementClient(httpClient, queryResultsCodec, session, query);
}
@Override
public void close()
{
httpClient.close();
}
public static class QueryRunnerFactory
{
private final ClientSessionFactory sessionFactory;
private final HttpClient httpClient;
public QueryRunnerFactory(ClientSessionFactory sessionFactory, HttpClient httpClient)
{
this.httpClient = httpClient;
this.sessionFactory = sessionFactory;
}
public QueryRunner create(String user, String schema)
{
return new QueryRunner(sessionFactory.create(user, schema), jsonCodec(QueryResults.class), httpClient);
}
public QueryRunner create()
{
return new QueryRunner(sessionFactory.create(), jsonCodec(QueryResults.class), httpClient);
}
}
}