You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ra...@apache.org on 2015/04/27 10:33:49 UTC

[5/7] phoenix git commit: PHOENIX-538 Support UDFs(Rajeshbabu Chintaguntla)

http://git-wip-us.apache.org/repos/asf/phoenix/blob/66bd3e35/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/generated/MetaDataProtos.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/generated/MetaDataProtos.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/generated/MetaDataProtos.java
index f24a292..acb32d2 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/generated/MetaDataProtos.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/generated/MetaDataProtos.java
@@ -53,6 +53,22 @@ public final class MetaDataProtos {
      * <code>PARENT_TABLE_NOT_FOUND = 9;</code>
      */
     PARENT_TABLE_NOT_FOUND(9, 9),
+    /**
+     * <code>FUNCTION_ALREADY_EXISTS = 10;</code>
+     */
+    FUNCTION_ALREADY_EXISTS(10, 10),
+    /**
+     * <code>FUNCTION_NOT_FOUND = 11;</code>
+     */
+    FUNCTION_NOT_FOUND(11, 11),
+    /**
+     * <code>NEWER_FUNCTION_FOUND = 12;</code>
+     */
+    NEWER_FUNCTION_FOUND(12, 12),
+    /**
+     * <code>FUNCTION_NOT_IN_REGION = 13;</code>
+     */
+    FUNCTION_NOT_IN_REGION(13, 13),
     ;
 
     /**
@@ -95,6 +111,22 @@ public final class MetaDataProtos {
      * <code>PARENT_TABLE_NOT_FOUND = 9;</code>
      */
     public static final int PARENT_TABLE_NOT_FOUND_VALUE = 9;
+    /**
+     * <code>FUNCTION_ALREADY_EXISTS = 10;</code>
+     */
+    public static final int FUNCTION_ALREADY_EXISTS_VALUE = 10;
+    /**
+     * <code>FUNCTION_NOT_FOUND = 11;</code>
+     */
+    public static final int FUNCTION_NOT_FOUND_VALUE = 11;
+    /**
+     * <code>NEWER_FUNCTION_FOUND = 12;</code>
+     */
+    public static final int NEWER_FUNCTION_FOUND_VALUE = 12;
+    /**
+     * <code>FUNCTION_NOT_IN_REGION = 13;</code>
+     */
+    public static final int FUNCTION_NOT_IN_REGION_VALUE = 13;
 
 
     public final int getNumber() { return value; }
@@ -111,6 +143,10 @@ public final class MetaDataProtos {
         case 7: return UNALLOWED_TABLE_MUTATION;
         case 8: return NO_PK_COLUMNS;
         case 9: return PARENT_TABLE_NOT_FOUND;
+        case 10: return FUNCTION_ALREADY_EXISTS;
+        case 11: return FUNCTION_NOT_FOUND;
+        case 12: return NEWER_FUNCTION_FOUND;
+        case 13: return FUNCTION_NOT_IN_REGION;
         default: return null;
       }
     }
@@ -232,6 +268,41 @@ public final class MetaDataProtos {
      * <code>optional bytes familyName = 6;</code>
      */
     com.google.protobuf.ByteString getFamilyName();
+
+    // optional bytes functionName = 7;
+    /**
+     * <code>optional bytes functionName = 7;</code>
+     */
+    boolean hasFunctionName();
+    /**
+     * <code>optional bytes functionName = 7;</code>
+     */
+    com.google.protobuf.ByteString getFunctionName();
+
+    // repeated .PFunction function = 8;
+    /**
+     * <code>repeated .PFunction function = 8;</code>
+     */
+    java.util.List<org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction> 
+        getFunctionList();
+    /**
+     * <code>repeated .PFunction function = 8;</code>
+     */
+    org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction getFunction(int index);
+    /**
+     * <code>repeated .PFunction function = 8;</code>
+     */
+    int getFunctionCount();
+    /**
+     * <code>repeated .PFunction function = 8;</code>
+     */
+    java.util.List<? extends org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunctionOrBuilder> 
+        getFunctionOrBuilderList();
+    /**
+     * <code>repeated .PFunction function = 8;</code>
+     */
+    org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunctionOrBuilder getFunctionOrBuilder(
+        int index);
   }
   /**
    * Protobuf type {@code MetaDataResponse}
@@ -331,6 +402,19 @@ public final class MetaDataProtos {
               familyName_ = input.readBytes();
               break;
             }
+            case 58: {
+              bitField0_ |= 0x00000020;
+              functionName_ = input.readBytes();
+              break;
+            }
+            case 66: {
+              if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
+                function_ = new java.util.ArrayList<org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction>();
+                mutable_bitField0_ |= 0x00000080;
+              }
+              function_.add(input.readMessage(org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction.PARSER, extensionRegistry));
+              break;
+            }
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
@@ -342,6 +426,9 @@ public final class MetaDataProtos {
         if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
           tablesToDelete_ = java.util.Collections.unmodifiableList(tablesToDelete_);
         }
+        if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
+          function_ = java.util.Collections.unmodifiableList(function_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
@@ -483,6 +570,58 @@ public final class MetaDataProtos {
       return familyName_;
     }
 
+    // optional bytes functionName = 7;
+    public static final int FUNCTIONNAME_FIELD_NUMBER = 7;
+    private com.google.protobuf.ByteString functionName_;
+    /**
+     * <code>optional bytes functionName = 7;</code>
+     */
+    public boolean hasFunctionName() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    /**
+     * <code>optional bytes functionName = 7;</code>
+     */
+    public com.google.protobuf.ByteString getFunctionName() {
+      return functionName_;
+    }
+
+    // repeated .PFunction function = 8;
+    public static final int FUNCTION_FIELD_NUMBER = 8;
+    private java.util.List<org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction> function_;
+    /**
+     * <code>repeated .PFunction function = 8;</code>
+     */
+    public java.util.List<org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction> getFunctionList() {
+      return function_;
+    }
+    /**
+     * <code>repeated .PFunction function = 8;</code>
+     */
+    public java.util.List<? extends org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunctionOrBuilder> 
+        getFunctionOrBuilderList() {
+      return function_;
+    }
+    /**
+     * <code>repeated .PFunction function = 8;</code>
+     */
+    public int getFunctionCount() {
+      return function_.size();
+    }
+    /**
+     * <code>repeated .PFunction function = 8;</code>
+     */
+    public org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction getFunction(int index) {
+      return function_.get(index);
+    }
+    /**
+     * <code>repeated .PFunction function = 8;</code>
+     */
+    public org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunctionOrBuilder getFunctionOrBuilder(
+        int index) {
+      return function_.get(index);
+    }
+
     private void initFields() {
       returnCode_ = org.apache.phoenix.coprocessor.generated.MetaDataProtos.MutationCode.TABLE_ALREADY_EXISTS;
       mutationTime_ = 0L;
@@ -490,6 +629,8 @@ public final class MetaDataProtos {
       tablesToDelete_ = java.util.Collections.emptyList();
       columnName_ = com.google.protobuf.ByteString.EMPTY;
       familyName_ = com.google.protobuf.ByteString.EMPTY;
+      functionName_ = com.google.protobuf.ByteString.EMPTY;
+      function_ = java.util.Collections.emptyList();
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -502,6 +643,12 @@ public final class MetaDataProtos {
           return false;
         }
       }
+      for (int i = 0; i < getFunctionCount(); i++) {
+        if (!getFunction(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
       memoizedIsInitialized = 1;
       return true;
     }
@@ -527,6 +674,12 @@ public final class MetaDataProtos {
       if (((bitField0_ & 0x00000010) == 0x00000010)) {
         output.writeBytes(6, familyName_);
       }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeBytes(7, functionName_);
+      }
+      for (int i = 0; i < function_.size(); i++) {
+        output.writeMessage(8, function_.get(i));
+      }
       getUnknownFields().writeTo(output);
     }
 
@@ -565,6 +718,14 @@ public final class MetaDataProtos {
         size += com.google.protobuf.CodedOutputStream
           .computeBytesSize(6, familyName_);
       }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(7, functionName_);
+      }
+      for (int i = 0; i < function_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, function_.get(i));
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -615,6 +776,13 @@ public final class MetaDataProtos {
         result = result && getFamilyName()
             .equals(other.getFamilyName());
       }
+      result = result && (hasFunctionName() == other.hasFunctionName());
+      if (hasFunctionName()) {
+        result = result && getFunctionName()
+            .equals(other.getFunctionName());
+      }
+      result = result && getFunctionList()
+          .equals(other.getFunctionList());
       result = result &&
           getUnknownFields().equals(other.getUnknownFields());
       return result;
@@ -652,6 +820,14 @@ public final class MetaDataProtos {
         hash = (37 * hash) + FAMILYNAME_FIELD_NUMBER;
         hash = (53 * hash) + getFamilyName().hashCode();
       }
+      if (hasFunctionName()) {
+        hash = (37 * hash) + FUNCTIONNAME_FIELD_NUMBER;
+        hash = (53 * hash) + getFunctionName().hashCode();
+      }
+      if (getFunctionCount() > 0) {
+        hash = (37 * hash) + FUNCTION_FIELD_NUMBER;
+        hash = (53 * hash) + getFunctionList().hashCode();
+      }
       hash = (29 * hash) + getUnknownFields().hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -754,6 +930,7 @@ public final class MetaDataProtos {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
           getTableFieldBuilder();
+          getFunctionFieldBuilder();
         }
       }
       private static Builder create() {
@@ -778,6 +955,14 @@ public final class MetaDataProtos {
         bitField0_ = (bitField0_ & ~0x00000010);
         familyName_ = com.google.protobuf.ByteString.EMPTY;
         bitField0_ = (bitField0_ & ~0x00000020);
+        functionName_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000040);
+        if (functionBuilder_ == null) {
+          function_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000080);
+        } else {
+          functionBuilder_.clear();
+        }
         return this;
       }
 
@@ -835,6 +1020,19 @@ public final class MetaDataProtos {
           to_bitField0_ |= 0x00000010;
         }
         result.familyName_ = familyName_;
+        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        result.functionName_ = functionName_;
+        if (functionBuilder_ == null) {
+          if (((bitField0_ & 0x00000080) == 0x00000080)) {
+            function_ = java.util.Collections.unmodifiableList(function_);
+            bitField0_ = (bitField0_ & ~0x00000080);
+          }
+          result.function_ = function_;
+        } else {
+          result.function_ = functionBuilder_.build();
+        }
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -876,6 +1074,35 @@ public final class MetaDataProtos {
         if (other.hasFamilyName()) {
           setFamilyName(other.getFamilyName());
         }
+        if (other.hasFunctionName()) {
+          setFunctionName(other.getFunctionName());
+        }
+        if (functionBuilder_ == null) {
+          if (!other.function_.isEmpty()) {
+            if (function_.isEmpty()) {
+              function_ = other.function_;
+              bitField0_ = (bitField0_ & ~0x00000080);
+            } else {
+              ensureFunctionIsMutable();
+              function_.addAll(other.function_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.function_.isEmpty()) {
+            if (functionBuilder_.isEmpty()) {
+              functionBuilder_.dispose();
+              functionBuilder_ = null;
+              function_ = other.function_;
+              bitField0_ = (bitField0_ & ~0x00000080);
+              functionBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getFunctionFieldBuilder() : null;
+            } else {
+              functionBuilder_.addAllMessages(other.function_);
+            }
+          }
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -887,6 +1114,12 @@ public final class MetaDataProtos {
             return false;
           }
         }
+        for (int i = 0; i < getFunctionCount(); i++) {
+          if (!getFunction(i).isInitialized()) {
+            
+            return false;
+          }
+        }
         return true;
       }
 
@@ -1239,6 +1472,282 @@ public final class MetaDataProtos {
         return this;
       }
 
+      // optional bytes functionName = 7;
+      private com.google.protobuf.ByteString functionName_ = com.google.protobuf.ByteString.EMPTY;
+      /**
+       * <code>optional bytes functionName = 7;</code>
+       */
+      public boolean hasFunctionName() {
+        return ((bitField0_ & 0x00000040) == 0x00000040);
+      }
+      /**
+       * <code>optional bytes functionName = 7;</code>
+       */
+      public com.google.protobuf.ByteString getFunctionName() {
+        return functionName_;
+      }
+      /**
+       * <code>optional bytes functionName = 7;</code>
+       */
+      public Builder setFunctionName(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000040;
+        functionName_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional bytes functionName = 7;</code>
+       */
+      public Builder clearFunctionName() {
+        bitField0_ = (bitField0_ & ~0x00000040);
+        functionName_ = getDefaultInstance().getFunctionName();
+        onChanged();
+        return this;
+      }
+
+      // repeated .PFunction function = 8;
+      private java.util.List<org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction> function_ =
+        java.util.Collections.emptyList();
+      private void ensureFunctionIsMutable() {
+        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
+          function_ = new java.util.ArrayList<org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction>(function_);
+          bitField0_ |= 0x00000080;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilder<
+          org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction, org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction.Builder, org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunctionOrBuilder> functionBuilder_;
+
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public java.util.List<org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction> getFunctionList() {
+        if (functionBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(function_);
+        } else {
+          return functionBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public int getFunctionCount() {
+        if (functionBuilder_ == null) {
+          return function_.size();
+        } else {
+          return functionBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction getFunction(int index) {
+        if (functionBuilder_ == null) {
+          return function_.get(index);
+        } else {
+          return functionBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public Builder setFunction(
+          int index, org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction value) {
+        if (functionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureFunctionIsMutable();
+          function_.set(index, value);
+          onChanged();
+        } else {
+          functionBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public Builder setFunction(
+          int index, org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction.Builder builderForValue) {
+        if (functionBuilder_ == null) {
+          ensureFunctionIsMutable();
+          function_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          functionBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public Builder addFunction(org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction value) {
+        if (functionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureFunctionIsMutable();
+          function_.add(value);
+          onChanged();
+        } else {
+          functionBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public Builder addFunction(
+          int index, org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction value) {
+        if (functionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureFunctionIsMutable();
+          function_.add(index, value);
+          onChanged();
+        } else {
+          functionBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public Builder addFunction(
+          org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction.Builder builderForValue) {
+        if (functionBuilder_ == null) {
+          ensureFunctionIsMutable();
+          function_.add(builderForValue.build());
+          onChanged();
+        } else {
+          functionBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public Builder addFunction(
+          int index, org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction.Builder builderForValue) {
+        if (functionBuilder_ == null) {
+          ensureFunctionIsMutable();
+          function_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          functionBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public Builder addAllFunction(
+          java.lang.Iterable<? extends org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction> values) {
+        if (functionBuilder_ == null) {
+          ensureFunctionIsMutable();
+          super.addAll(values, function_);
+          onChanged();
+        } else {
+          functionBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public Builder clearFunction() {
+        if (functionBuilder_ == null) {
+          function_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000080);
+          onChanged();
+        } else {
+          functionBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public Builder removeFunction(int index) {
+        if (functionBuilder_ == null) {
+          ensureFunctionIsMutable();
+          function_.remove(index);
+          onChanged();
+        } else {
+          functionBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction.Builder getFunctionBuilder(
+          int index) {
+        return getFunctionFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunctionOrBuilder getFunctionOrBuilder(
+          int index) {
+        if (functionBuilder_ == null) {
+          return function_.get(index);  } else {
+          return functionBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public java.util.List<? extends org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunctionOrBuilder> 
+           getFunctionOrBuilderList() {
+        if (functionBuilder_ != null) {
+          return functionBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(function_);
+        }
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction.Builder addFunctionBuilder() {
+        return getFunctionFieldBuilder().addBuilder(
+            org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction.Builder addFunctionBuilder(
+          int index) {
+        return getFunctionFieldBuilder().addBuilder(
+            index, org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .PFunction function = 8;</code>
+       */
+      public java.util.List<org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction.Builder> 
+           getFunctionBuilderList() {
+        return getFunctionFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction, org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction.Builder, org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunctionOrBuilder> 
+          getFunctionFieldBuilder() {
+        if (functionBuilder_ == null) {
+          functionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction, org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunction.Builder, org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunctionOrBuilder>(
+                  function_,
+                  ((bitField0_ & 0x00000080) == 0x00000080),
+                  getParentForChildren(),
+                  isClean());
+          function_ = null;
+        }
+        return functionBuilder_;
+      }
+
       // @@protoc_insertion_point(builder_scope:MetaDataResponse)
     }
 
@@ -2093,46 +2602,76 @@ public final class MetaDataProtos {
     // @@protoc_insertion_point(class_scope:GetTableRequest)
   }
 
-  public interface CreateTableRequestOrBuilder
+  public interface GetFunctionsRequestOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
 
-    // repeated bytes tableMetadataMutations = 1;
+    // required bytes tenantId = 1;
     /**
-     * <code>repeated bytes tableMetadataMutations = 1;</code>
+     * <code>required bytes tenantId = 1;</code>
      */
-    java.util.List<com.google.protobuf.ByteString> getTableMetadataMutationsList();
+    boolean hasTenantId();
     /**
-     * <code>repeated bytes tableMetadataMutations = 1;</code>
+     * <code>required bytes tenantId = 1;</code>
      */
-    int getTableMetadataMutationsCount();
+    com.google.protobuf.ByteString getTenantId();
+
+    // repeated bytes functionNames = 2;
     /**
-     * <code>repeated bytes tableMetadataMutations = 1;</code>
+     * <code>repeated bytes functionNames = 2;</code>
      */
-    com.google.protobuf.ByteString getTableMetadataMutations(int index);
-  }
-  /**
-   * Protobuf type {@code CreateTableRequest}
-   *
-   * <pre>
-   * each byte array represents a MutationProto instance
-   * </pre>
-   */
-  public static final class CreateTableRequest extends
-      com.google.protobuf.GeneratedMessage
-      implements CreateTableRequestOrBuilder {
-    // Use CreateTableRequest.newBuilder() to construct.
-    private CreateTableRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
-      super(builder);
-      this.unknownFields = builder.getUnknownFields();
-    }
-    private CreateTableRequest(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+    java.util.List<com.google.protobuf.ByteString> getFunctionNamesList();
+    /**
+     * <code>repeated bytes functionNames = 2;</code>
+     */
+    int getFunctionNamesCount();
+    /**
+     * <code>repeated bytes functionNames = 2;</code>
+     */
+    com.google.protobuf.ByteString getFunctionNames(int index);
 
-    private static final CreateTableRequest defaultInstance;
-    public static CreateTableRequest getDefaultInstance() {
+    // repeated int64 functionTimestamps = 3;
+    /**
+     * <code>repeated int64 functionTimestamps = 3;</code>
+     */
+    java.util.List<java.lang.Long> getFunctionTimestampsList();
+    /**
+     * <code>repeated int64 functionTimestamps = 3;</code>
+     */
+    int getFunctionTimestampsCount();
+    /**
+     * <code>repeated int64 functionTimestamps = 3;</code>
+     */
+    long getFunctionTimestamps(int index);
+
+    // required int64 clientTimestamp = 4;
+    /**
+     * <code>required int64 clientTimestamp = 4;</code>
+     */
+    boolean hasClientTimestamp();
+    /**
+     * <code>required int64 clientTimestamp = 4;</code>
+     */
+    long getClientTimestamp();
+  }
+  /**
+   * Protobuf type {@code GetFunctionsRequest}
+   */
+  public static final class GetFunctionsRequest extends
+      com.google.protobuf.GeneratedMessage
+      implements GetFunctionsRequestOrBuilder {
+    // Use GetFunctionsRequest.newBuilder() to construct.
+    private GetFunctionsRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
+      super(builder);
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private GetFunctionsRequest(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
+    private static final GetFunctionsRequest defaultInstance;
+    public static GetFunctionsRequest getDefaultInstance() {
       return defaultInstance;
     }
 
-    public CreateTableRequest getDefaultInstanceForType() {
+    public GetFunctionsRequest getDefaultInstanceForType() {
       return defaultInstance;
     }
 
@@ -2142,7 +2681,7 @@ public final class MetaDataProtos {
         getUnknownFields() {
       return this.unknownFields;
     }
-    private CreateTableRequest(
+    private GetFunctionsRequest(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -2166,11 +2705,42 @@ public final class MetaDataProtos {
               break;
             }
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
-                tableMetadataMutations_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
-                mutable_bitField0_ |= 0x00000001;
+              bitField0_ |= 0x00000001;
+              tenantId_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+                functionNames_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
+                mutable_bitField0_ |= 0x00000002;
               }
-              tableMetadataMutations_.add(input.readBytes());
+              functionNames_.add(input.readBytes());
+              break;
+            }
+            case 24: {
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+                functionTimestamps_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              functionTimestamps_.add(input.readInt64());
+              break;
+            }
+            case 26: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
+                functionTimestamps_ = new java.util.ArrayList<java.lang.Long>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              while (input.getBytesUntilLimit() > 0) {
+                functionTimestamps_.add(input.readInt64());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 32: {
+              bitField0_ |= 0x00000002;
+              clientTimestamp_ = input.readInt64();
               break;
             }
           }
@@ -2181,8 +2751,11 @@ public final class MetaDataProtos {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e.getMessage()).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
-          tableMetadataMutations_ = java.util.Collections.unmodifiableList(tableMetadataMutations_);
+        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+          functionNames_ = java.util.Collections.unmodifiableList(functionNames_);
+        }
+        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
+          functionTimestamps_ = java.util.Collections.unmodifiableList(functionTimestamps_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -2190,62 +2763,129 @@ public final class MetaDataProtos {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_CreateTableRequest_descriptor;
+      return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_GetFunctionsRequest_descriptor;
     }
 
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_CreateTableRequest_fieldAccessorTable
+      return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_GetFunctionsRequest_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest.class, org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest.Builder.class);
+              org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest.class, org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest.Builder.class);
     }
 
-    public static com.google.protobuf.Parser<CreateTableRequest> PARSER =
-        new com.google.protobuf.AbstractParser<CreateTableRequest>() {
-      public CreateTableRequest parsePartialFrom(
+    public static com.google.protobuf.Parser<GetFunctionsRequest> PARSER =
+        new com.google.protobuf.AbstractParser<GetFunctionsRequest>() {
+      public GetFunctionsRequest parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new CreateTableRequest(input, extensionRegistry);
+        return new GetFunctionsRequest(input, extensionRegistry);
       }
     };
 
     @java.lang.Override
-    public com.google.protobuf.Parser<CreateTableRequest> getParserForType() {
+    public com.google.protobuf.Parser<GetFunctionsRequest> getParserForType() {
       return PARSER;
     }
 
-    // repeated bytes tableMetadataMutations = 1;
-    public static final int TABLEMETADATAMUTATIONS_FIELD_NUMBER = 1;
-    private java.util.List<com.google.protobuf.ByteString> tableMetadataMutations_;
+    private int bitField0_;
+    // required bytes tenantId = 1;
+    public static final int TENANTID_FIELD_NUMBER = 1;
+    private com.google.protobuf.ByteString tenantId_;
     /**
-     * <code>repeated bytes tableMetadataMutations = 1;</code>
+     * <code>required bytes tenantId = 1;</code>
+     */
+    public boolean hasTenantId() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>required bytes tenantId = 1;</code>
+     */
+    public com.google.protobuf.ByteString getTenantId() {
+      return tenantId_;
+    }
+
+    // repeated bytes functionNames = 2;
+    public static final int FUNCTIONNAMES_FIELD_NUMBER = 2;
+    private java.util.List<com.google.protobuf.ByteString> functionNames_;
+    /**
+     * <code>repeated bytes functionNames = 2;</code>
      */
     public java.util.List<com.google.protobuf.ByteString>
-        getTableMetadataMutationsList() {
-      return tableMetadataMutations_;
+        getFunctionNamesList() {
+      return functionNames_;
     }
     /**
-     * <code>repeated bytes tableMetadataMutations = 1;</code>
+     * <code>repeated bytes functionNames = 2;</code>
      */
-    public int getTableMetadataMutationsCount() {
-      return tableMetadataMutations_.size();
+    public int getFunctionNamesCount() {
+      return functionNames_.size();
     }
     /**
-     * <code>repeated bytes tableMetadataMutations = 1;</code>
+     * <code>repeated bytes functionNames = 2;</code>
      */
-    public com.google.protobuf.ByteString getTableMetadataMutations(int index) {
-      return tableMetadataMutations_.get(index);
+    public com.google.protobuf.ByteString getFunctionNames(int index) {
+      return functionNames_.get(index);
+    }
+
+    // repeated int64 functionTimestamps = 3;
+    public static final int FUNCTIONTIMESTAMPS_FIELD_NUMBER = 3;
+    private java.util.List<java.lang.Long> functionTimestamps_;
+    /**
+     * <code>repeated int64 functionTimestamps = 3;</code>
+     */
+    public java.util.List<java.lang.Long>
+        getFunctionTimestampsList() {
+      return functionTimestamps_;
+    }
+    /**
+     * <code>repeated int64 functionTimestamps = 3;</code>
+     */
+    public int getFunctionTimestampsCount() {
+      return functionTimestamps_.size();
+    }
+    /**
+     * <code>repeated int64 functionTimestamps = 3;</code>
+     */
+    public long getFunctionTimestamps(int index) {
+      return functionTimestamps_.get(index);
+    }
+
+    // required int64 clientTimestamp = 4;
+    public static final int CLIENTTIMESTAMP_FIELD_NUMBER = 4;
+    private long clientTimestamp_;
+    /**
+     * <code>required int64 clientTimestamp = 4;</code>
+     */
+    public boolean hasClientTimestamp() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>required int64 clientTimestamp = 4;</code>
+     */
+    public long getClientTimestamp() {
+      return clientTimestamp_;
     }
 
     private void initFields() {
-      tableMetadataMutations_ = java.util.Collections.emptyList();
+      tenantId_ = com.google.protobuf.ByteString.EMPTY;
+      functionNames_ = java.util.Collections.emptyList();
+      functionTimestamps_ = java.util.Collections.emptyList();
+      clientTimestamp_ = 0L;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized != -1) return isInitialized == 1;
 
+      if (!hasTenantId()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasClientTimestamp()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
       memoizedIsInitialized = 1;
       return true;
     }
@@ -2253,8 +2893,17 @@ public final class MetaDataProtos {
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
-      for (int i = 0; i < tableMetadataMutations_.size(); i++) {
-        output.writeBytes(1, tableMetadataMutations_.get(i));
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, tenantId_);
+      }
+      for (int i = 0; i < functionNames_.size(); i++) {
+        output.writeBytes(2, functionNames_.get(i));
+      }
+      for (int i = 0; i < functionTimestamps_.size(); i++) {
+        output.writeInt64(3, functionTimestamps_.get(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt64(4, clientTimestamp_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -2265,14 +2914,31 @@ public final class MetaDataProtos {
       if (size != -1) return size;
 
       size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, tenantId_);
+      }
       {
         int dataSize = 0;
-        for (int i = 0; i < tableMetadataMutations_.size(); i++) {
+        for (int i = 0; i < functionNames_.size(); i++) {
           dataSize += com.google.protobuf.CodedOutputStream
-            .computeBytesSizeNoTag(tableMetadataMutations_.get(i));
+            .computeBytesSizeNoTag(functionNames_.get(i));
         }
         size += dataSize;
-        size += 1 * getTableMetadataMutationsList().size();
+        size += 1 * getFunctionNamesList().size();
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < functionTimestamps_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeInt64SizeNoTag(functionTimestamps_.get(i));
+        }
+        size += dataSize;
+        size += 1 * getFunctionTimestampsList().size();
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(4, clientTimestamp_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -2291,14 +2957,26 @@ public final class MetaDataProtos {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest)) {
+      if (!(obj instanceof org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest)) {
         return super.equals(obj);
       }
-      org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest other = (org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest) obj;
+      org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest other = (org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest) obj;
 
       boolean result = true;
-      result = result && getTableMetadataMutationsList()
-          .equals(other.getTableMetadataMutationsList());
+      result = result && (hasTenantId() == other.hasTenantId());
+      if (hasTenantId()) {
+        result = result && getTenantId()
+            .equals(other.getTenantId());
+      }
+      result = result && getFunctionNamesList()
+          .equals(other.getFunctionNamesList());
+      result = result && getFunctionTimestampsList()
+          .equals(other.getFunctionTimestampsList());
+      result = result && (hasClientTimestamp() == other.hasClientTimestamp());
+      if (hasClientTimestamp()) {
+        result = result && (getClientTimestamp()
+            == other.getClientTimestamp());
+      }
       result = result &&
           getUnknownFields().equals(other.getUnknownFields());
       return result;
@@ -2312,62 +2990,74 @@ public final class MetaDataProtos {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptorForType().hashCode();
-      if (getTableMetadataMutationsCount() > 0) {
-        hash = (37 * hash) + TABLEMETADATAMUTATIONS_FIELD_NUMBER;
-        hash = (53 * hash) + getTableMetadataMutationsList().hashCode();
+      if (hasTenantId()) {
+        hash = (37 * hash) + TENANTID_FIELD_NUMBER;
+        hash = (53 * hash) + getTenantId().hashCode();
+      }
+      if (getFunctionNamesCount() > 0) {
+        hash = (37 * hash) + FUNCTIONNAMES_FIELD_NUMBER;
+        hash = (53 * hash) + getFunctionNamesList().hashCode();
+      }
+      if (getFunctionTimestampsCount() > 0) {
+        hash = (37 * hash) + FUNCTIONTIMESTAMPS_FIELD_NUMBER;
+        hash = (53 * hash) + getFunctionTimestampsList().hashCode();
+      }
+      if (hasClientTimestamp()) {
+        hash = (37 * hash) + CLIENTTIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + hashLong(getClientTimestamp());
       }
       hash = (29 * hash) + getUnknownFields().hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseFrom(
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseFrom(
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest 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.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseFrom(byte[] data)
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseFrom(
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseFrom(java.io.InputStream input)
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return PARSER.parseFrom(input);
     }
-    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseFrom(
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return PARSER.parseFrom(input, extensionRegistry);
     }
-    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseDelimitedFrom(java.io.InputStream input)
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return PARSER.parseDelimitedFrom(input);
     }
-    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseDelimitedFrom(
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return PARSER.parseDelimitedFrom(input, extensionRegistry);
     }
-    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseFrom(
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return PARSER.parseFrom(input);
     }
-    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseFrom(
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -2376,7 +3066,7 @@ public final class MetaDataProtos {
 
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest prototype) {
+    public static Builder newBuilder(org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -2388,28 +3078,24 @@ public final class MetaDataProtos {
       return builder;
     }
     /**
-     * Protobuf type {@code CreateTableRequest}
-     *
-     * <pre>
-     * each byte array represents a MutationProto instance
-     * </pre>
+     * Protobuf type {@code GetFunctionsRequest}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequestOrBuilder {
+       implements org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequestOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_CreateTableRequest_descriptor;
+        return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_GetFunctionsRequest_descriptor;
       }
 
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_CreateTableRequest_fieldAccessorTable
+        return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_GetFunctionsRequest_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest.class, org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest.Builder.class);
+                org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest.class, org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest.Builder.class);
       }
 
-      // Construct using org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest.newBuilder()
+      // Construct using org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -2429,8 +3115,14 @@ public final class MetaDataProtos {
 
       public Builder clear() {
         super.clear();
-        tableMetadataMutations_ = java.util.Collections.emptyList();
+        tenantId_ = com.google.protobuf.ByteString.EMPTY;
         bitField0_ = (bitField0_ & ~0x00000001);
+        functionNames_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000002);
+        functionTimestamps_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000004);
+        clientTimestamp_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000008);
         return this;
       }
 
@@ -2440,71 +3132,2102 @@ public final class MetaDataProtos {
 
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_CreateTableRequest_descriptor;
+        return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_GetFunctionsRequest_descriptor;
       }
 
-      public org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest getDefaultInstanceForType() {
-        return org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest.getDefaultInstance();
+      public org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest getDefaultInstanceForType() {
+        return org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest.getDefaultInstance();
       }
 
-      public org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest build() {
-        org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest result = buildPartial();
+      public org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest build() {
+        org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
 
-      public org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest buildPartial() {
-        org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest result = new org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest(this);
+      public org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest buildPartial() {
+        org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest result = new org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest(this);
         int from_bitField0_ = bitField0_;
-        if (((bitField0_ & 0x00000001) == 0x00000001)) {
-          tableMetadataMutations_ = java.util.Collections.unmodifiableList(tableMetadataMutations_);
-          bitField0_ = (bitField0_ & ~0x00000001);
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
         }
-        result.tableMetadataMutations_ = tableMetadataMutations_;
+        result.tenantId_ = tenantId_;
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          functionNames_ = java.util.Collections.unmodifiableList(functionNames_);
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.functionNames_ = functionNames_;
+        if (((bitField0_ & 0x00000004) == 0x00000004)) {
+          functionTimestamps_ = java.util.Collections.unmodifiableList(functionTimestamps_);
+          bitField0_ = (bitField0_ & ~0x00000004);
+        }
+        result.functionTimestamps_ = functionTimestamps_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.clientTimestamp_ = clientTimestamp_;
+        result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
 
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest) {
-          return mergeFrom((org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest)other);
+        if (other instanceof org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest) {
+          return mergeFrom((org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest other) {
-        if (other == org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest.getDefaultInstance()) return this;
-        if (!other.tableMetadataMutations_.isEmpty()) {
-          if (tableMetadataMutations_.isEmpty()) {
-            tableMetadataMutations_ = other.tableMetadataMutations_;
-            bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder mergeFrom(org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest other) {
+        if (other == org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest.getDefaultInstance()) return this;
+        if (other.hasTenantId()) {
+          setTenantId(other.getTenantId());
+        }
+        if (!other.functionNames_.isEmpty()) {
+          if (functionNames_.isEmpty()) {
+            functionNames_ = other.functionNames_;
+            bitField0_ = (bitField0_ & ~0x00000002);
           } else {
-            ensureTableMetadataMutationsIsMutable();
-            tableMetadataMutations_.addAll(other.tableMetadataMutations_);
+            ensureFunctionNamesIsMutable();
+            functionNames_.addAll(other.functionNames_);
+          }
+          onChanged();
+        }
+        if (!other.functionTimestamps_.isEmpty()) {
+          if (functionTimestamps_.isEmpty()) {
+            functionTimestamps_ = other.functionTimestamps_;
+            bitField0_ = (bitField0_ & ~0x00000004);
+          } else {
+            ensureFunctionTimestampsIsMutable();
+            functionTimestamps_.addAll(other.functionTimestamps_);
           }
           onChanged();
         }
+        if (other.hasClientTimestamp()) {
+          setClientTimestamp(other.getClientTimestamp());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
 
       public final boolean isInitialized() {
-        return true;
-      }
-
+        if (!hasTenantId()) {
+          
+          return false;
+        }
+        if (!hasClientTimestamp()) {
+          
+          return false;
+        }
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetFunctionsRequest) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      // required bytes tenantId = 1;
+      private com.google.protobuf.ByteString tenantId_ = com.google.protobuf.ByteString.EMPTY;
+      /**
+       * <code>required bytes tenantId = 1;</code>
+       */
+      public boolean hasTenantId() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      /**
+       * <code>required bytes tenantId = 1;</code>
+       */
+      public com.google.protobuf.ByteString getTenantId() {
+        return tenantId_;
+      }
+      /**
+       * <code>required bytes tenantId = 1;</code>
+       */
+      public Builder setTenantId(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        tenantId_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>required bytes tenantId = 1;</code>
+       */
+      public Builder clearTenantId() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        tenantId_ = getDefaultInstance().getTenantId();
+        onChanged();
+        return this;
+      }
+
+      // repeated bytes functionNames = 2;
+      private java.util.List<com.google.protobuf.ByteString> functionNames_ = java.util.Collections.emptyList();
+      private void ensureFunctionNamesIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          functionNames_ = new java.util.ArrayList<com.google.protobuf.ByteString>(functionNames_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      /**
+       * <code>repeated bytes functionNames = 2;</code>
+       */
+      public java.util.List<com.google.protobuf.ByteString>
+          getFunctionNamesList() {
+        return java.util.Collections.unmodifiableList(functionNames_);
+      }
+      /**
+       * <code>repeated bytes functionNames = 2;</code>
+       */
+      public int getFunctionNamesCount() {
+        return functionNames_.size();
+      }
+      /**
+       * <code>repeated bytes functionNames = 2;</code>
+       */
+      public com.google.protobuf.ByteString getFunctionNames(int index) {
+        return functionNames_.get(index);
+      }
+      /**
+       * <code>repeated bytes functionNames = 2;</code>
+       */
+      public Builder setFunctionNames(
+          int index, com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureFunctionNamesIsMutable();
+        functionNames_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated bytes functionNames = 2;</code>
+       */
+      public Builder addFunctionNames(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureFunctionNamesIsMutable();
+        functionNames_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated bytes functionNames = 2;</code>
+       */
+      public Builder addAllFunctionNames(
+          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
+        ensureFunctionNamesIsMutable();
+        super.addAll(values, functionNames_);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated bytes functionNames = 2;</code>
+       */
+      public Builder clearFunctionNames() {
+        functionNames_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000002);
+        onChanged();
+        return this;
+      }
+
+      // repeated int64 functionTimestamps = 3;
+      private java.util.List<java.lang.Long> functionTimestamps_ = java.util.Collections.emptyList();
+      private void ensureFunctionTimestampsIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          functionTimestamps_ = new java.util.ArrayList<java.lang.Long>(functionTimestamps_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      /**
+       * <code>repeated int64 functionTimestamps = 3;</code>
+       */
+      public java.util.List<java.lang.Long>
+          getFunctionTimestampsList() {
+        return java.util.Collections.unmodifiableList(functionTimestamps_);
+      }
+      /**
+       * <code>repeated int64 functionTimestamps = 3;</code>
+       */
+      public int getFunctionTimestampsCount() {
+        return functionTimestamps_.size();
+      }
+      /**
+       * <code>repeated int64 functionTimestamps = 3;</code>
+       */
+      public long getFunctionTimestamps(int index) {
+        return functionTimestamps_.get(index);
+      }
+      /**
+       * <code>repeated int64 functionTimestamps = 3;</code>
+       */
+      public Builder setFunctionTimestamps(
+          int index, long value) {
+        ensureFunctionTimestampsIsMutable();
+        functionTimestamps_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated int64 functionTimestamps = 3;</code>
+       */
+      public Builder addFunctionTimestamps(long value) {
+        ensureFunctionTimestampsIsMutable();
+        functionTimestamps_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated int64 functionTimestamps = 3;</code>
+       */
+      public Builder addAllFunctionTimestamps(
+          java.lang.Iterable<? extends java.lang.Long> values) {
+        ensureFunctionTimestampsIsMutable();
+        super.addAll(values, functionTimestamps_);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated int64 functionTimestamps = 3;</code>
+       */
+      public Builder clearFunctionTimestamps() {
+        functionTimestamps_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000004);
+        onChanged();
+        return this;
+      }
+
+      // required int64 clientTimestamp = 4;
+      private long clientTimestamp_ ;
+      /**
+       * <code>required int64 clientTimestamp = 4;</code>
+       */
+      public boolean hasClientTimestamp() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      /**
+       * <code>required int64 clientTimestamp = 4;</code>
+       */
+      public long getClientTimestamp() {
+        return clientTimestamp_;
+      }
+      /**
+       * <code>required int64 clientTimestamp = 4;</code>
+       */
+      public Builder setClientTimestamp(long value) {
+        bitField0_ |= 0x00000008;
+        clientTimestamp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>required int64 clientTimestamp = 4;</code>
+       */
+      public Builder clearClientTimestamp() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        clientTimestamp_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      // @@protoc_insertion_point(builder_scope:GetFunctionsRequest)
+    }
+
+    static {
+      defaultInstance = new GetFunctionsRequest(true);
+      defaultInstance.initFields();
+    }
+
+    // @@protoc_insertion_point(class_scope:GetFunctionsRequest)
+  }
+
+  public interface CreateTableRequestOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+
+    // repeated bytes tableMetadataMutations = 1;
+    /**
+     * <code>repeated bytes tableMetadataMutations = 1;</code>
+     */
+    java.util.List<com.google.protobuf.ByteString> getTableMetadataMutationsList();
+    /**
+     * <code>repeated bytes tableMetadataMutations = 1;</code>
+     */
+    int getTableMetadataMutationsCount();
+    /**
+     * <code>repeated bytes tableMetadataMutations = 1;</code>
+     */
+    com.google.protobuf.ByteString getTableMetadataMutations(int index);
+  }
+  /**
+   * Protobuf type {@code CreateTableRequest}
+   *
+   * <pre>
+   * each byte array represents a MutationProto instance
+   * </pre>
+   */
+  public static final class CreateTableRequest extends
+      com.google.protobuf.GeneratedMessage
+      implements CreateTableRequestOrBuilder {
+    // Use CreateTableRequest.newBuilder() to construct.
+    private CreateTableRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
+      super(builder);
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private CreateTableRequest(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
+    private static final CreateTableRequest defaultInstance;
+    public static CreateTableRequest getDefaultInstance() {
+      return defaultInstance;
+    }
+
+    public CreateTableRequest getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private CreateTableRequest(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+                tableMetadataMutations_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              tableMetadataMutations_.add(input.readBytes());
+              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_ & 0x00000001) == 0x00000001)) {
+          tableMetadataMutations_ = java.util.Collections.unmodifiableList(tableMetadataMutations_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_CreateTableRequest_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_CreateTableRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest.class, org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<CreateTableRequest> PARSER =
+        new com.google.protobuf.AbstractParser<CreateTableRequest>() {
+      public CreateTableRequest parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new CreateTableRequest(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<CreateTableRequest> getParserForType() {
+      return PARSER;
+    }
+
+    // repeated bytes tableMetadataMutations = 1;
+    public static final int TABLEMETADATAMUTATIONS_FIELD_NUMBER = 1;
+    private java.util.List<com.google.protobuf.ByteString> tableMetadataMutations_;
+    /**
+     * <code>repeated bytes tableMetadataMutations = 1;</code>
+     */
+    public java.util.List<com.google.protobuf.ByteString>
+        getTableMetadataMutationsList() {
+      return tableMetadataMutations_;
+    }
+    /**
+     * <code>repeated bytes tableMetadataMutations = 1;</code>
+     */
+    public int getTableMetadataMutationsCount() {
+      return tableMetadataMutations_.size();
+    }
+    /**
+     * <code>repeated bytes tableMetadataMutations = 1;</code>
+     */
+    public com.google.protobuf.ByteString getTableMetadataMutations(int index) {
+      return tableMetadataMutations_.get(index);
+    }
+
+    private void initFields() {
+      tableMetadataMutations_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      for (int i = 0; i < tableMetadataMutations_.size(); i++) {
+        output.writeBytes(1, tableMetadataMutations_.get(i));
+      }
+      getUnknownFields().writeTo(output);
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      {
+        int dataSize = 0;
+        for (int i = 0; i < tableMetadataMutations_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(tableMetadataMutations_.get(i));
+        }
+        size += dataSize;
+        size += 1 * getTableMetadataMutationsList().size();
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest)) {
+        return super.equals(obj);
+      }
+      org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest other = (org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest) obj;
+
+      boolean result = true;
+      result = result && getTableMetadataMutationsList()
+          .equals(other.getTableMetadataMutationsList());
+      result = result &&
+          getUnknownFields().equals(other.getUnknownFields());
+      return result;
+    }
+
+    private int memoizedHashCode = 0;
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptorForType().hashCode();
+      if (getTableMetadataMutationsCount() > 0) {
+        hash = (37 * hash) + TABLEMETADATAMUTATIONS_FIELD_NUMBER;
+        hash = (53 * hash) + getTableMetadataMutationsList().hashCode();
+      }
+      hash = (29 * hash) + getUnknownFields().hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest 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.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest 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 Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest 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 CreateTableRequest}
+     *
+     * <pre>
+     * each byte array represents a MutationProto instance
+     * </pre>
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequestOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_CreateTableRequest_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_CreateTableRequest_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest.class, org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest.Builder.class);
+      }
+
+      // Construct using org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        tableMetadataMutations_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_CreateTableRequest_descriptor;
+      }
+
+      public org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest getDefaultInstanceForType() {
+        return org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest.getDefaultInstance();
+      }
+
+      public org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest build() {
+        org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest buildPartial() {
+        org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest result = new org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest(this);
+        int from_bitField0_ = bitField0_;
+        if (((bitField0_ & 0x00000001) == 0x00000001)) {
+          tableMetadataMutations_ = java.util.Collections.unmodifiableList(tableMetadataMutations_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.tableMetadataMutations_ = tableMetadataMutations_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest) {
+          return mergeFrom((org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest other) {
+        if (other == org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest.getDefaultInstance()) return this;
+        if (!other.tableMetadataMutations_.isEmpty()) {
+          if (tableMetadataMutations_.isEmpty()) {
+            tableMetadataMutations_ = other.tableMetadataMutations_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureTableMetadataMutationsIsMutable();
+            tableMetadataMutations_.addAll(other.tableMetadataMutations_);
+          }
+          onChanged();
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        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.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateTableRequest) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      // repeated bytes tableMetadataMutations = 1;
+      private java.util.List<com.google.protobuf.ByteString> tableMetadataMutations_ = java.util.Collections.emptyList();
+      private void ensureTableMetadataMutationsIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          tableMetadataMutations_ = new java.util.ArrayList<com.google.protobuf.ByteString>(tableMetadataMutations_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      /**
+       * <code>repeated bytes tableMetadataMutations = 1;</code>
+       */
+      public java.util.List<com.google.protobuf.ByteString>
+          getTableMetadataMutationsList() {
+        return java.util.Collections.unmodifiableList(tableMetadataMutations_);
+      }
+      /**
+       * <code>repeated bytes tableMetadataMutations = 1;</code>
+       */
+      public int getTableMetadataMutationsCount() {
+        return tableMetadataMutations_.size();
+      }
+      /**
+       * <code>repeated bytes tableMetadataMutations = 1;</code>
+       */
+      public com.google.protobuf.ByteString getTableMetadataMutations(int index) {
+        return tableMetadataMutations_.get(index);
+      }
+      /**
+       * <code>repeated bytes tableMetadataMutations = 1;</code>
+       */
+      public Builder setTableMetadataMutations(
+          int index, com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureTableMetadataMutationsIsMutable();
+        tableMetadataMutations_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated bytes tableMetadataMutations = 1;</code>
+       */
+      public Builder addTableMetadataMutations(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureTableMetadataMutationsIsMutable();
+        tableMetadataMutations_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated bytes tableMetadataMutations = 1;</code>
+       */
+      public Builder addAllTableMetadataMutations(
+          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
+        ensureTableMetadataMutationsIsMutable();
+        super.addAll(values, tableMetadataMutations_);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated bytes tableMetadataMutations = 1;</code>
+       */
+      public Builder clearTableMetadataMutations() {
+        tableMetadataMutations_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
+      }
+
+      // @@protoc_insertion_point(builder_scope:CreateTableRequest)
+    }
+
+    static {
+      defaultInstance = new CreateTableRequest(true);
+      defaultInstance.initFields();
+    }
+
+    // @@protoc_insertion_point(class_scope:CreateTableRequest)
+  }
+
+  public interface CreateFunctionRequestOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+
+    // repeated bytes tableMetadataMutations = 1;
+    /**
+     * <code>repeated bytes tableMetadataMutations = 1;</code>
+     */
+    java.util.List<com.google.protobuf.ByteString> getTableMetadataMutationsList();
+    /**
+     * <code>repeated bytes tableMetadataMutations = 1;</code>
+     */
+    int getTableMetadataMutationsCount();
+    /**
+     * <code>repeated bytes tableMetadataMutations = 1;</code>
+     */
+    com.google.protobuf.ByteString getTableMetadataMutations(int index);
+
+    // required bool temporary = 2;
+    /**
+     * <code>required bool temporary = 2;</code>
+     */
+    boolean hasTemporary();
+    /**
+     * <code>required bool temporary = 2;</code>
+     */
+    boolean getTemporary();
+
+    // optional bool replace = 3;
+    /**
+     * <code>optional bool replace = 3;</code>
+     */
+    boolean hasReplace();
+    /**
+     * <code>optional bool replace = 3;</code>
+     */
+    boolean getReplace();
+  }
+  /**
+   * Protobuf type {@code CreateFunctionRequest}
+   *
+   * <pre>
+   * each byte array represents a MutationProto instance
+   * </pre>
+   */
+  public static final class CreateFunctionRequest extends
+      com.google.protobuf.GeneratedMessage
+      implements CreateFunctionRequestOrBuilder {
+    // Use CreateFunctionRequest.newBuilder() to construct.
+    private CreateFunctionRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
+      super(builder);
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private CreateFunctionRequest(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
+    private static final CreateFunctionRequest defaultInstance;
+    public static CreateFunctionRequest getDefaultInstance() {
+      return defaultInstance;
+    }
+
+    public CreateFunctionRequest getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private CreateFunctionRequest(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      initFields();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+                tableMetadataMutations_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              tableMetadataMutations_.add(input.readBytes());
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000001;
+              temporary_ = input.readBool();
+              break;
+            }
+            case 24: {
+              bitField0_ |= 0x00000002;
+              replace_ = 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_ & 0x00000001) == 0x00000001)) {
+          tableMetadataMutations_ = java.util.Collections.unmodifiableList(tableMetadataMutations_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_CreateFunctionRequest_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.apache.phoenix.coprocessor.generated.MetaDataProtos.internal_static_CreateFunctionRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateFunctionRequest.class, org.apache.phoenix.coprocessor.generated.MetaDataProtos.CreateFunctionRequest.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<CreateFunctionRequest> PARSER =
+        new com.google.protobuf.AbstractParser<CreateFunctionRequest>() {
+      public CreateFunctionRequest parsePartialFrom(
+          com.go

<TRUNCATED>