You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2015/10/16 16:39:01 UTC

[2/4] incubator-calcite git commit: [CALCITE-705] DML in Avatica, and split Execute out from Fetch request (Yeong Wei)

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/cee8e844/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 b870894..bdcb140 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
@@ -5044,59 +5044,6 @@ package org.apache.calcite.avatica.proto;
      * </pre>
      */
     int getFetchMaxRowCount();
-
-    /**
-     * <code>repeated .TypedValue parameter_values = 5;</code>
-     *
-     * <pre>
-     * List of parameter values if statement is to be executed. Else, none.
-     * </pre>
-     */
-    java.util.List<org.apache.calcite.avatica.proto.Common.TypedValue> 
-        getParameterValuesList();
-    /**
-     * <code>repeated .TypedValue parameter_values = 5;</code>
-     *
-     * <pre>
-     * List of parameter values if statement is to be executed. Else, none.
-     * </pre>
-     */
-    org.apache.calcite.avatica.proto.Common.TypedValue getParameterValues(int index);
-    /**
-     * <code>repeated .TypedValue parameter_values = 5;</code>
-     *
-     * <pre>
-     * List of parameter values if statement is to be executed. Else, none.
-     * </pre>
-     */
-    int getParameterValuesCount();
-    /**
-     * <code>repeated .TypedValue parameter_values = 5;</code>
-     *
-     * <pre>
-     * List of parameter values if statement is to be executed. Else, none.
-     * </pre>
-     */
-    java.util.List<? extends org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder> 
-        getParameterValuesOrBuilderList();
-    /**
-     * <code>repeated .TypedValue parameter_values = 5;</code>
-     *
-     * <pre>
-     * List of parameter values if statement is to be executed. Else, none.
-     * </pre>
-     */
-    org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder getParameterValuesOrBuilder(
-        int index);
-
-    /**
-     * <code>optional bool has_parameter_values = 6;</code>
-     *
-     * <pre>
-     * Having an empty list of param values is distinct from a null param list
-     * </pre>
-     */
-    boolean getHasParameterValues();
   }
   /**
    * Protobuf type {@code FetchRequest}
@@ -5118,8 +5065,6 @@ package org.apache.calcite.avatica.proto;
       statementId_ = 0;
       offset_ = 0L;
       fetchMaxRowCount_ = 0;
-      parameterValues_ = java.util.Collections.emptyList();
-      hasParameterValues_ = false;
     }
 
     @java.lang.Override
@@ -5168,19 +5113,6 @@ package org.apache.calcite.avatica.proto;
               fetchMaxRowCount_ = input.readUInt32();
               break;
             }
-            case 42: {
-              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
-                parameterValues_ = new java.util.ArrayList<org.apache.calcite.avatica.proto.Common.TypedValue>();
-                mutable_bitField0_ |= 0x00000010;
-              }
-              parameterValues_.add(input.readMessage(org.apache.calcite.avatica.proto.Common.TypedValue.PARSER, extensionRegistry));
-              break;
-            }
-            case 48: {
-
-              hasParameterValues_ = input.readBool();
-              break;
-            }
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
@@ -5189,9 +5121,6 @@ package org.apache.calcite.avatica.proto;
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e.getMessage()).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
-          parameterValues_ = java.util.Collections.unmodifiableList(parameterValues_);
-        }
         makeExtensionsImmutable();
       }
     }
@@ -5222,7 +5151,6 @@ package org.apache.calcite.avatica.proto;
       return PARSER;
     }
 
-    private int bitField0_;
     public static final int CONNECTION_ID_FIELD_NUMBER = 1;
     private java.lang.Object connectionId_;
     /**
@@ -5290,74 +5218,6 @@ package org.apache.calcite.avatica.proto;
       return fetchMaxRowCount_;
     }
 
-    public static final int PARAMETER_VALUES_FIELD_NUMBER = 5;
-    private java.util.List<org.apache.calcite.avatica.proto.Common.TypedValue> parameterValues_;
-    /**
-     * <code>repeated .TypedValue parameter_values = 5;</code>
-     *
-     * <pre>
-     * List of parameter values if statement is to be executed. Else, none.
-     * </pre>
-     */
-    public java.util.List<org.apache.calcite.avatica.proto.Common.TypedValue> getParameterValuesList() {
-      return parameterValues_;
-    }
-    /**
-     * <code>repeated .TypedValue parameter_values = 5;</code>
-     *
-     * <pre>
-     * List of parameter values if statement is to be executed. Else, none.
-     * </pre>
-     */
-    public java.util.List<? extends org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder> 
-        getParameterValuesOrBuilderList() {
-      return parameterValues_;
-    }
-    /**
-     * <code>repeated .TypedValue parameter_values = 5;</code>
-     *
-     * <pre>
-     * List of parameter values if statement is to be executed. Else, none.
-     * </pre>
-     */
-    public int getParameterValuesCount() {
-      return parameterValues_.size();
-    }
-    /**
-     * <code>repeated .TypedValue parameter_values = 5;</code>
-     *
-     * <pre>
-     * List of parameter values if statement is to be executed. Else, none.
-     * </pre>
-     */
-    public org.apache.calcite.avatica.proto.Common.TypedValue getParameterValues(int index) {
-      return parameterValues_.get(index);
-    }
-    /**
-     * <code>repeated .TypedValue parameter_values = 5;</code>
-     *
-     * <pre>
-     * List of parameter values if statement is to be executed. Else, none.
-     * </pre>
-     */
-    public org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder getParameterValuesOrBuilder(
-        int index) {
-      return parameterValues_.get(index);
-    }
-
-    public static final int HAS_PARAMETER_VALUES_FIELD_NUMBER = 6;
-    private boolean hasParameterValues_;
-    /**
-     * <code>optional bool has_parameter_values = 6;</code>
-     *
-     * <pre>
-     * Having an empty list of param values is distinct from a null param list
-     * </pre>
-     */
-    public boolean getHasParameterValues() {
-      return hasParameterValues_;
-    }
-
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
@@ -5383,12 +5243,6 @@ package org.apache.calcite.avatica.proto;
       if (fetchMaxRowCount_ != 0) {
         output.writeUInt32(4, fetchMaxRowCount_);
       }
-      for (int i = 0; i < parameterValues_.size(); i++) {
-        output.writeMessage(5, parameterValues_.get(i));
-      }
-      if (hasParameterValues_ != false) {
-        output.writeBool(6, hasParameterValues_);
-      }
     }
 
     private int memoizedSerializedSize = -1;
@@ -5413,14 +5267,6 @@ package org.apache.calcite.avatica.proto;
         size += com.google.protobuf.CodedOutputStream
           .computeUInt32Size(4, fetchMaxRowCount_);
       }
-      for (int i = 0; i < parameterValues_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, parameterValues_.get(i));
-      }
-      if (hasParameterValues_ != false) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(6, hasParameterValues_);
-      }
       memoizedSerializedSize = size;
       return size;
     }
@@ -5527,7 +5373,6 @@ package org.apache.calcite.avatica.proto;
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getParameterValuesFieldBuilder();
         }
       }
       public Builder clear() {
@@ -5540,14 +5385,6 @@ package org.apache.calcite.avatica.proto;
 
         fetchMaxRowCount_ = 0;
 
-        if (parameterValuesBuilder_ == null) {
-          parameterValues_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000010);
-        } else {
-          parameterValuesBuilder_.clear();
-        }
-        hasParameterValues_ = false;
-
         return this;
       }
 
@@ -5570,23 +5407,10 @@ package org.apache.calcite.avatica.proto;
 
       public org.apache.calcite.avatica.proto.Requests.FetchRequest buildPartial() {
         org.apache.calcite.avatica.proto.Requests.FetchRequest result = new org.apache.calcite.avatica.proto.Requests.FetchRequest(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
         result.connectionId_ = connectionId_;
         result.statementId_ = statementId_;
         result.offset_ = offset_;
         result.fetchMaxRowCount_ = fetchMaxRowCount_;
-        if (parameterValuesBuilder_ == null) {
-          if (((bitField0_ & 0x00000010) == 0x00000010)) {
-            parameterValues_ = java.util.Collections.unmodifiableList(parameterValues_);
-            bitField0_ = (bitField0_ & ~0x00000010);
-          }
-          result.parameterValues_ = parameterValues_;
-        } else {
-          result.parameterValues_ = parameterValuesBuilder_.build();
-        }
-        result.hasParameterValues_ = hasParameterValues_;
-        result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
@@ -5615,35 +5439,6 @@ package org.apache.calcite.avatica.proto;
         if (other.getFetchMaxRowCount() != 0) {
           setFetchMaxRowCount(other.getFetchMaxRowCount());
         }
-        if (parameterValuesBuilder_ == null) {
-          if (!other.parameterValues_.isEmpty()) {
-            if (parameterValues_.isEmpty()) {
-              parameterValues_ = other.parameterValues_;
-              bitField0_ = (bitField0_ & ~0x00000010);
-            } else {
-              ensureParameterValuesIsMutable();
-              parameterValues_.addAll(other.parameterValues_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.parameterValues_.isEmpty()) {
-            if (parameterValuesBuilder_.isEmpty()) {
-              parameterValuesBuilder_.dispose();
-              parameterValuesBuilder_ = null;
-              parameterValues_ = other.parameterValues_;
-              bitField0_ = (bitField0_ & ~0x00000010);
-              parameterValuesBuilder_ = 
-                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
-                   getParameterValuesFieldBuilder() : null;
-            } else {
-              parameterValuesBuilder_.addAllMessages(other.parameterValues_);
-            }
-          }
-        }
-        if (other.getHasParameterValues() != false) {
-          setHasParameterValues(other.getHasParameterValues());
-        }
         onChanged();
         return this;
       }
@@ -5669,7 +5464,6 @@ package org.apache.calcite.avatica.proto;
         }
         return this;
       }
-      private int bitField0_;
 
       private java.lang.Object connectionId_ = "";
       /**
@@ -5830,363 +5624,13 @@ package org.apache.calcite.avatica.proto;
         onChanged();
         return this;
       }
-
-      private java.util.List<org.apache.calcite.avatica.proto.Common.TypedValue> parameterValues_ =
-        java.util.Collections.emptyList();
-      private void ensureParameterValuesIsMutable() {
-        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
-          parameterValues_ = new java.util.ArrayList<org.apache.calcite.avatica.proto.Common.TypedValue>(parameterValues_);
-          bitField0_ |= 0x00000010;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilder<
-          org.apache.calcite.avatica.proto.Common.TypedValue, org.apache.calcite.avatica.proto.Common.TypedValue.Builder, org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder> parameterValuesBuilder_;
-
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public java.util.List<org.apache.calcite.avatica.proto.Common.TypedValue> getParameterValuesList() {
-        if (parameterValuesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(parameterValues_);
-        } else {
-          return parameterValuesBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public int getParameterValuesCount() {
-        if (parameterValuesBuilder_ == null) {
-          return parameterValues_.size();
-        } else {
-          return parameterValuesBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public org.apache.calcite.avatica.proto.Common.TypedValue getParameterValues(int index) {
-        if (parameterValuesBuilder_ == null) {
-          return parameterValues_.get(index);
-        } else {
-          return parameterValuesBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public Builder setParameterValues(
-          int index, org.apache.calcite.avatica.proto.Common.TypedValue value) {
-        if (parameterValuesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureParameterValuesIsMutable();
-          parameterValues_.set(index, value);
-          onChanged();
-        } else {
-          parameterValuesBuilder_.setMessage(index, value);
-        }
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
         return this;
       }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public Builder setParameterValues(
-          int index, org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) {
-        if (parameterValuesBuilder_ == null) {
-          ensureParameterValuesIsMutable();
-          parameterValues_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          parameterValuesBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public Builder addParameterValues(org.apache.calcite.avatica.proto.Common.TypedValue value) {
-        if (parameterValuesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureParameterValuesIsMutable();
-          parameterValues_.add(value);
-          onChanged();
-        } else {
-          parameterValuesBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public Builder addParameterValues(
-          int index, org.apache.calcite.avatica.proto.Common.TypedValue value) {
-        if (parameterValuesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureParameterValuesIsMutable();
-          parameterValues_.add(index, value);
-          onChanged();
-        } else {
-          parameterValuesBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public Builder addParameterValues(
-          org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) {
-        if (parameterValuesBuilder_ == null) {
-          ensureParameterValuesIsMutable();
-          parameterValues_.add(builderForValue.build());
-          onChanged();
-        } else {
-          parameterValuesBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public Builder addParameterValues(
-          int index, org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) {
-        if (parameterValuesBuilder_ == null) {
-          ensureParameterValuesIsMutable();
-          parameterValues_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          parameterValuesBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public Builder addAllParameterValues(
-          java.lang.Iterable<? extends org.apache.calcite.avatica.proto.Common.TypedValue> values) {
-        if (parameterValuesBuilder_ == null) {
-          ensureParameterValuesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, parameterValues_);
-          onChanged();
-        } else {
-          parameterValuesBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public Builder clearParameterValues() {
-        if (parameterValuesBuilder_ == null) {
-          parameterValues_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000010);
-          onChanged();
-        } else {
-          parameterValuesBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public Builder removeParameterValues(int index) {
-        if (parameterValuesBuilder_ == null) {
-          ensureParameterValuesIsMutable();
-          parameterValues_.remove(index);
-          onChanged();
-        } else {
-          parameterValuesBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public org.apache.calcite.avatica.proto.Common.TypedValue.Builder getParameterValuesBuilder(
-          int index) {
-        return getParameterValuesFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder getParameterValuesOrBuilder(
-          int index) {
-        if (parameterValuesBuilder_ == null) {
-          return parameterValues_.get(index);  } else {
-          return parameterValuesBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public java.util.List<? extends org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder> 
-           getParameterValuesOrBuilderList() {
-        if (parameterValuesBuilder_ != null) {
-          return parameterValuesBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(parameterValues_);
-        }
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public org.apache.calcite.avatica.proto.Common.TypedValue.Builder addParameterValuesBuilder() {
-        return getParameterValuesFieldBuilder().addBuilder(
-            org.apache.calcite.avatica.proto.Common.TypedValue.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public org.apache.calcite.avatica.proto.Common.TypedValue.Builder addParameterValuesBuilder(
-          int index) {
-        return getParameterValuesFieldBuilder().addBuilder(
-            index, org.apache.calcite.avatica.proto.Common.TypedValue.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .TypedValue parameter_values = 5;</code>
-       *
-       * <pre>
-       * List of parameter values if statement is to be executed. Else, none.
-       * </pre>
-       */
-      public java.util.List<org.apache.calcite.avatica.proto.Common.TypedValue.Builder> 
-           getParameterValuesBuilderList() {
-        return getParameterValuesFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilder<
-          org.apache.calcite.avatica.proto.Common.TypedValue, org.apache.calcite.avatica.proto.Common.TypedValue.Builder, org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder> 
-          getParameterValuesFieldBuilder() {
-        if (parameterValuesBuilder_ == null) {
-          parameterValuesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
-              org.apache.calcite.avatica.proto.Common.TypedValue, org.apache.calcite.avatica.proto.Common.TypedValue.Builder, org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder>(
-                  parameterValues_,
-                  ((bitField0_ & 0x00000010) == 0x00000010),
-                  getParentForChildren(),
-                  isClean());
-          parameterValues_ = null;
-        }
-        return parameterValuesBuilder_;
-      }
-
-      private boolean hasParameterValues_ ;
-      /**
-       * <code>optional bool has_parameter_values = 6;</code>
-       *
-       * <pre>
-       * Having an empty list of param values is distinct from a null param list
-       * </pre>
-       */
-      public boolean getHasParameterValues() {
-        return hasParameterValues_;
-      }
-      /**
-       * <code>optional bool has_parameter_values = 6;</code>
-       *
-       * <pre>
-       * Having an empty list of param values is distinct from a null param list
-       * </pre>
-       */
-      public Builder setHasParameterValues(boolean value) {
-        
-        hasParameterValues_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional bool has_parameter_values = 6;</code>
-       *
-       * <pre>
-       * Having an empty list of param values is distinct from a null param list
-       * </pre>
-       */
-      public Builder clearHasParameterValues() {
-        
-        hasParameterValues_ = false;
-        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) {
+
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
         return this;
       }
 
@@ -8221,37 +7665,1012 @@ package org.apache.calcite.avatica.proto;
 
   }
 
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_CatalogsRequest_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_CatalogsRequest_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_DatabasePropertyRequest_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_DatabasePropertyRequest_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_SchemasRequest_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_SchemasRequest_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_TablesRequest_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_TablesRequest_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_TableTypesRequest_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_TableTypesRequest_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_ColumnsRequest_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_ColumnsRequest_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
+  public interface ExecuteRequestOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:ExecuteRequest)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>optional .StatementHandle statementHandle = 1;</code>
+     */
+    boolean hasStatementHandle();
+    /**
+     * <code>optional .StatementHandle statementHandle = 1;</code>
+     */
+    org.apache.calcite.avatica.proto.Common.StatementHandle getStatementHandle();
+    /**
+     * <code>optional .StatementHandle statementHandle = 1;</code>
+     */
+    org.apache.calcite.avatica.proto.Common.StatementHandleOrBuilder getStatementHandleOrBuilder();
+
+    /**
+     * <code>repeated .TypedValue parameter_values = 2;</code>
+     */
+    java.util.List<org.apache.calcite.avatica.proto.Common.TypedValue> 
+        getParameterValuesList();
+    /**
+     * <code>repeated .TypedValue parameter_values = 2;</code>
+     */
+    org.apache.calcite.avatica.proto.Common.TypedValue getParameterValues(int index);
+    /**
+     * <code>repeated .TypedValue parameter_values = 2;</code>
+     */
+    int getParameterValuesCount();
+    /**
+     * <code>repeated .TypedValue parameter_values = 2;</code>
+     */
+    java.util.List<? extends org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder> 
+        getParameterValuesOrBuilderList();
+    /**
+     * <code>repeated .TypedValue parameter_values = 2;</code>
+     */
+    org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder getParameterValuesOrBuilder(
+        int index);
+
+    /**
+     * <code>optional uint64 max_row_count = 3;</code>
+     */
+    long getMaxRowCount();
+
+    /**
+     * <code>optional bool has_parameter_values = 4;</code>
+     */
+    boolean getHasParameterValues();
+  }
+  /**
+   * Protobuf type {@code ExecuteRequest}
+   *
+   * <pre>
+   * Request for Meta#execute(Meta.ConnectionHandle, list, long)
+   * </pre>
+   */
+  public  static final class ExecuteRequest extends
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:ExecuteRequest)
+      ExecuteRequestOrBuilder {
+    // Use ExecuteRequest.newBuilder() to construct.
+    private ExecuteRequest(com.google.protobuf.GeneratedMessage.Builder builder) {
+      super(builder);
+    }
+    private ExecuteRequest() {
+      parameterValues_ = java.util.Collections.emptyList();
+      maxRowCount_ = 0L;
+      hasParameterValues_ = false;
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
+    }
+    private ExecuteRequest(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      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: {
+              org.apache.calcite.avatica.proto.Common.StatementHandle.Builder subBuilder = null;
+              if (statementHandle_ != null) {
+                subBuilder = statementHandle_.toBuilder();
+              }
+              statementHandle_ = input.readMessage(org.apache.calcite.avatica.proto.Common.StatementHandle.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(statementHandle_);
+                statementHandle_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+                parameterValues_ = new java.util.ArrayList<org.apache.calcite.avatica.proto.Common.TypedValue>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              parameterValues_.add(input.readMessage(org.apache.calcite.avatica.proto.Common.TypedValue.PARSER, extensionRegistry));
+              break;
+            }
+            case 24: {
+
+              maxRowCount_ = input.readUInt64();
+              break;
+            }
+            case 32: {
+
+              hasParameterValues_ = input.readBool();
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e.getMessage()).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+          parameterValues_ = java.util.Collections.unmodifiableList(parameterValues_);
+        }
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.apache.calcite.avatica.proto.Requests.internal_static_ExecuteRequest_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.apache.calcite.avatica.proto.Requests.internal_static_ExecuteRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.calcite.avatica.proto.Requests.ExecuteRequest.class, org.apache.calcite.avatica.proto.Requests.ExecuteRequest.Builder.class);
+    }
+
+    public static final com.google.protobuf.Parser<ExecuteRequest> PARSER =
+        new com.google.protobuf.AbstractParser<ExecuteRequest>() {
+      public ExecuteRequest parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ExecuteRequest(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ExecuteRequest> getParserForType() {
+      return PARSER;
+    }
+
+    private int bitField0_;
+    public static final int STATEMENTHANDLE_FIELD_NUMBER = 1;
+    private org.apache.calcite.avatica.proto.Common.StatementHandle statementHandle_;
+    /**
+     * <code>optional .StatementHandle statementHandle = 1;</code>
+     */
+    public boolean hasStatementHandle() {
+      return statementHandle_ != null;
+    }
+    /**
+     * <code>optional .StatementHandle statementHandle = 1;</code>
+     */
+    public org.apache.calcite.avatica.proto.Common.StatementHandle getStatementHandle() {
+      return statementHandle_ == null ? org.apache.calcite.avatica.proto.Common.StatementHandle.getDefaultInstance() : statementHandle_;
+    }
+    /**
+     * <code>optional .StatementHandle statementHandle = 1;</code>
+     */
+    public org.apache.calcite.avatica.proto.Common.StatementHandleOrBuilder getStatementHandleOrBuilder() {
+      return getStatementHandle();
+    }
+
+    public static final int PARAMETER_VALUES_FIELD_NUMBER = 2;
+    private java.util.List<org.apache.calcite.avatica.proto.Common.TypedValue> parameterValues_;
+    /**
+     * <code>repeated .TypedValue parameter_values = 2;</code>
+     */
+    public java.util.List<org.apache.calcite.avatica.proto.Common.TypedValue> getParameterValuesList() {
+      return parameterValues_;
+    }
+    /**
+     * <code>repeated .TypedValue parameter_values = 2;</code>
+     */
+    public java.util.List<? extends org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder> 
+        getParameterValuesOrBuilderList() {
+      return parameterValues_;
+    }
+    /**
+     * <code>repeated .TypedValue parameter_values = 2;</code>
+     */
+    public int getParameterValuesCount() {
+      return parameterValues_.size();
+    }
+    /**
+     * <code>repeated .TypedValue parameter_values = 2;</code>
+     */
+    public org.apache.calcite.avatica.proto.Common.TypedValue getParameterValues(int index) {
+      return parameterValues_.get(index);
+    }
+    /**
+     * <code>repeated .TypedValue parameter_values = 2;</code>
+     */
+    public org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder getParameterValuesOrBuilder(
+        int index) {
+      return parameterValues_.get(index);
+    }
+
+    public static final int MAX_ROW_COUNT_FIELD_NUMBER = 3;
+    private long maxRowCount_;
+    /**
+     * <code>optional uint64 max_row_count = 3;</code>
+     */
+    public long getMaxRowCount() {
+      return maxRowCount_;
+    }
+
+    public static final int HAS_PARAMETER_VALUES_FIELD_NUMBER = 4;
+    private boolean hasParameterValues_;
+    /**
+     * <code>optional bool has_parameter_values = 4;</code>
+     */
+    public boolean getHasParameterValues() {
+      return hasParameterValues_;
+    }
+
+    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 {
+      getSerializedSize();
+      if (statementHandle_ != null) {
+        output.writeMessage(1, getStatementHandle());
+      }
+      for (int i = 0; i < parameterValues_.size(); i++) {
+        output.writeMessage(2, parameterValues_.get(i));
+      }
+      if (maxRowCount_ != 0L) {
+        output.writeUInt64(3, maxRowCount_);
+      }
+      if (hasParameterValues_ != false) {
+        output.writeBool(4, hasParameterValues_);
+      }
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (statementHandle_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getStatementHandle());
+      }
+      for (int i = 0; i < parameterValues_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, parameterValues_.get(i));
+      }
+      if (maxRowCount_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt64Size(3, maxRowCount_);
+      }
+      if (hasParameterValues_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(4, hasParameterValues_);
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    public static org.apache.calcite.avatica.proto.Requests.ExecuteRequest parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.calcite.avatica.proto.Requests.ExecuteRequest 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.ExecuteRequest parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.calcite.avatica.proto.Requests.ExecuteRequest 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.ExecuteRequest parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static org.apache.calcite.avatica.proto.Requests.ExecuteRequest 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.ExecuteRequest parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static org.apache.calcite.avatica.proto.Requests.ExecuteRequest 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.ExecuteRequest parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static org.apache.calcite.avatica.proto.Requests.ExecuteRequest parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public static Builder newBuilder() { return new Builder(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(org.apache.calcite.avatica.proto.Requests.ExecuteRequest prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code ExecuteRequest}
+     *
+     * <pre>
+     * Request for Meta#execute(Meta.ConnectionHandle, list, long)
+     * </pre>
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:ExecuteRequest)
+        org.apache.calcite.avatica.proto.Requests.ExecuteRequestOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.apache.calcite.avatica.proto.Requests.internal_static_ExecuteRequest_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.apache.calcite.avatica.proto.Requests.internal_static_ExecuteRequest_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.apache.calcite.avatica.proto.Requests.ExecuteRequest.class, org.apache.calcite.avatica.proto.Requests.ExecuteRequest.Builder.class);
+      }
+
+      // Construct using org.apache.calcite.avatica.proto.Requests.ExecuteRequest.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getParameterValuesFieldBuilder();
+        }
+      }
+      public Builder clear() {
+        super.clear();
+        if (statementHandleBuilder_ == null) {
+          statementHandle_ = null;
+        } else {
+          statementHandle_ = null;
+          statementHandleBuilder_ = null;
+        }
+        if (parameterValuesBuilder_ == null) {
+          parameterValues_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          parameterValuesBuilder_.clear();
+        }
+        maxRowCount_ = 0L;
+
+        hasParameterValues_ = false;
+
+        return this;
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.apache.calcite.avatica.proto.Requests.internal_static_ExecuteRequest_descriptor;
+      }
+
+      public org.apache.calcite.avatica.proto.Requests.ExecuteRequest getDefaultInstanceForType() {
+        return org.apache.calcite.avatica.proto.Requests.ExecuteRequest.getDefaultInstance();
+      }
+
+      public org.apache.calcite.avatica.proto.Requests.ExecuteRequest build() {
+        org.apache.calcite.avatica.proto.Requests.ExecuteRequest result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public org.apache.calcite.avatica.proto.Requests.ExecuteRequest buildPartial() {
+        org.apache.calcite.avatica.proto.Requests.ExecuteRequest result = new org.apache.calcite.avatica.proto.Requests.ExecuteRequest(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (statementHandleBuilder_ == null) {
+          result.statementHandle_ = statementHandle_;
+        } else {
+          result.statementHandle_ = statementHandleBuilder_.build();
+        }
+        if (parameterValuesBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) == 0x00000002)) {
+            parameterValues_ = java.util.Collections.unmodifiableList(parameterValues_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.parameterValues_ = parameterValues_;
+        } else {
+          result.parameterValues_ = parameterValuesBuilder_.build();
+        }
+        result.maxRowCount_ = maxRowCount_;
+        result.hasParameterValues_ = hasParameterValues_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.apache.calcite.avatica.proto.Requests.ExecuteRequest) {
+          return mergeFrom((org.apache.calcite.avatica.proto.Requests.ExecuteRequest)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.apache.calcite.avatica.proto.Requests.ExecuteRequest other) {
+        if (other == org.apache.calcite.avatica.proto.Requests.ExecuteRequest.getDefaultInstance()) return this;
+        if (other.hasStatementHandle()) {
+          mergeStatementHandle(other.getStatementHandle());
+        }
+        if (parameterValuesBuilder_ == null) {
+          if (!other.parameterValues_.isEmpty()) {
+            if (parameterValues_.isEmpty()) {
+              parameterValues_ = other.parameterValues_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureParameterValuesIsMutable();
+              parameterValues_.addAll(other.parameterValues_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.parameterValues_.isEmpty()) {
+            if (parameterValuesBuilder_.isEmpty()) {
+              parameterValuesBuilder_.dispose();
+              parameterValuesBuilder_ = null;
+              parameterValues_ = other.parameterValues_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              parameterValuesBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getParameterValuesFieldBuilder() : null;
+            } else {
+              parameterValuesBuilder_.addAllMessages(other.parameterValues_);
+            }
+          }
+        }
+        if (other.getMaxRowCount() != 0L) {
+          setMaxRowCount(other.getMaxRowCount());
+        }
+        if (other.getHasParameterValues() != false) {
+          setHasParameterValues(other.getHasParameterValues());
+        }
+        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.ExecuteRequest parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.calcite.avatica.proto.Requests.ExecuteRequest) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private org.apache.calcite.avatica.proto.Common.StatementHandle statementHandle_ = null;
+      private com.google.protobuf.SingleFieldBuilder<
+          org.apache.calcite.avatica.proto.Common.StatementHandle, org.apache.calcite.avatica.proto.Common.StatementHandle.Builder, org.apache.calcite.avatica.proto.Common.StatementHandleOrBuilder> statementHandleBuilder_;
+      /**
+       * <code>optional .StatementHandle statementHandle = 1;</code>
+       */
+      public boolean hasStatementHandle() {
+        return statementHandleBuilder_ != null || statementHandle_ != null;
+      }
+      /**
+       * <code>optional .StatementHandle statementHandle = 1;</code>
+       */
+      public org.apache.calcite.avatica.proto.Common.StatementHandle getStatementHandle() {
+        if (statementHandleBuilder_ == null) {
+          return statementHandle_ == null ? org.apache.calcite.avatica.proto.Common.StatementHandle.getDefaultInstance() : statementHandle_;
+        } else {
+          return statementHandleBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>optional .StatementHandle statementHandle = 1;</code>
+       */
+      public Builder setStatementHandle(org.apache.calcite.avatica.proto.Common.StatementHandle value) {
+        if (statementHandleBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          statementHandle_ = value;
+          onChanged();
+        } else {
+          statementHandleBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>optional .StatementHandle statementHandle = 1;</code>
+       */
+      public Builder setStatementHandle(
+          org.apache.calcite.avatica.proto.Common.StatementHandle.Builder builderForValue) {
+        if (statementHandleBuilder_ == null) {
+          statementHandle_ = builderForValue.build();
+          onChanged();
+        } else {
+          statementHandleBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>optional .StatementHandle statementHandle = 1;</code>
+       */
+      public Builder mergeStatementHandle(org.apache.calcite.avatica.proto.Common.StatementHandle value) {
+        if (statementHandleBuilder_ == null) {
+          if (statementHandle_ != null) {
+            statementHandle_ =
+              org.apache.calcite.avatica.proto.Common.StatementHandle.newBuilder(statementHandle_).mergeFrom(value).buildPartial();
+          } else {
+            statementHandle_ = value;
+          }
+          onChanged();
+        } else {
+          statementHandleBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>optional .StatementHandle statementHandle = 1;</code>
+       */
+      public Builder clearStatementHandle() {
+        if (statementHandleBuilder_ == null) {
+          statementHandle_ = null;
+          onChanged();
+        } else {
+          statementHandle_ = null;
+          statementHandleBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>optional .StatementHandle statementHandle = 1;</code>
+       */
+      public org.apache.calcite.avatica.proto.Common.StatementHandle.Builder getStatementHandleBuilder() {
+        
+        onChanged();
+        return getStatementHandleFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>optional .StatementHandle statementHandle = 1;</code>
+       */
+      public org.apache.calcite.avatica.proto.Common.StatementHandleOrBuilder getStatementHandleOrBuilder() {
+        if (statementHandleBuilder_ != null) {
+          return statementHandleBuilder_.getMessageOrBuilder();
+        } else {
+          return statementHandle_ == null ?
+              org.apache.calcite.avatica.proto.Common.StatementHandle.getDefaultInstance() : statementHandle_;
+        }
+      }
+      /**
+       * <code>optional .StatementHandle statementHandle = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilder<
+          org.apache.calcite.avatica.proto.Common.StatementHandle, org.apache.calcite.avatica.proto.Common.StatementHandle.Builder, org.apache.calcite.avatica.proto.Common.StatementHandleOrBuilder> 
+          getStatementHandleFieldBuilder() {
+        if (statementHandleBuilder_ == null) {
+          statementHandleBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              org.apache.calcite.avatica.proto.Common.StatementHandle, org.apache.calcite.avatica.proto.Common.StatementHandle.Builder, org.apache.calcite.avatica.proto.Common.StatementHandleOrBuilder>(
+                  getStatementHandle(),
+                  getParentForChildren(),
+                  isClean());
+          statementHandle_ = null;
+        }
+        return statementHandleBuilder_;
+      }
+
+      private java.util.List<org.apache.calcite.avatica.proto.Common.TypedValue> parameterValues_ =
+        java.util.Collections.emptyList();
+      private void ensureParameterValuesIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          parameterValues_ = new java.util.ArrayList<org.apache.calcite.avatica.proto.Common.TypedValue>(parameterValues_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilder<
+          org.apache.calcite.avatica.proto.Common.TypedValue, org.apache.calcite.avatica.proto.Common.TypedValue.Builder, org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder> parameterValuesBuilder_;
+
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public java.util.List<org.apache.calcite.avatica.proto.Common.TypedValue> getParameterValuesList() {
+        if (parameterValuesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(parameterValues_);
+        } else {
+          return parameterValuesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public int getParameterValuesCount() {
+        if (parameterValuesBuilder_ == null) {
+          return parameterValues_.size();
+        } else {
+          return parameterValuesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public org.apache.calcite.avatica.proto.Common.TypedValue getParameterValues(int index) {
+        if (parameterValuesBuilder_ == null) {
+          return parameterValues_.get(index);
+        } else {
+          return parameterValuesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public Builder setParameterValues(
+          int index, org.apache.calcite.avatica.proto.Common.TypedValue value) {
+        if (parameterValuesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureParameterValuesIsMutable();
+          parameterValues_.set(index, value);
+          onChanged();
+        } else {
+          parameterValuesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public Builder setParameterValues(
+          int index, org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) {
+        if (parameterValuesBuilder_ == null) {
+          ensureParameterValuesIsMutable();
+          parameterValues_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          parameterValuesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public Builder addParameterValues(org.apache.calcite.avatica.proto.Common.TypedValue value) {
+        if (parameterValuesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureParameterValuesIsMutable();
+          parameterValues_.add(value);
+          onChanged();
+        } else {
+          parameterValuesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public Builder addParameterValues(
+          int index, org.apache.calcite.avatica.proto.Common.TypedValue value) {
+        if (parameterValuesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureParameterValuesIsMutable();
+          parameterValues_.add(index, value);
+          onChanged();
+        } else {
+          parameterValuesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public Builder addParameterValues(
+          org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) {
+        if (parameterValuesBuilder_ == null) {
+          ensureParameterValuesIsMutable();
+          parameterValues_.add(builderForValue.build());
+          onChanged();
+        } else {
+          parameterValuesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public Builder addParameterValues(
+          int index, org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) {
+        if (parameterValuesBuilder_ == null) {
+          ensureParameterValuesIsMutable();
+          parameterValues_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          parameterValuesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public Builder addAllParameterValues(
+          java.lang.Iterable<? extends org.apache.calcite.avatica.proto.Common.TypedValue> values) {
+        if (parameterValuesBuilder_ == null) {
+          ensureParameterValuesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, parameterValues_);
+          onChanged();
+        } else {
+          parameterValuesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public Builder clearParameterValues() {
+        if (parameterValuesBuilder_ == null) {
+          parameterValues_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          parameterValuesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public Builder removeParameterValues(int index) {
+        if (parameterValuesBuilder_ == null) {
+          ensureParameterValuesIsMutable();
+          parameterValues_.remove(index);
+          onChanged();
+        } else {
+          parameterValuesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public org.apache.calcite.avatica.proto.Common.TypedValue.Builder getParameterValuesBuilder(
+          int index) {
+        return getParameterValuesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder getParameterValuesOrBuilder(
+          int index) {
+        if (parameterValuesBuilder_ == null) {
+          return parameterValues_.get(index);  } else {
+          return parameterValuesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public java.util.List<? extends org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder> 
+           getParameterValuesOrBuilderList() {
+        if (parameterValuesBuilder_ != null) {
+          return parameterValuesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(parameterValues_);
+        }
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public org.apache.calcite.avatica.proto.Common.TypedValue.Builder addParameterValuesBuilder() {
+        return getParameterValuesFieldBuilder().addBuilder(
+            org.apache.calcite.avatica.proto.Common.TypedValue.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public org.apache.calcite.avatica.proto.Common.TypedValue.Builder addParameterValuesBuilder(
+          int index) {
+        return getParameterValuesFieldBuilder().addBuilder(
+            index, org.apache.calcite.avatica.proto.Common.TypedValue.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .TypedValue parameter_values = 2;</code>
+       */
+      public java.util.List<org.apache.calcite.avatica.proto.Common.TypedValue.Builder> 
+           getParameterValuesBuilderList() {
+        return getParameterValuesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          org.apache.calcite.avatica.proto.Common.TypedValue, org.apache.calcite.avatica.proto.Common.TypedValue.Builder, org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder> 
+          getParameterValuesFieldBuilder() {
+        if (parameterValuesBuilder_ == null) {
+          parameterValuesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              org.apache.calcite.avatica.proto.Common.TypedValue, org.apache.calcite.avatica.proto.Common.TypedValue.Builder, org.apache.calcite.avatica.proto.Common.TypedValueOrBuilder>(
+                  parameterValues_,
+                  ((bitField0_ & 0x00000002) == 0x00000002),
+                  getParentForChildren(),
+                  isClean());
+          parameterValues_ = null;
+        }
+        return parameterValuesBuilder_;
+      }
+
+      private long maxRowCount_ ;
+      /**
+       * <code>optional uint64 max_row_count = 3;</code>
+       */
+      public long getMaxRowCount() {
+        return maxRowCount_;
+      }
+      /**
+       * <code>optional uint64 max_row_count = 3;</code>
+       */
+      public Builder setMaxRowCount(long value) {
+        
+        maxRowCount_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional uint64 max_row_count = 3;</code>
+       */
+      public Builder clearMaxRowCount() {
+        
+        maxRowCount_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private boolean hasParameterValues_ ;
+      /**
+       * <code>optional bool has_parameter_values = 4;</code>
+       */
+      public boolean getHasParameterValues() {
+        return hasParameterValues_;
+      }
+      /**
+       * <code>optional bool has_parameter_values = 4;</code>
+       */
+      public Builder setHasParameterValues(boolean value) {
+        
+        hasParameterValues_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional bool has_parameter_values = 4;</code>
+       */
+      public Builder clearHasParameterValues() {
+        
+        hasParameterValues_ = false;
+        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:ExecuteRequest)
+    }
+
+    // @@protoc_insertion_point(class_scope:ExecuteRequest)
+    private static final org.apache.calcite.avatica.proto.Requests.ExecuteRequest defaultInstance;static {
+      defaultInstance = new org.apache.calcite.avatica.proto.Requests.ExecuteRequest();
+    }
+
+    public static org.apache.calcite.avatica.proto.Requests.ExecuteRequest getDefaultInstance() {
+      return defaultInstance;
+    }
+
+    public org.apache.calcite.avatica.proto.Requests.ExecuteRequest getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_CatalogsRequest_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_CatalogsRequest_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_DatabasePropertyRequest_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_DatabasePropertyRequest_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_SchemasRequest_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_SchemasRequest_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_TablesRequest_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_TablesRequest_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_TableTypesRequest_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_TableTypesRequest_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_ColumnsRequest_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_ColumnsRequest_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_TypeInfoRequest_descriptor;
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
@@ -8291,6 +8710,11 @@ package org.apache.calcite.avatica.proto;
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_ConnectionSyncRequest_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_ExecuteRequest_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_ExecuteRequest_fieldAccessorTable;
 
   public static com.google.protobuf.Descriptors.FileDescriptor
       getDescriptor() {
@@ -8315,19 +8739,21 @@ package org.apache.calcite.avatica.proto;
       "\001(\t\022\025\n\rmax_row_count\030\003 \001(\004\022\024\n\014statement_" +
       "id\030\004 \001(\r\"K\n\016PrepareRequest\022\025\n\rconnection" +
       "_id\030\001 \001(\t\022\013\n\003sql\030\002 \001(\t\022\025\n\rmax_row_count\030" +
-      "\003 \001(\004\"\255\001\n\014FetchRequest\022\025\n\rconnection_id\030" +
-      "\001 \001(\t\022\024\n\014statement_id\030\002 \001(\r\022\016\n\006offset\030\003 " +
-      "\001(\004\022\033\n\023fetch_max_row_count\030\004 \001(\r\022%\n\020para" +
-      "meter_values\030\005 \003(\0132\013.TypedValue\022\034\n\024has_p" +
-      "arameter_values\030\006 \001(\010\"/\n\026CreateStatement",
-      "Request\022\025\n\rconnection_id\030\001 \001(\t\"D\n\025CloseS" +
-      "tatementRequest\022\025\n\rconnection_id\030\001 \001(\t\022\024" +
-      "\n\014statement_id\030\002 \001(\r\"/\n\026CloseConnectionR" +
-      "equest\022\025\n\rconnection_id\030\001 \001(\t\"Y\n\025Connect" +
-      "ionSyncRequest\022\025\n\rconnection_id\030\001 \001(\t\022)\n" +
-      "\nconn_props\030\002 \001(\0132\025.ConnectionProperties" +
-      "B\"\n org.apache.calcite.avatica.protob\006pr" +
-      "oto3"
+      "\003 \001(\004\"h\n\014FetchRequest\022\025\n\rconnection_id\030\001" +
+      " \001(\t\022\024\n\014statement_id\030\002 \001(\r\022\016\n\006offset\030\003 \001" +
+      "(\004\022\033\n\023fetch_max_row_count\030\004 \001(\r\"/\n\026Creat" +
+      "eStatementRequest\022\025\n\rconnection_id\030\001 \001(\t" +
+      "\"D\n\025CloseStatementRequest\022\025\n\rconnection_",
+      "id\030\001 \001(\t\022\024\n\014statement_id\030\002 \001(\r\"/\n\026CloseC" +
+      "onnectionRequest\022\025\n\rconnection_id\030\001 \001(\t\"" +
+      "Y\n\025ConnectionSyncRequest\022\025\n\rconnection_i" +
+      "d\030\001 \001(\t\022)\n\nconn_props\030\002 \001(\0132\025.Connection" +
+      "Properties\"\227\001\n\016ExecuteRequest\022)\n\017stateme" +
+      "ntHandle\030\001 \001(\0132\020.StatementHandle\022%\n\020para" +
+      "meter_values\030\002 \003(\0132\013.TypedValue\022\025\n\rmax_r" +
+      "ow_count\030\003 \001(\004\022\034\n\024has_parameter_values\030\004" +
+      " \001(\010B\"\n org.apache.calcite.avatica.proto" +
+      "b\006proto3"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
         new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
@@ -8401,7 +8827,7 @@ package org.apache.calcite.avatica.proto;
     internal_static_FetchRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessage.FieldAccessorTable(
         internal_static_FetchRequest_descriptor,
-        new java.lang.String[] { "ConnectionId", "StatementId", "Offset", "FetchMaxRowCount", "ParameterValues", "HasParameterValues", });
+        new java.lang.String[] { "ConnectionId", "StatementId", "Offset", "FetchMaxRowCount", });
     internal_static_CreateStatementRequest_descriptor =
       getDescriptor().getMessageTypes().get(10);
     internal_static_CreateStatementRequest_fieldAccessorTable = new
@@ -8426,6 +8852,12 @@ package org.apache.calcite.avatica.proto;
       com.google.protobuf.GeneratedMessage.FieldAccessorTable(
         internal_static_ConnectionSyncRequest_descriptor,
         new java.lang.String[] { "ConnectionId", "ConnProps", });
+    internal_static_ExecuteRequest_descriptor =
+      getDescriptor().getMessageTypes().get(14);
+    internal_static_ExecuteRequest_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_ExecuteRequest_descriptor,
+        new java.lang.String[] { "StatementHandle", "ParameterValues", "MaxRowCount", "HasParameterValues", });
     org.apache.calcite.avatica.proto.Common.getDescriptor();
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/cee8e844/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
index e4a1b3e..451d923 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/AbstractService.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/AbstractService.java
@@ -43,7 +43,7 @@ public abstract class AbstractService implements Service {
     }
     return new Meta.Signature(columns, signature.sql,
         signature.parameters, signature.internalParameters,
-        signature.cursorFactory);
+        signature.cursorFactory, signature.statementType);
   }
 
   ColumnMetaData finagle(ColumnMetaData column) {

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/cee8e844/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 dcb3d28..fe82879 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
@@ -132,6 +132,14 @@ public abstract class JsonService extends AbstractService {
     }
   }
 
+  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);

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/cee8e844/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 f6e23b8..12006ba 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
@@ -51,8 +51,13 @@ public class LocalService implements Service {
           resultSet.statementId, resultSet.ownStatement, null, null,
           resultSet.updateCount);
     }
+
+    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) {
@@ -62,19 +67,36 @@ public class LocalService implements Service {
       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;
     }
-    Meta.Signature signature = resultSet.signature;
+
     if (cursorFactory != resultSet.signature.cursorFactory) {
       signature = signature.setCursorFactory(cursorFactory);
     }
+
     return new ResultSetResponse(resultSet.connectionId, resultSet.statementId,
-        resultSet.ownStatement, signature, resultSet.firstFrame, -1);
+        resultSet.ownStatement, signature, frame, updateCount);
   }
 
   private List<List<Object>> list2(Meta.MetaResultSet resultSet) {
@@ -166,12 +188,22 @@ public class LocalService implements Service {
         request.connectionId, request.statementId, null);
     final Meta.Frame frame =
         meta.fetch(h,
-            request.parameterValues,
             request.offset,
             request.fetchMaxRowCount);
     return new FetchResponse(frame);
   }
 
+  public ExecuteResponse apply(ExecuteRequest request) {
+    final Meta.ExecuteResult executeResult = meta.execute(request.statementHandle,
+        request.parameterValues, request.maxRowCount);
+
+    final List<ResultSetResponse> results = new ArrayList<>();
+    for (Meta.MetaResultSet metaResultSet : executeResult.resultSets) {
+      results.add(toResponse(metaResultSet));
+    }
+    return new ExecuteResponse(results);
+  }
+
   public CreateStatementResponse apply(CreateStatementRequest request) {
     final Meta.StatementHandle h =
         meta.createStatement(new Meta.ConnectionHandle(request.connectionId));

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/cee8e844/avatica/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java b/avatica/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java
index 5a455fc..834cdcb 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java
@@ -61,7 +61,7 @@ public class MockProtobufService extends ProtobufService {
                 Arrays.<ColumnMetaData>asList(
                     MetaImpl.columnMetaData("C1", 0, Integer.class),
                     MetaImpl.columnMetaData("C2", 1, String.class)),
-                null, null, Meta.CursorFactory.ARRAY),
+                null, null, Meta.CursorFactory.ARRAY, Meta.StatementType.SELECT),
             Meta.Frame.create(0, true,
                 Arrays.<Object>asList(new Object[] {1, "a"},
                     new Object[] {null, "b"}, new Object[] {3, "c"})), -1));
@@ -76,7 +76,7 @@ public class MockProtobufService extends ProtobufService {
                     MetaImpl.columnMetaData("C1", 0, Integer.class),
                     MetaImpl.columnMetaData("C2", 1, String.class)),
                 null, Collections.<AvaticaParameter>emptyList(),
-                Meta.CursorFactory.ARRAY),
+                Meta.CursorFactory.ARRAY, Meta.StatementType.SELECT),
             null, -1));
 
     MAPPING = Collections.unmodifiableMap(mappings);

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/cee8e844/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 13d5860..6464753 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
@@ -86,6 +86,10 @@ public abstract class ProtobufService extends AbstractService {
     return (DatabasePropertyResponse) _apply(request);
   }
 
+  @Override public ExecuteResponse apply(ExecuteRequest request) {
+    return (ExecuteResponse) _apply(request);
+  }
+
   /**
    * Determines whether the given message has the field, denoted by the provided number, set.
    *

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/cee8e844/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 5a4cc11..bfe4aca 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
@@ -24,6 +24,7 @@ import org.apache.calcite.avatica.proto.Requests.ColumnsRequest;
 import org.apache.calcite.avatica.proto.Requests.ConnectionSyncRequest;
 import org.apache.calcite.avatica.proto.Requests.CreateStatementRequest;
 import org.apache.calcite.avatica.proto.Requests.DatabasePropertyRequest;
+import org.apache.calcite.avatica.proto.Requests.ExecuteRequest;
 import org.apache.calcite.avatica.proto.Requests.FetchRequest;
 import org.apache.calcite.avatica.proto.Requests.PrepareAndExecuteRequest;
 import org.apache.calcite.avatica.proto.Requests.PrepareRequest;
@@ -96,6 +97,8 @@ public class ProtobufTranslationImpl implements ProtobufTranslation {
         new RequestTranslator(TableTypesRequest.PARSER, new Service.TableTypesRequest()));
     reqParsers.put(TypeInfoRequest.class.getName(),
         new RequestTranslator(TypeInfoRequest.PARSER, new Service.TypeInfoRequest()));
+    reqParsers.put(ExecuteRequest.class.getName(),
+        new RequestTranslator(ExecuteRequest.PARSER, new Service.ExecuteRequest()));
 
     REQUEST_PARSERS = Collections.unmodifiableMap(reqParsers);
 

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/cee8e844/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 f6047d0..154d807 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
@@ -20,6 +20,7 @@ import org.apache.calcite.avatica.AvaticaConnection;
 import org.apache.calcite.avatica.AvaticaParameter;
 import org.apache.calcite.avatica.ColumnMetaData;
 import org.apache.calcite.avatica.ConnectionPropertiesImpl;
+import org.apache.calcite.avatica.Meta;
 import org.apache.calcite.avatica.MetaImpl;
 
 import java.sql.SQLException;
@@ -56,7 +57,8 @@ class RemoteMeta extends MetaImpl {
               ? Collections.<ColumnMetaData>emptyList()
               : fieldMetaData(clazz).columns;
       signature0 = Signature.create(columns,
-          "?", Collections.<AvaticaParameter>emptyList(), CursorFactory.ARRAY);
+          "?", Collections.<AvaticaParameter>emptyList(), CursorFactory.ARRAY,
+          Meta.StatementType.SELECT);
     }
     return MetaResultSet.create(response.connectionId, response.statementId,
         response.ownStatement, signature0, response.firstFrame);
@@ -193,14 +195,25 @@ class RemoteMeta extends MetaImpl {
     }
   }
 
-  @Override public Frame fetch(StatementHandle h,
-      List<TypedValue> parameterValues, long offset, int fetchMaxRowCount) {
+  @Override public Frame fetch(StatementHandle h, long offset, int fetchMaxRowCount) {
     final Service.FetchResponse response =
         service.apply(
-            new Service.FetchRequest(h.connectionId, h.id, parameterValues,
-                offset, fetchMaxRowCount));
+            new Service.FetchRequest(h.connectionId, h.id, offset, fetchMaxRowCount));
     return response.frame;
   }
+
+  @Override public ExecuteResult execute(StatementHandle h,
+      List<TypedValue> parameterValues, long maxRowCount) {
+    final Service.ExecuteResponse response = service.apply(
+        new Service.ExecuteRequest(h, parameterValues, maxRowCount));
+
+    List<MetaResultSet> metaResultSets = new ArrayList<>();
+    for (Service.ResultSetResponse result : response.results) {
+      metaResultSets.add(toResultSet(null, result));
+    }
+
+    return new ExecuteResult(metaResultSets);
+  }
 }
 
 // End RemoteMeta.java