You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by el...@apache.org on 2016/03/07 19:27:45 UTC
[07/59] [partial] calcite git commit: [CALCITE-1078] Detach avatica
from the core calcite Maven project
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/AbstractHandler.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/AbstractHandler.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/AbstractHandler.java
deleted file mode 100644
index 1968fcd..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/AbstractHandler.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.AvaticaSeverity;
-import org.apache.calcite.avatica.NoSuchConnectionException;
-import org.apache.calcite.avatica.remote.Service.ErrorResponse;
-import org.apache.calcite.avatica.remote.Service.Request;
-import org.apache.calcite.avatica.remote.Service.Response;
-import org.apache.calcite.avatica.remote.Service.RpcMetadataResponse;
-
-import java.io.IOException;
-
-/**
- * Abstract base class for {@link Handler}s to extend to inherit functionality common across
- * serialization strategies.
- *
- * @param <T> The format Requests/Responses are serialized as.
- */
-public abstract class AbstractHandler<T> implements Handler<T> {
- private static final String NULL_EXCEPTION_MESSAGE = "(null exception message)";
- protected final Service service;
- private RpcMetadataResponse metadata = null;
-
- public AbstractHandler(Service service) {
- this.service = service;
- }
-
- abstract Request decode(T serializedRequest) throws IOException;
-
- /**
- * Serialize the given {@link Response} per the concrete {@link Handler} implementation.
- *
- * @param response The {@link Response} to serialize.
- * @return A serialized representation of the {@link Response}.
- * @throws IOException
- */
- abstract T encode(Response response) throws IOException;
-
- /**
- * Unwrap Avatica-specific context about a given exception.
- *
- * @param e A caught exception throw by Avatica implementation.
- * @return An {@link ErrorResponse}.
- */
- ErrorResponse unwrapException(Exception e) {
- // By default, we know nothing extra.
- int errorCode = ErrorResponse.UNKNOWN_ERROR_CODE;
- String sqlState = ErrorResponse.UNKNOWN_SQL_STATE;
- AvaticaSeverity severity = AvaticaSeverity.UNKNOWN;
- String errorMsg = null;
-
- // Extract the contextual information if we have it. We may not.
- if (e instanceof AvaticaRuntimeException) {
- AvaticaRuntimeException rte = (AvaticaRuntimeException) e;
- errorCode = rte.getErrorCode();
- sqlState = rte.getSqlState();
- severity = rte.getSeverity();
- errorMsg = rte.getErrorMessage();
- } else if (e instanceof NoSuchConnectionException) {
- errorCode = ErrorResponse.MISSING_CONNECTION_ERROR_CODE;
- severity = AvaticaSeverity.ERROR;
- errorMsg = e.getMessage();
- } else {
- // Try to construct a meaningful error message when the server impl doesn't provide one.
- errorMsg = getCausalChain(e);
- }
-
- return new ErrorResponse(e, errorMsg, errorCode, sqlState, severity, metadata);
- }
-
- /**
- * Compute a response for the given request, handling errors generated by that computation.
- *
- * @param serializedRequest The caller's request.
- * @return A {@link Response} with additional context about that response.
- */
- public HandlerResponse<T> apply(T serializedRequest) {
- final Service.Request request;
- try {
- request = decode(serializedRequest);
- } catch (IOException e) {
- // TODO provide a canned ErrorResponse.
- throw new RuntimeException(e);
- }
-
- try {
- final Service.Response response = request.accept(service);
- return new HandlerResponse<>(encode(response), HTTP_OK);
- } catch (Exception e) {
- ErrorResponse errorResp = unwrapException(e);
-
- try {
- return new HandlerResponse<>(encode(errorResp), HTTP_INTERNAL_SERVER_ERROR);
- } catch (IOException e1) {
- // TODO provide a canned ErrorResponse
-
- // If we can't serialize error message to JSON, can't give a meaningful error to caller.
- // Just try to not unnecessarily create more exceptions.
- if (e instanceof RuntimeException) {
- throw (RuntimeException) e;
- }
-
- throw new RuntimeException(e);
- }
- }
- }
-
- /**
- * Constructs a message for the summary of an Exception.
- *
- * @param e The Exception to summarize.
- * @return A summary message for the Exception.
- */
- private String getCausalChain(Exception e) {
- StringBuilder sb = new StringBuilder(16);
- Throwable curr = e;
- // Could use Guava, but that would increase dependency set unnecessarily.
- while (null != curr) {
- if (sb.length() > 0) {
- sb.append(" -> ");
- }
- String message = curr.getMessage();
- sb.append(curr.getClass().getSimpleName()).append(": ");
- sb.append(null == message ? NULL_EXCEPTION_MESSAGE : message);
- curr = curr.getCause();
- }
- if (sb.length() == 0) {
- // Catch the case where we have no error message.
- return "Unknown error message";
- }
- return sb.toString();
- }
-
- @Override public void setRpcMetadata(RpcMetadataResponse metadata) {
- this.metadata = metadata;
- }
-}
-
-// End AbstractHandler.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/AbstractService.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/AbstractService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/AbstractService.java
deleted file mode 100644
index ffaa360..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/AbstractService.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.ColumnMetaData;
-import org.apache.calcite.avatica.Meta;
-
-import java.sql.Types;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A common base class for {@link Service} implementations that implement
- * modifications made to response objects.
- */
-public abstract class AbstractService implements Service {
-
- private RpcMetadataResponse rpcMetadata = null;
-
- /**
- * Represents the serialization of the data over a transport.
- */
- enum SerializationType {
- JSON,
- PROTOBUF
- }
-
- /**
- * @return The manner in which the data is serialized.
- */
- abstract SerializationType getSerializationType();
-
- /** Modifies a signature, changing the representation of numeric columns
- * within it. This deals with the fact that JSON transmits a small long value,
- * or a float which is a whole number, as an integer. Thus the accessors need
- * be prepared to accept any numeric type. */
- Meta.Signature finagle(Meta.Signature signature) {
- final List<ColumnMetaData> columns = new ArrayList<>();
- for (ColumnMetaData column : signature.columns) {
- columns.add(finagle(column));
- }
- if (columns.equals(signature.columns)) {
- return signature;
- }
- return new Meta.Signature(columns, signature.sql,
- signature.parameters, signature.internalParameters,
- signature.cursorFactory, signature.statementType);
- }
-
- ColumnMetaData finagle(ColumnMetaData column) {
- switch (column.type.rep) {
- case BYTE:
- case PRIMITIVE_BYTE:
- case DOUBLE:
- case PRIMITIVE_DOUBLE:
- case FLOAT:
- case PRIMITIVE_FLOAT:
- case INTEGER:
- case PRIMITIVE_INT:
- case SHORT:
- case PRIMITIVE_SHORT:
- case LONG:
- case PRIMITIVE_LONG:
- return column.setRep(ColumnMetaData.Rep.NUMBER);
- default:
- // continue
- break;
- }
- switch (column.type.id) {
- case Types.VARBINARY:
- case Types.BINARY:
- switch (getSerializationType()) {
- case JSON:
- return column.setRep(ColumnMetaData.Rep.STRING);
- case PROTOBUF:
- return column;
- default:
- throw new IllegalStateException("Unhadled case statement");
- }
- case Types.DECIMAL:
- case Types.NUMERIC:
- return column.setRep(ColumnMetaData.Rep.NUMBER);
- default:
- return column;
- }
- }
-
- PrepareResponse finagle(PrepareResponse response) {
- final Meta.StatementHandle statement = finagle(response.statement);
- if (statement == response.statement) {
- return response;
- }
- return new PrepareResponse(statement, rpcMetadata);
- }
-
- Meta.StatementHandle finagle(Meta.StatementHandle h) {
- final Meta.Signature signature = finagle(h.signature);
- if (signature == h.signature) {
- return h;
- }
- return new Meta.StatementHandle(h.connectionId, h.id, signature);
- }
-
- ResultSetResponse finagle(ResultSetResponse r) {
- if (r.updateCount != -1) {
- assert r.signature == null;
- return r;
- }
- if (r.signature == null) {
- return r;
- }
- final Meta.Signature signature = finagle(r.signature);
- if (signature == r.signature) {
- return r;
- }
- return new ResultSetResponse(r.connectionId, r.statementId, r.ownStatement,
- signature, r.firstFrame, r.updateCount, rpcMetadata);
- }
-
- ExecuteResponse finagle(ExecuteResponse r) {
- if (r.missingStatement) {
- return r;
- }
- final List<ResultSetResponse> results = new ArrayList<>();
- int changeCount = 0;
- for (ResultSetResponse result : r.results) {
- ResultSetResponse result2 = finagle(result);
- if (result2 != result) {
- ++changeCount;
- }
- results.add(result2);
- }
- if (changeCount == 0) {
- return r;
- }
- return new ExecuteResponse(results, r.missingStatement, rpcMetadata);
- }
-
- @Override public void setRpcMetadata(RpcMetadataResponse metadata) {
- // OK if this is null
- this.rpcMetadata = metadata;
- }
-}
-
-// End AbstractService.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaCommonsHttpClientImpl.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaCommonsHttpClientImpl.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaCommonsHttpClientImpl.java
deleted file mode 100644
index 3bda248..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaCommonsHttpClientImpl.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.http.ConnectionReuseStrategy;
-import org.apache.http.HttpClientConnection;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.protocol.RequestExpectContinue;
-import org.apache.http.entity.ByteArrayEntity;
-import org.apache.http.entity.ContentType;
-import org.apache.http.impl.DefaultConnectionReuseStrategy;
-import org.apache.http.impl.pool.BasicConnFactory;
-import org.apache.http.impl.pool.BasicConnPool;
-import org.apache.http.impl.pool.BasicPoolEntry;
-import org.apache.http.message.BasicHttpEntityEnclosingRequest;
-import org.apache.http.protocol.HttpCoreContext;
-import org.apache.http.protocol.HttpProcessor;
-import org.apache.http.protocol.HttpProcessorBuilder;
-import org.apache.http.protocol.HttpRequestExecutor;
-import org.apache.http.protocol.RequestConnControl;
-import org.apache.http.protocol.RequestContent;
-import org.apache.http.protocol.RequestTargetHost;
-import org.apache.http.util.EntityUtils;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.concurrent.Future;
-
-/**
- * A common class to invoke HTTP requests against the Avatica server agnostic of the data being
- * sent and received across the wire.
- */
-public class AvaticaCommonsHttpClientImpl implements AvaticaHttpClient {
- private static final Logger LOG = LoggerFactory.getLogger(AvaticaCommonsHttpClientImpl.class);
- private static final ConnectionReuseStrategy REUSE = DefaultConnectionReuseStrategy.INSTANCE;
-
- // Some basic exposed configurations
- private static final String MAX_POOLED_CONNECTION_PER_ROUTE_KEY =
- "avatica.pooled.connections.per.route";
- private static final String MAX_POOLED_CONNECTION_PER_ROUTE_DEFAULT = "4";
- private static final String MAX_POOLED_CONNECTIONS_KEY = "avatica.pooled.connections.max";
- private static final String MAX_POOLED_CONNECTIONS_DEFAULT = "16";
-
- protected final HttpHost host;
- protected final HttpProcessor httpProcessor;
- protected final HttpRequestExecutor httpExecutor;
- protected final BasicConnPool httpPool;
-
- public AvaticaCommonsHttpClientImpl(URL url) {
- this.host = new HttpHost(url.getHost(), url.getPort(), url.getProtocol());
-
- this.httpProcessor = HttpProcessorBuilder.create()
- .add(new RequestContent())
- .add(new RequestTargetHost())
- .add(new RequestConnControl())
- .add(new RequestExpectContinue()).build();
-
- this.httpExecutor = new HttpRequestExecutor();
-
- this.httpPool = new BasicConnPool(new BasicConnFactory());
- int maxPerRoute = Integer.parseInt(
- System.getProperty(MAX_POOLED_CONNECTION_PER_ROUTE_KEY,
- MAX_POOLED_CONNECTION_PER_ROUTE_DEFAULT));
- int maxTotal = Integer.parseInt(
- System.getProperty(MAX_POOLED_CONNECTIONS_KEY,
- MAX_POOLED_CONNECTIONS_DEFAULT));
- httpPool.setDefaultMaxPerRoute(maxPerRoute);
- httpPool.setMaxTotal(maxTotal);
- }
-
- public byte[] send(byte[] request) {
- while (true) {
- boolean reusable = false;
- // Get a connection from the pool
- Future<BasicPoolEntry> future = this.httpPool.lease(host, null);
- BasicPoolEntry entry = null;
- try {
- entry = future.get();
- HttpCoreContext coreContext = HttpCoreContext.create();
- coreContext.setTargetHost(host);
-
- HttpClientConnection conn = entry.getConnection();
-
- ByteArrayEntity entity = new ByteArrayEntity(request, ContentType.APPLICATION_OCTET_STREAM);
-
- BasicHttpEntityEnclosingRequest postRequest =
- new BasicHttpEntityEnclosingRequest("POST", "/");
- postRequest.setEntity(entity);
-
- httpExecutor.preProcess(postRequest, httpProcessor, coreContext);
- HttpResponse response = httpExecutor.execute(postRequest, conn, coreContext);
- httpExecutor.postProcess(response, httpProcessor, coreContext);
-
- // Should the connection be kept alive?
- reusable = REUSE.keepAlive(response, coreContext);
-
- final int statusCode = response.getStatusLine().getStatusCode();
- if (HttpURLConnection.HTTP_UNAVAILABLE == statusCode) {
- // Could be sitting behind a load-balancer, try again.
- continue;
- }
-
- return EntityUtils.toByteArray(response.getEntity());
- } catch (Exception e) {
- LOG.debug("Failed to execute HTTP request", e);
- throw new RuntimeException(e);
- } finally {
- // Release the connection back to the pool, marking if it's good to reuse or not.
- httpPool.release(entry, reusable);
- }
- }
- }
-}
-
-// End AvaticaCommonsHttpClientImpl.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClient.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClient.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClient.java
deleted file mode 100644
index eac1b74..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClient.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-/**
- * An interface which defines how requests are sent to the Avatica server.
- */
-public interface AvaticaHttpClient {
-
- /**
- * Sends a serialized request to the Avatica server.
- *
- * @param request The serialized request.
- * @return The serialized response.
- */
- byte[] send(byte[] request);
-
-}
-
-// End AvaticaHttpClient.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClientFactory.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClientFactory.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClientFactory.java
deleted file mode 100644
index b5d213a..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClientFactory.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.ConnectionConfig;
-
-import java.net.URL;
-
-/**
- * A factory for constructing {@link AvaticaHttpClient}'s.
- */
-public interface AvaticaHttpClientFactory {
-
- /**
- * Construct the appropriate implementation of {@link AvaticaHttpClient}.
- *
- * @param url URL that the client is for.
- * @param config Configuration to use when constructing the implementation.
- * @return An instance of {@link AvaticaHttpClient}.
- */
- AvaticaHttpClient getClient(URL url, ConnectionConfig config);
-
-}
-
-// End AvaticaHttpClientFactory.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClientFactoryImpl.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClientFactoryImpl.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClientFactoryImpl.java
deleted file mode 100644
index cd6cbce..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClientFactoryImpl.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.ConnectionConfig;
-
-import java.lang.reflect.Constructor;
-import java.net.URL;
-import java.util.Objects;
-
-/**
- * Default implementation of {@link AvaticaHttpClientFactory} which chooses an implementation
- * from a property.
- */
-public class AvaticaHttpClientFactoryImpl implements AvaticaHttpClientFactory {
- public static final String HTTP_CLIENT_IMPL_DEFAULT =
- AvaticaCommonsHttpClientImpl.class.getName();
-
- // Public for Type.PLUGIN
- public static final AvaticaHttpClientFactoryImpl INSTANCE = new AvaticaHttpClientFactoryImpl();
-
- // Public for Type.PLUGIN
- public AvaticaHttpClientFactoryImpl() {}
-
- /**
- * Returns a singleton instance of {@link AvaticaHttpClientFactoryImpl}.
- *
- * @return A singleton instance.
- */
- public static AvaticaHttpClientFactoryImpl getInstance() {
- return INSTANCE;
- }
-
- @Override public AvaticaHttpClient getClient(URL url, ConnectionConfig config) {
- String className = config.httpClientClass();
- if (null == className) {
- className = HTTP_CLIENT_IMPL_DEFAULT;
- }
-
- try {
- Class<?> clz = Class.forName(className);
- Constructor<?> constructor = clz.getConstructor(URL.class);
- Object instance = constructor.newInstance(Objects.requireNonNull(url));
- return AvaticaHttpClient.class.cast(instance);
- } catch (Exception e) {
- throw new RuntimeException("Failed to construct AvaticaHttpClient implementation "
- + className, e);
- }
- }
-}
-
-// End AvaticaHttpClientFactoryImpl.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClientImpl.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClientImpl.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClientImpl.java
deleted file mode 100644
index c100eec..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaHttpClientImpl.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.AvaticaUtils;
-
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-
-/**
- * A common class to invoke HTTP requests against the Avatica server agnostic of the data being
- * sent and received across the wire.
- */
-public class AvaticaHttpClientImpl implements AvaticaHttpClient {
- protected final URL url;
-
- public AvaticaHttpClientImpl(URL url) {
- this.url = url;
- }
-
- public byte[] send(byte[] request) {
- // TODO back-off policy?
- while (true) {
- try {
- final HttpURLConnection connection = openConnection();
- connection.setRequestMethod("POST");
- connection.setDoInput(true);
- connection.setDoOutput(true);
- try (DataOutputStream wr = new DataOutputStream(connection.getOutputStream())) {
- wr.write(request);
- wr.flush();
- wr.close();
- }
- final int responseCode = connection.getResponseCode();
- final InputStream inputStream;
- if (responseCode == HttpURLConnection.HTTP_UNAVAILABLE) {
- // Could be sitting behind a load-balancer, try again.
- continue;
- } else if (responseCode != HttpURLConnection.HTTP_OK) {
- inputStream = connection.getErrorStream();
- } else {
- inputStream = connection.getInputStream();
- }
- return AvaticaUtils.readFullyToBytes(inputStream);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- }
-
- HttpURLConnection openConnection() throws IOException {
- return (HttpURLConnection) url.openConnection();
- }
-}
-
-// End AvaticaHttpClientImpl.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaRemoteConnectionConfigImpl.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaRemoteConnectionConfigImpl.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaRemoteConnectionConfigImpl.java
deleted file mode 100644
index d5ae9b1..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaRemoteConnectionConfigImpl.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.ConnectionConfigImpl;
-
-import java.util.Properties;
-
-/** Implementation of {@link org.apache.calcite.avatica.ConnectionConfig}
- * with extra properties specific to Remote Driver. */
-public class AvaticaRemoteConnectionConfigImpl extends ConnectionConfigImpl {
- public AvaticaRemoteConnectionConfigImpl(Properties properties) {
- super(properties);
- }
-
- public Service.Factory factory() {
- return AvaticaRemoteConnectionProperty.FACTORY.wrap(properties)
- .getPlugin(Service.Factory.class, null);
- }
-}
-
-// End AvaticaRemoteConnectionConfigImpl.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaRemoteConnectionProperty.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaRemoteConnectionProperty.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaRemoteConnectionProperty.java
deleted file mode 100644
index 5e755f8..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaRemoteConnectionProperty.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.ConnectionProperty;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import static org.apache.calcite.avatica.ConnectionConfigImpl.PropEnv;
-import static org.apache.calcite.avatica.ConnectionConfigImpl.parse;
-
-/**
- * Enumeration of Avatica remote driver's built-in connection properties.
- */
-public enum AvaticaRemoteConnectionProperty implements ConnectionProperty {
- /** Factory. */
- FACTORY("factory", Type.STRING, null);
-
- private final String camelName;
- private final Type type;
- private final Object defaultValue;
-
- private static final Map<String, AvaticaRemoteConnectionProperty> NAME_TO_PROPS;
-
- static {
- NAME_TO_PROPS = new HashMap<String, AvaticaRemoteConnectionProperty>();
- for (AvaticaRemoteConnectionProperty p
- : AvaticaRemoteConnectionProperty.values()) {
- NAME_TO_PROPS.put(p.camelName.toUpperCase(), p);
- NAME_TO_PROPS.put(p.name(), p);
- }
- }
-
- AvaticaRemoteConnectionProperty(String camelName,
- Type type,
- Object defaultValue) {
- this.camelName = camelName;
- this.type = type;
- this.defaultValue = defaultValue;
- assert defaultValue == null || type.valid(defaultValue);
- }
-
- public String camelName() {
- return camelName;
- }
-
- public Object defaultValue() {
- return defaultValue;
- }
-
- public Type type() {
- return type;
- }
-
- public PropEnv wrap(Properties properties) {
- return new PropEnv(parse(properties, NAME_TO_PROPS), this);
- }
-
- public boolean required() {
- return false;
- }
-}
-
-// End AvaticaRemoteConnectionProperty.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaRuntimeException.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaRuntimeException.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaRuntimeException.java
deleted file mode 100644
index 2f9a1cd..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/AvaticaRuntimeException.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.AvaticaSeverity;
-import org.apache.calcite.avatica.remote.Service.ErrorResponse;
-
-import java.util.Objects;
-
-/**
- * A {@link RuntimeException} thrown by Avatica with additional contextual information about
- * what happened to cause the Exception.
- */
-public class AvaticaRuntimeException extends RuntimeException {
- private static final long serialVersionUID = 1L;
- private final String errorMessage;
- private final int errorCode;
- private final String sqlState;
- private final AvaticaSeverity severity;
-
- /**
- * Constructs an {@code AvaticaRuntimeException} with no additional information.
- *
- * <p>It is strongly preferred that the caller invoke
- * {@link #AvaticaRuntimeException(String, int, String, AvaticaSeverity)}
- * with proper contextual information.
- */
- public AvaticaRuntimeException() {
- this("No additional context on exception", ErrorResponse.UNKNOWN_ERROR_CODE,
- ErrorResponse.UNKNOWN_SQL_STATE, AvaticaSeverity.UNKNOWN);
- }
-
- /**
- * Constructs an {@code AvaticaRuntimeException} with the given
- * contextual information surrounding the error.
- *
- * @param errorMessage A human-readable explanation about what happened
- * @param errorCode Numeric identifier for error
- * @param sqlState 5-character identifier for error
- * @param severity Severity
- */
- public AvaticaRuntimeException(String errorMessage, int errorCode, String sqlState,
- AvaticaSeverity severity) {
- this.errorMessage = Objects.requireNonNull(errorMessage);
- this.errorCode = errorCode;
- this.sqlState = Objects.requireNonNull(sqlState);
- this.severity = Objects.requireNonNull(severity);
- }
-
- /**
- * Returns a human-readable error message.
- */
- public String getErrorMessage() {
- return errorMessage;
- }
-
- /**
- * Returns a numeric code for this error.
- */
- public int getErrorCode() {
- return errorCode;
- }
-
- /**
- * Returns the five-character identifier for this error.
- */
- public String getSqlState() {
- return sqlState;
- }
-
- /**
- * Returns the severity at which this exception is thrown.
- */
- public AvaticaSeverity getSeverity() {
- return severity;
- }
-
- @Override public String toString() {
- StringBuilder sb = new StringBuilder(64);
- return sb.append("AvaticaRuntimeException: [")
- .append("Messsage: '").append(errorMessage).append("', ")
- .append("Error code: '").append(errorCode).append("', ")
- .append("SQL State: '").append(sqlState).append("', ")
- .append("Severity: '").append(severity).append("']").toString();
- }
-}
-
-// End AvaticaRuntimeException.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/Driver.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/Driver.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/Driver.java
deleted file mode 100644
index e98c486..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/Driver.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.AvaticaConnection;
-import org.apache.calcite.avatica.BuiltInConnectionProperty;
-import org.apache.calcite.avatica.ConnectionConfig;
-import org.apache.calcite.avatica.ConnectionProperty;
-import org.apache.calcite.avatica.DriverVersion;
-import org.apache.calcite.avatica.Meta;
-import org.apache.calcite.avatica.UnregisteredDriver;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Properties;
-
-/**
- * Avatica Remote JDBC driver.
- */
-public class Driver extends UnregisteredDriver {
- private static final Logger LOG = LoggerFactory.getLogger(Driver.class);
- public static final String CONNECT_STRING_PREFIX = "jdbc:avatica:remote:";
-
- static {
- new Driver().register();
- }
-
- public Driver() {
- super();
- }
-
- /**
- * Defines the method of message serialization used by the Driver
- */
- public static enum Serialization {
- JSON,
- PROTOBUF;
- }
-
- @Override protected String getConnectStringPrefix() {
- return CONNECT_STRING_PREFIX;
- }
-
- protected DriverVersion createDriverVersion() {
- return DriverVersion.load(
- Driver.class,
- "org-apache-calcite-jdbc.properties",
- "Avatica Remote JDBC Driver",
- "unknown version",
- "Avatica",
- "unknown version");
- }
-
- @Override protected Collection<ConnectionProperty> getConnectionProperties() {
- final List<ConnectionProperty> list = new ArrayList<ConnectionProperty>();
- Collections.addAll(list, BuiltInConnectionProperty.values());
- Collections.addAll(list, AvaticaRemoteConnectionProperty.values());
- return list;
- }
-
- @Override public Meta createMeta(AvaticaConnection connection) {
- final ConnectionConfig config = connection.config();
- final Service service = createService(connection, config);
- return new RemoteMeta(connection, service);
- }
-
- /**
- * Creates a {@link Service} with the given {@link AvaticaConnection} and configuration.
- *
- * @param connection The {@link AvaticaConnection} to use.
- * @param config Configuration properties
- * @return A Service implementation.
- */
- Service createService(AvaticaConnection connection, ConnectionConfig config) {
- final Service.Factory metaFactory = config.factory();
- final Service service;
- if (metaFactory != null) {
- service = metaFactory.create(connection);
- } else if (config.url() != null) {
- final AvaticaHttpClient httpClient = getHttpClient(connection, config);
- final Serialization serializationType = getSerialization(config);
-
- LOG.debug("Instantiating {} service", serializationType);
- switch (serializationType) {
- case JSON:
- service = new RemoteService(httpClient);
- break;
- case PROTOBUF:
- service = new RemoteProtobufService(httpClient, new ProtobufTranslationImpl());
- break;
- default:
- throw new IllegalArgumentException("Unhandled serialization type: " + serializationType);
- }
- } else {
- service = new MockJsonService(Collections.<String, String>emptyMap());
- }
- return service;
- }
-
- /**
- * Creates the HTTP client that communicates with the Avatica server.
- *
- * @param connection The {@link AvaticaConnection}.
- * @param config The configuration.
- * @return An {@link AvaticaHttpClient} implementation.
- */
- AvaticaHttpClient getHttpClient(AvaticaConnection connection, ConnectionConfig config) {
- URL url;
- try {
- url = new URL(config.url());
- } catch (MalformedURLException e) {
- throw new RuntimeException(e);
- }
-
- AvaticaHttpClientFactory httpClientFactory = config.httpClientFactory();
-
- return httpClientFactory.getClient(url, config);
- }
-
- @Override public Connection connect(String url, Properties info)
- throws SQLException {
- AvaticaConnection conn = (AvaticaConnection) super.connect(url, info);
- if (conn == null) {
- // It's not an url for our driver
- return null;
- }
-
- // Create the corresponding remote connection
- ConnectionConfig config = conn.config();
- Service service = createService(conn, config);
-
- service.apply(
- new Service.OpenConnectionRequest(conn.id,
- Service.OpenConnectionRequest.serializeProperties(info)));
-
- return conn;
- }
-
- Serialization getSerialization(ConnectionConfig config) {
- final String serializationStr = config.serialization();
- Serialization serializationType = Serialization.JSON;
- if (null != serializationStr) {
- try {
- serializationType = Serialization.valueOf(serializationStr.toUpperCase());
- } catch (Exception e) {
- // Log a warning instead of failing harshly? Intentionally no loggers available?
- throw new RuntimeException(e);
- }
- }
-
- return serializationType;
- }
-}
-
-// End Driver.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/Handler.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/Handler.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/Handler.java
deleted file mode 100644
index 30d026c..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/Handler.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.remote.Service.RpcMetadataResponse;
-
-import java.util.Objects;
-
-/**
- * API for text request-response calls to an Avatica server.
- *
- * @param <T> The type this handler accepts and returns
- */
-public interface Handler<T> {
- int HTTP_OK = 200;
- int HTTP_INTERNAL_SERVER_ERROR = 500;
- String HANDLER_SERIALIZATION_METRICS_NAME = "Handler.Serialization";
-
- /**
- * Struct that encapsulates the context of the result of a request to Avatica.
- */
- public class HandlerResponse<T> {
- private final T response;
- private final int statusCode;
-
- public HandlerResponse(T response, int statusCode) {
- this.response = Objects.requireNonNull(response);
- this.statusCode = statusCode;
- }
-
- public T getResponse() {
- return response;
- }
-
- public int getStatusCode() {
- return statusCode;
- }
-
- @Override public String toString() {
- return "Response: " + response + ", Status:" + statusCode;
- }
- }
-
- HandlerResponse<T> apply(T request);
-
- /**
- * Sets some general server information to return to the client in all responses.
- *
- * @param metadata Server-wide information
- */
- void setRpcMetadata(RpcMetadataResponse metadata);
-}
-
-// End Handler.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonHandler.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonHandler.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonHandler.java
deleted file mode 100644
index fd57078..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonHandler.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.metrics.MetricsSystem;
-import org.apache.calcite.avatica.metrics.Timer;
-import org.apache.calcite.avatica.metrics.Timer.Context;
-import org.apache.calcite.avatica.remote.Service.Request;
-import org.apache.calcite.avatica.remote.Service.Response;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import java.io.IOException;
-import java.io.StringWriter;
-
-/**
- * Implementation of {@link org.apache.calcite.avatica.remote.Handler}
- * that decodes JSON requests, sends them to a {@link Service},
- * and encodes the responses into JSON.
- *
- * @see org.apache.calcite.avatica.remote.JsonService
- */
-public class JsonHandler extends AbstractHandler<String> {
-
- protected static final ObjectMapper MAPPER = JsonService.MAPPER;
-
- final MetricsSystem metrics;
- final Timer serializationTimer;
-
- public JsonHandler(Service service, MetricsSystem metrics) {
- super(service);
- this.metrics = metrics;
- this.serializationTimer = this.metrics.getTimer(
- MetricsHelper.concat(JsonHandler.class, HANDLER_SERIALIZATION_METRICS_NAME));
- }
-
- public HandlerResponse<String> apply(String jsonRequest) {
- return super.apply(jsonRequest);
- }
-
- @Override Request decode(String request) throws IOException {
- try (final Context ctx = serializationTimer.start()) {
- return MAPPER.readValue(request, Service.Request.class);
- }
- }
-
- /**
- * Serializes the provided object as JSON.
- *
- * @param response The object to serialize.
- * @return A JSON string.
- */
- @Override String encode(Response response) throws IOException {
- try (final Context ctx = serializationTimer.start()) {
- final StringWriter w = new StringWriter();
- MAPPER.writeValue(w, response);
- return w.toString();
- }
- }
-}
-
-// End JsonHandler.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java
deleted file mode 100644
index 668b3be..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import java.io.IOException;
-import java.io.StringWriter;
-
-/**
- * Implementation of {@link org.apache.calcite.avatica.remote.Service}
- * that encodes requests and responses as JSON.
- */
-public abstract class JsonService extends AbstractService {
- public static final ObjectMapper MAPPER;
- static {
- MAPPER = new ObjectMapper();
- MAPPER.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
- MAPPER.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
- MAPPER.configure(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS, true);
- }
-
- public JsonService() {
- }
-
- /** Derived class should implement this method to transport requests and
- * responses to and from the peer service. */
- public abstract String apply(String request);
-
- @Override SerializationType getSerializationType() {
- return SerializationType.JSON;
- }
-
- //@VisibleForTesting
- protected static <T> T decode(String response, Class<T> expectedType)
- throws IOException {
- Response resp = MAPPER.readValue(response, Response.class);
- if (resp instanceof ErrorResponse) {
- throw ((ErrorResponse) resp).toException();
- } else if (!expectedType.isAssignableFrom(resp.getClass())) {
- throw new ClassCastException("Cannot cast " + resp.getClass() + " into " + expectedType);
- }
-
- return expectedType.cast(resp);
- }
-
- //@VisibleForTesting
- protected static <T> String encode(T request) throws IOException {
- final StringWriter w = new StringWriter();
- MAPPER.writeValue(w, request);
- return w.toString();
- }
-
- protected RuntimeException handle(IOException e) {
- return new RuntimeException(e);
- }
-
- public ResultSetResponse apply(CatalogsRequest request) {
- try {
- return finagle(decode(apply(encode(request)), ResultSetResponse.class));
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public ResultSetResponse apply(SchemasRequest request) {
- try {
- return finagle(decode(apply(encode(request)), ResultSetResponse.class));
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public ResultSetResponse apply(TablesRequest request) {
- try {
- return finagle(decode(apply(encode(request)), ResultSetResponse.class));
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public ResultSetResponse apply(TableTypesRequest request) {
- try {
- return finagle(decode(apply(encode(request)), ResultSetResponse.class));
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public ResultSetResponse apply(TypeInfoRequest request) {
- try {
- return finagle(decode(apply(encode(request)), ResultSetResponse.class));
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public ResultSetResponse apply(ColumnsRequest request) {
- try {
- return finagle(decode(apply(encode(request)), ResultSetResponse.class));
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public PrepareResponse apply(PrepareRequest request) {
- try {
- return finagle(decode(apply(encode(request)), PrepareResponse.class));
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public ExecuteResponse apply(PrepareAndExecuteRequest request) {
- try {
- return finagle(decode(apply(encode(request)), ExecuteResponse.class));
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public FetchResponse apply(FetchRequest request) {
- try {
- return decode(apply(encode(request)), FetchResponse.class);
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public ExecuteResponse apply(ExecuteRequest request) {
- try {
- return finagle(decode(apply(encode(request)), ExecuteResponse.class));
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public CreateStatementResponse apply(CreateStatementRequest request) {
- try {
- return decode(apply(encode(request)), CreateStatementResponse.class);
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public CloseStatementResponse apply(CloseStatementRequest request) {
- try {
- return decode(apply(encode(request)), CloseStatementResponse.class);
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public OpenConnectionResponse apply(OpenConnectionRequest request) {
- try {
- return decode(apply(encode(request)), OpenConnectionResponse.class);
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public CloseConnectionResponse apply(CloseConnectionRequest request) {
- try {
- return decode(apply(encode(request)), CloseConnectionResponse.class);
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public ConnectionSyncResponse apply(ConnectionSyncRequest request) {
- try {
- return decode(apply(encode(request)), ConnectionSyncResponse.class);
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public DatabasePropertyResponse apply(DatabasePropertyRequest request) {
- try {
- return decode(apply(encode(request)), DatabasePropertyResponse.class);
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public SyncResultsResponse apply(SyncResultsRequest request) {
- try {
- return decode(apply(encode(request)), SyncResultsResponse.class);
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public CommitResponse apply(CommitRequest request) {
- try {
- return decode(apply(encode(request)), CommitResponse.class);
- } catch (IOException e) {
- throw handle(e);
- }
- }
-
- public RollbackResponse apply(RollbackRequest request) {
- try {
- return decode(apply(encode(request)), RollbackResponse.class);
- } catch (IOException e) {
- throw handle(e);
- }
- }
-}
-
-// End JsonService.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalJsonService.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalJsonService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalJsonService.java
deleted file mode 100644
index 0af6300..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalJsonService.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import java.io.IOException;
-import java.io.StringWriter;
-
-/**
- * Implementation of {@link org.apache.calcite.avatica.remote.Service}
- * that goes to an in-process instance of {@code Service}.
- */
-public class LocalJsonService extends JsonService {
- private final Service service;
-
- public LocalJsonService(Service service) {
- this.service = service;
- }
-
- @Override public String apply(String request) {
- try {
- Request request2 = MAPPER.readValue(request, Request.class);
- Response response2 = request2.accept(service);
- final StringWriter w = new StringWriter();
- MAPPER.writeValue(w, response2);
- return w.toString();
- } catch (IOException e) {
- throw handle(e);
- }
- }
-}
-
-// End LocalJsonService.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalProtobufService.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalProtobufService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalProtobufService.java
deleted file mode 100644
index 76e2392..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalProtobufService.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import java.io.IOException;
-
-/**
- * A Service implementation that performs protocol buffer serialization on request and responses
- * on either side of computing a response from a request to mimic some transport to a server which
- * would normally perform such computation.
- */
-public class LocalProtobufService extends ProtobufService {
- private final Service service;
- private final ProtobufTranslation translation;
-
- public LocalProtobufService(Service service, ProtobufTranslation translation) {
- this.service = service;
- this.translation = translation;
- }
-
- @Override public Response _apply(Request request) {
- try {
- // Serialize the request to "send to the server"
- byte[] serializedRequest = translation.serializeRequest(request);
-
- // *some transport would normally happen here*
-
- // Fake deserializing that request somewhere else
- Request request2 = translation.parseRequest(serializedRequest);
-
- // Serialize the response from the service to "send to the client"
- byte[] serializedResponse = translation.serializeResponse(request2.accept(service));
-
- // *some transport would normally happen here*
-
- // Deserialize the response on "the client"
- return translation.parseResponse(serializedResponse);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-}
-
-// End LocalProtobufService.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalService.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalService.java
deleted file mode 100644
index c070ec0..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalService.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.Meta;
-
-import org.apache.calcite.avatica.MetaImpl;
-import org.apache.calcite.avatica.MissingResultsException;
-import org.apache.calcite.avatica.NoSuchStatementException;
-import org.apache.calcite.avatica.metrics.MetricsSystem;
-import org.apache.calcite.avatica.metrics.Timer;
-import org.apache.calcite.avatica.metrics.Timer.Context;
-import org.apache.calcite.avatica.metrics.noop.NoopMetricsSystem;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-
-import static org.apache.calcite.avatica.remote.MetricsHelper.concat;
-
-/**
- * Implementation of {@link Service} that talks to a local {@link Meta}.
- */
-public class LocalService implements Service {
- final Meta meta;
- final MetricsSystem metrics;
-
- private final Timer executeTimer;
- private final Timer commitTimer;
- private final Timer prepareTimer;
- private final Timer prepareAndExecuteTimer;
- private final Timer connectionSyncTimer;
-
- private RpcMetadataResponse serverLevelRpcMetadata;
-
- public LocalService(Meta meta) {
- this(meta, NoopMetricsSystem.getInstance());
- }
-
- public LocalService(Meta meta, MetricsSystem metrics) {
- this.meta = meta;
- this.metrics = Objects.requireNonNull(metrics);
-
- this.executeTimer = this.metrics.getTimer(name("Execute"));
- this.commitTimer = this.metrics.getTimer(name("Commit"));
- this.prepareTimer = this.metrics.getTimer(name("Prepare"));
- this.prepareAndExecuteTimer = this.metrics.getTimer(name("PrepareAndExecute"));
- this.connectionSyncTimer = this.metrics.getTimer(name("ConnectionSync"));
- }
-
- private static String name(String timer) {
- return concat(LocalService.class, timer);
- }
-
- @Override public void setRpcMetadata(RpcMetadataResponse serverLevelRpcMetadata) {
- this.serverLevelRpcMetadata = Objects.requireNonNull(serverLevelRpcMetadata);
- }
-
- private static <E> List<E> list(Iterable<E> iterable) {
- if (iterable instanceof List) {
- return (List<E>) iterable;
- }
- final List<E> rowList = new ArrayList<>();
- for (E row : iterable) {
- rowList.add(row);
- }
- return rowList;
- }
-
- /** Converts a result set (not serializable) into a serializable response. */
- public ResultSetResponse toResponse(Meta.MetaResultSet resultSet) {
- if (resultSet.updateCount != -1) {
- return new ResultSetResponse(resultSet.connectionId,
- resultSet.statementId, resultSet.ownStatement, null, null,
- resultSet.updateCount, serverLevelRpcMetadata);
- }
-
- Meta.Signature signature = resultSet.signature;
- Meta.CursorFactory cursorFactory = resultSet.signature.cursorFactory;
- Meta.Frame frame = null;
- int updateCount = -1;
- final List<Object> list;
-
- if (resultSet.firstFrame != null) {
- list = list(resultSet.firstFrame.rows);
- switch (cursorFactory.style) {
- case ARRAY:
- cursorFactory = Meta.CursorFactory.LIST;
- break;
- case MAP:
- case LIST:
- break;
- case RECORD:
- cursorFactory = Meta.CursorFactory.LIST;
- break;
- default:
- cursorFactory = Meta.CursorFactory.map(cursorFactory.fieldNames);
- }
-
- final boolean done = resultSet.firstFrame.done;
-
- frame = new Meta.Frame(0, done, list);
- updateCount = -1;
-
- if (signature.statementType != null) {
- if (signature.statementType.canUpdate()) {
- frame = null;
- updateCount = ((Number) ((List) list.get(0)).get(0)).intValue();
- }
- }
- } else {
- //noinspection unchecked
- list = (List<Object>) (List) list2(resultSet);
- cursorFactory = Meta.CursorFactory.LIST;
- }
-
- if (cursorFactory != resultSet.signature.cursorFactory) {
- signature = signature.setCursorFactory(cursorFactory);
- }
-
- return new ResultSetResponse(resultSet.connectionId, resultSet.statementId,
- resultSet.ownStatement, signature, frame, updateCount, serverLevelRpcMetadata);
- }
-
- private List<List<Object>> list2(Meta.MetaResultSet resultSet) {
- final Meta.StatementHandle h = new Meta.StatementHandle(
- resultSet.connectionId, resultSet.statementId, null);
- final List<TypedValue> parameterValues = Collections.emptyList();
- final Iterable<Object> iterable = meta.createIterable(h, null,
- resultSet.signature, parameterValues, resultSet.firstFrame);
- final List<List<Object>> list = new ArrayList<>();
- return MetaImpl.collect(resultSet.signature.cursorFactory, iterable, list);
- }
-
- public ResultSetResponse apply(CatalogsRequest request) {
- final Meta.ConnectionHandle ch =
- new Meta.ConnectionHandle(request.connectionId);
- final Meta.MetaResultSet resultSet = meta.getCatalogs(ch);
- return toResponse(resultSet);
- }
-
- public ResultSetResponse apply(SchemasRequest request) {
- final Meta.ConnectionHandle ch =
- new Meta.ConnectionHandle(request.connectionId);
- final Meta.MetaResultSet resultSet =
- meta.getSchemas(ch, request.catalog, Meta.Pat.of(request.schemaPattern));
- return toResponse(resultSet);
- }
-
- public ResultSetResponse apply(TablesRequest request) {
- final Meta.ConnectionHandle ch =
- new Meta.ConnectionHandle(request.connectionId);
- final Meta.MetaResultSet resultSet =
- meta.getTables(ch,
- request.catalog,
- Meta.Pat.of(request.schemaPattern),
- Meta.Pat.of(request.tableNamePattern),
- request.typeList);
- return toResponse(resultSet);
- }
-
- public ResultSetResponse apply(TableTypesRequest request) {
- final Meta.ConnectionHandle ch =
- new Meta.ConnectionHandle(request.connectionId);
- final Meta.MetaResultSet resultSet = meta.getTableTypes(ch);
- return toResponse(resultSet);
- }
-
- public ResultSetResponse apply(TypeInfoRequest request) {
- final Meta.ConnectionHandle ch =
- new Meta.ConnectionHandle(request.connectionId);
- final Meta.MetaResultSet resultSet = meta.getTypeInfo(ch);
- return toResponse(resultSet);
- }
-
- public ResultSetResponse apply(ColumnsRequest request) {
- final Meta.ConnectionHandle ch =
- new Meta.ConnectionHandle(request.connectionId);
- final Meta.MetaResultSet resultSet =
- meta.getColumns(ch,
- request.catalog,
- Meta.Pat.of(request.schemaPattern),
- Meta.Pat.of(request.tableNamePattern),
- Meta.Pat.of(request.columnNamePattern));
- return toResponse(resultSet);
- }
-
- public PrepareResponse apply(PrepareRequest request) {
- try (final Context ctx = prepareTimer.start()) {
- final Meta.ConnectionHandle ch =
- new Meta.ConnectionHandle(request.connectionId);
- final Meta.StatementHandle h =
- meta.prepare(ch, request.sql, request.maxRowCount);
- return new PrepareResponse(h, serverLevelRpcMetadata);
- }
- }
-
- public ExecuteResponse apply(PrepareAndExecuteRequest request) {
- try (final Context ctx = prepareAndExecuteTimer.start()) {
- final Meta.StatementHandle sh =
- new Meta.StatementHandle(request.connectionId, request.statementId, null);
- try {
- final Meta.ExecuteResult executeResult =
- meta.prepareAndExecute(sh, request.sql, request.maxRowCount,
- new Meta.PrepareCallback() {
- @Override public Object getMonitor() {
- return LocalService.class;
- }
-
- @Override public void clear() {
- }
-
- @Override public void assign(Meta.Signature signature,
- Meta.Frame firstFrame, long updateCount) {
- }
-
- @Override public void execute() {
- }
- });
- final List<ResultSetResponse> results = new ArrayList<>();
- for (Meta.MetaResultSet metaResultSet : executeResult.resultSets) {
- results.add(toResponse(metaResultSet));
- }
- return new ExecuteResponse(results, false, serverLevelRpcMetadata);
- } catch (NoSuchStatementException e) {
- // The Statement doesn't exist anymore, bubble up this information
- return new ExecuteResponse(null, true, serverLevelRpcMetadata);
- }
- }
- }
-
- public FetchResponse apply(FetchRequest request) {
- final Meta.StatementHandle h = new Meta.StatementHandle(
- request.connectionId, request.statementId, null);
- try {
- final Meta.Frame frame =
- meta.fetch(h,
- request.offset,
- request.fetchMaxRowCount);
- return new FetchResponse(frame, false, false, serverLevelRpcMetadata);
- } catch (NullPointerException | NoSuchStatementException e) {
- // The Statement doesn't exist anymore, bubble up this information
- return new FetchResponse(null, true, true, serverLevelRpcMetadata);
- } catch (MissingResultsException e) {
- return new FetchResponse(null, false, true, serverLevelRpcMetadata);
- }
- }
-
- public ExecuteResponse apply(ExecuteRequest request) {
- try (final Context ctx = executeTimer.start()) {
- try {
- final Meta.ExecuteResult executeResult = meta.execute(request.statementHandle,
- request.parameterValues, request.maxRowCount);
-
- final List<ResultSetResponse> results = new ArrayList<>(executeResult.resultSets.size());
- for (Meta.MetaResultSet metaResultSet : executeResult.resultSets) {
- results.add(toResponse(metaResultSet));
- }
- return new ExecuteResponse(results, false, serverLevelRpcMetadata);
- } catch (NoSuchStatementException e) {
- return new ExecuteResponse(null, true, serverLevelRpcMetadata);
- }
- }
- }
-
- public CreateStatementResponse apply(CreateStatementRequest request) {
- final Meta.ConnectionHandle ch =
- new Meta.ConnectionHandle(request.connectionId);
- final Meta.StatementHandle h = meta.createStatement(ch);
- return new CreateStatementResponse(h.connectionId, h.id, serverLevelRpcMetadata);
- }
-
- public CloseStatementResponse apply(CloseStatementRequest request) {
- final Meta.StatementHandle h = new Meta.StatementHandle(
- request.connectionId, request.statementId, null);
- meta.closeStatement(h);
- return new CloseStatementResponse(serverLevelRpcMetadata);
- }
-
- public OpenConnectionResponse apply(OpenConnectionRequest request) {
- final Meta.ConnectionHandle ch =
- new Meta.ConnectionHandle(request.connectionId);
- meta.openConnection(ch, request.info);
- return new OpenConnectionResponse(serverLevelRpcMetadata);
- }
-
- public CloseConnectionResponse apply(CloseConnectionRequest request) {
- final Meta.ConnectionHandle ch =
- new Meta.ConnectionHandle(request.connectionId);
- meta.closeConnection(ch);
- return new CloseConnectionResponse(serverLevelRpcMetadata);
- }
-
- public ConnectionSyncResponse apply(ConnectionSyncRequest request) {
- try (final Context ctx = connectionSyncTimer.start()) {
- final Meta.ConnectionHandle ch =
- new Meta.ConnectionHandle(request.connectionId);
- final Meta.ConnectionProperties connProps =
- meta.connectionSync(ch, request.connProps);
- return new ConnectionSyncResponse(connProps, serverLevelRpcMetadata);
- }
- }
-
- public DatabasePropertyResponse apply(DatabasePropertyRequest request) {
- final Meta.ConnectionHandle ch =
- new Meta.ConnectionHandle(request.connectionId);
- return new DatabasePropertyResponse(meta.getDatabaseProperties(ch), serverLevelRpcMetadata);
- }
-
- public SyncResultsResponse apply(SyncResultsRequest request) {
- final Meta.StatementHandle h = new Meta.StatementHandle(
- request.connectionId, request.statementId, null);
- SyncResultsResponse response;
- try {
- // Set success on the cached statement
- response = new SyncResultsResponse(meta.syncResults(h, request.state, request.offset), false,
- serverLevelRpcMetadata);
- } catch (NoSuchStatementException e) {
- // Tried to sync results on a statement which wasn't cached
- response = new SyncResultsResponse(false, true, serverLevelRpcMetadata);
- }
-
- return response;
- }
-
- public CommitResponse apply(CommitRequest request) {
- try (final Context ctx = commitTimer.start()) {
- meta.commit(new Meta.ConnectionHandle(request.connectionId));
-
- // If commit() errors, let the ErrorResponse be sent back via an uncaught Exception.
- return new CommitResponse();
- }
- }
-
- public RollbackResponse apply(RollbackRequest request) {
- meta.rollback(new Meta.ConnectionHandle(request.connectionId));
-
- // If rollback() errors, let the ErrorResponse be sent back via an uncaught Exception.
- return new RollbackResponse();
- }
-}
-
-// End LocalService.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/MetaDataOperation.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/MetaDataOperation.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/MetaDataOperation.java
deleted file mode 100644
index 12a5b59..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/MetaDataOperation.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-import org.apache.calcite.avatica.proto.Common;
-
-import java.sql.DatabaseMetaData;
-import java.sql.ResultSet;
-
-/**
- * Identifies an operation from {@link DatabaseMetaData} which returns a {@link ResultSet}. This
- * enum is used to allow clients to request the server to re-instantiate a {@link ResultSet} for
- * these operations which do not have a SQL string associated with them as a normal query does.
- */
-public enum MetaDataOperation {
- GET_ATTRIBUTES,
- GET_BEST_ROW_IDENTIFIER,
- GET_CATALOGS,
- GET_CLIENT_INFO_PROPERTIES,
- GET_COLUMN_PRIVILEGES,
- GET_COLUMNS,
- GET_CROSS_REFERENCE,
- GET_EXPORTED_KEYS,
- GET_FUNCTION_COLUMNS,
- GET_FUNCTIONS,
- GET_IMPORTED_KEYS,
- GET_INDEX_INFO,
- GET_PRIMARY_KEYS,
- GET_PROCEDURE_COLUMNS,
- GET_PROCEDURES,
- GET_PSEUDO_COLUMNS,
- GET_SCHEMAS,
- GET_SCHEMAS_WITH_ARGS,
- GET_SUPER_TABLES,
- GET_SUPER_TYPES,
- GET_TABLE_PRIVILEGES,
- GET_TABLES,
- GET_TABLE_TYPES,
- GET_TYPE_INFO,
- GET_UDTS,
- GET_VERSION_COLUMNS;
-
- public Common.MetaDataOperation toProto() {
- switch (this) {
- case GET_ATTRIBUTES:
- return Common.MetaDataOperation.GET_ATTRIBUTES;
- case GET_BEST_ROW_IDENTIFIER:
- return Common.MetaDataOperation.GET_BEST_ROW_IDENTIFIER;
- case GET_CATALOGS:
- return Common.MetaDataOperation.GET_CATALOGS;
- case GET_CLIENT_INFO_PROPERTIES:
- return Common.MetaDataOperation.GET_CLIENT_INFO_PROPERTIES;
- case GET_COLUMNS:
- return Common.MetaDataOperation.GET_COLUMNS;
- case GET_COLUMN_PRIVILEGES:
- return Common.MetaDataOperation.GET_COLUMN_PRIVILEGES;
- case GET_CROSS_REFERENCE:
- return Common.MetaDataOperation.GET_CROSS_REFERENCE;
- case GET_EXPORTED_KEYS:
- return Common.MetaDataOperation.GET_EXPORTED_KEYS;
- case GET_FUNCTIONS:
- return Common.MetaDataOperation.GET_FUNCTIONS;
- case GET_FUNCTION_COLUMNS:
- return Common.MetaDataOperation.GET_FUNCTION_COLUMNS;
- case GET_IMPORTED_KEYS:
- return Common.MetaDataOperation.GET_IMPORTED_KEYS;
- case GET_INDEX_INFO:
- return Common.MetaDataOperation.GET_INDEX_INFO;
- case GET_PRIMARY_KEYS:
- return Common.MetaDataOperation.GET_PRIMARY_KEYS;
- case GET_PROCEDURES:
- return Common.MetaDataOperation.GET_PROCEDURES;
- case GET_PROCEDURE_COLUMNS:
- return Common.MetaDataOperation.GET_PROCEDURE_COLUMNS;
- case GET_PSEUDO_COLUMNS:
- return Common.MetaDataOperation.GET_PSEUDO_COLUMNS;
- case GET_SCHEMAS:
- return Common.MetaDataOperation.GET_SCHEMAS;
- case GET_SCHEMAS_WITH_ARGS:
- return Common.MetaDataOperation.GET_SCHEMAS_WITH_ARGS;
- case GET_SUPER_TABLES:
- return Common.MetaDataOperation.GET_SUPER_TABLES;
- case GET_SUPER_TYPES:
- return Common.MetaDataOperation.GET_SUPER_TYPES;
- case GET_TABLES:
- return Common.MetaDataOperation.GET_TABLES;
- case GET_TABLE_PRIVILEGES:
- return Common.MetaDataOperation.GET_TABLE_PRIVILEGES;
- case GET_TABLE_TYPES:
- return Common.MetaDataOperation.GET_TABLE_TYPES;
- case GET_TYPE_INFO:
- return Common.MetaDataOperation.GET_TYPE_INFO;
- case GET_UDTS:
- return Common.MetaDataOperation.GET_UDTS;
- case GET_VERSION_COLUMNS:
- return Common.MetaDataOperation.GET_VERSION_COLUMNS;
- default:
- throw new RuntimeException("Unknown type: " + this);
- }
- }
-
- public static MetaDataOperation fromProto(Common.MetaDataOperation protoOp) {
- // Null is acceptable
- if (null == protoOp) {
- return null;
- }
-
- switch (protoOp) {
- case GET_ATTRIBUTES:
- return MetaDataOperation.GET_ATTRIBUTES;
- case GET_BEST_ROW_IDENTIFIER:
- return MetaDataOperation.GET_BEST_ROW_IDENTIFIER;
- case GET_CATALOGS:
- return MetaDataOperation.GET_CATALOGS;
- case GET_CLIENT_INFO_PROPERTIES:
- return MetaDataOperation.GET_CLIENT_INFO_PROPERTIES;
- case GET_COLUMNS:
- return MetaDataOperation.GET_COLUMNS;
- case GET_COLUMN_PRIVILEGES:
- return MetaDataOperation.GET_COLUMN_PRIVILEGES;
- case GET_CROSS_REFERENCE:
- return MetaDataOperation.GET_CROSS_REFERENCE;
- case GET_EXPORTED_KEYS:
- return MetaDataOperation.GET_EXPORTED_KEYS;
- case GET_FUNCTIONS:
- return MetaDataOperation.GET_FUNCTIONS;
- case GET_FUNCTION_COLUMNS:
- return MetaDataOperation.GET_FUNCTION_COLUMNS;
- case GET_IMPORTED_KEYS:
- return MetaDataOperation.GET_IMPORTED_KEYS;
- case GET_INDEX_INFO:
- return MetaDataOperation.GET_INDEX_INFO;
- case GET_PRIMARY_KEYS:
- return MetaDataOperation.GET_PRIMARY_KEYS;
- case GET_PROCEDURES:
- return MetaDataOperation.GET_PROCEDURES;
- case GET_PROCEDURE_COLUMNS:
- return MetaDataOperation.GET_PROCEDURE_COLUMNS;
- case GET_PSEUDO_COLUMNS:
- return MetaDataOperation.GET_PSEUDO_COLUMNS;
- case GET_SCHEMAS:
- return MetaDataOperation.GET_SCHEMAS;
- case GET_SCHEMAS_WITH_ARGS:
- return MetaDataOperation.GET_SCHEMAS_WITH_ARGS;
- case GET_SUPER_TABLES:
- return MetaDataOperation.GET_SUPER_TABLES;
- case GET_SUPER_TYPES:
- return MetaDataOperation.GET_SUPER_TYPES;
- case GET_TABLES:
- return MetaDataOperation.GET_TABLES;
- case GET_TABLE_PRIVILEGES:
- return MetaDataOperation.GET_TABLE_PRIVILEGES;
- case GET_TABLE_TYPES:
- return MetaDataOperation.GET_TABLE_TYPES;
- case GET_TYPE_INFO:
- return MetaDataOperation.GET_TYPE_INFO;
- case GET_UDTS:
- return MetaDataOperation.GET_UDTS;
- case GET_VERSION_COLUMNS:
- return MetaDataOperation.GET_VERSION_COLUMNS;
- default:
- throw new RuntimeException("Unknown type: " + protoOp);
- }
- }
-}
-
-// End MetaDataOperation.java
http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/remote/MetricsHelper.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/MetricsHelper.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/MetricsHelper.java
deleted file mode 100644
index 2561b29..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/MetricsHelper.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.calcite.avatica.remote;
-
-/**
- * A utility class to encapsulate common logic in use of metrics implementation.
- */
-public class MetricsHelper {
-
- private static final String PERIOD = ".";
-
- private MetricsHelper() {}
-
- public static String concat(Class<?> clz, String name) {
- StringBuilder sb = new StringBuilder();
- sb.append(clz.getName());
- return sb.append(PERIOD).append(name).toString();
- }
-
-}
-
-// End MetricsHelper.java