http://git-wip-us.apache.org/repos/asf/drill/blob/89f2633f/protocol/src/main/java/org/apache/drill/exec/proto/UserBitShared.java
----------------------------------------------------------------------
diff --git 
a/protocol/src/main/java/org/apache/drill/exec/proto/UserBitShared.java 
b/protocol/src/main/java/org/apache/drill/exec/proto/UserBitShared.java
index c970af0..f0c783b 100644
--- a/protocol/src/main/java/org/apache/drill/exec/proto/UserBitShared.java
+++ b/protocol/src/main/java/org/apache/drill/exec/proto/UserBitShared.java
@@ -20697,6 +20697,1366 @@ public final class UserBitShared {
     // @@protoc_insertion_point(class_scope:exec.shared.MetricValue)
   }
 
+  public interface RegistryOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+
+    // repeated .exec.shared.Jar jar = 1;
+    /**
+     * <code>repeated .exec.shared.Jar jar = 1;</code>
+     */
+    java.util.List<org.apache.drill.exec.proto.UserBitShared.Jar> 
+        getJarList();
+    /**
+     * <code>repeated .exec.shared.Jar jar = 1;</code>
+     */
+    org.apache.drill.exec.proto.UserBitShared.Jar getJar(int index);
+    /**
+     * <code>repeated .exec.shared.Jar jar = 1;</code>
+     */
+    int getJarCount();
+    /**
+     * <code>repeated .exec.shared.Jar jar = 1;</code>
+     */
+    java.util.List<? extends 
org.apache.drill.exec.proto.UserBitShared.JarOrBuilder> 
+        getJarOrBuilderList();
+    /**
+     * <code>repeated .exec.shared.Jar jar = 1;</code>
+     */
+    org.apache.drill.exec.proto.UserBitShared.JarOrBuilder getJarOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code exec.shared.Registry}
+   *
+   * <pre>
+   * Registry that contains list of jars, each jar contains its name and list 
of function signatures.
+   *Structure example:
+   *REGISTRY    -&gt; Jar1.jar   -&gt; upper(VARCHAR-REQUIRED)
+   *-&gt; upper(VARCHAR-OPTIONAL)
+   *
+   *-&gt; Jar2.jar   -&gt; lower(VARCHAR-REQUIRED)
+   *-&gt; lower(VARCHAR-OPTIONAL)
+   * </pre>
+   */
+  public static final class Registry extends
+      com.google.protobuf.GeneratedMessage
+      implements RegistryOrBuilder {
+    // Use Registry.newBuilder() to construct.
+    private Registry(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
+      super(builder);
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private Registry(boolean noInit) { this.unknownFields = 
com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
+    private static final Registry defaultInstance;
+    public static Registry getDefaultInstance() {
+      return defaultInstance;
+    }
+
+    public Registry getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Registry(
+        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)) {
+                jar_ = new 
java.util.ArrayList<org.apache.drill.exec.proto.UserBitShared.Jar>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              
jar_.add(input.readMessage(org.apache.drill.exec.proto.UserBitShared.Jar.PARSER,
 extensionRegistry));
+              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)) {
+          jar_ = java.util.Collections.unmodifiableList(jar_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return 
org.apache.drill.exec.proto.UserBitShared.internal_static_exec_shared_Registry_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return 
org.apache.drill.exec.proto.UserBitShared.internal_static_exec_shared_Registry_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.drill.exec.proto.UserBitShared.Registry.class, 
org.apache.drill.exec.proto.UserBitShared.Registry.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<Registry> PARSER =
+        new com.google.protobuf.AbstractParser<Registry>() {
+      public Registry parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Registry(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Registry> getParserForType() {
+      return PARSER;
+    }
+
+    // repeated .exec.shared.Jar jar = 1;
+    public static final int JAR_FIELD_NUMBER = 1;
+    private java.util.List<org.apache.drill.exec.proto.UserBitShared.Jar> jar_;
+    /**
+     * <code>repeated .exec.shared.Jar jar = 1;</code>
+     */
+    public java.util.List<org.apache.drill.exec.proto.UserBitShared.Jar> 
getJarList() {
+      return jar_;
+    }
+    /**
+     * <code>repeated .exec.shared.Jar jar = 1;</code>
+     */
+    public java.util.List<? extends 
org.apache.drill.exec.proto.UserBitShared.JarOrBuilder> 
+        getJarOrBuilderList() {
+      return jar_;
+    }
+    /**
+     * <code>repeated .exec.shared.Jar jar = 1;</code>
+     */
+    public int getJarCount() {
+      return jar_.size();
+    }
+    /**
+     * <code>repeated .exec.shared.Jar jar = 1;</code>
+     */
+    public org.apache.drill.exec.proto.UserBitShared.Jar getJar(int index) {
+      return jar_.get(index);
+    }
+    /**
+     * <code>repeated .exec.shared.Jar jar = 1;</code>
+     */
+    public org.apache.drill.exec.proto.UserBitShared.JarOrBuilder 
getJarOrBuilder(
+        int index) {
+      return jar_.get(index);
+    }
+
+    private void initFields() {
+      jar_ = 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 < jar_.size(); i++) {
+        output.writeMessage(1, jar_.get(i));
+      }
+      getUnknownFields().writeTo(output);
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < jar_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, jar_.get(i));
+      }
+      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();
+    }
+
+    public static org.apache.drill.exec.proto.UserBitShared.Registry parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Registry 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.drill.exec.proto.UserBitShared.Registry 
parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Registry parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Registry 
parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Registry parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Registry 
parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Registry 
parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Registry parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Registry 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.drill.exec.proto.UserBitShared.Registry 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 exec.shared.Registry}
+     *
+     * <pre>
+     * Registry that contains list of jars, each jar contains its name and 
list of function signatures.
+     *Structure example:
+     *REGISTRY    -&gt; Jar1.jar   -&gt; upper(VARCHAR-REQUIRED)
+     *-&gt; upper(VARCHAR-OPTIONAL)
+     *
+     *-&gt; Jar2.jar   -&gt; lower(VARCHAR-REQUIRED)
+     *-&gt; lower(VARCHAR-OPTIONAL)
+     * </pre>
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements org.apache.drill.exec.proto.UserBitShared.RegistryOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return 
org.apache.drill.exec.proto.UserBitShared.internal_static_exec_shared_Registry_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return 
org.apache.drill.exec.proto.UserBitShared.internal_static_exec_shared_Registry_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.apache.drill.exec.proto.UserBitShared.Registry.class, 
org.apache.drill.exec.proto.UserBitShared.Registry.Builder.class);
+      }
+
+      // Construct using 
org.apache.drill.exec.proto.UserBitShared.Registry.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getJarFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+
+      public Builder clear() {
+        super.clear();
+        if (jarBuilder_ == null) {
+          jar_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          jarBuilder_.clear();
+        }
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return 
org.apache.drill.exec.proto.UserBitShared.internal_static_exec_shared_Registry_descriptor;
+      }
+
+      public org.apache.drill.exec.proto.UserBitShared.Registry 
getDefaultInstanceForType() {
+        return 
org.apache.drill.exec.proto.UserBitShared.Registry.getDefaultInstance();
+      }
+
+      public org.apache.drill.exec.proto.UserBitShared.Registry build() {
+        org.apache.drill.exec.proto.UserBitShared.Registry result = 
buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public org.apache.drill.exec.proto.UserBitShared.Registry buildPartial() 
{
+        org.apache.drill.exec.proto.UserBitShared.Registry result = new 
org.apache.drill.exec.proto.UserBitShared.Registry(this);
+        int from_bitField0_ = bitField0_;
+        if (jarBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001)) {
+            jar_ = java.util.Collections.unmodifiableList(jar_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.jar_ = jar_;
+        } else {
+          result.jar_ = jarBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof 
org.apache.drill.exec.proto.UserBitShared.Registry) {
+          return 
mergeFrom((org.apache.drill.exec.proto.UserBitShared.Registry)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder 
mergeFrom(org.apache.drill.exec.proto.UserBitShared.Registry other) {
+        if (other == 
org.apache.drill.exec.proto.UserBitShared.Registry.getDefaultInstance()) return 
this;
+        if (jarBuilder_ == null) {
+          if (!other.jar_.isEmpty()) {
+            if (jar_.isEmpty()) {
+              jar_ = other.jar_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureJarIsMutable();
+              jar_.addAll(other.jar_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.jar_.isEmpty()) {
+            if (jarBuilder_.isEmpty()) {
+              jarBuilder_.dispose();
+              jarBuilder_ = null;
+              jar_ = other.jar_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              jarBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getJarFieldBuilder() : null;
+            } else {
+              jarBuilder_.addAllMessages(other.jar_);
+            }
+          }
+        }
+        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.drill.exec.proto.UserBitShared.Registry parsedMessage = 
null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.drill.exec.proto.UserBitShared.Registry) 
e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      // repeated .exec.shared.Jar jar = 1;
+      private java.util.List<org.apache.drill.exec.proto.UserBitShared.Jar> 
jar_ =
+        java.util.Collections.emptyList();
+      private void ensureJarIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          jar_ = new 
java.util.ArrayList<org.apache.drill.exec.proto.UserBitShared.Jar>(jar_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilder<
+          org.apache.drill.exec.proto.UserBitShared.Jar, 
org.apache.drill.exec.proto.UserBitShared.Jar.Builder, 
org.apache.drill.exec.proto.UserBitShared.JarOrBuilder> jarBuilder_;
+
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public java.util.List<org.apache.drill.exec.proto.UserBitShared.Jar> 
getJarList() {
+        if (jarBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(jar_);
+        } else {
+          return jarBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public int getJarCount() {
+        if (jarBuilder_ == null) {
+          return jar_.size();
+        } else {
+          return jarBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public org.apache.drill.exec.proto.UserBitShared.Jar getJar(int index) {
+        if (jarBuilder_ == null) {
+          return jar_.get(index);
+        } else {
+          return jarBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public Builder setJar(
+          int index, org.apache.drill.exec.proto.UserBitShared.Jar value) {
+        if (jarBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureJarIsMutable();
+          jar_.set(index, value);
+          onChanged();
+        } else {
+          jarBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public Builder setJar(
+          int index, org.apache.drill.exec.proto.UserBitShared.Jar.Builder 
builderForValue) {
+        if (jarBuilder_ == null) {
+          ensureJarIsMutable();
+          jar_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          jarBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public Builder addJar(org.apache.drill.exec.proto.UserBitShared.Jar 
value) {
+        if (jarBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureJarIsMutable();
+          jar_.add(value);
+          onChanged();
+        } else {
+          jarBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public Builder addJar(
+          int index, org.apache.drill.exec.proto.UserBitShared.Jar value) {
+        if (jarBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureJarIsMutable();
+          jar_.add(index, value);
+          onChanged();
+        } else {
+          jarBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public Builder addJar(
+          org.apache.drill.exec.proto.UserBitShared.Jar.Builder 
builderForValue) {
+        if (jarBuilder_ == null) {
+          ensureJarIsMutable();
+          jar_.add(builderForValue.build());
+          onChanged();
+        } else {
+          jarBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public Builder addJar(
+          int index, org.apache.drill.exec.proto.UserBitShared.Jar.Builder 
builderForValue) {
+        if (jarBuilder_ == null) {
+          ensureJarIsMutable();
+          jar_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          jarBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public Builder addAllJar(
+          java.lang.Iterable<? extends 
org.apache.drill.exec.proto.UserBitShared.Jar> values) {
+        if (jarBuilder_ == null) {
+          ensureJarIsMutable();
+          super.addAll(values, jar_);
+          onChanged();
+        } else {
+          jarBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public Builder clearJar() {
+        if (jarBuilder_ == null) {
+          jar_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          jarBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public Builder removeJar(int index) {
+        if (jarBuilder_ == null) {
+          ensureJarIsMutable();
+          jar_.remove(index);
+          onChanged();
+        } else {
+          jarBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public org.apache.drill.exec.proto.UserBitShared.Jar.Builder 
getJarBuilder(
+          int index) {
+        return getJarFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public org.apache.drill.exec.proto.UserBitShared.JarOrBuilder 
getJarOrBuilder(
+          int index) {
+        if (jarBuilder_ == null) {
+          return jar_.get(index);  } else {
+          return jarBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public java.util.List<? extends 
org.apache.drill.exec.proto.UserBitShared.JarOrBuilder> 
+           getJarOrBuilderList() {
+        if (jarBuilder_ != null) {
+          return jarBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(jar_);
+        }
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public org.apache.drill.exec.proto.UserBitShared.Jar.Builder 
addJarBuilder() {
+        return getJarFieldBuilder().addBuilder(
+            
org.apache.drill.exec.proto.UserBitShared.Jar.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public org.apache.drill.exec.proto.UserBitShared.Jar.Builder 
addJarBuilder(
+          int index) {
+        return getJarFieldBuilder().addBuilder(
+            index, 
org.apache.drill.exec.proto.UserBitShared.Jar.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .exec.shared.Jar jar = 1;</code>
+       */
+      public 
java.util.List<org.apache.drill.exec.proto.UserBitShared.Jar.Builder> 
+           getJarBuilderList() {
+        return getJarFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          org.apache.drill.exec.proto.UserBitShared.Jar, 
org.apache.drill.exec.proto.UserBitShared.Jar.Builder, 
org.apache.drill.exec.proto.UserBitShared.JarOrBuilder> 
+          getJarFieldBuilder() {
+        if (jarBuilder_ == null) {
+          jarBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              org.apache.drill.exec.proto.UserBitShared.Jar, 
org.apache.drill.exec.proto.UserBitShared.Jar.Builder, 
org.apache.drill.exec.proto.UserBitShared.JarOrBuilder>(
+                  jar_,
+                  ((bitField0_ & 0x00000001) == 0x00000001),
+                  getParentForChildren(),
+                  isClean());
+          jar_ = null;
+        }
+        return jarBuilder_;
+      }
+
+      // @@protoc_insertion_point(builder_scope:exec.shared.Registry)
+    }
+
+    static {
+      defaultInstance = new Registry(true);
+      defaultInstance.initFields();
+    }
+
+    // @@protoc_insertion_point(class_scope:exec.shared.Registry)
+  }
+
+  public interface JarOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+
+    // optional string name = 1;
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    boolean hasName();
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    java.lang.String getName();
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    // repeated string function_signature = 2;
+    /**
+     * <code>repeated string function_signature = 2;</code>
+     */
+    java.util.List<java.lang.String>
+    getFunctionSignatureList();
+    /**
+     * <code>repeated string function_signature = 2;</code>
+     */
+    int getFunctionSignatureCount();
+    /**
+     * <code>repeated string function_signature = 2;</code>
+     */
+    java.lang.String getFunctionSignature(int index);
+    /**
+     * <code>repeated string function_signature = 2;</code>
+     */
+    com.google.protobuf.ByteString
+        getFunctionSignatureBytes(int index);
+  }
+  /**
+   * Protobuf type {@code exec.shared.Jar}
+   *
+   * <pre>
+   * Jar contains jar name and list of function signatures.
+   *Function signature is concatenation of function name and its input 
parameters. 
+   * </pre>
+   */
+  public static final class Jar extends
+      com.google.protobuf.GeneratedMessage
+      implements JarOrBuilder {
+    // Use Jar.newBuilder() to construct.
+    private Jar(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
+      super(builder);
+      this.unknownFields = builder.getUnknownFields();
+    }
+    private Jar(boolean noInit) { this.unknownFields = 
com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
+    private static final Jar defaultInstance;
+    public static Jar getDefaultInstance() {
+      return defaultInstance;
+    }
+
+    public Jar getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+
+    private final com.google.protobuf.UnknownFieldSet unknownFields;
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+        getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Jar(
+        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: {
+              bitField0_ |= 0x00000001;
+              name_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+                functionSignature_ = new 
com.google.protobuf.LazyStringArrayList();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              functionSignature_.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_ & 0x00000002) == 0x00000002)) {
+          functionSignature_ = new 
com.google.protobuf.UnmodifiableLazyStringList(functionSignature_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return 
org.apache.drill.exec.proto.UserBitShared.internal_static_exec_shared_Jar_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return 
org.apache.drill.exec.proto.UserBitShared.internal_static_exec_shared_Jar_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.apache.drill.exec.proto.UserBitShared.Jar.class, 
org.apache.drill.exec.proto.UserBitShared.Jar.Builder.class);
+    }
+
+    public static com.google.protobuf.Parser<Jar> PARSER =
+        new com.google.protobuf.AbstractParser<Jar>() {
+      public Jar parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Jar(input, extensionRegistry);
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Jar> getParserForType() {
+      return PARSER;
+    }
+
+    private int bitField0_;
+    // optional string name = 1;
+    public static final int NAME_FIELD_NUMBER = 1;
+    private java.lang.Object name_;
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public boolean hasName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          name_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string name = 1;</code>
+     */
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    // repeated string function_signature = 2;
+    public static final int FUNCTION_SIGNATURE_FIELD_NUMBER = 2;
+    private com.google.protobuf.LazyStringList functionSignature_;
+    /**
+     * <code>repeated string function_signature = 2;</code>
+     */
+    public java.util.List<java.lang.String>
+        getFunctionSignatureList() {
+      return functionSignature_;
+    }
+    /**
+     * <code>repeated string function_signature = 2;</code>
+     */
+    public int getFunctionSignatureCount() {
+      return functionSignature_.size();
+    }
+    /**
+     * <code>repeated string function_signature = 2;</code>
+     */
+    public java.lang.String getFunctionSignature(int index) {
+      return functionSignature_.get(index);
+    }
+    /**
+     * <code>repeated string function_signature = 2;</code>
+     */
+    public com.google.protobuf.ByteString
+        getFunctionSignatureBytes(int index) {
+      return functionSignature_.getByteString(index);
+    }
+
+    private void initFields() {
+      name_ = "";
+      functionSignature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+    }
+    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();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getNameBytes());
+      }
+      for (int i = 0; i < functionSignature_.size(); i++) {
+        output.writeBytes(2, functionSignature_.getByteString(i));
+      }
+      getUnknownFields().writeTo(output);
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getNameBytes());
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < functionSignature_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(functionSignature_.getByteString(i));
+        }
+        size += dataSize;
+        size += 1 * getFunctionSignatureList().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();
+    }
+
+    public static org.apache.drill.exec.proto.UserBitShared.Jar parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Jar 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.drill.exec.proto.UserBitShared.Jar 
parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Jar parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Jar 
parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Jar parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Jar 
parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Jar 
parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Jar parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static org.apache.drill.exec.proto.UserBitShared.Jar 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.drill.exec.proto.UserBitShared.Jar 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 exec.shared.Jar}
+     *
+     * <pre>
+     * Jar contains jar name and list of function signatures.
+     *Function signature is concatenation of function name and its input 
parameters. 
+     * </pre>
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements org.apache.drill.exec.proto.UserBitShared.JarOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return 
org.apache.drill.exec.proto.UserBitShared.internal_static_exec_shared_Jar_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return 
org.apache.drill.exec.proto.UserBitShared.internal_static_exec_shared_Jar_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.apache.drill.exec.proto.UserBitShared.Jar.class, 
org.apache.drill.exec.proto.UserBitShared.Jar.Builder.class);
+      }
+
+      // Construct using 
org.apache.drill.exec.proto.UserBitShared.Jar.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();
+        name_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        functionSignature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        return this;
+      }
+
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return 
org.apache.drill.exec.proto.UserBitShared.internal_static_exec_shared_Jar_descriptor;
+      }
+
+      public org.apache.drill.exec.proto.UserBitShared.Jar 
getDefaultInstanceForType() {
+        return 
org.apache.drill.exec.proto.UserBitShared.Jar.getDefaultInstance();
+      }
+
+      public org.apache.drill.exec.proto.UserBitShared.Jar build() {
+        org.apache.drill.exec.proto.UserBitShared.Jar result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public org.apache.drill.exec.proto.UserBitShared.Jar buildPartial() {
+        org.apache.drill.exec.proto.UserBitShared.Jar result = new 
org.apache.drill.exec.proto.UserBitShared.Jar(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.name_ = name_;
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          functionSignature_ = new 
com.google.protobuf.UnmodifiableLazyStringList(
+              functionSignature_);
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.functionSignature_ = functionSignature_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.apache.drill.exec.proto.UserBitShared.Jar) {
+          return 
mergeFrom((org.apache.drill.exec.proto.UserBitShared.Jar)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.apache.drill.exec.proto.UserBitShared.Jar 
other) {
+        if (other == 
org.apache.drill.exec.proto.UserBitShared.Jar.getDefaultInstance()) return this;
+        if (other.hasName()) {
+          bitField0_ |= 0x00000001;
+          name_ = other.name_;
+          onChanged();
+        }
+        if (!other.functionSignature_.isEmpty()) {
+          if (functionSignature_.isEmpty()) {
+            functionSignature_ = other.functionSignature_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensureFunctionSignatureIsMutable();
+            functionSignature_.addAll(other.functionSignature_);
+          }
+          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.drill.exec.proto.UserBitShared.Jar parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.apache.drill.exec.proto.UserBitShared.Jar) 
e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      // optional string name = 1;
+      private java.lang.Object name_ = "";
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public boolean hasName() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          java.lang.String s = ((com.google.protobuf.ByteString) ref)
+              .toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public Builder clearName() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string name = 1;</code>
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+        return this;
+      }
+
+      // repeated string function_signature = 2;
+      private com.google.protobuf.LazyStringList functionSignature_ = 
com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureFunctionSignatureIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          functionSignature_ = new 
com.google.protobuf.LazyStringArrayList(functionSignature_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      /**
+       * <code>repeated string function_signature = 2;</code>
+       */
+      public java.util.List<java.lang.String>
+          getFunctionSignatureList() {
+        return java.util.Collections.unmodifiableList(functionSignature_);
+      }
+      /**
+       * <code>repeated string function_signature = 2;</code>
+       */
+      public int getFunctionSignatureCount() {
+        return functionSignature_.size();
+      }
+      /**
+       * <code>repeated string function_signature = 2;</code>
+       */
+      public java.lang.String getFunctionSignature(int index) {
+        return functionSignature_.get(index);
+      }
+      /**
+       * <code>repeated string function_signature = 2;</code>
+       */
+      public com.google.protobuf.ByteString
+          getFunctionSignatureBytes(int index) {
+        return functionSignature_.getByteString(index);
+      }
+      /**
+       * <code>repeated string function_signature = 2;</code>
+       */
+      public Builder setFunctionSignature(
+          int index, java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureFunctionSignatureIsMutable();
+        functionSignature_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string function_signature = 2;</code>
+       */
+      public Builder addFunctionSignature(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureFunctionSignatureIsMutable();
+        functionSignature_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string function_signature = 2;</code>
+       */
+      public Builder addAllFunctionSignature(
+          java.lang.Iterable<java.lang.String> values) {
+        ensureFunctionSignatureIsMutable();
+        super.addAll(values, functionSignature_);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string function_signature = 2;</code>
+       */
+      public Builder clearFunctionSignature() {
+        functionSignature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string function_signature = 2;</code>
+       */
+      public Builder addFunctionSignatureBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureFunctionSignatureIsMutable();
+        functionSignature_.add(value);
+        onChanged();
+        return this;
+      }
+
+      // @@protoc_insertion_point(builder_scope:exec.shared.Jar)
+    }
+
+    static {
+      defaultInstance = new Jar(true);
+      defaultInstance.initFields();
+    }
+
+    // @@protoc_insertion_point(class_scope:exec.shared.Jar)
+  }
+
   private static com.google.protobuf.Descriptors.Descriptor
     internal_static_exec_shared_UserCredentials_descriptor;
   private static
@@ -20792,6 +22152,16 @@ public final class UserBitShared {
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_exec_shared_MetricValue_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_exec_shared_Registry_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_exec_shared_Registry_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_exec_shared_Jar_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_exec_shared_Jar_fieldAccessorTable;
 
   public static com.google.protobuf.Descriptors.FileDescriptor
       getDescriptor() {
@@ -20886,33 +22256,36 @@ public final class UserBitShared {
       "\017\n\007records\030\001 \001(\003\022\017\n\007batches\030\002 
\001(\003\022\017\n\007sch" +
       "emas\030\003 
\001(\003\"J\n\013MetricValue\022\021\n\tmetric_id\030\001" +
       " \001(\005\022\022\n\nlong_value\030\002 
\001(\003\022\024\n\014double_value" +
-      "\030\003 
\001(\001*5\n\nRpcChannel\022\017\n\013BIT_CONTROL\020\000\022\014\n" +
-      
"\010BIT_DATA\020\001\022\010\n\004USER\020\002*V\n\tQueryType\022\007\n\003SQ" 
+
-      
"L\020\001\022\013\n\007LOGICAL\020\002\022\014\n\010PHYSICAL\020\003\022\r\n\tEXECUT"
 +
-      "ION\020\004\022\026\n\022PREPARED_STATEMENT\020\005*\207\001\n\rFragme" 
+
-      "ntState\022\013\n\007SENDING\020\000\022\027\n\023AWAITING_ALLOCAT",
-      
"ION\020\001\022\013\n\007RUNNING\020\002\022\014\n\010FINISHED\020\003\022\r\n\tCANC"
 +
-      "ELLED\020\004\022\n\n\006FAILED\020\005\022\032\n\026CANCELLATION_REQU" 
+
-      "ESTED\020\006*\335\005\n\020CoreOperatorType\022\021\n\rSINGLE_S" +
-      
"ENDER\020\000\022\024\n\020BROADCAST_SENDER\020\001\022\n\n\006FILTER\020" +
-      
"\002\022\022\n\016HASH_AGGREGATE\020\003\022\r\n\tHASH_JOIN\020\004\022\016\n\n"
 +
-      "MERGE_JOIN\020\005\022\031\n\025HASH_PARTITION_SENDER\020\006\022" +
-      
"\t\n\005LIMIT\020\007\022\024\n\020MERGING_RECEIVER\020\010\022\034\n\030ORDE" 
+
-      "RED_PARTITION_SENDER\020\t\022\013\n\007PROJECT\020\n\022\026\n\022U" +
-      "NORDERED_RECEIVER\020\013\022\020\n\014RANGE_SENDER\020\014\022\n\n" +
-      "\006SCREEN\020\r\022\034\n\030SELECTION_VECTOR_REMOVER\020\016\022",
-      "\027\n\023STREAMING_AGGREGATE\020\017\022\016\n\nTOP_N_SORT\020\020" +
-      
"\022\021\n\rEXTERNAL_SORT\020\021\022\t\n\005TRACE\020\022\022\t\n\005UNION\020"
 +
-      "\023\022\014\n\010OLD_SORT\020\024\022\032\n\026PARQUET_ROW_GROUP_SCA" +
-      "N\020\025\022\021\n\rHIVE_SUB_SCAN\020\026\022\025\n\021SYSTEM_TABLE_S" 
+
-      "CAN\020\027\022\021\n\rMOCK_SUB_SCAN\020\030\022\022\n\016PARQUET_WRIT" 
+
-      
"ER\020\031\022\023\n\017DIRECT_SUB_SCAN\020\032\022\017\n\013TEXT_WRITER" +
-      
"\020\033\022\021\n\rTEXT_SUB_SCAN\020\034\022\021\n\rJSON_SUB_SCAN\020\035" +
-      "\022\030\n\024INFO_SCHEMA_SUB_SCAN\020\036\022\023\n\017COMPLEX_TO" +
-      "_JSON\020\037\022\025\n\021PRODUCER_CONSUMER\020 \022\022\n\016HBASE_" +
-      "SUB_SCAN\020!\022\n\n\006WINDOW\020\"\022\024\n\020NESTED_LOOP_JO",
-      "IN\020#\022\021\n\rAVRO_SUB_SCAN\020$B.\n\033org.apache.dr" +
-      "ill.exec.protoB\rUserBitSharedH\001"
+      "\030\003 \001(\001\")\n\010Registry\022\035\n\003jar\030\001 
\003(\0132\020.exec.s" +
+      "hared.Jar\"/\n\003Jar\022\014\n\004name\030\001 
\001(\t\022\032\n\022functi" +
+      "on_signature\030\002 \003(\t*5\n\nRpcChannel\022\017\n\013BIT_" +
+      
"CONTROL\020\000\022\014\n\010BIT_DATA\020\001\022\010\n\004USER\020\002*V\n\tQue"
 +
+      
"ryType\022\007\n\003SQL\020\001\022\013\n\007LOGICAL\020\002\022\014\n\010PHYSICAL",
+      
"\020\003\022\r\n\tEXECUTION\020\004\022\026\n\022PREPARED_STATEMENT\020" +
+      
"\005*\207\001\n\rFragmentState\022\013\n\007SENDING\020\000\022\027\n\023AWAI" 
+
+      
"TING_ALLOCATION\020\001\022\013\n\007RUNNING\020\002\022\014\n\010FINISH" +
+      
"ED\020\003\022\r\n\tCANCELLED\020\004\022\n\n\006FAILED\020\005\022\032\n\026CANCE"
 +
+      "LLATION_REQUESTED\020\006*\335\005\n\020CoreOperatorType" +
+      "\022\021\n\rSINGLE_SENDER\020\000\022\024\n\020BROADCAST_SENDER\020" +
+      
"\001\022\n\n\006FILTER\020\002\022\022\n\016HASH_AGGREGATE\020\003\022\r\n\tHAS"
 +
+      "H_JOIN\020\004\022\016\n\nMERGE_JOIN\020\005\022\031\n\025HASH_PARTITI" 
+
+      "ON_SENDER\020\006\022\t\n\005LIMIT\020\007\022\024\n\020MERGING_RECEIV" 
+
+      "ER\020\010\022\034\n\030ORDERED_PARTITION_SENDER\020\t\022\013\n\007PR",
+      "OJECT\020\n\022\026\n\022UNORDERED_RECEIVER\020\013\022\020\n\014RANGE" 
+
+      "_SENDER\020\014\022\n\n\006SCREEN\020\r\022\034\n\030SELECTION_VECTO" +
+      "R_REMOVER\020\016\022\027\n\023STREAMING_AGGREGATE\020\017\022\016\n\n" 
+
+      "TOP_N_SORT\020\020\022\021\n\rEXTERNAL_SORT\020\021\022\t\n\005TRACE" +
+      
"\020\022\022\t\n\005UNION\020\023\022\014\n\010OLD_SORT\020\024\022\032\n\026PARQUET_R"
 +
+      "OW_GROUP_SCAN\020\025\022\021\n\rHIVE_SUB_SCAN\020\026\022\025\n\021SY" 
+
+      "STEM_TABLE_SCAN\020\027\022\021\n\rMOCK_SUB_SCAN\020\030\022\022\n\016" 
+
+      "PARQUET_WRITER\020\031\022\023\n\017DIRECT_SUB_SCAN\020\032\022\017\n" +
+      
"\013TEXT_WRITER\020\033\022\021\n\rTEXT_SUB_SCAN\020\034\022\021\n\rJSO" +
+      "N_SUB_SCAN\020\035\022\030\n\024INFO_SCHEMA_SUB_SCAN\020\036\022\023",
+      "\n\017COMPLEX_TO_JSON\020\037\022\025\n\021PRODUCER_CONSUMER" +
+      "\020 
\022\022\n\016HBASE_SUB_SCAN\020!\022\n\n\006WINDOW\020\"\022\024\n\020NE" +
+      "STED_LOOP_JOIN\020#\022\021\n\rAVRO_SUB_SCAN\020$B.\n\033o" +
+      "rg.apache.drill.exec.protoB\rUserBitShare" +
+      "dH\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner 
assigner =
       new 
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -21033,6 +22406,18 @@ public final class UserBitShared {
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_exec_shared_MetricValue_descriptor,
               new java.lang.String[] { "MetricId", "LongValue", "DoubleValue", 
});
+          internal_static_exec_shared_Registry_descriptor =
+            getDescriptor().getMessageTypes().get(19);
+          internal_static_exec_shared_Registry_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_exec_shared_Registry_descriptor,
+              new java.lang.String[] { "Jar", });
+          internal_static_exec_shared_Jar_descriptor =
+            getDescriptor().getMessageTypes().get(20);
+          internal_static_exec_shared_Jar_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_exec_shared_Jar_descriptor,
+              new java.lang.String[] { "Name", "FunctionSignature", });
           return null;
         }
       };

http://git-wip-us.apache.org/repos/asf/drill/blob/89f2633f/protocol/src/main/java/org/apache/drill/exec/proto/beans/Jar.java
----------------------------------------------------------------------
diff --git a/protocol/src/main/java/org/apache/drill/exec/proto/beans/Jar.java 
b/protocol/src/main/java/org/apache/drill/exec/proto/beans/Jar.java
new file mode 100644
index 0000000..0446aea
--- /dev/null
+++ b/protocol/src/main/java/org/apache/drill/exec/proto/beans/Jar.java
@@ -0,0 +1,195 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Generated by http://code.google.com/p/protostuff/ ... DO NOT EDIT!
+// Generated from protobuf
+
+package org.apache.drill.exec.proto.beans;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.dyuproject.protostuff.GraphIOUtil;
+import com.dyuproject.protostuff.Input;
+import com.dyuproject.protostuff.Message;
+import com.dyuproject.protostuff.Output;
+import com.dyuproject.protostuff.Schema;
+
+public final class Jar implements Externalizable, Message<Jar>, Schema<Jar>
+{
+
+    public static Schema<Jar> getSchema()
+    {
+        return DEFAULT_INSTANCE;
+    }
+
+    public static Jar getDefaultInstance()
+    {
+        return DEFAULT_INSTANCE;
+    }
+
+    static final Jar DEFAULT_INSTANCE = new Jar();
+
+    
+    private String name;
+    private List<String> functionSignature;
+
+    public Jar()
+    {
+        
+    }
+
+    // getters and setters
+
+    // name
+
+    public String getName()
+    {
+        return name;
+    }
+
+    public Jar setName(String name)
+    {
+        this.name = name;
+        return this;
+    }
+
+    // functionSignature
+
+    public List<String> getFunctionSignatureList()
+    {
+        return functionSignature;
+    }
+
+    public Jar setFunctionSignatureList(List<String> functionSignature)
+    {
+        this.functionSignature = functionSignature;
+        return this;
+    }
+
+    // java serialization
+
+    public void readExternal(ObjectInput in) throws IOException
+    {
+        GraphIOUtil.mergeDelimitedFrom(in, this, this);
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException
+    {
+        GraphIOUtil.writeDelimitedTo(out, this, this);
+    }
+
+    // message method
+
+    public Schema<Jar> cachedSchema()
+    {
+        return DEFAULT_INSTANCE;
+    }
+
+    // schema methods
+
+    public Jar newMessage()
+    {
+        return new Jar();
+    }
+
+    public Class<Jar> typeClass()
+    {
+        return Jar.class;
+    }
+
+    public String messageName()
+    {
+        return Jar.class.getSimpleName();
+    }
+
+    public String messageFullName()
+    {
+        return Jar.class.getName();
+    }
+
+    public boolean isInitialized(Jar message)
+    {
+        return true;
+    }
+
+    public void mergeFrom(Input input, Jar message) throws IOException
+    {
+        for(int number = input.readFieldNumber(this);; number = 
input.readFieldNumber(this))
+        {
+            switch(number)
+            {
+                case 0:
+                    return;
+                case 1:
+                    message.name = input.readString();
+                    break;
+                case 2:
+                    if(message.functionSignature == null)
+                        message.functionSignature = new ArrayList<String>();
+                    message.functionSignature.add(input.readString());
+                    break;
+                default:
+                    input.handleUnknownField(number, this);
+            }   
+        }
+    }
+
+
+    public void writeTo(Output output, Jar message) throws IOException
+    {
+        if(message.name != null)
+            output.writeString(1, message.name, false);
+
+        if(message.functionSignature != null)
+        {
+            for(String functionSignature : message.functionSignature)
+            {
+                if(functionSignature != null)
+                    output.writeString(2, functionSignature, true);
+            }
+        }
+    }
+
+    public String getFieldName(int number)
+    {
+        switch(number)
+        {
+            case 1: return "name";
+            case 2: return "functionSignature";
+            default: return null;
+        }
+    }
+
+    public int getFieldNumber(String name)
+    {
+        final Integer number = __fieldMap.get(name);
+        return number == null ? 0 : number.intValue();
+    }
+
+    private static final java.util.HashMap<String,Integer> __fieldMap = new 
java.util.HashMap<String,Integer>();
+    static
+    {
+        __fieldMap.put("name", 1);
+        __fieldMap.put("functionSignature", 2);
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/drill/blob/89f2633f/protocol/src/main/java/org/apache/drill/exec/proto/beans/Registry.java
----------------------------------------------------------------------
diff --git 
a/protocol/src/main/java/org/apache/drill/exec/proto/beans/Registry.java 
b/protocol/src/main/java/org/apache/drill/exec/proto/beans/Registry.java
new file mode 100644
index 0000000..14119a2
--- /dev/null
+++ b/protocol/src/main/java/org/apache/drill/exec/proto/beans/Registry.java
@@ -0,0 +1,175 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Generated by http://code.google.com/p/protostuff/ ... DO NOT EDIT!
+// Generated from protobuf
+
+package org.apache.drill.exec.proto.beans;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.dyuproject.protostuff.GraphIOUtil;
+import com.dyuproject.protostuff.Input;
+import com.dyuproject.protostuff.Message;
+import com.dyuproject.protostuff.Output;
+import com.dyuproject.protostuff.Schema;
+
+public final class Registry implements Externalizable, Message<Registry>, 
Schema<Registry>
+{
+
+    public static Schema<Registry> getSchema()
+    {
+        return DEFAULT_INSTANCE;
+    }
+
+    public static Registry getDefaultInstance()
+    {
+        return DEFAULT_INSTANCE;
+    }
+
+    static final Registry DEFAULT_INSTANCE = new Registry();
+
+    
+    private List<Jar> jar;
+
+    public Registry()
+    {
+        
+    }
+
+    // getters and setters
+
+    // jar
+
+    public List<Jar> getJarList()
+    {
+        return jar;
+    }
+
+    public Registry setJarList(List<Jar> jar)
+    {
+        this.jar = jar;
+        return this;
+    }
+
+    // java serialization
+
+    public void readExternal(ObjectInput in) throws IOException
+    {
+        GraphIOUtil.mergeDelimitedFrom(in, this, this);
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException
+    {
+        GraphIOUtil.writeDelimitedTo(out, this, this);
+    }
+
+    // message method
+
+    public Schema<Registry> cachedSchema()
+    {
+        return DEFAULT_INSTANCE;
+    }
+
+    // schema methods
+
+    public Registry newMessage()
+    {
+        return new Registry();
+    }
+
+    public Class<Registry> typeClass()
+    {
+        return Registry.class;
+    }
+
+    public String messageName()
+    {
+        return Registry.class.getSimpleName();
+    }
+
+    public String messageFullName()
+    {
+        return Registry.class.getName();
+    }
+
+    public boolean isInitialized(Registry message)
+    {
+        return true;
+    }
+
+    public void mergeFrom(Input input, Registry message) throws IOException
+    {
+        for(int number = input.readFieldNumber(this);; number = 
input.readFieldNumber(this))
+        {
+            switch(number)
+            {
+                case 0:
+                    return;
+                case 1:
+                    if(message.jar == null)
+                        message.jar = new ArrayList<Jar>();
+                    message.jar.add(input.mergeObject(null, Jar.getSchema()));
+                    break;
+
+                default:
+                    input.handleUnknownField(number, this);
+            }   
+        }
+    }
+
+
+    public void writeTo(Output output, Registry message) throws IOException
+    {
+        if(message.jar != null)
+        {
+            for(Jar jar : message.jar)
+            {
+                if(jar != null)
+                    output.writeObject(1, jar, Jar.getSchema(), true);
+            }
+        }
+
+    }
+
+    public String getFieldName(int number)
+    {
+        switch(number)
+        {
+            case 1: return "jar";
+            default: return null;
+        }
+    }
+
+    public int getFieldNumber(String name)
+    {
+        final Integer number = __fieldMap.get(name);
+        return number == null ? 0 : number.intValue();
+    }
+
+    private static final java.util.HashMap<String,Integer> __fieldMap = new 
java.util.HashMap<String,Integer>();
+    static
+    {
+        __fieldMap.put("jar", 1);
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/drill/blob/89f2633f/protocol/src/main/protobuf/UserBitShared.proto
----------------------------------------------------------------------
diff --git a/protocol/src/main/protobuf/UserBitShared.proto 
b/protocol/src/main/protobuf/UserBitShared.proto
index cfbdbe6..03b1a0b 100644
--- a/protocol/src/main/protobuf/UserBitShared.proto
+++ b/protocol/src/main/protobuf/UserBitShared.proto
@@ -298,3 +298,23 @@ enum CoreOperatorType {
   NESTED_LOOP_JOIN = 35;
   AVRO_SUB_SCAN = 36;
 }
+
+/* Registry that contains list of jars, each jar contains its name and list of 
function signatures.
+Structure example:
+REGISTRY    -> Jar1.jar   -> upper(VARCHAR-REQUIRED)
+                          -> upper(VARCHAR-OPTIONAL)
+
+            -> Jar2.jar   -> lower(VARCHAR-REQUIRED)
+                          -> lower(VARCHAR-OPTIONAL)
+*/
+message Registry {
+  repeated Jar jar = 1;
+}
+
+/* Jar contains jar name and list of function signatures.
+ Function signature is concatenation of function name and its input 
parameters. */
+message Jar {
+  optional string name = 1;
+  repeated string function_signature = 2;
+}
+

Reply via email to