[CALCITE-767] Create commit and rollback Avatica RPC endpoints Includes cleanup to Service pojos and protobuf translation code.
Closes apache/calcite#177 Project: http://git-wip-us.apache.org/repos/asf/calcite/repo Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/322b9730 Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/322b9730 Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/322b9730 Branch: refs/heads/master Commit: 322b97300d460cf7c98b6002e4f0d5dab455f188 Parents: 82fd259 Author: Josh Elser <[email protected]> Authored: Thu Dec 10 19:30:04 2015 -0500 Committer: Josh Elser <[email protected]> Committed: Tue Dec 15 22:57:14 2015 -0500 ---------------------------------------------------------------------- .../apache/calcite/avatica/jdbc/JdbcMeta.java | 18 + .../calcite/avatica/remote/RemoteMetaTest.java | 87 ++ .../calcite/avatica/AvaticaConnection.java | 4 +- .../java/org/apache/calcite/avatica/Meta.java | 16 + .../apache/calcite/avatica/proto/Requests.java | 942 ++++++++++++++++++- .../apache/calcite/avatica/proto/Responses.java | 673 ++++++++++++- .../calcite/avatica/remote/JsonService.java | 16 + .../calcite/avatica/remote/LocalService.java | 14 + .../calcite/avatica/remote/ProtobufService.java | 27 + .../avatica/remote/ProtobufTranslationImpl.java | 12 + .../calcite/avatica/remote/RemoteMeta.java | 20 + .../apache/calcite/avatica/remote/Service.java | 473 ++++++---- avatica/src/main/protobuf/requests.proto | 11 +- avatica/src/main/protobuf/responses.proto | 12 +- .../avatica/remote/ProtobufServiceTest.java | 58 ++ .../remote/ProtobufTranslationImplTest.java | 10 + .../calcite/avatica/test/JsonHandlerTest.java | 8 + .../apache/calcite/jdbc/CalciteMetaImpl.java | 8 + site/_docs/avatica_json_reference.md | 46 + 19 files changed, 2257 insertions(+), 198 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/322b9730/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java ---------------------------------------------------------------------- diff --git a/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java b/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java index 6f1339f..9ff7cc9 100644 --- a/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java +++ b/avatica-server/src/main/java/org/apache/calcite/avatica/jdbc/JdbcMeta.java @@ -832,6 +832,24 @@ public class JdbcMeta implements Meta { } } + @Override public void commit(ConnectionHandle ch) { + try { + final Connection conn = getConnection(ch.id); + conn.commit(); + } catch (SQLException e) { + throw propagate(e); + } + } + + @Override public void rollback(ConnectionHandle ch) { + try { + final Connection conn = getConnection(ch.id); + conn.rollback(); + } catch (SQLException e) { + throw propagate(e); + } + } + /** Configurable statement cache settings. */ public enum StatementCacheSettings { /** JDBC connection property for setting connection cache concurrency level. */ http://git-wip-us.apache.org/repos/asf/calcite/blob/322b9730/avatica-server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java ---------------------------------------------------------------------- diff --git a/avatica-server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java b/avatica-server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java index fbc91e6..bb57692 100644 --- a/avatica-server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java +++ b/avatica-server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java @@ -506,6 +506,93 @@ public class RemoteMetaTest { } } + @Test public void testCommitRollback() throws Exception { + final String productTable = "commitrollback_products"; + final String salesTable = "commitrollback_sales"; + ConnectionSpec.getDatabaseLock().lock(); + try (final Connection conn = DriverManager.getConnection(url); + final Statement stmt = conn.createStatement()) { + assertFalse(stmt.execute("DROP TABLE IF EXISTS " + productTable)); + assertFalse(stmt.execute( + String.format("CREATE TABLE %s(id integer, stock integer)", productTable))); + assertFalse(stmt.execute("DROP TABLE IF EXISTS " + salesTable)); + assertFalse(stmt.execute( + String.format("CREATE TABLE %s(id integer, units_sold integer)", salesTable))); + + final int productId = 1; + // No products and no sales + assertFalse(stmt.execute( + String.format("INSERT INTO %s VALUES(%d, 0)", productTable, productId))); + assertFalse(stmt.execute( + String.format("INSERT INTO %s VALUES(%d, 0)", salesTable, productId))); + + conn.setAutoCommit(false); + PreparedStatement productStmt = conn.prepareStatement(String.format( + "UPDATE %s SET stock = stock + ? WHERE id = ?", productTable)); + PreparedStatement salesStmt = conn.prepareStatement(String.format( + "UPDATE %s SET units_sold = units_sold + ? WHERE id = ?", salesTable)); + + // No stock + assertEquals(0, getInventory(conn, productTable, productId)); + + // Set a stock of 10 for product 1 + productStmt.setInt(1, 10); + productStmt.setInt(2, productId); + productStmt.executeUpdate(); + + conn.commit(); + assertEquals(10, getInventory(conn, productTable, productId)); + + // Sold 5 items (5 in stock, 5 sold) + productStmt.setInt(1, -5); + productStmt.setInt(2, productId); + productStmt.executeUpdate(); + salesStmt.setInt(1, 5); + salesStmt.setInt(2, productId); + salesStmt.executeUpdate(); + + conn.commit(); + // We will definitely see the updated values + assertEquals(5, getInventory(conn, productTable, productId)); + assertEquals(5, getSales(conn, salesTable, productId)); + + // Update some "bad" values + productStmt.setInt(1, -10); + productStmt.setInt(2, productId); + productStmt.executeUpdate(); + salesStmt.setInt(1, 10); + salesStmt.setInt(2, productId); + salesStmt.executeUpdate(); + + // We just went negative, nonsense. Better rollback. + conn.rollback(); + + // Should still have 5 and 5 + assertEquals(5, getInventory(conn, productTable, productId)); + assertEquals(5, getSales(conn, salesTable, productId)); + } finally { + ConnectionSpec.getDatabaseLock().unlock(); + } + } + + private int getInventory(Connection conn, String productTable, int productId) throws Exception { + try (Statement stmt = conn.createStatement()) { + ResultSet results = stmt.executeQuery(String.format( + "SELECT stock FROM %s WHERE id = %d", productTable, productId)); + assertTrue(results.next()); + return results.getInt(1); + } + } + + private int getSales(Connection conn, String salesTable, int productId) throws Exception { + try (Statement stmt = conn.createStatement()) { + ResultSet results = stmt.executeQuery(String.format( + "SELECT units_sold FROM %s WHERE id = %d", salesTable, productId)); + assertTrue(results.next()); + return results.getInt(1); + } + } + /** Factory that provides a {@link JdbcMeta}. */ public static class FullyRemoteJdbcMetaFactory implements Meta.Factory { http://git-wip-us.apache.org/repos/asf/calcite/blob/322b9730/avatica/src/main/java/org/apache/calcite/avatica/AvaticaConnection.java ---------------------------------------------------------------------- diff --git a/avatica/src/main/java/org/apache/calcite/avatica/AvaticaConnection.java b/avatica/src/main/java/org/apache/calcite/avatica/AvaticaConnection.java index 03f2aa1..1d35128 100644 --- a/avatica/src/main/java/org/apache/calcite/avatica/AvaticaConnection.java +++ b/avatica/src/main/java/org/apache/calcite/avatica/AvaticaConnection.java @@ -172,11 +172,11 @@ public abstract class AvaticaConnection implements Connection { } public void commit() throws SQLException { - throw helper.unsupported(); + meta.commit(handle); } public void rollback() throws SQLException { - throw helper.unsupported(); + meta.rollback(handle); } public void close() throws SQLException { http://git-wip-us.apache.org/repos/asf/calcite/blob/322b9730/avatica/src/main/java/org/apache/calcite/avatica/Meta.java ---------------------------------------------------------------------- diff --git a/avatica/src/main/java/org/apache/calcite/avatica/Meta.java b/avatica/src/main/java/org/apache/calcite/avatica/Meta.java index 5ddacdb..a859608 100644 --- a/avatica/src/main/java/org/apache/calcite/avatica/Meta.java +++ b/avatica/src/main/java/org/apache/calcite/avatica/Meta.java @@ -289,6 +289,22 @@ public interface Meta { boolean syncResults(StatementHandle sh, QueryState state, long offset) throws NoSuchStatementException; + /** + * Makes all changes since the last commit/rollback permanent. Analogy to + * {@link Connection#commit()}. + * + * @param ch A reference to the real JDBC Connection. + */ + void commit(ConnectionHandle ch); + + /** + * Undoes all changes since the last commit/rollback. Analogy to + * {@link Connection#rollback()}; + * + * @param ch A reference to the real JDBC Connection. + */ + void rollback(ConnectionHandle ch); + /** Sync client and server view of connection properties. * * <p>Note: this interface is considered "experimental" and may undergo further changes as this http://git-wip-us.apache.org/repos/asf/calcite/blob/322b9730/avatica/src/main/java/org/apache/calcite/avatica/proto/Requests.java ---------------------------------------------------------------------- diff --git a/avatica/src/main/java/org/apache/calcite/avatica/proto/Requests.java b/avatica/src/main/java/org/apache/calcite/avatica/proto/Requests.java index e098322..6d34757 100644 --- a/avatica/src/main/java/org/apache/calcite/avatica/proto/Requests.java +++ b/avatica/src/main/java/org/apache/calcite/avatica/proto/Requests.java @@ -11121,6 +11121,920 @@ package org.apache.calcite.avatica.proto; } + public interface CommitRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:CommitRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * <code>optional string connection_id = 1;</code> + */ + java.lang.String getConnectionId(); + /** + * <code>optional string connection_id = 1;</code> + */ + com.google.protobuf.ByteString + getConnectionIdBytes(); + } + /** + * Protobuf type {@code CommitRequest} + * + * <pre> + * Request to invoke a commit on a Connection + * </pre> + */ + public static final class CommitRequest extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:CommitRequest) + CommitRequestOrBuilder { + // Use CommitRequest.newBuilder() to construct. + private CommitRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) { + super(builder); + } + private CommitRequest() { + connectionId_ = ""; + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); + } + private CommitRequest( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) { + this(); + int mutable_bitField0_ = 0; + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!input.skipField(tag)) { + done = true; + } + break; + } + case 10: { + String s = input.readStringRequireUtf8(); + + connectionId_ = s; + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw new RuntimeException(e.setUnfinishedMessage(this)); + } catch (java.io.IOException e) { + throw new RuntimeException( + new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this)); + } finally { + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.apache.calcite.avatica.proto.Requests.internal_static_CommitRequest_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.apache.calcite.avatica.proto.Requests.internal_static_CommitRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.apache.calcite.avatica.proto.Requests.CommitRequest.class, org.apache.calcite.avatica.proto.Requests.CommitRequest.Builder.class); + } + + public static final int CONNECTION_ID_FIELD_NUMBER = 1; + private volatile java.lang.Object connectionId_; + /** + * <code>optional string connection_id = 1;</code> + */ + public java.lang.String getConnectionId() { + java.lang.Object ref = connectionId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + connectionId_ = s; + return s; + } + } + /** + * <code>optional string connection_id = 1;</code> + */ + public com.google.protobuf.ByteString + getConnectionIdBytes() { + java.lang.Object ref = connectionId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + connectionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getConnectionIdBytes().isEmpty()) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, connectionId_); + } + } + + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getConnectionIdBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, connectionId_); + } + memoizedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + public static org.apache.calcite.avatica.proto.Requests.CommitRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.apache.calcite.avatica.proto.Requests.CommitRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Requests.CommitRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.apache.calcite.avatica.proto.Requests.CommitRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Requests.CommitRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.apache.calcite.avatica.proto.Requests.CommitRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Requests.CommitRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static org.apache.calcite.avatica.proto.Requests.CommitRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Requests.CommitRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.apache.calcite.avatica.proto.Requests.CommitRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.apache.calcite.avatica.proto.Requests.CommitRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code CommitRequest} + * + * <pre> + * Request to invoke a commit on a Connection + * </pre> + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder<Builder> implements + // @@protoc_insertion_point(builder_implements:CommitRequest) + org.apache.calcite.avatica.proto.Requests.CommitRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.apache.calcite.avatica.proto.Requests.internal_static_CommitRequest_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.apache.calcite.avatica.proto.Requests.internal_static_CommitRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.apache.calcite.avatica.proto.Requests.CommitRequest.class, org.apache.calcite.avatica.proto.Requests.CommitRequest.Builder.class); + } + + // Construct using org.apache.calcite.avatica.proto.Requests.CommitRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + public Builder clear() { + super.clear(); + connectionId_ = ""; + + return this; + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.apache.calcite.avatica.proto.Requests.internal_static_CommitRequest_descriptor; + } + + public org.apache.calcite.avatica.proto.Requests.CommitRequest getDefaultInstanceForType() { + return org.apache.calcite.avatica.proto.Requests.CommitRequest.getDefaultInstance(); + } + + public org.apache.calcite.avatica.proto.Requests.CommitRequest build() { + org.apache.calcite.avatica.proto.Requests.CommitRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public org.apache.calcite.avatica.proto.Requests.CommitRequest buildPartial() { + org.apache.calcite.avatica.proto.Requests.CommitRequest result = new org.apache.calcite.avatica.proto.Requests.CommitRequest(this); + result.connectionId_ = connectionId_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.apache.calcite.avatica.proto.Requests.CommitRequest) { + return mergeFrom((org.apache.calcite.avatica.proto.Requests.CommitRequest)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.apache.calcite.avatica.proto.Requests.CommitRequest other) { + if (other == org.apache.calcite.avatica.proto.Requests.CommitRequest.getDefaultInstance()) return this; + if (!other.getConnectionId().isEmpty()) { + connectionId_ = other.connectionId_; + onChanged(); + } + onChanged(); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.apache.calcite.avatica.proto.Requests.CommitRequest parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.apache.calcite.avatica.proto.Requests.CommitRequest) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object connectionId_ = ""; + /** + * <code>optional string connection_id = 1;</code> + */ + public java.lang.String getConnectionId() { + java.lang.Object ref = connectionId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + connectionId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * <code>optional string connection_id = 1;</code> + */ + public com.google.protobuf.ByteString + getConnectionIdBytes() { + java.lang.Object ref = connectionId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + connectionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * <code>optional string connection_id = 1;</code> + */ + public Builder setConnectionId( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + connectionId_ = value; + onChanged(); + return this; + } + /** + * <code>optional string connection_id = 1;</code> + */ + public Builder clearConnectionId() { + + connectionId_ = getDefaultInstance().getConnectionId(); + onChanged(); + return this; + } + /** + * <code>optional string connection_id = 1;</code> + */ + public Builder setConnectionIdBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + connectionId_ = value; + onChanged(); + return this; + } + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + + // @@protoc_insertion_point(builder_scope:CommitRequest) + } + + // @@protoc_insertion_point(class_scope:CommitRequest) + private static final org.apache.calcite.avatica.proto.Requests.CommitRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.apache.calcite.avatica.proto.Requests.CommitRequest(); + } + + public static org.apache.calcite.avatica.proto.Requests.CommitRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser<CommitRequest> + PARSER = new com.google.protobuf.AbstractParser<CommitRequest>() { + public CommitRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + try { + return new CommitRequest(input, extensionRegistry); + } catch (RuntimeException e) { + if (e.getCause() instanceof + com.google.protobuf.InvalidProtocolBufferException) { + throw (com.google.protobuf.InvalidProtocolBufferException) + e.getCause(); + } + throw e; + } + } + }; + + public static com.google.protobuf.Parser<CommitRequest> parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser<CommitRequest> getParserForType() { + return PARSER; + } + + public org.apache.calcite.avatica.proto.Requests.CommitRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface RollbackRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:RollbackRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * <code>optional string connection_id = 1;</code> + */ + java.lang.String getConnectionId(); + /** + * <code>optional string connection_id = 1;</code> + */ + com.google.protobuf.ByteString + getConnectionIdBytes(); + } + /** + * Protobuf type {@code RollbackRequest} + * + * <pre> + * Request to invoke rollback on a Connection + * </pre> + */ + public static final class RollbackRequest extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:RollbackRequest) + RollbackRequestOrBuilder { + // Use RollbackRequest.newBuilder() to construct. + private RollbackRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) { + super(builder); + } + private RollbackRequest() { + connectionId_ = ""; + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); + } + private RollbackRequest( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) { + this(); + int mutable_bitField0_ = 0; + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!input.skipField(tag)) { + done = true; + } + break; + } + case 10: { + String s = input.readStringRequireUtf8(); + + connectionId_ = s; + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw new RuntimeException(e.setUnfinishedMessage(this)); + } catch (java.io.IOException e) { + throw new RuntimeException( + new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this)); + } finally { + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.apache.calcite.avatica.proto.Requests.internal_static_RollbackRequest_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.apache.calcite.avatica.proto.Requests.internal_static_RollbackRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.apache.calcite.avatica.proto.Requests.RollbackRequest.class, org.apache.calcite.avatica.proto.Requests.RollbackRequest.Builder.class); + } + + public static final int CONNECTION_ID_FIELD_NUMBER = 1; + private volatile java.lang.Object connectionId_; + /** + * <code>optional string connection_id = 1;</code> + */ + public java.lang.String getConnectionId() { + java.lang.Object ref = connectionId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + connectionId_ = s; + return s; + } + } + /** + * <code>optional string connection_id = 1;</code> + */ + public com.google.protobuf.ByteString + getConnectionIdBytes() { + java.lang.Object ref = connectionId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + connectionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getConnectionIdBytes().isEmpty()) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, connectionId_); + } + } + + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getConnectionIdBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, connectionId_); + } + memoizedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + public static org.apache.calcite.avatica.proto.Requests.RollbackRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.apache.calcite.avatica.proto.Requests.RollbackRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Requests.RollbackRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.apache.calcite.avatica.proto.Requests.RollbackRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Requests.RollbackRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.apache.calcite.avatica.proto.Requests.RollbackRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Requests.RollbackRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static org.apache.calcite.avatica.proto.Requests.RollbackRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Requests.RollbackRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.apache.calcite.avatica.proto.Requests.RollbackRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.apache.calcite.avatica.proto.Requests.RollbackRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code RollbackRequest} + * + * <pre> + * Request to invoke rollback on a Connection + * </pre> + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder<Builder> implements + // @@protoc_insertion_point(builder_implements:RollbackRequest) + org.apache.calcite.avatica.proto.Requests.RollbackRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.apache.calcite.avatica.proto.Requests.internal_static_RollbackRequest_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.apache.calcite.avatica.proto.Requests.internal_static_RollbackRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.apache.calcite.avatica.proto.Requests.RollbackRequest.class, org.apache.calcite.avatica.proto.Requests.RollbackRequest.Builder.class); + } + + // Construct using org.apache.calcite.avatica.proto.Requests.RollbackRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + public Builder clear() { + super.clear(); + connectionId_ = ""; + + return this; + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.apache.calcite.avatica.proto.Requests.internal_static_RollbackRequest_descriptor; + } + + public org.apache.calcite.avatica.proto.Requests.RollbackRequest getDefaultInstanceForType() { + return org.apache.calcite.avatica.proto.Requests.RollbackRequest.getDefaultInstance(); + } + + public org.apache.calcite.avatica.proto.Requests.RollbackRequest build() { + org.apache.calcite.avatica.proto.Requests.RollbackRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public org.apache.calcite.avatica.proto.Requests.RollbackRequest buildPartial() { + org.apache.calcite.avatica.proto.Requests.RollbackRequest result = new org.apache.calcite.avatica.proto.Requests.RollbackRequest(this); + result.connectionId_ = connectionId_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.apache.calcite.avatica.proto.Requests.RollbackRequest) { + return mergeFrom((org.apache.calcite.avatica.proto.Requests.RollbackRequest)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.apache.calcite.avatica.proto.Requests.RollbackRequest other) { + if (other == org.apache.calcite.avatica.proto.Requests.RollbackRequest.getDefaultInstance()) return this; + if (!other.getConnectionId().isEmpty()) { + connectionId_ = other.connectionId_; + onChanged(); + } + onChanged(); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.apache.calcite.avatica.proto.Requests.RollbackRequest parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.apache.calcite.avatica.proto.Requests.RollbackRequest) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object connectionId_ = ""; + /** + * <code>optional string connection_id = 1;</code> + */ + public java.lang.String getConnectionId() { + java.lang.Object ref = connectionId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + connectionId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * <code>optional string connection_id = 1;</code> + */ + public com.google.protobuf.ByteString + getConnectionIdBytes() { + java.lang.Object ref = connectionId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + connectionId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * <code>optional string connection_id = 1;</code> + */ + public Builder setConnectionId( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + connectionId_ = value; + onChanged(); + return this; + } + /** + * <code>optional string connection_id = 1;</code> + */ + public Builder clearConnectionId() { + + connectionId_ = getDefaultInstance().getConnectionId(); + onChanged(); + return this; + } + /** + * <code>optional string connection_id = 1;</code> + */ + public Builder setConnectionIdBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + connectionId_ = value; + onChanged(); + return this; + } + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + + // @@protoc_insertion_point(builder_scope:RollbackRequest) + } + + // @@protoc_insertion_point(class_scope:RollbackRequest) + private static final org.apache.calcite.avatica.proto.Requests.RollbackRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.apache.calcite.avatica.proto.Requests.RollbackRequest(); + } + + public static org.apache.calcite.avatica.proto.Requests.RollbackRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser<RollbackRequest> + PARSER = new com.google.protobuf.AbstractParser<RollbackRequest>() { + public RollbackRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + try { + return new RollbackRequest(input, extensionRegistry); + } catch (RuntimeException e) { + if (e.getCause() instanceof + com.google.protobuf.InvalidProtocolBufferException) { + throw (com.google.protobuf.InvalidProtocolBufferException) + e.getCause(); + } + throw e; + } + } + }; + + public static com.google.protobuf.Parser<RollbackRequest> parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser<RollbackRequest> getParserForType() { + return PARSER; + } + + public org.apache.calcite.avatica.proto.Requests.RollbackRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + private static com.google.protobuf.Descriptors.Descriptor internal_static_CatalogsRequest_descriptor; private static @@ -11211,6 +12125,16 @@ package org.apache.calcite.avatica.proto; private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_SyncResultsRequest_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_CommitRequest_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_CommitRequest_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_RollbackRequest_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_RollbackRequest_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -11258,8 +12182,10 @@ package org.apache.calcite.avatica.proto; "\034\n\024has_parameter_values\030\004 \001(\010\"m\n\022SyncRes" + "ultsRequest\022\025\n\rconnection_id\030\001 \001(\t\022\024\n\014st" + "atement_id\030\002 \001(\r\022\032\n\005state\030\003 \001(\0132\013.QueryS" + - "tate\022\016\n\006offset\030\004 \001(\004B\"\n org.apache.calci" + - "te.avatica.protob\006proto3" + "tate\022\016\n\006offset\030\004 \001(\004\"&\n\rCommitRequest\022\025\n" + + "\rconnection_id\030\001 \001(\t\"(\n\017RollbackRequest\022", + "\025\n\rconnection_id\030\001 \001(\tB\"\n org.apache.cal" + + "cite.avatica.protob\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -11382,6 +12308,18 @@ package org.apache.calcite.avatica.proto; com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_SyncResultsRequest_descriptor, new java.lang.String[] { "ConnectionId", "StatementId", "State", "Offset", }); + internal_static_CommitRequest_descriptor = + getDescriptor().getMessageTypes().get(17); + internal_static_CommitRequest_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_CommitRequest_descriptor, + new java.lang.String[] { "ConnectionId", }); + internal_static_RollbackRequest_descriptor = + getDescriptor().getMessageTypes().get(18); + internal_static_RollbackRequest_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_RollbackRequest_descriptor, + new java.lang.String[] { "ConnectionId", }); org.apache.calcite.avatica.proto.Common.getDescriptor(); } http://git-wip-us.apache.org/repos/asf/calcite/blob/322b9730/avatica/src/main/java/org/apache/calcite/avatica/proto/Responses.java ---------------------------------------------------------------------- diff --git a/avatica/src/main/java/org/apache/calcite/avatica/proto/Responses.java b/avatica/src/main/java/org/apache/calcite/avatica/proto/Responses.java index 7df84b7..cd3d0cf 100644 --- a/avatica/src/main/java/org/apache/calcite/avatica/proto/Responses.java +++ b/avatica/src/main/java/org/apache/calcite/avatica/proto/Responses.java @@ -10961,6 +10961,652 @@ package org.apache.calcite.avatica.proto; } + public interface CommitResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:CommitResponse) + com.google.protobuf.MessageOrBuilder { + } + /** + * Protobuf type {@code CommitResponse} + * + * <pre> + * Response to a commit request + * </pre> + */ + public static final class CommitResponse extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:CommitResponse) + CommitResponseOrBuilder { + // Use CommitResponse.newBuilder() to construct. + private CommitResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) { + super(builder); + } + private CommitResponse() { + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); + } + private CommitResponse( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) { + this(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!input.skipField(tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw new RuntimeException(e.setUnfinishedMessage(this)); + } catch (java.io.IOException e) { + throw new RuntimeException( + new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this)); + } finally { + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.apache.calcite.avatica.proto.Responses.internal_static_CommitResponse_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.apache.calcite.avatica.proto.Responses.internal_static_CommitResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.apache.calcite.avatica.proto.Responses.CommitResponse.class, org.apache.calcite.avatica.proto.Responses.CommitResponse.Builder.class); + } + + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + } + + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + memoizedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + public static org.apache.calcite.avatica.proto.Responses.CommitResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.apache.calcite.avatica.proto.Responses.CommitResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Responses.CommitResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.apache.calcite.avatica.proto.Responses.CommitResponse parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Responses.CommitResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.apache.calcite.avatica.proto.Responses.CommitResponse parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Responses.CommitResponse parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static org.apache.calcite.avatica.proto.Responses.CommitResponse parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Responses.CommitResponse parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.apache.calcite.avatica.proto.Responses.CommitResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.apache.calcite.avatica.proto.Responses.CommitResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code CommitResponse} + * + * <pre> + * Response to a commit request + * </pre> + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder<Builder> implements + // @@protoc_insertion_point(builder_implements:CommitResponse) + org.apache.calcite.avatica.proto.Responses.CommitResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.apache.calcite.avatica.proto.Responses.internal_static_CommitResponse_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.apache.calcite.avatica.proto.Responses.internal_static_CommitResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.apache.calcite.avatica.proto.Responses.CommitResponse.class, org.apache.calcite.avatica.proto.Responses.CommitResponse.Builder.class); + } + + // Construct using org.apache.calcite.avatica.proto.Responses.CommitResponse.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + public Builder clear() { + super.clear(); + return this; + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.apache.calcite.avatica.proto.Responses.internal_static_CommitResponse_descriptor; + } + + public org.apache.calcite.avatica.proto.Responses.CommitResponse getDefaultInstanceForType() { + return org.apache.calcite.avatica.proto.Responses.CommitResponse.getDefaultInstance(); + } + + public org.apache.calcite.avatica.proto.Responses.CommitResponse build() { + org.apache.calcite.avatica.proto.Responses.CommitResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public org.apache.calcite.avatica.proto.Responses.CommitResponse buildPartial() { + org.apache.calcite.avatica.proto.Responses.CommitResponse result = new org.apache.calcite.avatica.proto.Responses.CommitResponse(this); + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.apache.calcite.avatica.proto.Responses.CommitResponse) { + return mergeFrom((org.apache.calcite.avatica.proto.Responses.CommitResponse)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.apache.calcite.avatica.proto.Responses.CommitResponse other) { + if (other == org.apache.calcite.avatica.proto.Responses.CommitResponse.getDefaultInstance()) return this; + onChanged(); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.apache.calcite.avatica.proto.Responses.CommitResponse parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.apache.calcite.avatica.proto.Responses.CommitResponse) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + + // @@protoc_insertion_point(builder_scope:CommitResponse) + } + + // @@protoc_insertion_point(class_scope:CommitResponse) + private static final org.apache.calcite.avatica.proto.Responses.CommitResponse DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.apache.calcite.avatica.proto.Responses.CommitResponse(); + } + + public static org.apache.calcite.avatica.proto.Responses.CommitResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser<CommitResponse> + PARSER = new com.google.protobuf.AbstractParser<CommitResponse>() { + public CommitResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + try { + return new CommitResponse(input, extensionRegistry); + } catch (RuntimeException e) { + if (e.getCause() instanceof + com.google.protobuf.InvalidProtocolBufferException) { + throw (com.google.protobuf.InvalidProtocolBufferException) + e.getCause(); + } + throw e; + } + } + }; + + public static com.google.protobuf.Parser<CommitResponse> parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser<CommitResponse> getParserForType() { + return PARSER; + } + + public org.apache.calcite.avatica.proto.Responses.CommitResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface RollbackResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:RollbackResponse) + com.google.protobuf.MessageOrBuilder { + } + /** + * Protobuf type {@code RollbackResponse} + * + * <pre> + * Response to a rollback request + * </pre> + */ + public static final class RollbackResponse extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:RollbackResponse) + RollbackResponseOrBuilder { + // Use RollbackResponse.newBuilder() to construct. + private RollbackResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) { + super(builder); + } + private RollbackResponse() { + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); + } + private RollbackResponse( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) { + this(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!input.skipField(tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw new RuntimeException(e.setUnfinishedMessage(this)); + } catch (java.io.IOException e) { + throw new RuntimeException( + new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this)); + } finally { + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.apache.calcite.avatica.proto.Responses.internal_static_RollbackResponse_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.apache.calcite.avatica.proto.Responses.internal_static_RollbackResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.apache.calcite.avatica.proto.Responses.RollbackResponse.class, org.apache.calcite.avatica.proto.Responses.RollbackResponse.Builder.class); + } + + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + } + + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + memoizedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + public static org.apache.calcite.avatica.proto.Responses.RollbackResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.apache.calcite.avatica.proto.Responses.RollbackResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Responses.RollbackResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.apache.calcite.avatica.proto.Responses.RollbackResponse parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Responses.RollbackResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.apache.calcite.avatica.proto.Responses.RollbackResponse parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Responses.RollbackResponse parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static org.apache.calcite.avatica.proto.Responses.RollbackResponse parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static org.apache.calcite.avatica.proto.Responses.RollbackResponse parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.apache.calcite.avatica.proto.Responses.RollbackResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.apache.calcite.avatica.proto.Responses.RollbackResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code RollbackResponse} + * + * <pre> + * Response to a rollback request + * </pre> + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder<Builder> implements + // @@protoc_insertion_point(builder_implements:RollbackResponse) + org.apache.calcite.avatica.proto.Responses.RollbackResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.apache.calcite.avatica.proto.Responses.internal_static_RollbackResponse_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.apache.calcite.avatica.proto.Responses.internal_static_RollbackResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.apache.calcite.avatica.proto.Responses.RollbackResponse.class, org.apache.calcite.avatica.proto.Responses.RollbackResponse.Builder.class); + } + + // Construct using org.apache.calcite.avatica.proto.Responses.RollbackResponse.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + public Builder clear() { + super.clear(); + return this; + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.apache.calcite.avatica.proto.Responses.internal_static_RollbackResponse_descriptor; + } + + public org.apache.calcite.avatica.proto.Responses.RollbackResponse getDefaultInstanceForType() { + return org.apache.calcite.avatica.proto.Responses.RollbackResponse.getDefaultInstance(); + } + + public org.apache.calcite.avatica.proto.Responses.RollbackResponse build() { + org.apache.calcite.avatica.proto.Responses.RollbackResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public org.apache.calcite.avatica.proto.Responses.RollbackResponse buildPartial() { + org.apache.calcite.avatica.proto.Responses.RollbackResponse result = new org.apache.calcite.avatica.proto.Responses.RollbackResponse(this); + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.apache.calcite.avatica.proto.Responses.RollbackResponse) { + return mergeFrom((org.apache.calcite.avatica.proto.Responses.RollbackResponse)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.apache.calcite.avatica.proto.Responses.RollbackResponse other) { + if (other == org.apache.calcite.avatica.proto.Responses.RollbackResponse.getDefaultInstance()) return this; + onChanged(); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.apache.calcite.avatica.proto.Responses.RollbackResponse parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.apache.calcite.avatica.proto.Responses.RollbackResponse) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + + // @@protoc_insertion_point(builder_scope:RollbackResponse) + } + + // @@protoc_insertion_point(class_scope:RollbackResponse) + private static final org.apache.calcite.avatica.proto.Responses.RollbackResponse DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.apache.calcite.avatica.proto.Responses.RollbackResponse(); + } + + public static org.apache.calcite.avatica.proto.Responses.RollbackResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser<RollbackResponse> + PARSER = new com.google.protobuf.AbstractParser<RollbackResponse>() { + public RollbackResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + try { + return new RollbackResponse(input, extensionRegistry); + } catch (RuntimeException e) { + if (e.getCause() instanceof + com.google.protobuf.InvalidProtocolBufferException) { + throw (com.google.protobuf.InvalidProtocolBufferException) + e.getCause(); + } + throw e; + } + } + }; + + public static com.google.protobuf.Parser<RollbackResponse> parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser<RollbackResponse> getParserForType() { + return PARSER; + } + + public org.apache.calcite.avatica.proto.Responses.RollbackResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + private static com.google.protobuf.Descriptors.Descriptor internal_static_ResultSetResponse_descriptor; private static @@ -11031,6 +11677,16 @@ package org.apache.calcite.avatica.proto; private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_RpcMetadata_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_CommitResponse_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_CommitResponse_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_RollbackResponse_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_RollbackResponse_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -11077,8 +11733,9 @@ package org.apache.calcite.avatica.proto; "tsResponse\022\031\n\021missing_statement\030\001 \001(\010\022\024\n" + "\014more_results\030\002 \001(\010\022\036\n\010metadata\030\003 \001(\0132\014." + "RpcMetadata\"%\n\013RpcMetadata\022\026\n\016server_add" + - "ress\030\001 \001(\tB\"\n org.apache.calcite.avatica" + - ".protob\006proto3" + "ress\030\001 \001(\t\"\020\n\016CommitResponse\"\022\n\020Rollback" + + "ResponseB\"\n org.apache.calcite.avatica.p" + + "rotob\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -11177,6 +11834,18 @@ package org.apache.calcite.avatica.proto; com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_RpcMetadata_descriptor, new java.lang.String[] { "ServerAddress", }); + internal_static_CommitResponse_descriptor = + getDescriptor().getMessageTypes().get(14); + internal_static_CommitResponse_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_CommitResponse_descriptor, + new java.lang.String[] { }); + internal_static_RollbackResponse_descriptor = + getDescriptor().getMessageTypes().get(15); + internal_static_RollbackResponse_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_RollbackResponse_descriptor, + new java.lang.String[] { }); org.apache.calcite.avatica.proto.Common.getDescriptor(); } http://git-wip-us.apache.org/repos/asf/calcite/blob/322b9730/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 index 99cf79b..668b3be 100644 --- a/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java +++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/JsonService.java @@ -206,6 +206,22 @@ public abstract class JsonService extends AbstractService { 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/322b9730/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 index c4a5893..e9c4367 100644 --- a/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalService.java +++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/LocalService.java @@ -300,6 +300,20 @@ public class LocalService implements Service { return response; } + + public CommitResponse apply(CommitRequest request) { + 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/322b9730/avatica/src/main/java/org/apache/calcite/avatica/remote/ProtobufService.java ---------------------------------------------------------------------- diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/ProtobufService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/ProtobufService.java index 8a79fc5..741c34c 100644 --- a/avatica/src/main/java/org/apache/calcite/avatica/remote/ProtobufService.java +++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/ProtobufService.java @@ -103,6 +103,14 @@ public abstract class ProtobufService extends AbstractService { return (SyncResultsResponse) _apply(request); } + @Override public CommitResponse apply(CommitRequest request) { + return (CommitResponse) _apply(request); + } + + @Override public RollbackResponse apply(RollbackRequest request) { + return (RollbackResponse) _apply(request); + } + /** * Determines whether the given message has the field, denoted by the provided number, set. * @@ -114,6 +122,25 @@ public abstract class ProtobufService extends AbstractService { public static boolean hasField(Message msg, Descriptor desc, int fieldNum) { return msg.hasField(desc.findFieldByNumber(fieldNum)); } + + /** + * Checks if the provided {@link Message} is an instance of the Class given by + * <code>expectedType</code>. Throws an IllegalArgumentException if the message is not of the + * expected type, otherwise, it returns the message cast as the expected type. + * + * @param msg A Protocol Buffer message. + * @param expectedType The expected type of the Protocol Buffer message. + * @return The msg cast to the concrete Message type. + * @throws IllegalArgumentException If the type of the message is not the expectedType. + */ + public static <T extends Message> T castProtobufMessage(Message msg, Class<T> expectedType) { + if (!expectedType.isInstance(msg)) { + throw new IllegalArgumentException("Expected instance of " + expectedType.getName() + + ", but got " + msg.getClass().getName()); + } + + return expectedType.cast(msg); + } } // End ProtobufService.java http://git-wip-us.apache.org/repos/asf/calcite/blob/322b9730/avatica/src/main/java/org/apache/calcite/avatica/remote/ProtobufTranslationImpl.java ---------------------------------------------------------------------- diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/ProtobufTranslationImpl.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/ProtobufTranslationImpl.java index 85d3a2b..646d706 100644 --- a/avatica/src/main/java/org/apache/calcite/avatica/remote/ProtobufTranslationImpl.java +++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/ProtobufTranslationImpl.java @@ -21,6 +21,7 @@ import org.apache.calcite.avatica.proto.Requests.CatalogsRequest; import org.apache.calcite.avatica.proto.Requests.CloseConnectionRequest; import org.apache.calcite.avatica.proto.Requests.CloseStatementRequest; import org.apache.calcite.avatica.proto.Requests.ColumnsRequest; +import org.apache.calcite.avatica.proto.Requests.CommitRequest; import org.apache.calcite.avatica.proto.Requests.ConnectionSyncRequest; import org.apache.calcite.avatica.proto.Requests.CreateStatementRequest; import org.apache.calcite.avatica.proto.Requests.DatabasePropertyRequest; @@ -29,6 +30,7 @@ import org.apache.calcite.avatica.proto.Requests.FetchRequest; import org.apache.calcite.avatica.proto.Requests.OpenConnectionRequest; import org.apache.calcite.avatica.proto.Requests.PrepareAndExecuteRequest; import org.apache.calcite.avatica.proto.Requests.PrepareRequest; +import org.apache.calcite.avatica.proto.Requests.RollbackRequest; import org.apache.calcite.avatica.proto.Requests.SchemasRequest; import org.apache.calcite.avatica.proto.Requests.SyncResultsRequest; import org.apache.calcite.avatica.proto.Requests.TableTypesRequest; @@ -36,6 +38,7 @@ import org.apache.calcite.avatica.proto.Requests.TablesRequest; import org.apache.calcite.avatica.proto.Requests.TypeInfoRequest; import org.apache.calcite.avatica.proto.Responses.CloseConnectionResponse; import org.apache.calcite.avatica.proto.Responses.CloseStatementResponse; +import org.apache.calcite.avatica.proto.Responses.CommitResponse; import org.apache.calcite.avatica.proto.Responses.ConnectionSyncResponse; import org.apache.calcite.avatica.proto.Responses.CreateStatementResponse; import org.apache.calcite.avatica.proto.Responses.DatabasePropertyResponse; @@ -45,6 +48,7 @@ import org.apache.calcite.avatica.proto.Responses.FetchResponse; import org.apache.calcite.avatica.proto.Responses.OpenConnectionResponse; import org.apache.calcite.avatica.proto.Responses.PrepareResponse; import org.apache.calcite.avatica.proto.Responses.ResultSetResponse; +import org.apache.calcite.avatica.proto.Responses.RollbackResponse; import org.apache.calcite.avatica.proto.Responses.RpcMetadata; import org.apache.calcite.avatica.proto.Responses.SyncResultsResponse; import org.apache.calcite.avatica.remote.Service.Request; @@ -112,6 +116,10 @@ public class ProtobufTranslationImpl implements ProtobufTranslation { new RequestTranslator(ExecuteRequest.parser(), new Service.ExecuteRequest())); reqParsers.put(SyncResultsRequest.class.getName(), new RequestTranslator(SyncResultsRequest.parser(), new Service.SyncResultsRequest())); + reqParsers.put(CommitRequest.class.getName(), + new RequestTranslator(CommitRequest.parser(), new Service.CommitRequest())); + reqParsers.put(RollbackRequest.class.getName(), + new RequestTranslator(RollbackRequest.parser(), new Service.RollbackRequest())); REQUEST_PARSERS = Collections.unmodifiableMap(reqParsers); @@ -148,6 +156,10 @@ public class ProtobufTranslationImpl implements ProtobufTranslation { new ResponseTranslator(SyncResultsResponse.parser(), new Service.SyncResultsResponse())); respParsers.put(RpcMetadata.class.getName(), new ResponseTranslator(RpcMetadata.parser(), new RpcMetadataResponse())); + respParsers.put(CommitResponse.class.getName(), + new ResponseTranslator(CommitResponse.parser(), new Service.CommitResponse())); + respParsers.put(RollbackResponse.class.getName(), + new ResponseTranslator(RollbackResponse.parser(), new Service.RollbackResponse())); RESPONSE_PARSERS = Collections.unmodifiableMap(respParsers); } http://git-wip-us.apache.org/repos/asf/calcite/blob/322b9730/avatica/src/main/java/org/apache/calcite/avatica/remote/RemoteMeta.java ---------------------------------------------------------------------- diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/RemoteMeta.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/RemoteMeta.java index e741ffb..463985a 100644 --- a/avatica/src/main/java/org/apache/calcite/avatica/remote/RemoteMeta.java +++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/RemoteMeta.java @@ -370,6 +370,26 @@ class RemoteMeta extends MetaImpl { throw e; } } + + @Override public void commit(final ConnectionHandle ch) { + connection.invokeWithRetries(new CallableWithoutException<Void>() { + public Void call() { + final Service.CommitResponse response = + service.apply(new Service.CommitRequest(ch.id)); + return null; + } + }); + } + + @Override public void rollback(final ConnectionHandle ch) { + connection.invokeWithRetries(new CallableWithoutException<Void>() { + public Void call() { + final Service.RollbackResponse response = + service.apply(new Service.RollbackRequest(ch.id)); + return null; + } + }); + } } // End RemoteMeta.java
