// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: substrait_extension/promql_plan.proto

package substrait_extension;

public final class PromqlPlan {
  private PromqlPlan() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  public interface EmptyMetricOrBuilder extends
      // @@protoc_insertion_point(interface_extends:substrait_extension.EmptyMetric)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Start timestamp in millisecond
     * </pre>
     *
     * <code>int64 start = 1;</code>
     * @return The start.
     */
    long getStart();

    /**
     * <pre>
     * End timestamp in millisecond
     * </pre>
     *
     * <code>int64 end = 2;</code>
     * @return The end.
     */
    long getEnd();

    /**
     * <pre>
     * Interval in millisecond
     * </pre>
     *
     * <code>int64 interval = 3;</code>
     * @return The interval.
     */
    long getInterval();
  }
  /**
   * Protobuf type {@code substrait_extension.EmptyMetric}
   */
  public static final class EmptyMetric extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:substrait_extension.EmptyMetric)
      EmptyMetricOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use EmptyMetric.newBuilder() to construct.
    private EmptyMetric(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private EmptyMetric() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new EmptyMetric();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private EmptyMetric(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 8: {

              start_ = input.readInt64();
              break;
            }
            case 16: {

              end_ = input.readInt64();
              break;
            }
            case 24: {

              interval_ = input.readInt64();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_EmptyMetric_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_EmptyMetric_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              substrait_extension.PromqlPlan.EmptyMetric.class, substrait_extension.PromqlPlan.EmptyMetric.Builder.class);
    }

    public static final int START_FIELD_NUMBER = 1;
    private long start_;
    /**
     * <pre>
     * Start timestamp in millisecond
     * </pre>
     *
     * <code>int64 start = 1;</code>
     * @return The start.
     */
    @java.lang.Override
    public long getStart() {
      return start_;
    }

    public static final int END_FIELD_NUMBER = 2;
    private long end_;
    /**
     * <pre>
     * End timestamp in millisecond
     * </pre>
     *
     * <code>int64 end = 2;</code>
     * @return The end.
     */
    @java.lang.Override
    public long getEnd() {
      return end_;
    }

    public static final int INTERVAL_FIELD_NUMBER = 3;
    private long interval_;
    /**
     * <pre>
     * Interval in millisecond
     * </pre>
     *
     * <code>int64 interval = 3;</code>
     * @return The interval.
     */
    @java.lang.Override
    public long getInterval() {
      return interval_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (start_ != 0L) {
        output.writeInt64(1, start_);
      }
      if (end_ != 0L) {
        output.writeInt64(2, end_);
      }
      if (interval_ != 0L) {
        output.writeInt64(3, interval_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (start_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, start_);
      }
      if (end_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, end_);
      }
      if (interval_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, interval_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof substrait_extension.PromqlPlan.EmptyMetric)) {
        return super.equals(obj);
      }
      substrait_extension.PromqlPlan.EmptyMetric other = (substrait_extension.PromqlPlan.EmptyMetric) obj;

      if (getStart()
          != other.getStart()) return false;
      if (getEnd()
          != other.getEnd()) return false;
      if (getInterval()
          != other.getInterval()) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + START_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getStart());
      hash = (37 * hash) + END_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getEnd());
      hash = (37 * hash) + INTERVAL_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getInterval());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static substrait_extension.PromqlPlan.EmptyMetric parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.EmptyMetric parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.EmptyMetric parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.EmptyMetric parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.EmptyMetric parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.EmptyMetric parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.EmptyMetric parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.EmptyMetric parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.EmptyMetric parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.EmptyMetric parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.EmptyMetric parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.EmptyMetric parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(substrait_extension.PromqlPlan.EmptyMetric prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code substrait_extension.EmptyMetric}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:substrait_extension.EmptyMetric)
        substrait_extension.PromqlPlan.EmptyMetricOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_EmptyMetric_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_EmptyMetric_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                substrait_extension.PromqlPlan.EmptyMetric.class, substrait_extension.PromqlPlan.EmptyMetric.Builder.class);
      }

      // Construct using substrait_extension.PromqlPlan.EmptyMetric.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        start_ = 0L;

        end_ = 0L;

        interval_ = 0L;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_EmptyMetric_descriptor;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.EmptyMetric getDefaultInstanceForType() {
        return substrait_extension.PromqlPlan.EmptyMetric.getDefaultInstance();
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.EmptyMetric build() {
        substrait_extension.PromqlPlan.EmptyMetric result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.EmptyMetric buildPartial() {
        substrait_extension.PromqlPlan.EmptyMetric result = new substrait_extension.PromqlPlan.EmptyMetric(this);
        result.start_ = start_;
        result.end_ = end_;
        result.interval_ = interval_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof substrait_extension.PromqlPlan.EmptyMetric) {
          return mergeFrom((substrait_extension.PromqlPlan.EmptyMetric)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(substrait_extension.PromqlPlan.EmptyMetric other) {
        if (other == substrait_extension.PromqlPlan.EmptyMetric.getDefaultInstance()) return this;
        if (other.getStart() != 0L) {
          setStart(other.getStart());
        }
        if (other.getEnd() != 0L) {
          setEnd(other.getEnd());
        }
        if (other.getInterval() != 0L) {
          setInterval(other.getInterval());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        substrait_extension.PromqlPlan.EmptyMetric parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (substrait_extension.PromqlPlan.EmptyMetric) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private long start_ ;
      /**
       * <pre>
       * Start timestamp in millisecond
       * </pre>
       *
       * <code>int64 start = 1;</code>
       * @return The start.
       */
      @java.lang.Override
      public long getStart() {
        return start_;
      }
      /**
       * <pre>
       * Start timestamp in millisecond
       * </pre>
       *
       * <code>int64 start = 1;</code>
       * @param value The start to set.
       * @return This builder for chaining.
       */
      public Builder setStart(long value) {
        
        start_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Start timestamp in millisecond
       * </pre>
       *
       * <code>int64 start = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearStart() {
        
        start_ = 0L;
        onChanged();
        return this;
      }

      private long end_ ;
      /**
       * <pre>
       * End timestamp in millisecond
       * </pre>
       *
       * <code>int64 end = 2;</code>
       * @return The end.
       */
      @java.lang.Override
      public long getEnd() {
        return end_;
      }
      /**
       * <pre>
       * End timestamp in millisecond
       * </pre>
       *
       * <code>int64 end = 2;</code>
       * @param value The end to set.
       * @return This builder for chaining.
       */
      public Builder setEnd(long value) {
        
        end_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * End timestamp in millisecond
       * </pre>
       *
       * <code>int64 end = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearEnd() {
        
        end_ = 0L;
        onChanged();
        return this;
      }

      private long interval_ ;
      /**
       * <pre>
       * Interval in millisecond
       * </pre>
       *
       * <code>int64 interval = 3;</code>
       * @return The interval.
       */
      @java.lang.Override
      public long getInterval() {
        return interval_;
      }
      /**
       * <pre>
       * Interval in millisecond
       * </pre>
       *
       * <code>int64 interval = 3;</code>
       * @param value The interval to set.
       * @return This builder for chaining.
       */
      public Builder setInterval(long value) {
        
        interval_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Interval in millisecond
       * </pre>
       *
       * <code>int64 interval = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearInterval() {
        
        interval_ = 0L;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:substrait_extension.EmptyMetric)
    }

    // @@protoc_insertion_point(class_scope:substrait_extension.EmptyMetric)
    private static final substrait_extension.PromqlPlan.EmptyMetric DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new substrait_extension.PromqlPlan.EmptyMetric();
    }

    public static substrait_extension.PromqlPlan.EmptyMetric getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<EmptyMetric>
        PARSER = new com.google.protobuf.AbstractParser<EmptyMetric>() {
      @java.lang.Override
      public EmptyMetric parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EmptyMetric(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<EmptyMetric> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<EmptyMetric> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public substrait_extension.PromqlPlan.EmptyMetric getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface InstantManipulateOrBuilder extends
      // @@protoc_insertion_point(interface_extends:substrait_extension.InstantManipulate)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Start timestamp in millisecond
     * </pre>
     *
     * <code>int64 start = 1;</code>
     * @return The start.
     */
    long getStart();

    /**
     * <pre>
     * End timestamp in millisecond
     * </pre>
     *
     * <code>int64 end = 2;</code>
     * @return The end.
     */
    long getEnd();

    /**
     * <pre>
     * Interval in millisecond
     * </pre>
     *
     * <code>int64 interval = 3;</code>
     * @return The interval.
     */
    long getInterval();

    /**
     * <pre>
     * Look-back delta in millisecond
     * </pre>
     *
     * <code>int64 lookback_delta = 4;</code>
     * @return The lookbackDelta.
     */
    long getLookbackDelta();

    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.InstantManipulate.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=40
     * @return The timeIndex.
     */
    @java.lang.Deprecated java.lang.String getTimeIndex();
    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.InstantManipulate.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=40
     * @return The bytes for timeIndex.
     */
    @java.lang.Deprecated com.google.protobuf.ByteString
        getTimeIndexBytes();

    /**
     * <pre>
     * [DEPRECATED] Optional field column name for validating staleness.
     * Use `field_index_idx` instead.
     * </pre>
     *
     * <code>string field_index = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.InstantManipulate.field_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=43
     * @return The fieldIndex.
     */
    @java.lang.Deprecated java.lang.String getFieldIndex();
    /**
     * <pre>
     * [DEPRECATED] Optional field column name for validating staleness.
     * Use `field_index_idx` instead.
     * </pre>
     *
     * <code>string field_index = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.InstantManipulate.field_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=43
     * @return The bytes for fieldIndex.
     */
    @java.lang.Deprecated com.google.protobuf.ByteString
        getFieldIndexBytes();

    /**
     * <pre>
     * Column index of time index column
     * </pre>
     *
     * <code>uint64 time_index_idx = 7;</code>
     * @return The timeIndexIdx.
     */
    long getTimeIndexIdx();

    /**
     * <pre>
     * Optional field column index for validating staleness
     * </pre>
     *
     * <code>uint64 field_index_idx = 8;</code>
     * @return The fieldIndexIdx.
     */
    long getFieldIndexIdx();
  }
  /**
   * Protobuf type {@code substrait_extension.InstantManipulate}
   */
  public static final class InstantManipulate extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:substrait_extension.InstantManipulate)
      InstantManipulateOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use InstantManipulate.newBuilder() to construct.
    private InstantManipulate(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private InstantManipulate() {
      timeIndex_ = "";
      fieldIndex_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new InstantManipulate();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private InstantManipulate(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 8: {

              start_ = input.readInt64();
              break;
            }
            case 16: {

              end_ = input.readInt64();
              break;
            }
            case 24: {

              interval_ = input.readInt64();
              break;
            }
            case 32: {

              lookbackDelta_ = input.readInt64();
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();

              timeIndex_ = s;
              break;
            }
            case 50: {
              java.lang.String s = input.readStringRequireUtf8();

              fieldIndex_ = s;
              break;
            }
            case 56: {

              timeIndexIdx_ = input.readUInt64();
              break;
            }
            case 64: {

              fieldIndexIdx_ = input.readUInt64();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_InstantManipulate_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_InstantManipulate_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              substrait_extension.PromqlPlan.InstantManipulate.class, substrait_extension.PromqlPlan.InstantManipulate.Builder.class);
    }

    public static final int START_FIELD_NUMBER = 1;
    private long start_;
    /**
     * <pre>
     * Start timestamp in millisecond
     * </pre>
     *
     * <code>int64 start = 1;</code>
     * @return The start.
     */
    @java.lang.Override
    public long getStart() {
      return start_;
    }

    public static final int END_FIELD_NUMBER = 2;
    private long end_;
    /**
     * <pre>
     * End timestamp in millisecond
     * </pre>
     *
     * <code>int64 end = 2;</code>
     * @return The end.
     */
    @java.lang.Override
    public long getEnd() {
      return end_;
    }

    public static final int INTERVAL_FIELD_NUMBER = 3;
    private long interval_;
    /**
     * <pre>
     * Interval in millisecond
     * </pre>
     *
     * <code>int64 interval = 3;</code>
     * @return The interval.
     */
    @java.lang.Override
    public long getInterval() {
      return interval_;
    }

    public static final int LOOKBACK_DELTA_FIELD_NUMBER = 4;
    private long lookbackDelta_;
    /**
     * <pre>
     * Look-back delta in millisecond
     * </pre>
     *
     * <code>int64 lookback_delta = 4;</code>
     * @return The lookbackDelta.
     */
    @java.lang.Override
    public long getLookbackDelta() {
      return lookbackDelta_;
    }

    public static final int TIME_INDEX_FIELD_NUMBER = 5;
    private volatile java.lang.Object timeIndex_;
    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.InstantManipulate.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=40
     * @return The timeIndex.
     */
    @java.lang.Override
    @java.lang.Deprecated public java.lang.String getTimeIndex() {
      java.lang.Object ref = timeIndex_;
      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();
        timeIndex_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.InstantManipulate.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=40
     * @return The bytes for timeIndex.
     */
    @java.lang.Override
    @java.lang.Deprecated public com.google.protobuf.ByteString
        getTimeIndexBytes() {
      java.lang.Object ref = timeIndex_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        timeIndex_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int FIELD_INDEX_FIELD_NUMBER = 6;
    private volatile java.lang.Object fieldIndex_;
    /**
     * <pre>
     * [DEPRECATED] Optional field column name for validating staleness.
     * Use `field_index_idx` instead.
     * </pre>
     *
     * <code>string field_index = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.InstantManipulate.field_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=43
     * @return The fieldIndex.
     */
    @java.lang.Override
    @java.lang.Deprecated public java.lang.String getFieldIndex() {
      java.lang.Object ref = fieldIndex_;
      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();
        fieldIndex_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * [DEPRECATED] Optional field column name for validating staleness.
     * Use `field_index_idx` instead.
     * </pre>
     *
     * <code>string field_index = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.InstantManipulate.field_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=43
     * @return The bytes for fieldIndex.
     */
    @java.lang.Override
    @java.lang.Deprecated public com.google.protobuf.ByteString
        getFieldIndexBytes() {
      java.lang.Object ref = fieldIndex_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        fieldIndex_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TIME_INDEX_IDX_FIELD_NUMBER = 7;
    private long timeIndexIdx_;
    /**
     * <pre>
     * Column index of time index column
     * </pre>
     *
     * <code>uint64 time_index_idx = 7;</code>
     * @return The timeIndexIdx.
     */
    @java.lang.Override
    public long getTimeIndexIdx() {
      return timeIndexIdx_;
    }

    public static final int FIELD_INDEX_IDX_FIELD_NUMBER = 8;
    private long fieldIndexIdx_;
    /**
     * <pre>
     * Optional field column index for validating staleness
     * </pre>
     *
     * <code>uint64 field_index_idx = 8;</code>
     * @return The fieldIndexIdx.
     */
    @java.lang.Override
    public long getFieldIndexIdx() {
      return fieldIndexIdx_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (start_ != 0L) {
        output.writeInt64(1, start_);
      }
      if (end_ != 0L) {
        output.writeInt64(2, end_);
      }
      if (interval_ != 0L) {
        output.writeInt64(3, interval_);
      }
      if (lookbackDelta_ != 0L) {
        output.writeInt64(4, lookbackDelta_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(timeIndex_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, timeIndex_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(fieldIndex_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, fieldIndex_);
      }
      if (timeIndexIdx_ != 0L) {
        output.writeUInt64(7, timeIndexIdx_);
      }
      if (fieldIndexIdx_ != 0L) {
        output.writeUInt64(8, fieldIndexIdx_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (start_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, start_);
      }
      if (end_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, end_);
      }
      if (interval_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, interval_);
      }
      if (lookbackDelta_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, lookbackDelta_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(timeIndex_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, timeIndex_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(fieldIndex_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, fieldIndex_);
      }
      if (timeIndexIdx_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(7, timeIndexIdx_);
      }
      if (fieldIndexIdx_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(8, fieldIndexIdx_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof substrait_extension.PromqlPlan.InstantManipulate)) {
        return super.equals(obj);
      }
      substrait_extension.PromqlPlan.InstantManipulate other = (substrait_extension.PromqlPlan.InstantManipulate) obj;

      if (getStart()
          != other.getStart()) return false;
      if (getEnd()
          != other.getEnd()) return false;
      if (getInterval()
          != other.getInterval()) return false;
      if (getLookbackDelta()
          != other.getLookbackDelta()) return false;
      if (!getTimeIndex()
          .equals(other.getTimeIndex())) return false;
      if (!getFieldIndex()
          .equals(other.getFieldIndex())) return false;
      if (getTimeIndexIdx()
          != other.getTimeIndexIdx()) return false;
      if (getFieldIndexIdx()
          != other.getFieldIndexIdx()) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + START_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getStart());
      hash = (37 * hash) + END_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getEnd());
      hash = (37 * hash) + INTERVAL_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getInterval());
      hash = (37 * hash) + LOOKBACK_DELTA_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getLookbackDelta());
      hash = (37 * hash) + TIME_INDEX_FIELD_NUMBER;
      hash = (53 * hash) + getTimeIndex().hashCode();
      hash = (37 * hash) + FIELD_INDEX_FIELD_NUMBER;
      hash = (53 * hash) + getFieldIndex().hashCode();
      hash = (37 * hash) + TIME_INDEX_IDX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getTimeIndexIdx());
      hash = (37 * hash) + FIELD_INDEX_IDX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getFieldIndexIdx());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static substrait_extension.PromqlPlan.InstantManipulate parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.InstantManipulate parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.InstantManipulate parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.InstantManipulate parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.InstantManipulate parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.InstantManipulate parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.InstantManipulate parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.InstantManipulate parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.InstantManipulate parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.InstantManipulate parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.InstantManipulate parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.InstantManipulate parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(substrait_extension.PromqlPlan.InstantManipulate prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code substrait_extension.InstantManipulate}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:substrait_extension.InstantManipulate)
        substrait_extension.PromqlPlan.InstantManipulateOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_InstantManipulate_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_InstantManipulate_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                substrait_extension.PromqlPlan.InstantManipulate.class, substrait_extension.PromqlPlan.InstantManipulate.Builder.class);
      }

      // Construct using substrait_extension.PromqlPlan.InstantManipulate.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        start_ = 0L;

        end_ = 0L;

        interval_ = 0L;

        lookbackDelta_ = 0L;

        timeIndex_ = "";

        fieldIndex_ = "";

        timeIndexIdx_ = 0L;

        fieldIndexIdx_ = 0L;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_InstantManipulate_descriptor;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.InstantManipulate getDefaultInstanceForType() {
        return substrait_extension.PromqlPlan.InstantManipulate.getDefaultInstance();
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.InstantManipulate build() {
        substrait_extension.PromqlPlan.InstantManipulate result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.InstantManipulate buildPartial() {
        substrait_extension.PromqlPlan.InstantManipulate result = new substrait_extension.PromqlPlan.InstantManipulate(this);
        result.start_ = start_;
        result.end_ = end_;
        result.interval_ = interval_;
        result.lookbackDelta_ = lookbackDelta_;
        result.timeIndex_ = timeIndex_;
        result.fieldIndex_ = fieldIndex_;
        result.timeIndexIdx_ = timeIndexIdx_;
        result.fieldIndexIdx_ = fieldIndexIdx_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof substrait_extension.PromqlPlan.InstantManipulate) {
          return mergeFrom((substrait_extension.PromqlPlan.InstantManipulate)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(substrait_extension.PromqlPlan.InstantManipulate other) {
        if (other == substrait_extension.PromqlPlan.InstantManipulate.getDefaultInstance()) return this;
        if (other.getStart() != 0L) {
          setStart(other.getStart());
        }
        if (other.getEnd() != 0L) {
          setEnd(other.getEnd());
        }
        if (other.getInterval() != 0L) {
          setInterval(other.getInterval());
        }
        if (other.getLookbackDelta() != 0L) {
          setLookbackDelta(other.getLookbackDelta());
        }
        if (!other.getTimeIndex().isEmpty()) {
          timeIndex_ = other.timeIndex_;
          onChanged();
        }
        if (!other.getFieldIndex().isEmpty()) {
          fieldIndex_ = other.fieldIndex_;
          onChanged();
        }
        if (other.getTimeIndexIdx() != 0L) {
          setTimeIndexIdx(other.getTimeIndexIdx());
        }
        if (other.getFieldIndexIdx() != 0L) {
          setFieldIndexIdx(other.getFieldIndexIdx());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        substrait_extension.PromqlPlan.InstantManipulate parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (substrait_extension.PromqlPlan.InstantManipulate) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private long start_ ;
      /**
       * <pre>
       * Start timestamp in millisecond
       * </pre>
       *
       * <code>int64 start = 1;</code>
       * @return The start.
       */
      @java.lang.Override
      public long getStart() {
        return start_;
      }
      /**
       * <pre>
       * Start timestamp in millisecond
       * </pre>
       *
       * <code>int64 start = 1;</code>
       * @param value The start to set.
       * @return This builder for chaining.
       */
      public Builder setStart(long value) {
        
        start_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Start timestamp in millisecond
       * </pre>
       *
       * <code>int64 start = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearStart() {
        
        start_ = 0L;
        onChanged();
        return this;
      }

      private long end_ ;
      /**
       * <pre>
       * End timestamp in millisecond
       * </pre>
       *
       * <code>int64 end = 2;</code>
       * @return The end.
       */
      @java.lang.Override
      public long getEnd() {
        return end_;
      }
      /**
       * <pre>
       * End timestamp in millisecond
       * </pre>
       *
       * <code>int64 end = 2;</code>
       * @param value The end to set.
       * @return This builder for chaining.
       */
      public Builder setEnd(long value) {
        
        end_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * End timestamp in millisecond
       * </pre>
       *
       * <code>int64 end = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearEnd() {
        
        end_ = 0L;
        onChanged();
        return this;
      }

      private long interval_ ;
      /**
       * <pre>
       * Interval in millisecond
       * </pre>
       *
       * <code>int64 interval = 3;</code>
       * @return The interval.
       */
      @java.lang.Override
      public long getInterval() {
        return interval_;
      }
      /**
       * <pre>
       * Interval in millisecond
       * </pre>
       *
       * <code>int64 interval = 3;</code>
       * @param value The interval to set.
       * @return This builder for chaining.
       */
      public Builder setInterval(long value) {
        
        interval_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Interval in millisecond
       * </pre>
       *
       * <code>int64 interval = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearInterval() {
        
        interval_ = 0L;
        onChanged();
        return this;
      }

      private long lookbackDelta_ ;
      /**
       * <pre>
       * Look-back delta in millisecond
       * </pre>
       *
       * <code>int64 lookback_delta = 4;</code>
       * @return The lookbackDelta.
       */
      @java.lang.Override
      public long getLookbackDelta() {
        return lookbackDelta_;
      }
      /**
       * <pre>
       * Look-back delta in millisecond
       * </pre>
       *
       * <code>int64 lookback_delta = 4;</code>
       * @param value The lookbackDelta to set.
       * @return This builder for chaining.
       */
      public Builder setLookbackDelta(long value) {
        
        lookbackDelta_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Look-back delta in millisecond
       * </pre>
       *
       * <code>int64 lookback_delta = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearLookbackDelta() {
        
        lookbackDelta_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object timeIndex_ = "";
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.InstantManipulate.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=40
       * @return The timeIndex.
       */
      @java.lang.Deprecated public java.lang.String getTimeIndex() {
        java.lang.Object ref = timeIndex_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          timeIndex_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.InstantManipulate.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=40
       * @return The bytes for timeIndex.
       */
      @java.lang.Deprecated public com.google.protobuf.ByteString
          getTimeIndexBytes() {
        java.lang.Object ref = timeIndex_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          timeIndex_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.InstantManipulate.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=40
       * @param value The timeIndex to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTimeIndex(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        timeIndex_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.InstantManipulate.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=40
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder clearTimeIndex() {
        
        timeIndex_ = getDefaultInstance().getTimeIndex();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.InstantManipulate.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=40
       * @param value The bytes for timeIndex to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTimeIndexBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        timeIndex_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object fieldIndex_ = "";
      /**
       * <pre>
       * [DEPRECATED] Optional field column name for validating staleness.
       * Use `field_index_idx` instead.
       * </pre>
       *
       * <code>string field_index = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.InstantManipulate.field_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=43
       * @return The fieldIndex.
       */
      @java.lang.Deprecated public java.lang.String getFieldIndex() {
        java.lang.Object ref = fieldIndex_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          fieldIndex_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Optional field column name for validating staleness.
       * Use `field_index_idx` instead.
       * </pre>
       *
       * <code>string field_index = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.InstantManipulate.field_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=43
       * @return The bytes for fieldIndex.
       */
      @java.lang.Deprecated public com.google.protobuf.ByteString
          getFieldIndexBytes() {
        java.lang.Object ref = fieldIndex_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          fieldIndex_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Optional field column name for validating staleness.
       * Use `field_index_idx` instead.
       * </pre>
       *
       * <code>string field_index = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.InstantManipulate.field_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=43
       * @param value The fieldIndex to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setFieldIndex(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        fieldIndex_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Optional field column name for validating staleness.
       * Use `field_index_idx` instead.
       * </pre>
       *
       * <code>string field_index = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.InstantManipulate.field_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=43
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder clearFieldIndex() {
        
        fieldIndex_ = getDefaultInstance().getFieldIndex();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Optional field column name for validating staleness.
       * Use `field_index_idx` instead.
       * </pre>
       *
       * <code>string field_index = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.InstantManipulate.field_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=43
       * @param value The bytes for fieldIndex to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setFieldIndexBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        fieldIndex_ = value;
        onChanged();
        return this;
      }

      private long timeIndexIdx_ ;
      /**
       * <pre>
       * Column index of time index column
       * </pre>
       *
       * <code>uint64 time_index_idx = 7;</code>
       * @return The timeIndexIdx.
       */
      @java.lang.Override
      public long getTimeIndexIdx() {
        return timeIndexIdx_;
      }
      /**
       * <pre>
       * Column index of time index column
       * </pre>
       *
       * <code>uint64 time_index_idx = 7;</code>
       * @param value The timeIndexIdx to set.
       * @return This builder for chaining.
       */
      public Builder setTimeIndexIdx(long value) {
        
        timeIndexIdx_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Column index of time index column
       * </pre>
       *
       * <code>uint64 time_index_idx = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimeIndexIdx() {
        
        timeIndexIdx_ = 0L;
        onChanged();
        return this;
      }

      private long fieldIndexIdx_ ;
      /**
       * <pre>
       * Optional field column index for validating staleness
       * </pre>
       *
       * <code>uint64 field_index_idx = 8;</code>
       * @return The fieldIndexIdx.
       */
      @java.lang.Override
      public long getFieldIndexIdx() {
        return fieldIndexIdx_;
      }
      /**
       * <pre>
       * Optional field column index for validating staleness
       * </pre>
       *
       * <code>uint64 field_index_idx = 8;</code>
       * @param value The fieldIndexIdx to set.
       * @return This builder for chaining.
       */
      public Builder setFieldIndexIdx(long value) {
        
        fieldIndexIdx_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Optional field column index for validating staleness
       * </pre>
       *
       * <code>uint64 field_index_idx = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearFieldIndexIdx() {
        
        fieldIndexIdx_ = 0L;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:substrait_extension.InstantManipulate)
    }

    // @@protoc_insertion_point(class_scope:substrait_extension.InstantManipulate)
    private static final substrait_extension.PromqlPlan.InstantManipulate DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new substrait_extension.PromqlPlan.InstantManipulate();
    }

    public static substrait_extension.PromqlPlan.InstantManipulate getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<InstantManipulate>
        PARSER = new com.google.protobuf.AbstractParser<InstantManipulate>() {
      @java.lang.Override
      public InstantManipulate parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new InstantManipulate(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<InstantManipulate> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<InstantManipulate> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public substrait_extension.PromqlPlan.InstantManipulate getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SeriesNormalizeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:substrait_extension.SeriesNormalize)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Offset in millisecond
     * </pre>
     *
     * <code>int64 offset = 1;</code>
     * @return The offset.
     */
    long getOffset();

    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 2 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesNormalize.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=55
     * @return The timeIndex.
     */
    @java.lang.Deprecated java.lang.String getTimeIndex();
    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 2 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesNormalize.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=55
     * @return The bytes for timeIndex.
     */
    @java.lang.Deprecated com.google.protobuf.ByteString
        getTimeIndexBytes();

    /**
     * <pre>
     * Whether to filter out NaN value
     * </pre>
     *
     * <code>bool filter_nan = 3;</code>
     * @return The filterNan.
     */
    boolean getFilterNan();

    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 4 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=60
     * @return A list containing the tagColumns.
     */
    @java.lang.Deprecated java.util.List<java.lang.String>
        getTagColumnsList();
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 4 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=60
     * @return The count of tagColumns.
     */
    @java.lang.Deprecated int getTagColumnsCount();
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 4 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=60
     * @param index The index of the element to return.
     * @return The tagColumns at the given index.
     */
    @java.lang.Deprecated java.lang.String getTagColumns(int index);
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 4 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=60
     * @param index The index of the value to return.
     * @return The bytes of the tagColumns at the given index.
     */
    @java.lang.Deprecated com.google.protobuf.ByteString
        getTagColumnsBytes(int index);

    /**
     * <pre>
     * Column index of time index column
     * </pre>
     *
     * <code>uint64 time_index_idx = 5;</code>
     * @return The timeIndexIdx.
     */
    long getTimeIndexIdx();

    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 6;</code>
     * @return A list containing the tagColumnIndices.
     */
    java.util.List<java.lang.Long> getTagColumnIndicesList();
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 6;</code>
     * @return The count of tagColumnIndices.
     */
    int getTagColumnIndicesCount();
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 6;</code>
     * @param index The index of the element to return.
     * @return The tagColumnIndices at the given index.
     */
    long getTagColumnIndices(int index);
  }
  /**
   * Protobuf type {@code substrait_extension.SeriesNormalize}
   */
  public static final class SeriesNormalize extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:substrait_extension.SeriesNormalize)
      SeriesNormalizeOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SeriesNormalize.newBuilder() to construct.
    private SeriesNormalize(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SeriesNormalize() {
      timeIndex_ = "";
      tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      tagColumnIndices_ = emptyLongList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new SeriesNormalize();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SeriesNormalize(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 8: {

              offset_ = input.readInt64();
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              timeIndex_ = s;
              break;
            }
            case 24: {

              filterNan_ = input.readBool();
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                tagColumns_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              tagColumns_.add(s);
              break;
            }
            case 40: {

              timeIndexIdx_ = input.readUInt64();
              break;
            }
            case 48: {
              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                tagColumnIndices_ = newLongList();
                mutable_bitField0_ |= 0x00000002;
              }
              tagColumnIndices_.addLong(input.readUInt64());
              break;
            }
            case 50: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000002) != 0) && input.getBytesUntilLimit() > 0) {
                tagColumnIndices_ = newLongList();
                mutable_bitField0_ |= 0x00000002;
              }
              while (input.getBytesUntilLimit() > 0) {
                tagColumnIndices_.addLong(input.readUInt64());
              }
              input.popLimit(limit);
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          tagColumns_ = tagColumns_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000002) != 0)) {
          tagColumnIndices_.makeImmutable(); // C
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_SeriesNormalize_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_SeriesNormalize_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              substrait_extension.PromqlPlan.SeriesNormalize.class, substrait_extension.PromqlPlan.SeriesNormalize.Builder.class);
    }

    public static final int OFFSET_FIELD_NUMBER = 1;
    private long offset_;
    /**
     * <pre>
     * Offset in millisecond
     * </pre>
     *
     * <code>int64 offset = 1;</code>
     * @return The offset.
     */
    @java.lang.Override
    public long getOffset() {
      return offset_;
    }

    public static final int TIME_INDEX_FIELD_NUMBER = 2;
    private volatile java.lang.Object timeIndex_;
    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 2 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesNormalize.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=55
     * @return The timeIndex.
     */
    @java.lang.Override
    @java.lang.Deprecated public java.lang.String getTimeIndex() {
      java.lang.Object ref = timeIndex_;
      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();
        timeIndex_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 2 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesNormalize.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=55
     * @return The bytes for timeIndex.
     */
    @java.lang.Override
    @java.lang.Deprecated public com.google.protobuf.ByteString
        getTimeIndexBytes() {
      java.lang.Object ref = timeIndex_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        timeIndex_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int FILTER_NAN_FIELD_NUMBER = 3;
    private boolean filterNan_;
    /**
     * <pre>
     * Whether to filter out NaN value
     * </pre>
     *
     * <code>bool filter_nan = 3;</code>
     * @return The filterNan.
     */
    @java.lang.Override
    public boolean getFilterNan() {
      return filterNan_;
    }

    public static final int TAG_COLUMNS_FIELD_NUMBER = 4;
    private com.google.protobuf.LazyStringList tagColumns_;
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 4 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=60
     * @return A list containing the tagColumns.
     */
    @java.lang.Deprecated public com.google.protobuf.ProtocolStringList
        getTagColumnsList() {
      return tagColumns_;
    }
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 4 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=60
     * @return The count of tagColumns.
     */
    @java.lang.Deprecated public int getTagColumnsCount() {
      return tagColumns_.size();
    }
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 4 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=60
     * @param index The index of the element to return.
     * @return The tagColumns at the given index.
     */
    @java.lang.Deprecated public java.lang.String getTagColumns(int index) {
      return tagColumns_.get(index);
    }
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 4 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=60
     * @param index The index of the value to return.
     * @return The bytes of the tagColumns at the given index.
     */
    @java.lang.Deprecated public com.google.protobuf.ByteString
        getTagColumnsBytes(int index) {
      return tagColumns_.getByteString(index);
    }

    public static final int TIME_INDEX_IDX_FIELD_NUMBER = 5;
    private long timeIndexIdx_;
    /**
     * <pre>
     * Column index of time index column
     * </pre>
     *
     * <code>uint64 time_index_idx = 5;</code>
     * @return The timeIndexIdx.
     */
    @java.lang.Override
    public long getTimeIndexIdx() {
      return timeIndexIdx_;
    }

    public static final int TAG_COLUMN_INDICES_FIELD_NUMBER = 6;
    private com.google.protobuf.Internal.LongList tagColumnIndices_;
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 6;</code>
     * @return A list containing the tagColumnIndices.
     */
    @java.lang.Override
    public java.util.List<java.lang.Long>
        getTagColumnIndicesList() {
      return tagColumnIndices_;
    }
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 6;</code>
     * @return The count of tagColumnIndices.
     */
    public int getTagColumnIndicesCount() {
      return tagColumnIndices_.size();
    }
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 6;</code>
     * @param index The index of the element to return.
     * @return The tagColumnIndices at the given index.
     */
    public long getTagColumnIndices(int index) {
      return tagColumnIndices_.getLong(index);
    }
    private int tagColumnIndicesMemoizedSerializedSize = -1;

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (offset_ != 0L) {
        output.writeInt64(1, offset_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(timeIndex_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, timeIndex_);
      }
      if (filterNan_ != false) {
        output.writeBool(3, filterNan_);
      }
      for (int i = 0; i < tagColumns_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, tagColumns_.getRaw(i));
      }
      if (timeIndexIdx_ != 0L) {
        output.writeUInt64(5, timeIndexIdx_);
      }
      if (getTagColumnIndicesList().size() > 0) {
        output.writeUInt32NoTag(50);
        output.writeUInt32NoTag(tagColumnIndicesMemoizedSerializedSize);
      }
      for (int i = 0; i < tagColumnIndices_.size(); i++) {
        output.writeUInt64NoTag(tagColumnIndices_.getLong(i));
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (offset_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, offset_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(timeIndex_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, timeIndex_);
      }
      if (filterNan_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, filterNan_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < tagColumns_.size(); i++) {
          dataSize += computeStringSizeNoTag(tagColumns_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getTagColumnsList().size();
      }
      if (timeIndexIdx_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(5, timeIndexIdx_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < tagColumnIndices_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt64SizeNoTag(tagColumnIndices_.getLong(i));
        }
        size += dataSize;
        if (!getTagColumnIndicesList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        tagColumnIndicesMemoizedSerializedSize = dataSize;
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof substrait_extension.PromqlPlan.SeriesNormalize)) {
        return super.equals(obj);
      }
      substrait_extension.PromqlPlan.SeriesNormalize other = (substrait_extension.PromqlPlan.SeriesNormalize) obj;

      if (getOffset()
          != other.getOffset()) return false;
      if (!getTimeIndex()
          .equals(other.getTimeIndex())) return false;
      if (getFilterNan()
          != other.getFilterNan()) return false;
      if (!getTagColumnsList()
          .equals(other.getTagColumnsList())) return false;
      if (getTimeIndexIdx()
          != other.getTimeIndexIdx()) return false;
      if (!getTagColumnIndicesList()
          .equals(other.getTagColumnIndicesList())) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + OFFSET_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getOffset());
      hash = (37 * hash) + TIME_INDEX_FIELD_NUMBER;
      hash = (53 * hash) + getTimeIndex().hashCode();
      hash = (37 * hash) + FILTER_NAN_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getFilterNan());
      if (getTagColumnsCount() > 0) {
        hash = (37 * hash) + TAG_COLUMNS_FIELD_NUMBER;
        hash = (53 * hash) + getTagColumnsList().hashCode();
      }
      hash = (37 * hash) + TIME_INDEX_IDX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getTimeIndexIdx());
      if (getTagColumnIndicesCount() > 0) {
        hash = (37 * hash) + TAG_COLUMN_INDICES_FIELD_NUMBER;
        hash = (53 * hash) + getTagColumnIndicesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static substrait_extension.PromqlPlan.SeriesNormalize parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.SeriesNormalize parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.SeriesNormalize parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.SeriesNormalize parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.SeriesNormalize parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.SeriesNormalize parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.SeriesNormalize parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.SeriesNormalize parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.SeriesNormalize parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.SeriesNormalize parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.SeriesNormalize parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.SeriesNormalize parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(substrait_extension.PromqlPlan.SeriesNormalize prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code substrait_extension.SeriesNormalize}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:substrait_extension.SeriesNormalize)
        substrait_extension.PromqlPlan.SeriesNormalizeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_SeriesNormalize_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_SeriesNormalize_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                substrait_extension.PromqlPlan.SeriesNormalize.class, substrait_extension.PromqlPlan.SeriesNormalize.Builder.class);
      }

      // Construct using substrait_extension.PromqlPlan.SeriesNormalize.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        offset_ = 0L;

        timeIndex_ = "";

        filterNan_ = false;

        tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        timeIndexIdx_ = 0L;

        tagColumnIndices_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_SeriesNormalize_descriptor;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.SeriesNormalize getDefaultInstanceForType() {
        return substrait_extension.PromqlPlan.SeriesNormalize.getDefaultInstance();
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.SeriesNormalize build() {
        substrait_extension.PromqlPlan.SeriesNormalize result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.SeriesNormalize buildPartial() {
        substrait_extension.PromqlPlan.SeriesNormalize result = new substrait_extension.PromqlPlan.SeriesNormalize(this);
        int from_bitField0_ = bitField0_;
        result.offset_ = offset_;
        result.timeIndex_ = timeIndex_;
        result.filterNan_ = filterNan_;
        if (((bitField0_ & 0x00000001) != 0)) {
          tagColumns_ = tagColumns_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.tagColumns_ = tagColumns_;
        result.timeIndexIdx_ = timeIndexIdx_;
        if (((bitField0_ & 0x00000002) != 0)) {
          tagColumnIndices_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.tagColumnIndices_ = tagColumnIndices_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof substrait_extension.PromqlPlan.SeriesNormalize) {
          return mergeFrom((substrait_extension.PromqlPlan.SeriesNormalize)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(substrait_extension.PromqlPlan.SeriesNormalize other) {
        if (other == substrait_extension.PromqlPlan.SeriesNormalize.getDefaultInstance()) return this;
        if (other.getOffset() != 0L) {
          setOffset(other.getOffset());
        }
        if (!other.getTimeIndex().isEmpty()) {
          timeIndex_ = other.timeIndex_;
          onChanged();
        }
        if (other.getFilterNan() != false) {
          setFilterNan(other.getFilterNan());
        }
        if (!other.tagColumns_.isEmpty()) {
          if (tagColumns_.isEmpty()) {
            tagColumns_ = other.tagColumns_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureTagColumnsIsMutable();
            tagColumns_.addAll(other.tagColumns_);
          }
          onChanged();
        }
        if (other.getTimeIndexIdx() != 0L) {
          setTimeIndexIdx(other.getTimeIndexIdx());
        }
        if (!other.tagColumnIndices_.isEmpty()) {
          if (tagColumnIndices_.isEmpty()) {
            tagColumnIndices_ = other.tagColumnIndices_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureTagColumnIndicesIsMutable();
            tagColumnIndices_.addAll(other.tagColumnIndices_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        substrait_extension.PromqlPlan.SeriesNormalize parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (substrait_extension.PromqlPlan.SeriesNormalize) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long offset_ ;
      /**
       * <pre>
       * Offset in millisecond
       * </pre>
       *
       * <code>int64 offset = 1;</code>
       * @return The offset.
       */
      @java.lang.Override
      public long getOffset() {
        return offset_;
      }
      /**
       * <pre>
       * Offset in millisecond
       * </pre>
       *
       * <code>int64 offset = 1;</code>
       * @param value The offset to set.
       * @return This builder for chaining.
       */
      public Builder setOffset(long value) {
        
        offset_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Offset in millisecond
       * </pre>
       *
       * <code>int64 offset = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearOffset() {
        
        offset_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object timeIndex_ = "";
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 2 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesNormalize.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=55
       * @return The timeIndex.
       */
      @java.lang.Deprecated public java.lang.String getTimeIndex() {
        java.lang.Object ref = timeIndex_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          timeIndex_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 2 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesNormalize.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=55
       * @return The bytes for timeIndex.
       */
      @java.lang.Deprecated public com.google.protobuf.ByteString
          getTimeIndexBytes() {
        java.lang.Object ref = timeIndex_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          timeIndex_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 2 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesNormalize.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=55
       * @param value The timeIndex to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTimeIndex(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        timeIndex_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 2 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesNormalize.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=55
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder clearTimeIndex() {
        
        timeIndex_ = getDefaultInstance().getTimeIndex();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 2 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesNormalize.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=55
       * @param value The bytes for timeIndex to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTimeIndexBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        timeIndex_ = value;
        onChanged();
        return this;
      }

      private boolean filterNan_ ;
      /**
       * <pre>
       * Whether to filter out NaN value
       * </pre>
       *
       * <code>bool filter_nan = 3;</code>
       * @return The filterNan.
       */
      @java.lang.Override
      public boolean getFilterNan() {
        return filterNan_;
      }
      /**
       * <pre>
       * Whether to filter out NaN value
       * </pre>
       *
       * <code>bool filter_nan = 3;</code>
       * @param value The filterNan to set.
       * @return This builder for chaining.
       */
      public Builder setFilterNan(boolean value) {
        
        filterNan_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether to filter out NaN value
       * </pre>
       *
       * <code>bool filter_nan = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearFilterNan() {
        
        filterNan_ = false;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureTagColumnsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          tagColumns_ = new com.google.protobuf.LazyStringArrayList(tagColumns_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 4 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=60
       * @return A list containing the tagColumns.
       */
      @java.lang.Deprecated public com.google.protobuf.ProtocolStringList
          getTagColumnsList() {
        return tagColumns_.getUnmodifiableView();
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 4 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=60
       * @return The count of tagColumns.
       */
      @java.lang.Deprecated public int getTagColumnsCount() {
        return tagColumns_.size();
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 4 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=60
       * @param index The index of the element to return.
       * @return The tagColumns at the given index.
       */
      @java.lang.Deprecated public java.lang.String getTagColumns(int index) {
        return tagColumns_.get(index);
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 4 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=60
       * @param index The index of the value to return.
       * @return The bytes of the tagColumns at the given index.
       */
      @java.lang.Deprecated public com.google.protobuf.ByteString
          getTagColumnsBytes(int index) {
        return tagColumns_.getByteString(index);
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 4 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=60
       * @param index The index to set the value at.
       * @param value The tagColumns to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTagColumns(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTagColumnsIsMutable();
        tagColumns_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 4 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=60
       * @param value The tagColumns to add.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder addTagColumns(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTagColumnsIsMutable();
        tagColumns_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 4 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=60
       * @param values The tagColumns to add.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder addAllTagColumns(
          java.lang.Iterable<java.lang.String> values) {
        ensureTagColumnsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, tagColumns_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 4 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=60
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder clearTagColumns() {
        tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 4 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesNormalize.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=60
       * @param value The bytes of the tagColumns to add.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder addTagColumnsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureTagColumnsIsMutable();
        tagColumns_.add(value);
        onChanged();
        return this;
      }

      private long timeIndexIdx_ ;
      /**
       * <pre>
       * Column index of time index column
       * </pre>
       *
       * <code>uint64 time_index_idx = 5;</code>
       * @return The timeIndexIdx.
       */
      @java.lang.Override
      public long getTimeIndexIdx() {
        return timeIndexIdx_;
      }
      /**
       * <pre>
       * Column index of time index column
       * </pre>
       *
       * <code>uint64 time_index_idx = 5;</code>
       * @param value The timeIndexIdx to set.
       * @return This builder for chaining.
       */
      public Builder setTimeIndexIdx(long value) {
        
        timeIndexIdx_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Column index of time index column
       * </pre>
       *
       * <code>uint64 time_index_idx = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimeIndexIdx() {
        
        timeIndexIdx_ = 0L;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.LongList tagColumnIndices_ = emptyLongList();
      private void ensureTagColumnIndicesIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          tagColumnIndices_ = mutableCopy(tagColumnIndices_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 6;</code>
       * @return A list containing the tagColumnIndices.
       */
      public java.util.List<java.lang.Long>
          getTagColumnIndicesList() {
        return ((bitField0_ & 0x00000002) != 0) ?
                 java.util.Collections.unmodifiableList(tagColumnIndices_) : tagColumnIndices_;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 6;</code>
       * @return The count of tagColumnIndices.
       */
      public int getTagColumnIndicesCount() {
        return tagColumnIndices_.size();
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 6;</code>
       * @param index The index of the element to return.
       * @return The tagColumnIndices at the given index.
       */
      public long getTagColumnIndices(int index) {
        return tagColumnIndices_.getLong(index);
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 6;</code>
       * @param index The index to set the value at.
       * @param value The tagColumnIndices to set.
       * @return This builder for chaining.
       */
      public Builder setTagColumnIndices(
          int index, long value) {
        ensureTagColumnIndicesIsMutable();
        tagColumnIndices_.setLong(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 6;</code>
       * @param value The tagColumnIndices to add.
       * @return This builder for chaining.
       */
      public Builder addTagColumnIndices(long value) {
        ensureTagColumnIndicesIsMutable();
        tagColumnIndices_.addLong(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 6;</code>
       * @param values The tagColumnIndices to add.
       * @return This builder for chaining.
       */
      public Builder addAllTagColumnIndices(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureTagColumnIndicesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, tagColumnIndices_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearTagColumnIndices() {
        tagColumnIndices_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:substrait_extension.SeriesNormalize)
    }

    // @@protoc_insertion_point(class_scope:substrait_extension.SeriesNormalize)
    private static final substrait_extension.PromqlPlan.SeriesNormalize DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new substrait_extension.PromqlPlan.SeriesNormalize();
    }

    public static substrait_extension.PromqlPlan.SeriesNormalize getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<SeriesNormalize>
        PARSER = new com.google.protobuf.AbstractParser<SeriesNormalize>() {
      @java.lang.Override
      public SeriesNormalize parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SeriesNormalize(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<SeriesNormalize> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SeriesNormalize> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public substrait_extension.PromqlPlan.SeriesNormalize getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SeriesDivideOrBuilder extends
      // @@protoc_insertion_point(interface_extends:substrait_extension.SeriesDivide)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 1 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=70
     * @return A list containing the tagColumns.
     */
    @java.lang.Deprecated java.util.List<java.lang.String>
        getTagColumnsList();
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 1 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=70
     * @return The count of tagColumns.
     */
    @java.lang.Deprecated int getTagColumnsCount();
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 1 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=70
     * @param index The index of the element to return.
     * @return The tagColumns at the given index.
     */
    @java.lang.Deprecated java.lang.String getTagColumns(int index);
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 1 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=70
     * @param index The index of the value to return.
     * @return The bytes of the tagColumns at the given index.
     */
    @java.lang.Deprecated com.google.protobuf.ByteString
        getTagColumnsBytes(int index);

    /**
     * <pre>
     * [DEPRECATED] Name of time index column.
     * Use `time_index_column_idx` instead.
     * </pre>
     *
     * <code>string time_index_column = 2 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesDivide.time_index_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=73
     * @return The timeIndexColumn.
     */
    @java.lang.Deprecated java.lang.String getTimeIndexColumn();
    /**
     * <pre>
     * [DEPRECATED] Name of time index column.
     * Use `time_index_column_idx` instead.
     * </pre>
     *
     * <code>string time_index_column = 2 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesDivide.time_index_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=73
     * @return The bytes for timeIndexColumn.
     */
    @java.lang.Deprecated com.google.protobuf.ByteString
        getTimeIndexColumnBytes();

    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 3;</code>
     * @return A list containing the tagColumnIndices.
     */
    java.util.List<java.lang.Long> getTagColumnIndicesList();
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 3;</code>
     * @return The count of tagColumnIndices.
     */
    int getTagColumnIndicesCount();
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 3;</code>
     * @param index The index of the element to return.
     * @return The tagColumnIndices at the given index.
     */
    long getTagColumnIndices(int index);

    /**
     * <pre>
     * Index of time index column
     * </pre>
     *
     * <code>uint64 time_index_column_idx = 4;</code>
     * @return The timeIndexColumnIdx.
     */
    long getTimeIndexColumnIdx();
  }
  /**
   * Protobuf type {@code substrait_extension.SeriesDivide}
   */
  public static final class SeriesDivide extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:substrait_extension.SeriesDivide)
      SeriesDivideOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SeriesDivide.newBuilder() to construct.
    private SeriesDivide(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SeriesDivide() {
      tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      timeIndexColumn_ = "";
      tagColumnIndices_ = emptyLongList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new SeriesDivide();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SeriesDivide(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                tagColumns_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              tagColumns_.add(s);
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              timeIndexColumn_ = s;
              break;
            }
            case 24: {
              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                tagColumnIndices_ = newLongList();
                mutable_bitField0_ |= 0x00000002;
              }
              tagColumnIndices_.addLong(input.readUInt64());
              break;
            }
            case 26: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000002) != 0) && input.getBytesUntilLimit() > 0) {
                tagColumnIndices_ = newLongList();
                mutable_bitField0_ |= 0x00000002;
              }
              while (input.getBytesUntilLimit() > 0) {
                tagColumnIndices_.addLong(input.readUInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 32: {

              timeIndexColumnIdx_ = input.readUInt64();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          tagColumns_ = tagColumns_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000002) != 0)) {
          tagColumnIndices_.makeImmutable(); // C
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_SeriesDivide_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_SeriesDivide_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              substrait_extension.PromqlPlan.SeriesDivide.class, substrait_extension.PromqlPlan.SeriesDivide.Builder.class);
    }

    public static final int TAG_COLUMNS_FIELD_NUMBER = 1;
    private com.google.protobuf.LazyStringList tagColumns_;
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 1 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=70
     * @return A list containing the tagColumns.
     */
    @java.lang.Deprecated public com.google.protobuf.ProtocolStringList
        getTagColumnsList() {
      return tagColumns_;
    }
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 1 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=70
     * @return The count of tagColumns.
     */
    @java.lang.Deprecated public int getTagColumnsCount() {
      return tagColumns_.size();
    }
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 1 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=70
     * @param index The index of the element to return.
     * @return The tagColumns at the given index.
     */
    @java.lang.Deprecated public java.lang.String getTagColumns(int index) {
      return tagColumns_.get(index);
    }
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 1 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=70
     * @param index The index of the value to return.
     * @return The bytes of the tagColumns at the given index.
     */
    @java.lang.Deprecated public com.google.protobuf.ByteString
        getTagColumnsBytes(int index) {
      return tagColumns_.getByteString(index);
    }

    public static final int TIME_INDEX_COLUMN_FIELD_NUMBER = 2;
    private volatile java.lang.Object timeIndexColumn_;
    /**
     * <pre>
     * [DEPRECATED] Name of time index column.
     * Use `time_index_column_idx` instead.
     * </pre>
     *
     * <code>string time_index_column = 2 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesDivide.time_index_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=73
     * @return The timeIndexColumn.
     */
    @java.lang.Override
    @java.lang.Deprecated public java.lang.String getTimeIndexColumn() {
      java.lang.Object ref = timeIndexColumn_;
      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();
        timeIndexColumn_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * [DEPRECATED] Name of time index column.
     * Use `time_index_column_idx` instead.
     * </pre>
     *
     * <code>string time_index_column = 2 [deprecated = true];</code>
     * @deprecated substrait_extension.SeriesDivide.time_index_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=73
     * @return The bytes for timeIndexColumn.
     */
    @java.lang.Override
    @java.lang.Deprecated public com.google.protobuf.ByteString
        getTimeIndexColumnBytes() {
      java.lang.Object ref = timeIndexColumn_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        timeIndexColumn_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TAG_COLUMN_INDICES_FIELD_NUMBER = 3;
    private com.google.protobuf.Internal.LongList tagColumnIndices_;
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 3;</code>
     * @return A list containing the tagColumnIndices.
     */
    @java.lang.Override
    public java.util.List<java.lang.Long>
        getTagColumnIndicesList() {
      return tagColumnIndices_;
    }
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 3;</code>
     * @return The count of tagColumnIndices.
     */
    public int getTagColumnIndicesCount() {
      return tagColumnIndices_.size();
    }
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 3;</code>
     * @param index The index of the element to return.
     * @return The tagColumnIndices at the given index.
     */
    public long getTagColumnIndices(int index) {
      return tagColumnIndices_.getLong(index);
    }
    private int tagColumnIndicesMemoizedSerializedSize = -1;

    public static final int TIME_INDEX_COLUMN_IDX_FIELD_NUMBER = 4;
    private long timeIndexColumnIdx_;
    /**
     * <pre>
     * Index of time index column
     * </pre>
     *
     * <code>uint64 time_index_column_idx = 4;</code>
     * @return The timeIndexColumnIdx.
     */
    @java.lang.Override
    public long getTimeIndexColumnIdx() {
      return timeIndexColumnIdx_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < tagColumns_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, tagColumns_.getRaw(i));
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(timeIndexColumn_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, timeIndexColumn_);
      }
      if (getTagColumnIndicesList().size() > 0) {
        output.writeUInt32NoTag(26);
        output.writeUInt32NoTag(tagColumnIndicesMemoizedSerializedSize);
      }
      for (int i = 0; i < tagColumnIndices_.size(); i++) {
        output.writeUInt64NoTag(tagColumnIndices_.getLong(i));
      }
      if (timeIndexColumnIdx_ != 0L) {
        output.writeUInt64(4, timeIndexColumnIdx_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < tagColumns_.size(); i++) {
          dataSize += computeStringSizeNoTag(tagColumns_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getTagColumnsList().size();
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(timeIndexColumn_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, timeIndexColumn_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < tagColumnIndices_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt64SizeNoTag(tagColumnIndices_.getLong(i));
        }
        size += dataSize;
        if (!getTagColumnIndicesList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        tagColumnIndicesMemoizedSerializedSize = dataSize;
      }
      if (timeIndexColumnIdx_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(4, timeIndexColumnIdx_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof substrait_extension.PromqlPlan.SeriesDivide)) {
        return super.equals(obj);
      }
      substrait_extension.PromqlPlan.SeriesDivide other = (substrait_extension.PromqlPlan.SeriesDivide) obj;

      if (!getTagColumnsList()
          .equals(other.getTagColumnsList())) return false;
      if (!getTimeIndexColumn()
          .equals(other.getTimeIndexColumn())) return false;
      if (!getTagColumnIndicesList()
          .equals(other.getTagColumnIndicesList())) return false;
      if (getTimeIndexColumnIdx()
          != other.getTimeIndexColumnIdx()) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getTagColumnsCount() > 0) {
        hash = (37 * hash) + TAG_COLUMNS_FIELD_NUMBER;
        hash = (53 * hash) + getTagColumnsList().hashCode();
      }
      hash = (37 * hash) + TIME_INDEX_COLUMN_FIELD_NUMBER;
      hash = (53 * hash) + getTimeIndexColumn().hashCode();
      if (getTagColumnIndicesCount() > 0) {
        hash = (37 * hash) + TAG_COLUMN_INDICES_FIELD_NUMBER;
        hash = (53 * hash) + getTagColumnIndicesList().hashCode();
      }
      hash = (37 * hash) + TIME_INDEX_COLUMN_IDX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getTimeIndexColumnIdx());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static substrait_extension.PromqlPlan.SeriesDivide parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.SeriesDivide parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.SeriesDivide parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.SeriesDivide parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.SeriesDivide parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.SeriesDivide parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.SeriesDivide parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.SeriesDivide parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.SeriesDivide parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.SeriesDivide parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.SeriesDivide parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.SeriesDivide parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(substrait_extension.PromqlPlan.SeriesDivide prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code substrait_extension.SeriesDivide}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:substrait_extension.SeriesDivide)
        substrait_extension.PromqlPlan.SeriesDivideOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_SeriesDivide_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_SeriesDivide_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                substrait_extension.PromqlPlan.SeriesDivide.class, substrait_extension.PromqlPlan.SeriesDivide.Builder.class);
      }

      // Construct using substrait_extension.PromqlPlan.SeriesDivide.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        timeIndexColumn_ = "";

        tagColumnIndices_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000002);
        timeIndexColumnIdx_ = 0L;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_SeriesDivide_descriptor;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.SeriesDivide getDefaultInstanceForType() {
        return substrait_extension.PromqlPlan.SeriesDivide.getDefaultInstance();
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.SeriesDivide build() {
        substrait_extension.PromqlPlan.SeriesDivide result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.SeriesDivide buildPartial() {
        substrait_extension.PromqlPlan.SeriesDivide result = new substrait_extension.PromqlPlan.SeriesDivide(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) != 0)) {
          tagColumns_ = tagColumns_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.tagColumns_ = tagColumns_;
        result.timeIndexColumn_ = timeIndexColumn_;
        if (((bitField0_ & 0x00000002) != 0)) {
          tagColumnIndices_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.tagColumnIndices_ = tagColumnIndices_;
        result.timeIndexColumnIdx_ = timeIndexColumnIdx_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof substrait_extension.PromqlPlan.SeriesDivide) {
          return mergeFrom((substrait_extension.PromqlPlan.SeriesDivide)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(substrait_extension.PromqlPlan.SeriesDivide other) {
        if (other == substrait_extension.PromqlPlan.SeriesDivide.getDefaultInstance()) return this;
        if (!other.tagColumns_.isEmpty()) {
          if (tagColumns_.isEmpty()) {
            tagColumns_ = other.tagColumns_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureTagColumnsIsMutable();
            tagColumns_.addAll(other.tagColumns_);
          }
          onChanged();
        }
        if (!other.getTimeIndexColumn().isEmpty()) {
          timeIndexColumn_ = other.timeIndexColumn_;
          onChanged();
        }
        if (!other.tagColumnIndices_.isEmpty()) {
          if (tagColumnIndices_.isEmpty()) {
            tagColumnIndices_ = other.tagColumnIndices_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureTagColumnIndicesIsMutable();
            tagColumnIndices_.addAll(other.tagColumnIndices_);
          }
          onChanged();
        }
        if (other.getTimeIndexColumnIdx() != 0L) {
          setTimeIndexColumnIdx(other.getTimeIndexColumnIdx());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        substrait_extension.PromqlPlan.SeriesDivide parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (substrait_extension.PromqlPlan.SeriesDivide) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.LazyStringList tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureTagColumnsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          tagColumns_ = new com.google.protobuf.LazyStringArrayList(tagColumns_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 1 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=70
       * @return A list containing the tagColumns.
       */
      @java.lang.Deprecated public com.google.protobuf.ProtocolStringList
          getTagColumnsList() {
        return tagColumns_.getUnmodifiableView();
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 1 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=70
       * @return The count of tagColumns.
       */
      @java.lang.Deprecated public int getTagColumnsCount() {
        return tagColumns_.size();
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 1 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=70
       * @param index The index of the element to return.
       * @return The tagColumns at the given index.
       */
      @java.lang.Deprecated public java.lang.String getTagColumns(int index) {
        return tagColumns_.get(index);
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 1 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=70
       * @param index The index of the value to return.
       * @return The bytes of the tagColumns at the given index.
       */
      @java.lang.Deprecated public com.google.protobuf.ByteString
          getTagColumnsBytes(int index) {
        return tagColumns_.getByteString(index);
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 1 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=70
       * @param index The index to set the value at.
       * @param value The tagColumns to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTagColumns(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTagColumnsIsMutable();
        tagColumns_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 1 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=70
       * @param value The tagColumns to add.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder addTagColumns(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTagColumnsIsMutable();
        tagColumns_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 1 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=70
       * @param values The tagColumns to add.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder addAllTagColumns(
          java.lang.Iterable<java.lang.String> values) {
        ensureTagColumnsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, tagColumns_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 1 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=70
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder clearTagColumns() {
        tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 1 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesDivide.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=70
       * @param value The bytes of the tagColumns to add.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder addTagColumnsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureTagColumnsIsMutable();
        tagColumns_.add(value);
        onChanged();
        return this;
      }

      private java.lang.Object timeIndexColumn_ = "";
      /**
       * <pre>
       * [DEPRECATED] Name of time index column.
       * Use `time_index_column_idx` instead.
       * </pre>
       *
       * <code>string time_index_column = 2 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesDivide.time_index_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=73
       * @return The timeIndexColumn.
       */
      @java.lang.Deprecated public java.lang.String getTimeIndexColumn() {
        java.lang.Object ref = timeIndexColumn_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          timeIndexColumn_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Name of time index column.
       * Use `time_index_column_idx` instead.
       * </pre>
       *
       * <code>string time_index_column = 2 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesDivide.time_index_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=73
       * @return The bytes for timeIndexColumn.
       */
      @java.lang.Deprecated public com.google.protobuf.ByteString
          getTimeIndexColumnBytes() {
        java.lang.Object ref = timeIndexColumn_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          timeIndexColumn_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Name of time index column.
       * Use `time_index_column_idx` instead.
       * </pre>
       *
       * <code>string time_index_column = 2 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesDivide.time_index_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=73
       * @param value The timeIndexColumn to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTimeIndexColumn(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        timeIndexColumn_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Name of time index column.
       * Use `time_index_column_idx` instead.
       * </pre>
       *
       * <code>string time_index_column = 2 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesDivide.time_index_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=73
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder clearTimeIndexColumn() {
        
        timeIndexColumn_ = getDefaultInstance().getTimeIndexColumn();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Name of time index column.
       * Use `time_index_column_idx` instead.
       * </pre>
       *
       * <code>string time_index_column = 2 [deprecated = true];</code>
       * @deprecated substrait_extension.SeriesDivide.time_index_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=73
       * @param value The bytes for timeIndexColumn to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTimeIndexColumnBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        timeIndexColumn_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.LongList tagColumnIndices_ = emptyLongList();
      private void ensureTagColumnIndicesIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          tagColumnIndices_ = mutableCopy(tagColumnIndices_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 3;</code>
       * @return A list containing the tagColumnIndices.
       */
      public java.util.List<java.lang.Long>
          getTagColumnIndicesList() {
        return ((bitField0_ & 0x00000002) != 0) ?
                 java.util.Collections.unmodifiableList(tagColumnIndices_) : tagColumnIndices_;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 3;</code>
       * @return The count of tagColumnIndices.
       */
      public int getTagColumnIndicesCount() {
        return tagColumnIndices_.size();
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 3;</code>
       * @param index The index of the element to return.
       * @return The tagColumnIndices at the given index.
       */
      public long getTagColumnIndices(int index) {
        return tagColumnIndices_.getLong(index);
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 3;</code>
       * @param index The index to set the value at.
       * @param value The tagColumnIndices to set.
       * @return This builder for chaining.
       */
      public Builder setTagColumnIndices(
          int index, long value) {
        ensureTagColumnIndicesIsMutable();
        tagColumnIndices_.setLong(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 3;</code>
       * @param value The tagColumnIndices to add.
       * @return This builder for chaining.
       */
      public Builder addTagColumnIndices(long value) {
        ensureTagColumnIndicesIsMutable();
        tagColumnIndices_.addLong(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 3;</code>
       * @param values The tagColumnIndices to add.
       * @return This builder for chaining.
       */
      public Builder addAllTagColumnIndices(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureTagColumnIndicesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, tagColumnIndices_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearTagColumnIndices() {
        tagColumnIndices_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }

      private long timeIndexColumnIdx_ ;
      /**
       * <pre>
       * Index of time index column
       * </pre>
       *
       * <code>uint64 time_index_column_idx = 4;</code>
       * @return The timeIndexColumnIdx.
       */
      @java.lang.Override
      public long getTimeIndexColumnIdx() {
        return timeIndexColumnIdx_;
      }
      /**
       * <pre>
       * Index of time index column
       * </pre>
       *
       * <code>uint64 time_index_column_idx = 4;</code>
       * @param value The timeIndexColumnIdx to set.
       * @return This builder for chaining.
       */
      public Builder setTimeIndexColumnIdx(long value) {
        
        timeIndexColumnIdx_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Index of time index column
       * </pre>
       *
       * <code>uint64 time_index_column_idx = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimeIndexColumnIdx() {
        
        timeIndexColumnIdx_ = 0L;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:substrait_extension.SeriesDivide)
    }

    // @@protoc_insertion_point(class_scope:substrait_extension.SeriesDivide)
    private static final substrait_extension.PromqlPlan.SeriesDivide DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new substrait_extension.PromqlPlan.SeriesDivide();
    }

    public static substrait_extension.PromqlPlan.SeriesDivide getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<SeriesDivide>
        PARSER = new com.google.protobuf.AbstractParser<SeriesDivide>() {
      @java.lang.Override
      public SeriesDivide parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SeriesDivide(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<SeriesDivide> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SeriesDivide> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public substrait_extension.PromqlPlan.SeriesDivide getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RangeManipulateOrBuilder extends
      // @@protoc_insertion_point(interface_extends:substrait_extension.RangeManipulate)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Start timestamp in millisecond
     * </pre>
     *
     * <code>int64 start = 1;</code>
     * @return The start.
     */
    long getStart();

    /**
     * <pre>
     * End timestamp in millisecond
     * </pre>
     *
     * <code>int64 end = 2;</code>
     * @return The end.
     */
    long getEnd();

    /**
     * <pre>
     * Interval in millisecond
     * </pre>
     *
     * <code>int64 interval = 3;</code>
     * @return The interval.
     */
    long getInterval();

    /**
     * <pre>
     * Range in millisecond
     * </pre>
     *
     * <code>int64 range = 4;</code>
     * @return The range.
     */
    long getRange();

    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.RangeManipulate.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=91
     * @return The timeIndex.
     */
    @java.lang.Deprecated java.lang.String getTimeIndex();
    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.RangeManipulate.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=91
     * @return The bytes for timeIndex.
     */
    @java.lang.Deprecated com.google.protobuf.ByteString
        getTimeIndexBytes();

    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=94
     * @return A list containing the tagColumns.
     */
    @java.lang.Deprecated java.util.List<java.lang.String>
        getTagColumnsList();
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=94
     * @return The count of tagColumns.
     */
    @java.lang.Deprecated int getTagColumnsCount();
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=94
     * @param index The index of the element to return.
     * @return The tagColumns at the given index.
     */
    @java.lang.Deprecated java.lang.String getTagColumns(int index);
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=94
     * @param index The index of the value to return.
     * @return The bytes of the tagColumns at the given index.
     */
    @java.lang.Deprecated com.google.protobuf.ByteString
        getTagColumnsBytes(int index);

    /**
     * <pre>
     * Column index of time index column
     * </pre>
     *
     * <code>uint64 time_index_idx = 7;</code>
     * @return The timeIndexIdx.
     */
    long getTimeIndexIdx();

    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 8;</code>
     * @return A list containing the tagColumnIndices.
     */
    java.util.List<java.lang.Long> getTagColumnIndicesList();
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 8;</code>
     * @return The count of tagColumnIndices.
     */
    int getTagColumnIndicesCount();
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 8;</code>
     * @param index The index of the element to return.
     * @return The tagColumnIndices at the given index.
     */
    long getTagColumnIndices(int index);
  }
  /**
   * Protobuf type {@code substrait_extension.RangeManipulate}
   */
  public static final class RangeManipulate extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:substrait_extension.RangeManipulate)
      RangeManipulateOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RangeManipulate.newBuilder() to construct.
    private RangeManipulate(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RangeManipulate() {
      timeIndex_ = "";
      tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      tagColumnIndices_ = emptyLongList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new RangeManipulate();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RangeManipulate(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 8: {

              start_ = input.readInt64();
              break;
            }
            case 16: {

              end_ = input.readInt64();
              break;
            }
            case 24: {

              interval_ = input.readInt64();
              break;
            }
            case 32: {

              range_ = input.readInt64();
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();

              timeIndex_ = s;
              break;
            }
            case 50: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                tagColumns_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              tagColumns_.add(s);
              break;
            }
            case 56: {

              timeIndexIdx_ = input.readUInt64();
              break;
            }
            case 64: {
              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                tagColumnIndices_ = newLongList();
                mutable_bitField0_ |= 0x00000002;
              }
              tagColumnIndices_.addLong(input.readUInt64());
              break;
            }
            case 66: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000002) != 0) && input.getBytesUntilLimit() > 0) {
                tagColumnIndices_ = newLongList();
                mutable_bitField0_ |= 0x00000002;
              }
              while (input.getBytesUntilLimit() > 0) {
                tagColumnIndices_.addLong(input.readUInt64());
              }
              input.popLimit(limit);
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          tagColumns_ = tagColumns_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000002) != 0)) {
          tagColumnIndices_.makeImmutable(); // C
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_RangeManipulate_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_RangeManipulate_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              substrait_extension.PromqlPlan.RangeManipulate.class, substrait_extension.PromqlPlan.RangeManipulate.Builder.class);
    }

    public static final int START_FIELD_NUMBER = 1;
    private long start_;
    /**
     * <pre>
     * Start timestamp in millisecond
     * </pre>
     *
     * <code>int64 start = 1;</code>
     * @return The start.
     */
    @java.lang.Override
    public long getStart() {
      return start_;
    }

    public static final int END_FIELD_NUMBER = 2;
    private long end_;
    /**
     * <pre>
     * End timestamp in millisecond
     * </pre>
     *
     * <code>int64 end = 2;</code>
     * @return The end.
     */
    @java.lang.Override
    public long getEnd() {
      return end_;
    }

    public static final int INTERVAL_FIELD_NUMBER = 3;
    private long interval_;
    /**
     * <pre>
     * Interval in millisecond
     * </pre>
     *
     * <code>int64 interval = 3;</code>
     * @return The interval.
     */
    @java.lang.Override
    public long getInterval() {
      return interval_;
    }

    public static final int RANGE_FIELD_NUMBER = 4;
    private long range_;
    /**
     * <pre>
     * Range in millisecond
     * </pre>
     *
     * <code>int64 range = 4;</code>
     * @return The range.
     */
    @java.lang.Override
    public long getRange() {
      return range_;
    }

    public static final int TIME_INDEX_FIELD_NUMBER = 5;
    private volatile java.lang.Object timeIndex_;
    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.RangeManipulate.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=91
     * @return The timeIndex.
     */
    @java.lang.Override
    @java.lang.Deprecated public java.lang.String getTimeIndex() {
      java.lang.Object ref = timeIndex_;
      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();
        timeIndex_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.RangeManipulate.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=91
     * @return The bytes for timeIndex.
     */
    @java.lang.Override
    @java.lang.Deprecated public com.google.protobuf.ByteString
        getTimeIndexBytes() {
      java.lang.Object ref = timeIndex_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        timeIndex_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TAG_COLUMNS_FIELD_NUMBER = 6;
    private com.google.protobuf.LazyStringList tagColumns_;
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=94
     * @return A list containing the tagColumns.
     */
    @java.lang.Deprecated public com.google.protobuf.ProtocolStringList
        getTagColumnsList() {
      return tagColumns_;
    }
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=94
     * @return The count of tagColumns.
     */
    @java.lang.Deprecated public int getTagColumnsCount() {
      return tagColumns_.size();
    }
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=94
     * @param index The index of the element to return.
     * @return The tagColumns at the given index.
     */
    @java.lang.Deprecated public java.lang.String getTagColumns(int index) {
      return tagColumns_.get(index);
    }
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=94
     * @param index The index of the value to return.
     * @return The bytes of the tagColumns at the given index.
     */
    @java.lang.Deprecated public com.google.protobuf.ByteString
        getTagColumnsBytes(int index) {
      return tagColumns_.getByteString(index);
    }

    public static final int TIME_INDEX_IDX_FIELD_NUMBER = 7;
    private long timeIndexIdx_;
    /**
     * <pre>
     * Column index of time index column
     * </pre>
     *
     * <code>uint64 time_index_idx = 7;</code>
     * @return The timeIndexIdx.
     */
    @java.lang.Override
    public long getTimeIndexIdx() {
      return timeIndexIdx_;
    }

    public static final int TAG_COLUMN_INDICES_FIELD_NUMBER = 8;
    private com.google.protobuf.Internal.LongList tagColumnIndices_;
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 8;</code>
     * @return A list containing the tagColumnIndices.
     */
    @java.lang.Override
    public java.util.List<java.lang.Long>
        getTagColumnIndicesList() {
      return tagColumnIndices_;
    }
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 8;</code>
     * @return The count of tagColumnIndices.
     */
    public int getTagColumnIndicesCount() {
      return tagColumnIndices_.size();
    }
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 8;</code>
     * @param index The index of the element to return.
     * @return The tagColumnIndices at the given index.
     */
    public long getTagColumnIndices(int index) {
      return tagColumnIndices_.getLong(index);
    }
    private int tagColumnIndicesMemoizedSerializedSize = -1;

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (start_ != 0L) {
        output.writeInt64(1, start_);
      }
      if (end_ != 0L) {
        output.writeInt64(2, end_);
      }
      if (interval_ != 0L) {
        output.writeInt64(3, interval_);
      }
      if (range_ != 0L) {
        output.writeInt64(4, range_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(timeIndex_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, timeIndex_);
      }
      for (int i = 0; i < tagColumns_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, tagColumns_.getRaw(i));
      }
      if (timeIndexIdx_ != 0L) {
        output.writeUInt64(7, timeIndexIdx_);
      }
      if (getTagColumnIndicesList().size() > 0) {
        output.writeUInt32NoTag(66);
        output.writeUInt32NoTag(tagColumnIndicesMemoizedSerializedSize);
      }
      for (int i = 0; i < tagColumnIndices_.size(); i++) {
        output.writeUInt64NoTag(tagColumnIndices_.getLong(i));
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (start_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, start_);
      }
      if (end_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, end_);
      }
      if (interval_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, interval_);
      }
      if (range_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, range_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(timeIndex_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, timeIndex_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < tagColumns_.size(); i++) {
          dataSize += computeStringSizeNoTag(tagColumns_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getTagColumnsList().size();
      }
      if (timeIndexIdx_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(7, timeIndexIdx_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < tagColumnIndices_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt64SizeNoTag(tagColumnIndices_.getLong(i));
        }
        size += dataSize;
        if (!getTagColumnIndicesList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        tagColumnIndicesMemoizedSerializedSize = dataSize;
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof substrait_extension.PromqlPlan.RangeManipulate)) {
        return super.equals(obj);
      }
      substrait_extension.PromqlPlan.RangeManipulate other = (substrait_extension.PromqlPlan.RangeManipulate) obj;

      if (getStart()
          != other.getStart()) return false;
      if (getEnd()
          != other.getEnd()) return false;
      if (getInterval()
          != other.getInterval()) return false;
      if (getRange()
          != other.getRange()) return false;
      if (!getTimeIndex()
          .equals(other.getTimeIndex())) return false;
      if (!getTagColumnsList()
          .equals(other.getTagColumnsList())) return false;
      if (getTimeIndexIdx()
          != other.getTimeIndexIdx()) return false;
      if (!getTagColumnIndicesList()
          .equals(other.getTagColumnIndicesList())) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + START_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getStart());
      hash = (37 * hash) + END_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getEnd());
      hash = (37 * hash) + INTERVAL_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getInterval());
      hash = (37 * hash) + RANGE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getRange());
      hash = (37 * hash) + TIME_INDEX_FIELD_NUMBER;
      hash = (53 * hash) + getTimeIndex().hashCode();
      if (getTagColumnsCount() > 0) {
        hash = (37 * hash) + TAG_COLUMNS_FIELD_NUMBER;
        hash = (53 * hash) + getTagColumnsList().hashCode();
      }
      hash = (37 * hash) + TIME_INDEX_IDX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getTimeIndexIdx());
      if (getTagColumnIndicesCount() > 0) {
        hash = (37 * hash) + TAG_COLUMN_INDICES_FIELD_NUMBER;
        hash = (53 * hash) + getTagColumnIndicesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static substrait_extension.PromqlPlan.RangeManipulate parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.RangeManipulate parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.RangeManipulate parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.RangeManipulate parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.RangeManipulate parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.RangeManipulate parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.RangeManipulate parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.RangeManipulate parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.RangeManipulate parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.RangeManipulate parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.RangeManipulate parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.RangeManipulate parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(substrait_extension.PromqlPlan.RangeManipulate prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code substrait_extension.RangeManipulate}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:substrait_extension.RangeManipulate)
        substrait_extension.PromqlPlan.RangeManipulateOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_RangeManipulate_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_RangeManipulate_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                substrait_extension.PromqlPlan.RangeManipulate.class, substrait_extension.PromqlPlan.RangeManipulate.Builder.class);
      }

      // Construct using substrait_extension.PromqlPlan.RangeManipulate.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        start_ = 0L;

        end_ = 0L;

        interval_ = 0L;

        range_ = 0L;

        timeIndex_ = "";

        tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        timeIndexIdx_ = 0L;

        tagColumnIndices_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_RangeManipulate_descriptor;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.RangeManipulate getDefaultInstanceForType() {
        return substrait_extension.PromqlPlan.RangeManipulate.getDefaultInstance();
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.RangeManipulate build() {
        substrait_extension.PromqlPlan.RangeManipulate result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.RangeManipulate buildPartial() {
        substrait_extension.PromqlPlan.RangeManipulate result = new substrait_extension.PromqlPlan.RangeManipulate(this);
        int from_bitField0_ = bitField0_;
        result.start_ = start_;
        result.end_ = end_;
        result.interval_ = interval_;
        result.range_ = range_;
        result.timeIndex_ = timeIndex_;
        if (((bitField0_ & 0x00000001) != 0)) {
          tagColumns_ = tagColumns_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.tagColumns_ = tagColumns_;
        result.timeIndexIdx_ = timeIndexIdx_;
        if (((bitField0_ & 0x00000002) != 0)) {
          tagColumnIndices_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.tagColumnIndices_ = tagColumnIndices_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof substrait_extension.PromqlPlan.RangeManipulate) {
          return mergeFrom((substrait_extension.PromqlPlan.RangeManipulate)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(substrait_extension.PromqlPlan.RangeManipulate other) {
        if (other == substrait_extension.PromqlPlan.RangeManipulate.getDefaultInstance()) return this;
        if (other.getStart() != 0L) {
          setStart(other.getStart());
        }
        if (other.getEnd() != 0L) {
          setEnd(other.getEnd());
        }
        if (other.getInterval() != 0L) {
          setInterval(other.getInterval());
        }
        if (other.getRange() != 0L) {
          setRange(other.getRange());
        }
        if (!other.getTimeIndex().isEmpty()) {
          timeIndex_ = other.timeIndex_;
          onChanged();
        }
        if (!other.tagColumns_.isEmpty()) {
          if (tagColumns_.isEmpty()) {
            tagColumns_ = other.tagColumns_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureTagColumnsIsMutable();
            tagColumns_.addAll(other.tagColumns_);
          }
          onChanged();
        }
        if (other.getTimeIndexIdx() != 0L) {
          setTimeIndexIdx(other.getTimeIndexIdx());
        }
        if (!other.tagColumnIndices_.isEmpty()) {
          if (tagColumnIndices_.isEmpty()) {
            tagColumnIndices_ = other.tagColumnIndices_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureTagColumnIndicesIsMutable();
            tagColumnIndices_.addAll(other.tagColumnIndices_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        substrait_extension.PromqlPlan.RangeManipulate parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (substrait_extension.PromqlPlan.RangeManipulate) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long start_ ;
      /**
       * <pre>
       * Start timestamp in millisecond
       * </pre>
       *
       * <code>int64 start = 1;</code>
       * @return The start.
       */
      @java.lang.Override
      public long getStart() {
        return start_;
      }
      /**
       * <pre>
       * Start timestamp in millisecond
       * </pre>
       *
       * <code>int64 start = 1;</code>
       * @param value The start to set.
       * @return This builder for chaining.
       */
      public Builder setStart(long value) {
        
        start_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Start timestamp in millisecond
       * </pre>
       *
       * <code>int64 start = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearStart() {
        
        start_ = 0L;
        onChanged();
        return this;
      }

      private long end_ ;
      /**
       * <pre>
       * End timestamp in millisecond
       * </pre>
       *
       * <code>int64 end = 2;</code>
       * @return The end.
       */
      @java.lang.Override
      public long getEnd() {
        return end_;
      }
      /**
       * <pre>
       * End timestamp in millisecond
       * </pre>
       *
       * <code>int64 end = 2;</code>
       * @param value The end to set.
       * @return This builder for chaining.
       */
      public Builder setEnd(long value) {
        
        end_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * End timestamp in millisecond
       * </pre>
       *
       * <code>int64 end = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearEnd() {
        
        end_ = 0L;
        onChanged();
        return this;
      }

      private long interval_ ;
      /**
       * <pre>
       * Interval in millisecond
       * </pre>
       *
       * <code>int64 interval = 3;</code>
       * @return The interval.
       */
      @java.lang.Override
      public long getInterval() {
        return interval_;
      }
      /**
       * <pre>
       * Interval in millisecond
       * </pre>
       *
       * <code>int64 interval = 3;</code>
       * @param value The interval to set.
       * @return This builder for chaining.
       */
      public Builder setInterval(long value) {
        
        interval_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Interval in millisecond
       * </pre>
       *
       * <code>int64 interval = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearInterval() {
        
        interval_ = 0L;
        onChanged();
        return this;
      }

      private long range_ ;
      /**
       * <pre>
       * Range in millisecond
       * </pre>
       *
       * <code>int64 range = 4;</code>
       * @return The range.
       */
      @java.lang.Override
      public long getRange() {
        return range_;
      }
      /**
       * <pre>
       * Range in millisecond
       * </pre>
       *
       * <code>int64 range = 4;</code>
       * @param value The range to set.
       * @return This builder for chaining.
       */
      public Builder setRange(long value) {
        
        range_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Range in millisecond
       * </pre>
       *
       * <code>int64 range = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearRange() {
        
        range_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object timeIndex_ = "";
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.RangeManipulate.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=91
       * @return The timeIndex.
       */
      @java.lang.Deprecated public java.lang.String getTimeIndex() {
        java.lang.Object ref = timeIndex_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          timeIndex_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.RangeManipulate.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=91
       * @return The bytes for timeIndex.
       */
      @java.lang.Deprecated public com.google.protobuf.ByteString
          getTimeIndexBytes() {
        java.lang.Object ref = timeIndex_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          timeIndex_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.RangeManipulate.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=91
       * @param value The timeIndex to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTimeIndex(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        timeIndex_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.RangeManipulate.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=91
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder clearTimeIndex() {
        
        timeIndex_ = getDefaultInstance().getTimeIndex();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.RangeManipulate.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=91
       * @param value The bytes for timeIndex to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTimeIndexBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        timeIndex_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureTagColumnsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          tagColumns_ = new com.google.protobuf.LazyStringArrayList(tagColumns_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=94
       * @return A list containing the tagColumns.
       */
      @java.lang.Deprecated public com.google.protobuf.ProtocolStringList
          getTagColumnsList() {
        return tagColumns_.getUnmodifiableView();
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=94
       * @return The count of tagColumns.
       */
      @java.lang.Deprecated public int getTagColumnsCount() {
        return tagColumns_.size();
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=94
       * @param index The index of the element to return.
       * @return The tagColumns at the given index.
       */
      @java.lang.Deprecated public java.lang.String getTagColumns(int index) {
        return tagColumns_.get(index);
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=94
       * @param index The index of the value to return.
       * @return The bytes of the tagColumns at the given index.
       */
      @java.lang.Deprecated public com.google.protobuf.ByteString
          getTagColumnsBytes(int index) {
        return tagColumns_.getByteString(index);
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=94
       * @param index The index to set the value at.
       * @param value The tagColumns to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTagColumns(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTagColumnsIsMutable();
        tagColumns_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=94
       * @param value The tagColumns to add.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder addTagColumns(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTagColumnsIsMutable();
        tagColumns_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=94
       * @param values The tagColumns to add.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder addAllTagColumns(
          java.lang.Iterable<java.lang.String> values) {
        ensureTagColumnsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, tagColumns_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=94
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder clearTagColumns() {
        tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.RangeManipulate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=94
       * @param value The bytes of the tagColumns to add.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder addTagColumnsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureTagColumnsIsMutable();
        tagColumns_.add(value);
        onChanged();
        return this;
      }

      private long timeIndexIdx_ ;
      /**
       * <pre>
       * Column index of time index column
       * </pre>
       *
       * <code>uint64 time_index_idx = 7;</code>
       * @return The timeIndexIdx.
       */
      @java.lang.Override
      public long getTimeIndexIdx() {
        return timeIndexIdx_;
      }
      /**
       * <pre>
       * Column index of time index column
       * </pre>
       *
       * <code>uint64 time_index_idx = 7;</code>
       * @param value The timeIndexIdx to set.
       * @return This builder for chaining.
       */
      public Builder setTimeIndexIdx(long value) {
        
        timeIndexIdx_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Column index of time index column
       * </pre>
       *
       * <code>uint64 time_index_idx = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimeIndexIdx() {
        
        timeIndexIdx_ = 0L;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.LongList tagColumnIndices_ = emptyLongList();
      private void ensureTagColumnIndicesIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          tagColumnIndices_ = mutableCopy(tagColumnIndices_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 8;</code>
       * @return A list containing the tagColumnIndices.
       */
      public java.util.List<java.lang.Long>
          getTagColumnIndicesList() {
        return ((bitField0_ & 0x00000002) != 0) ?
                 java.util.Collections.unmodifiableList(tagColumnIndices_) : tagColumnIndices_;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 8;</code>
       * @return The count of tagColumnIndices.
       */
      public int getTagColumnIndicesCount() {
        return tagColumnIndices_.size();
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 8;</code>
       * @param index The index of the element to return.
       * @return The tagColumnIndices at the given index.
       */
      public long getTagColumnIndices(int index) {
        return tagColumnIndices_.getLong(index);
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 8;</code>
       * @param index The index to set the value at.
       * @param value The tagColumnIndices to set.
       * @return This builder for chaining.
       */
      public Builder setTagColumnIndices(
          int index, long value) {
        ensureTagColumnIndicesIsMutable();
        tagColumnIndices_.setLong(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 8;</code>
       * @param value The tagColumnIndices to add.
       * @return This builder for chaining.
       */
      public Builder addTagColumnIndices(long value) {
        ensureTagColumnIndicesIsMutable();
        tagColumnIndices_.addLong(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 8;</code>
       * @param values The tagColumnIndices to add.
       * @return This builder for chaining.
       */
      public Builder addAllTagColumnIndices(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureTagColumnIndicesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, tagColumnIndices_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearTagColumnIndices() {
        tagColumnIndices_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:substrait_extension.RangeManipulate)
    }

    // @@protoc_insertion_point(class_scope:substrait_extension.RangeManipulate)
    private static final substrait_extension.PromqlPlan.RangeManipulate DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new substrait_extension.PromqlPlan.RangeManipulate();
    }

    public static substrait_extension.PromqlPlan.RangeManipulate getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<RangeManipulate>
        PARSER = new com.google.protobuf.AbstractParser<RangeManipulate>() {
      @java.lang.Override
      public RangeManipulate parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RangeManipulate(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RangeManipulate> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<RangeManipulate> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public substrait_extension.PromqlPlan.RangeManipulate getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ScalarCalculateOrBuilder extends
      // @@protoc_insertion_point(interface_extends:substrait_extension.ScalarCalculate)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Start timestamp in millisecond
     * </pre>
     *
     * <code>int64 start = 1;</code>
     * @return The start.
     */
    long getStart();

    /**
     * <pre>
     * End timestamp in millisecond
     * </pre>
     *
     * <code>int64 end = 2;</code>
     * @return The end.
     */
    long getEnd();

    /**
     * <pre>
     * Interval in millisecond
     * </pre>
     *
     * <code>int64 interval = 3;</code>
     * @return The interval.
     */
    long getInterval();

    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=110
     * @return The timeIndex.
     */
    @java.lang.Deprecated java.lang.String getTimeIndex();
    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=110
     * @return The bytes for timeIndex.
     */
    @java.lang.Deprecated com.google.protobuf.ByteString
        getTimeIndexBytes();

    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=113
     * @return A list containing the tagColumns.
     */
    @java.lang.Deprecated java.util.List<java.lang.String>
        getTagColumnsList();
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=113
     * @return The count of tagColumns.
     */
    @java.lang.Deprecated int getTagColumnsCount();
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=113
     * @param index The index of the element to return.
     * @return The tagColumns at the given index.
     */
    @java.lang.Deprecated java.lang.String getTagColumns(int index);
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=113
     * @param index The index of the value to return.
     * @return The bytes of the tagColumns at the given index.
     */
    @java.lang.Deprecated com.google.protobuf.ByteString
        getTagColumnsBytes(int index);

    /**
     * <pre>
     * [DEPRECATED] Column name of field column.
     * Use `field_column_idx` instead.
     * </pre>
     *
     * <code>string field_column = 7 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.field_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=116
     * @return The fieldColumn.
     */
    @java.lang.Deprecated java.lang.String getFieldColumn();
    /**
     * <pre>
     * [DEPRECATED] Column name of field column.
     * Use `field_column_idx` instead.
     * </pre>
     *
     * <code>string field_column = 7 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.field_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=116
     * @return The bytes for fieldColumn.
     */
    @java.lang.Deprecated com.google.protobuf.ByteString
        getFieldColumnBytes();

    /**
     * <pre>
     * Column index of time index column
     * </pre>
     *
     * <code>uint64 time_index_idx = 8;</code>
     * @return The timeIndexIdx.
     */
    long getTimeIndexIdx();

    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 9;</code>
     * @return A list containing the tagColumnIndices.
     */
    java.util.List<java.lang.Long> getTagColumnIndicesList();
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 9;</code>
     * @return The count of tagColumnIndices.
     */
    int getTagColumnIndicesCount();
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 9;</code>
     * @param index The index of the element to return.
     * @return The tagColumnIndices at the given index.
     */
    long getTagColumnIndices(int index);

    /**
     * <pre>
     * Column index of field column
     * </pre>
     *
     * <code>uint64 field_column_idx = 10;</code>
     * @return The fieldColumnIdx.
     */
    long getFieldColumnIdx();
  }
  /**
   * Protobuf type {@code substrait_extension.ScalarCalculate}
   */
  public static final class ScalarCalculate extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:substrait_extension.ScalarCalculate)
      ScalarCalculateOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ScalarCalculate.newBuilder() to construct.
    private ScalarCalculate(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ScalarCalculate() {
      timeIndex_ = "";
      tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      fieldColumn_ = "";
      tagColumnIndices_ = emptyLongList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ScalarCalculate();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ScalarCalculate(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 8: {

              start_ = input.readInt64();
              break;
            }
            case 16: {

              end_ = input.readInt64();
              break;
            }
            case 24: {

              interval_ = input.readInt64();
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();

              timeIndex_ = s;
              break;
            }
            case 50: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                tagColumns_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              tagColumns_.add(s);
              break;
            }
            case 58: {
              java.lang.String s = input.readStringRequireUtf8();

              fieldColumn_ = s;
              break;
            }
            case 64: {

              timeIndexIdx_ = input.readUInt64();
              break;
            }
            case 72: {
              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                tagColumnIndices_ = newLongList();
                mutable_bitField0_ |= 0x00000002;
              }
              tagColumnIndices_.addLong(input.readUInt64());
              break;
            }
            case 74: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000002) != 0) && input.getBytesUntilLimit() > 0) {
                tagColumnIndices_ = newLongList();
                mutable_bitField0_ |= 0x00000002;
              }
              while (input.getBytesUntilLimit() > 0) {
                tagColumnIndices_.addLong(input.readUInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 80: {

              fieldColumnIdx_ = input.readUInt64();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          tagColumns_ = tagColumns_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000002) != 0)) {
          tagColumnIndices_.makeImmutable(); // C
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_ScalarCalculate_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_ScalarCalculate_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              substrait_extension.PromqlPlan.ScalarCalculate.class, substrait_extension.PromqlPlan.ScalarCalculate.Builder.class);
    }

    public static final int START_FIELD_NUMBER = 1;
    private long start_;
    /**
     * <pre>
     * Start timestamp in millisecond
     * </pre>
     *
     * <code>int64 start = 1;</code>
     * @return The start.
     */
    @java.lang.Override
    public long getStart() {
      return start_;
    }

    public static final int END_FIELD_NUMBER = 2;
    private long end_;
    /**
     * <pre>
     * End timestamp in millisecond
     * </pre>
     *
     * <code>int64 end = 2;</code>
     * @return The end.
     */
    @java.lang.Override
    public long getEnd() {
      return end_;
    }

    public static final int INTERVAL_FIELD_NUMBER = 3;
    private long interval_;
    /**
     * <pre>
     * Interval in millisecond
     * </pre>
     *
     * <code>int64 interval = 3;</code>
     * @return The interval.
     */
    @java.lang.Override
    public long getInterval() {
      return interval_;
    }

    public static final int TIME_INDEX_FIELD_NUMBER = 5;
    private volatile java.lang.Object timeIndex_;
    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=110
     * @return The timeIndex.
     */
    @java.lang.Override
    @java.lang.Deprecated public java.lang.String getTimeIndex() {
      java.lang.Object ref = timeIndex_;
      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();
        timeIndex_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_idx` instead.
     * </pre>
     *
     * <code>string time_index = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.time_index is deprecated.
     *     See substrait_extension/promql_plan.proto;l=110
     * @return The bytes for timeIndex.
     */
    @java.lang.Override
    @java.lang.Deprecated public com.google.protobuf.ByteString
        getTimeIndexBytes() {
      java.lang.Object ref = timeIndex_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        timeIndex_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TAG_COLUMNS_FIELD_NUMBER = 6;
    private com.google.protobuf.LazyStringList tagColumns_;
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=113
     * @return A list containing the tagColumns.
     */
    @java.lang.Deprecated public com.google.protobuf.ProtocolStringList
        getTagColumnsList() {
      return tagColumns_;
    }
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=113
     * @return The count of tagColumns.
     */
    @java.lang.Deprecated public int getTagColumnsCount() {
      return tagColumns_.size();
    }
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=113
     * @param index The index of the element to return.
     * @return The tagColumns at the given index.
     */
    @java.lang.Deprecated public java.lang.String getTagColumns(int index) {
      return tagColumns_.get(index);
    }
    /**
     * <pre>
     * [DEPRECATED] Names of tag columns.
     * Use `tag_column_indices` instead.
     * </pre>
     *
     * <code>repeated string tag_columns = 6 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
     *     See substrait_extension/promql_plan.proto;l=113
     * @param index The index of the value to return.
     * @return The bytes of the tagColumns at the given index.
     */
    @java.lang.Deprecated public com.google.protobuf.ByteString
        getTagColumnsBytes(int index) {
      return tagColumns_.getByteString(index);
    }

    public static final int FIELD_COLUMN_FIELD_NUMBER = 7;
    private volatile java.lang.Object fieldColumn_;
    /**
     * <pre>
     * [DEPRECATED] Column name of field column.
     * Use `field_column_idx` instead.
     * </pre>
     *
     * <code>string field_column = 7 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.field_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=116
     * @return The fieldColumn.
     */
    @java.lang.Override
    @java.lang.Deprecated public java.lang.String getFieldColumn() {
      java.lang.Object ref = fieldColumn_;
      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();
        fieldColumn_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * [DEPRECATED] Column name of field column.
     * Use `field_column_idx` instead.
     * </pre>
     *
     * <code>string field_column = 7 [deprecated = true];</code>
     * @deprecated substrait_extension.ScalarCalculate.field_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=116
     * @return The bytes for fieldColumn.
     */
    @java.lang.Override
    @java.lang.Deprecated public com.google.protobuf.ByteString
        getFieldColumnBytes() {
      java.lang.Object ref = fieldColumn_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        fieldColumn_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TIME_INDEX_IDX_FIELD_NUMBER = 8;
    private long timeIndexIdx_;
    /**
     * <pre>
     * Column index of time index column
     * </pre>
     *
     * <code>uint64 time_index_idx = 8;</code>
     * @return The timeIndexIdx.
     */
    @java.lang.Override
    public long getTimeIndexIdx() {
      return timeIndexIdx_;
    }

    public static final int TAG_COLUMN_INDICES_FIELD_NUMBER = 9;
    private com.google.protobuf.Internal.LongList tagColumnIndices_;
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 9;</code>
     * @return A list containing the tagColumnIndices.
     */
    @java.lang.Override
    public java.util.List<java.lang.Long>
        getTagColumnIndicesList() {
      return tagColumnIndices_;
    }
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 9;</code>
     * @return The count of tagColumnIndices.
     */
    public int getTagColumnIndicesCount() {
      return tagColumnIndices_.size();
    }
    /**
     * <pre>
     * Indices of tag columns
     * </pre>
     *
     * <code>repeated uint64 tag_column_indices = 9;</code>
     * @param index The index of the element to return.
     * @return The tagColumnIndices at the given index.
     */
    public long getTagColumnIndices(int index) {
      return tagColumnIndices_.getLong(index);
    }
    private int tagColumnIndicesMemoizedSerializedSize = -1;

    public static final int FIELD_COLUMN_IDX_FIELD_NUMBER = 10;
    private long fieldColumnIdx_;
    /**
     * <pre>
     * Column index of field column
     * </pre>
     *
     * <code>uint64 field_column_idx = 10;</code>
     * @return The fieldColumnIdx.
     */
    @java.lang.Override
    public long getFieldColumnIdx() {
      return fieldColumnIdx_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (start_ != 0L) {
        output.writeInt64(1, start_);
      }
      if (end_ != 0L) {
        output.writeInt64(2, end_);
      }
      if (interval_ != 0L) {
        output.writeInt64(3, interval_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(timeIndex_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, timeIndex_);
      }
      for (int i = 0; i < tagColumns_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, tagColumns_.getRaw(i));
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(fieldColumn_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, fieldColumn_);
      }
      if (timeIndexIdx_ != 0L) {
        output.writeUInt64(8, timeIndexIdx_);
      }
      if (getTagColumnIndicesList().size() > 0) {
        output.writeUInt32NoTag(74);
        output.writeUInt32NoTag(tagColumnIndicesMemoizedSerializedSize);
      }
      for (int i = 0; i < tagColumnIndices_.size(); i++) {
        output.writeUInt64NoTag(tagColumnIndices_.getLong(i));
      }
      if (fieldColumnIdx_ != 0L) {
        output.writeUInt64(10, fieldColumnIdx_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (start_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, start_);
      }
      if (end_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, end_);
      }
      if (interval_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, interval_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(timeIndex_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, timeIndex_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < tagColumns_.size(); i++) {
          dataSize += computeStringSizeNoTag(tagColumns_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getTagColumnsList().size();
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(fieldColumn_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, fieldColumn_);
      }
      if (timeIndexIdx_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(8, timeIndexIdx_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < tagColumnIndices_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt64SizeNoTag(tagColumnIndices_.getLong(i));
        }
        size += dataSize;
        if (!getTagColumnIndicesList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        tagColumnIndicesMemoizedSerializedSize = dataSize;
      }
      if (fieldColumnIdx_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(10, fieldColumnIdx_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof substrait_extension.PromqlPlan.ScalarCalculate)) {
        return super.equals(obj);
      }
      substrait_extension.PromqlPlan.ScalarCalculate other = (substrait_extension.PromqlPlan.ScalarCalculate) obj;

      if (getStart()
          != other.getStart()) return false;
      if (getEnd()
          != other.getEnd()) return false;
      if (getInterval()
          != other.getInterval()) return false;
      if (!getTimeIndex()
          .equals(other.getTimeIndex())) return false;
      if (!getTagColumnsList()
          .equals(other.getTagColumnsList())) return false;
      if (!getFieldColumn()
          .equals(other.getFieldColumn())) return false;
      if (getTimeIndexIdx()
          != other.getTimeIndexIdx()) return false;
      if (!getTagColumnIndicesList()
          .equals(other.getTagColumnIndicesList())) return false;
      if (getFieldColumnIdx()
          != other.getFieldColumnIdx()) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + START_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getStart());
      hash = (37 * hash) + END_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getEnd());
      hash = (37 * hash) + INTERVAL_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getInterval());
      hash = (37 * hash) + TIME_INDEX_FIELD_NUMBER;
      hash = (53 * hash) + getTimeIndex().hashCode();
      if (getTagColumnsCount() > 0) {
        hash = (37 * hash) + TAG_COLUMNS_FIELD_NUMBER;
        hash = (53 * hash) + getTagColumnsList().hashCode();
      }
      hash = (37 * hash) + FIELD_COLUMN_FIELD_NUMBER;
      hash = (53 * hash) + getFieldColumn().hashCode();
      hash = (37 * hash) + TIME_INDEX_IDX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getTimeIndexIdx());
      if (getTagColumnIndicesCount() > 0) {
        hash = (37 * hash) + TAG_COLUMN_INDICES_FIELD_NUMBER;
        hash = (53 * hash) + getTagColumnIndicesList().hashCode();
      }
      hash = (37 * hash) + FIELD_COLUMN_IDX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getFieldColumnIdx());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static substrait_extension.PromqlPlan.ScalarCalculate parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.ScalarCalculate parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.ScalarCalculate parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.ScalarCalculate parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.ScalarCalculate parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.ScalarCalculate parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.ScalarCalculate parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.ScalarCalculate parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.ScalarCalculate parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.ScalarCalculate parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.ScalarCalculate parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.ScalarCalculate parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(substrait_extension.PromqlPlan.ScalarCalculate prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code substrait_extension.ScalarCalculate}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:substrait_extension.ScalarCalculate)
        substrait_extension.PromqlPlan.ScalarCalculateOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_ScalarCalculate_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_ScalarCalculate_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                substrait_extension.PromqlPlan.ScalarCalculate.class, substrait_extension.PromqlPlan.ScalarCalculate.Builder.class);
      }

      // Construct using substrait_extension.PromqlPlan.ScalarCalculate.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        start_ = 0L;

        end_ = 0L;

        interval_ = 0L;

        timeIndex_ = "";

        tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        fieldColumn_ = "";

        timeIndexIdx_ = 0L;

        tagColumnIndices_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000002);
        fieldColumnIdx_ = 0L;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_ScalarCalculate_descriptor;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.ScalarCalculate getDefaultInstanceForType() {
        return substrait_extension.PromqlPlan.ScalarCalculate.getDefaultInstance();
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.ScalarCalculate build() {
        substrait_extension.PromqlPlan.ScalarCalculate result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.ScalarCalculate buildPartial() {
        substrait_extension.PromqlPlan.ScalarCalculate result = new substrait_extension.PromqlPlan.ScalarCalculate(this);
        int from_bitField0_ = bitField0_;
        result.start_ = start_;
        result.end_ = end_;
        result.interval_ = interval_;
        result.timeIndex_ = timeIndex_;
        if (((bitField0_ & 0x00000001) != 0)) {
          tagColumns_ = tagColumns_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.tagColumns_ = tagColumns_;
        result.fieldColumn_ = fieldColumn_;
        result.timeIndexIdx_ = timeIndexIdx_;
        if (((bitField0_ & 0x00000002) != 0)) {
          tagColumnIndices_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.tagColumnIndices_ = tagColumnIndices_;
        result.fieldColumnIdx_ = fieldColumnIdx_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof substrait_extension.PromqlPlan.ScalarCalculate) {
          return mergeFrom((substrait_extension.PromqlPlan.ScalarCalculate)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(substrait_extension.PromqlPlan.ScalarCalculate other) {
        if (other == substrait_extension.PromqlPlan.ScalarCalculate.getDefaultInstance()) return this;
        if (other.getStart() != 0L) {
          setStart(other.getStart());
        }
        if (other.getEnd() != 0L) {
          setEnd(other.getEnd());
        }
        if (other.getInterval() != 0L) {
          setInterval(other.getInterval());
        }
        if (!other.getTimeIndex().isEmpty()) {
          timeIndex_ = other.timeIndex_;
          onChanged();
        }
        if (!other.tagColumns_.isEmpty()) {
          if (tagColumns_.isEmpty()) {
            tagColumns_ = other.tagColumns_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureTagColumnsIsMutable();
            tagColumns_.addAll(other.tagColumns_);
          }
          onChanged();
        }
        if (!other.getFieldColumn().isEmpty()) {
          fieldColumn_ = other.fieldColumn_;
          onChanged();
        }
        if (other.getTimeIndexIdx() != 0L) {
          setTimeIndexIdx(other.getTimeIndexIdx());
        }
        if (!other.tagColumnIndices_.isEmpty()) {
          if (tagColumnIndices_.isEmpty()) {
            tagColumnIndices_ = other.tagColumnIndices_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureTagColumnIndicesIsMutable();
            tagColumnIndices_.addAll(other.tagColumnIndices_);
          }
          onChanged();
        }
        if (other.getFieldColumnIdx() != 0L) {
          setFieldColumnIdx(other.getFieldColumnIdx());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        substrait_extension.PromqlPlan.ScalarCalculate parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (substrait_extension.PromqlPlan.ScalarCalculate) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long start_ ;
      /**
       * <pre>
       * Start timestamp in millisecond
       * </pre>
       *
       * <code>int64 start = 1;</code>
       * @return The start.
       */
      @java.lang.Override
      public long getStart() {
        return start_;
      }
      /**
       * <pre>
       * Start timestamp in millisecond
       * </pre>
       *
       * <code>int64 start = 1;</code>
       * @param value The start to set.
       * @return This builder for chaining.
       */
      public Builder setStart(long value) {
        
        start_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Start timestamp in millisecond
       * </pre>
       *
       * <code>int64 start = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearStart() {
        
        start_ = 0L;
        onChanged();
        return this;
      }

      private long end_ ;
      /**
       * <pre>
       * End timestamp in millisecond
       * </pre>
       *
       * <code>int64 end = 2;</code>
       * @return The end.
       */
      @java.lang.Override
      public long getEnd() {
        return end_;
      }
      /**
       * <pre>
       * End timestamp in millisecond
       * </pre>
       *
       * <code>int64 end = 2;</code>
       * @param value The end to set.
       * @return This builder for chaining.
       */
      public Builder setEnd(long value) {
        
        end_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * End timestamp in millisecond
       * </pre>
       *
       * <code>int64 end = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearEnd() {
        
        end_ = 0L;
        onChanged();
        return this;
      }

      private long interval_ ;
      /**
       * <pre>
       * Interval in millisecond
       * </pre>
       *
       * <code>int64 interval = 3;</code>
       * @return The interval.
       */
      @java.lang.Override
      public long getInterval() {
        return interval_;
      }
      /**
       * <pre>
       * Interval in millisecond
       * </pre>
       *
       * <code>int64 interval = 3;</code>
       * @param value The interval to set.
       * @return This builder for chaining.
       */
      public Builder setInterval(long value) {
        
        interval_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Interval in millisecond
       * </pre>
       *
       * <code>int64 interval = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearInterval() {
        
        interval_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object timeIndex_ = "";
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=110
       * @return The timeIndex.
       */
      @java.lang.Deprecated public java.lang.String getTimeIndex() {
        java.lang.Object ref = timeIndex_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          timeIndex_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=110
       * @return The bytes for timeIndex.
       */
      @java.lang.Deprecated public com.google.protobuf.ByteString
          getTimeIndexBytes() {
        java.lang.Object ref = timeIndex_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          timeIndex_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=110
       * @param value The timeIndex to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTimeIndex(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        timeIndex_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=110
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder clearTimeIndex() {
        
        timeIndex_ = getDefaultInstance().getTimeIndex();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_idx` instead.
       * </pre>
       *
       * <code>string time_index = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.time_index is deprecated.
       *     See substrait_extension/promql_plan.proto;l=110
       * @param value The bytes for timeIndex to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTimeIndexBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        timeIndex_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureTagColumnsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          tagColumns_ = new com.google.protobuf.LazyStringArrayList(tagColumns_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=113
       * @return A list containing the tagColumns.
       */
      @java.lang.Deprecated public com.google.protobuf.ProtocolStringList
          getTagColumnsList() {
        return tagColumns_.getUnmodifiableView();
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=113
       * @return The count of tagColumns.
       */
      @java.lang.Deprecated public int getTagColumnsCount() {
        return tagColumns_.size();
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=113
       * @param index The index of the element to return.
       * @return The tagColumns at the given index.
       */
      @java.lang.Deprecated public java.lang.String getTagColumns(int index) {
        return tagColumns_.get(index);
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=113
       * @param index The index of the value to return.
       * @return The bytes of the tagColumns at the given index.
       */
      @java.lang.Deprecated public com.google.protobuf.ByteString
          getTagColumnsBytes(int index) {
        return tagColumns_.getByteString(index);
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=113
       * @param index The index to set the value at.
       * @param value The tagColumns to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTagColumns(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTagColumnsIsMutable();
        tagColumns_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=113
       * @param value The tagColumns to add.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder addTagColumns(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTagColumnsIsMutable();
        tagColumns_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=113
       * @param values The tagColumns to add.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder addAllTagColumns(
          java.lang.Iterable<java.lang.String> values) {
        ensureTagColumnsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, tagColumns_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=113
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder clearTagColumns() {
        tagColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Names of tag columns.
       * Use `tag_column_indices` instead.
       * </pre>
       *
       * <code>repeated string tag_columns = 6 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.tag_columns is deprecated.
       *     See substrait_extension/promql_plan.proto;l=113
       * @param value The bytes of the tagColumns to add.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder addTagColumnsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureTagColumnsIsMutable();
        tagColumns_.add(value);
        onChanged();
        return this;
      }

      private java.lang.Object fieldColumn_ = "";
      /**
       * <pre>
       * [DEPRECATED] Column name of field column.
       * Use `field_column_idx` instead.
       * </pre>
       *
       * <code>string field_column = 7 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.field_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=116
       * @return The fieldColumn.
       */
      @java.lang.Deprecated public java.lang.String getFieldColumn() {
        java.lang.Object ref = fieldColumn_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          fieldColumn_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of field column.
       * Use `field_column_idx` instead.
       * </pre>
       *
       * <code>string field_column = 7 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.field_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=116
       * @return The bytes for fieldColumn.
       */
      @java.lang.Deprecated public com.google.protobuf.ByteString
          getFieldColumnBytes() {
        java.lang.Object ref = fieldColumn_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          fieldColumn_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of field column.
       * Use `field_column_idx` instead.
       * </pre>
       *
       * <code>string field_column = 7 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.field_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=116
       * @param value The fieldColumn to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setFieldColumn(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        fieldColumn_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of field column.
       * Use `field_column_idx` instead.
       * </pre>
       *
       * <code>string field_column = 7 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.field_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=116
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder clearFieldColumn() {
        
        fieldColumn_ = getDefaultInstance().getFieldColumn();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of field column.
       * Use `field_column_idx` instead.
       * </pre>
       *
       * <code>string field_column = 7 [deprecated = true];</code>
       * @deprecated substrait_extension.ScalarCalculate.field_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=116
       * @param value The bytes for fieldColumn to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setFieldColumnBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        fieldColumn_ = value;
        onChanged();
        return this;
      }

      private long timeIndexIdx_ ;
      /**
       * <pre>
       * Column index of time index column
       * </pre>
       *
       * <code>uint64 time_index_idx = 8;</code>
       * @return The timeIndexIdx.
       */
      @java.lang.Override
      public long getTimeIndexIdx() {
        return timeIndexIdx_;
      }
      /**
       * <pre>
       * Column index of time index column
       * </pre>
       *
       * <code>uint64 time_index_idx = 8;</code>
       * @param value The timeIndexIdx to set.
       * @return This builder for chaining.
       */
      public Builder setTimeIndexIdx(long value) {
        
        timeIndexIdx_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Column index of time index column
       * </pre>
       *
       * <code>uint64 time_index_idx = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimeIndexIdx() {
        
        timeIndexIdx_ = 0L;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.LongList tagColumnIndices_ = emptyLongList();
      private void ensureTagColumnIndicesIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          tagColumnIndices_ = mutableCopy(tagColumnIndices_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 9;</code>
       * @return A list containing the tagColumnIndices.
       */
      public java.util.List<java.lang.Long>
          getTagColumnIndicesList() {
        return ((bitField0_ & 0x00000002) != 0) ?
                 java.util.Collections.unmodifiableList(tagColumnIndices_) : tagColumnIndices_;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 9;</code>
       * @return The count of tagColumnIndices.
       */
      public int getTagColumnIndicesCount() {
        return tagColumnIndices_.size();
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 9;</code>
       * @param index The index of the element to return.
       * @return The tagColumnIndices at the given index.
       */
      public long getTagColumnIndices(int index) {
        return tagColumnIndices_.getLong(index);
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 9;</code>
       * @param index The index to set the value at.
       * @param value The tagColumnIndices to set.
       * @return This builder for chaining.
       */
      public Builder setTagColumnIndices(
          int index, long value) {
        ensureTagColumnIndicesIsMutable();
        tagColumnIndices_.setLong(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 9;</code>
       * @param value The tagColumnIndices to add.
       * @return This builder for chaining.
       */
      public Builder addTagColumnIndices(long value) {
        ensureTagColumnIndicesIsMutable();
        tagColumnIndices_.addLong(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 9;</code>
       * @param values The tagColumnIndices to add.
       * @return This builder for chaining.
       */
      public Builder addAllTagColumnIndices(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureTagColumnIndicesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, tagColumnIndices_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Indices of tag columns
       * </pre>
       *
       * <code>repeated uint64 tag_column_indices = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearTagColumnIndices() {
        tagColumnIndices_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }

      private long fieldColumnIdx_ ;
      /**
       * <pre>
       * Column index of field column
       * </pre>
       *
       * <code>uint64 field_column_idx = 10;</code>
       * @return The fieldColumnIdx.
       */
      @java.lang.Override
      public long getFieldColumnIdx() {
        return fieldColumnIdx_;
      }
      /**
       * <pre>
       * Column index of field column
       * </pre>
       *
       * <code>uint64 field_column_idx = 10;</code>
       * @param value The fieldColumnIdx to set.
       * @return This builder for chaining.
       */
      public Builder setFieldColumnIdx(long value) {
        
        fieldColumnIdx_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Column index of field column
       * </pre>
       *
       * <code>uint64 field_column_idx = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearFieldColumnIdx() {
        
        fieldColumnIdx_ = 0L;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:substrait_extension.ScalarCalculate)
    }

    // @@protoc_insertion_point(class_scope:substrait_extension.ScalarCalculate)
    private static final substrait_extension.PromqlPlan.ScalarCalculate DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new substrait_extension.PromqlPlan.ScalarCalculate();
    }

    public static substrait_extension.PromqlPlan.ScalarCalculate getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ScalarCalculate>
        PARSER = new com.google.protobuf.AbstractParser<ScalarCalculate>() {
      @java.lang.Override
      public ScalarCalculate parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ScalarCalculate(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<ScalarCalculate> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ScalarCalculate> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public substrait_extension.PromqlPlan.ScalarCalculate getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AbsentOrBuilder extends
      // @@protoc_insertion_point(interface_extends:substrait_extension.Absent)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Start timestamp in millisecond
     * </pre>
     *
     * <code>int64 start = 1;</code>
     * @return The start.
     */
    long getStart();

    /**
     * <pre>
     * End timestamp in millisecond
     * </pre>
     *
     * <code>int64 end = 2;</code>
     * @return The end.
     */
    long getEnd();

    /**
     * <pre>
     * Step in millisecond
     * </pre>
     *
     * <code>int64 step = 3;</code>
     * @return The step.
     */
    long getStep();

    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_column_idx` instead.
     * </pre>
     *
     * <code>string time_index_column = 4 [deprecated = true];</code>
     * @deprecated substrait_extension.Absent.time_index_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=134
     * @return The timeIndexColumn.
     */
    @java.lang.Deprecated java.lang.String getTimeIndexColumn();
    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_column_idx` instead.
     * </pre>
     *
     * <code>string time_index_column = 4 [deprecated = true];</code>
     * @deprecated substrait_extension.Absent.time_index_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=134
     * @return The bytes for timeIndexColumn.
     */
    @java.lang.Deprecated com.google.protobuf.ByteString
        getTimeIndexColumnBytes();

    /**
     * <pre>
     * [DEPRECATED] Column name of value column.
     * Use `value_column_idx` instead.
     * </pre>
     *
     * <code>string value_column = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.Absent.value_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=137
     * @return The valueColumn.
     */
    @java.lang.Deprecated java.lang.String getValueColumn();
    /**
     * <pre>
     * [DEPRECATED] Column name of value column.
     * Use `value_column_idx` instead.
     * </pre>
     *
     * <code>string value_column = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.Absent.value_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=137
     * @return The bytes for valueColumn.
     */
    @java.lang.Deprecated com.google.protobuf.ByteString
        getValueColumnBytes();

    /**
     * <pre>
     * Fake labels as key-value pairs
     * </pre>
     *
     * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
     */
    java.util.List<substrait_extension.PromqlPlan.LabelPair> 
        getFakeLabelsList();
    /**
     * <pre>
     * Fake labels as key-value pairs
     * </pre>
     *
     * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
     */
    substrait_extension.PromqlPlan.LabelPair getFakeLabels(int index);
    /**
     * <pre>
     * Fake labels as key-value pairs
     * </pre>
     *
     * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
     */
    int getFakeLabelsCount();
    /**
     * <pre>
     * Fake labels as key-value pairs
     * </pre>
     *
     * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
     */
    java.util.List<? extends substrait_extension.PromqlPlan.LabelPairOrBuilder> 
        getFakeLabelsOrBuilderList();
    /**
     * <pre>
     * Fake labels as key-value pairs
     * </pre>
     *
     * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
     */
    substrait_extension.PromqlPlan.LabelPairOrBuilder getFakeLabelsOrBuilder(
        int index);

    /**
     * <pre>
     * Column index of time index column
     * </pre>
     *
     * <code>uint64 time_index_column_idx = 7;</code>
     * @return The timeIndexColumnIdx.
     */
    long getTimeIndexColumnIdx();

    /**
     * <pre>
     * Column index of value column
     * </pre>
     *
     * <code>uint64 value_column_idx = 8;</code>
     * @return The valueColumnIdx.
     */
    long getValueColumnIdx();
  }
  /**
   * Protobuf type {@code substrait_extension.Absent}
   */
  public static final class Absent extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:substrait_extension.Absent)
      AbsentOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Absent.newBuilder() to construct.
    private Absent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Absent() {
      timeIndexColumn_ = "";
      valueColumn_ = "";
      fakeLabels_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Absent();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Absent(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 8: {

              start_ = input.readInt64();
              break;
            }
            case 16: {

              end_ = input.readInt64();
              break;
            }
            case 24: {

              step_ = input.readInt64();
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();

              timeIndexColumn_ = s;
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();

              valueColumn_ = s;
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                fakeLabels_ = new java.util.ArrayList<substrait_extension.PromqlPlan.LabelPair>();
                mutable_bitField0_ |= 0x00000001;
              }
              fakeLabels_.add(
                  input.readMessage(substrait_extension.PromqlPlan.LabelPair.parser(), extensionRegistry));
              break;
            }
            case 56: {

              timeIndexColumnIdx_ = input.readUInt64();
              break;
            }
            case 64: {

              valueColumnIdx_ = input.readUInt64();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          fakeLabels_ = java.util.Collections.unmodifiableList(fakeLabels_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_Absent_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_Absent_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              substrait_extension.PromqlPlan.Absent.class, substrait_extension.PromqlPlan.Absent.Builder.class);
    }

    public static final int START_FIELD_NUMBER = 1;
    private long start_;
    /**
     * <pre>
     * Start timestamp in millisecond
     * </pre>
     *
     * <code>int64 start = 1;</code>
     * @return The start.
     */
    @java.lang.Override
    public long getStart() {
      return start_;
    }

    public static final int END_FIELD_NUMBER = 2;
    private long end_;
    /**
     * <pre>
     * End timestamp in millisecond
     * </pre>
     *
     * <code>int64 end = 2;</code>
     * @return The end.
     */
    @java.lang.Override
    public long getEnd() {
      return end_;
    }

    public static final int STEP_FIELD_NUMBER = 3;
    private long step_;
    /**
     * <pre>
     * Step in millisecond
     * </pre>
     *
     * <code>int64 step = 3;</code>
     * @return The step.
     */
    @java.lang.Override
    public long getStep() {
      return step_;
    }

    public static final int TIME_INDEX_COLUMN_FIELD_NUMBER = 4;
    private volatile java.lang.Object timeIndexColumn_;
    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_column_idx` instead.
     * </pre>
     *
     * <code>string time_index_column = 4 [deprecated = true];</code>
     * @deprecated substrait_extension.Absent.time_index_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=134
     * @return The timeIndexColumn.
     */
    @java.lang.Override
    @java.lang.Deprecated public java.lang.String getTimeIndexColumn() {
      java.lang.Object ref = timeIndexColumn_;
      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();
        timeIndexColumn_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * [DEPRECATED] Column name of time index column.
     * Use `time_index_column_idx` instead.
     * </pre>
     *
     * <code>string time_index_column = 4 [deprecated = true];</code>
     * @deprecated substrait_extension.Absent.time_index_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=134
     * @return The bytes for timeIndexColumn.
     */
    @java.lang.Override
    @java.lang.Deprecated public com.google.protobuf.ByteString
        getTimeIndexColumnBytes() {
      java.lang.Object ref = timeIndexColumn_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        timeIndexColumn_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_COLUMN_FIELD_NUMBER = 5;
    private volatile java.lang.Object valueColumn_;
    /**
     * <pre>
     * [DEPRECATED] Column name of value column.
     * Use `value_column_idx` instead.
     * </pre>
     *
     * <code>string value_column = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.Absent.value_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=137
     * @return The valueColumn.
     */
    @java.lang.Override
    @java.lang.Deprecated public java.lang.String getValueColumn() {
      java.lang.Object ref = valueColumn_;
      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();
        valueColumn_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * [DEPRECATED] Column name of value column.
     * Use `value_column_idx` instead.
     * </pre>
     *
     * <code>string value_column = 5 [deprecated = true];</code>
     * @deprecated substrait_extension.Absent.value_column is deprecated.
     *     See substrait_extension/promql_plan.proto;l=137
     * @return The bytes for valueColumn.
     */
    @java.lang.Override
    @java.lang.Deprecated public com.google.protobuf.ByteString
        getValueColumnBytes() {
      java.lang.Object ref = valueColumn_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        valueColumn_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int FAKE_LABELS_FIELD_NUMBER = 6;
    private java.util.List<substrait_extension.PromqlPlan.LabelPair> fakeLabels_;
    /**
     * <pre>
     * Fake labels as key-value pairs
     * </pre>
     *
     * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
     */
    @java.lang.Override
    public java.util.List<substrait_extension.PromqlPlan.LabelPair> getFakeLabelsList() {
      return fakeLabels_;
    }
    /**
     * <pre>
     * Fake labels as key-value pairs
     * </pre>
     *
     * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
     */
    @java.lang.Override
    public java.util.List<? extends substrait_extension.PromqlPlan.LabelPairOrBuilder> 
        getFakeLabelsOrBuilderList() {
      return fakeLabels_;
    }
    /**
     * <pre>
     * Fake labels as key-value pairs
     * </pre>
     *
     * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
     */
    @java.lang.Override
    public int getFakeLabelsCount() {
      return fakeLabels_.size();
    }
    /**
     * <pre>
     * Fake labels as key-value pairs
     * </pre>
     *
     * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
     */
    @java.lang.Override
    public substrait_extension.PromqlPlan.LabelPair getFakeLabels(int index) {
      return fakeLabels_.get(index);
    }
    /**
     * <pre>
     * Fake labels as key-value pairs
     * </pre>
     *
     * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
     */
    @java.lang.Override
    public substrait_extension.PromqlPlan.LabelPairOrBuilder getFakeLabelsOrBuilder(
        int index) {
      return fakeLabels_.get(index);
    }

    public static final int TIME_INDEX_COLUMN_IDX_FIELD_NUMBER = 7;
    private long timeIndexColumnIdx_;
    /**
     * <pre>
     * Column index of time index column
     * </pre>
     *
     * <code>uint64 time_index_column_idx = 7;</code>
     * @return The timeIndexColumnIdx.
     */
    @java.lang.Override
    public long getTimeIndexColumnIdx() {
      return timeIndexColumnIdx_;
    }

    public static final int VALUE_COLUMN_IDX_FIELD_NUMBER = 8;
    private long valueColumnIdx_;
    /**
     * <pre>
     * Column index of value column
     * </pre>
     *
     * <code>uint64 value_column_idx = 8;</code>
     * @return The valueColumnIdx.
     */
    @java.lang.Override
    public long getValueColumnIdx() {
      return valueColumnIdx_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (start_ != 0L) {
        output.writeInt64(1, start_);
      }
      if (end_ != 0L) {
        output.writeInt64(2, end_);
      }
      if (step_ != 0L) {
        output.writeInt64(3, step_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(timeIndexColumn_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, timeIndexColumn_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(valueColumn_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, valueColumn_);
      }
      for (int i = 0; i < fakeLabels_.size(); i++) {
        output.writeMessage(6, fakeLabels_.get(i));
      }
      if (timeIndexColumnIdx_ != 0L) {
        output.writeUInt64(7, timeIndexColumnIdx_);
      }
      if (valueColumnIdx_ != 0L) {
        output.writeUInt64(8, valueColumnIdx_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (start_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, start_);
      }
      if (end_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, end_);
      }
      if (step_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, step_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(timeIndexColumn_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, timeIndexColumn_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(valueColumn_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, valueColumn_);
      }
      for (int i = 0; i < fakeLabels_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, fakeLabels_.get(i));
      }
      if (timeIndexColumnIdx_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(7, timeIndexColumnIdx_);
      }
      if (valueColumnIdx_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(8, valueColumnIdx_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof substrait_extension.PromqlPlan.Absent)) {
        return super.equals(obj);
      }
      substrait_extension.PromqlPlan.Absent other = (substrait_extension.PromqlPlan.Absent) obj;

      if (getStart()
          != other.getStart()) return false;
      if (getEnd()
          != other.getEnd()) return false;
      if (getStep()
          != other.getStep()) return false;
      if (!getTimeIndexColumn()
          .equals(other.getTimeIndexColumn())) return false;
      if (!getValueColumn()
          .equals(other.getValueColumn())) return false;
      if (!getFakeLabelsList()
          .equals(other.getFakeLabelsList())) return false;
      if (getTimeIndexColumnIdx()
          != other.getTimeIndexColumnIdx()) return false;
      if (getValueColumnIdx()
          != other.getValueColumnIdx()) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + START_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getStart());
      hash = (37 * hash) + END_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getEnd());
      hash = (37 * hash) + STEP_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getStep());
      hash = (37 * hash) + TIME_INDEX_COLUMN_FIELD_NUMBER;
      hash = (53 * hash) + getTimeIndexColumn().hashCode();
      hash = (37 * hash) + VALUE_COLUMN_FIELD_NUMBER;
      hash = (53 * hash) + getValueColumn().hashCode();
      if (getFakeLabelsCount() > 0) {
        hash = (37 * hash) + FAKE_LABELS_FIELD_NUMBER;
        hash = (53 * hash) + getFakeLabelsList().hashCode();
      }
      hash = (37 * hash) + TIME_INDEX_COLUMN_IDX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getTimeIndexColumnIdx());
      hash = (37 * hash) + VALUE_COLUMN_IDX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getValueColumnIdx());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static substrait_extension.PromqlPlan.Absent parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.Absent parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.Absent parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.Absent parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.Absent parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.Absent parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.Absent parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.Absent parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.Absent parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.Absent parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.Absent parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.Absent parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(substrait_extension.PromqlPlan.Absent prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code substrait_extension.Absent}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:substrait_extension.Absent)
        substrait_extension.PromqlPlan.AbsentOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_Absent_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_Absent_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                substrait_extension.PromqlPlan.Absent.class, substrait_extension.PromqlPlan.Absent.Builder.class);
      }

      // Construct using substrait_extension.PromqlPlan.Absent.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getFakeLabelsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        start_ = 0L;

        end_ = 0L;

        step_ = 0L;

        timeIndexColumn_ = "";

        valueColumn_ = "";

        if (fakeLabelsBuilder_ == null) {
          fakeLabels_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          fakeLabelsBuilder_.clear();
        }
        timeIndexColumnIdx_ = 0L;

        valueColumnIdx_ = 0L;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_Absent_descriptor;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.Absent getDefaultInstanceForType() {
        return substrait_extension.PromqlPlan.Absent.getDefaultInstance();
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.Absent build() {
        substrait_extension.PromqlPlan.Absent result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.Absent buildPartial() {
        substrait_extension.PromqlPlan.Absent result = new substrait_extension.PromqlPlan.Absent(this);
        int from_bitField0_ = bitField0_;
        result.start_ = start_;
        result.end_ = end_;
        result.step_ = step_;
        result.timeIndexColumn_ = timeIndexColumn_;
        result.valueColumn_ = valueColumn_;
        if (fakeLabelsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            fakeLabels_ = java.util.Collections.unmodifiableList(fakeLabels_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.fakeLabels_ = fakeLabels_;
        } else {
          result.fakeLabels_ = fakeLabelsBuilder_.build();
        }
        result.timeIndexColumnIdx_ = timeIndexColumnIdx_;
        result.valueColumnIdx_ = valueColumnIdx_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof substrait_extension.PromqlPlan.Absent) {
          return mergeFrom((substrait_extension.PromqlPlan.Absent)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(substrait_extension.PromqlPlan.Absent other) {
        if (other == substrait_extension.PromqlPlan.Absent.getDefaultInstance()) return this;
        if (other.getStart() != 0L) {
          setStart(other.getStart());
        }
        if (other.getEnd() != 0L) {
          setEnd(other.getEnd());
        }
        if (other.getStep() != 0L) {
          setStep(other.getStep());
        }
        if (!other.getTimeIndexColumn().isEmpty()) {
          timeIndexColumn_ = other.timeIndexColumn_;
          onChanged();
        }
        if (!other.getValueColumn().isEmpty()) {
          valueColumn_ = other.valueColumn_;
          onChanged();
        }
        if (fakeLabelsBuilder_ == null) {
          if (!other.fakeLabels_.isEmpty()) {
            if (fakeLabels_.isEmpty()) {
              fakeLabels_ = other.fakeLabels_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureFakeLabelsIsMutable();
              fakeLabels_.addAll(other.fakeLabels_);
            }
            onChanged();
          }
        } else {
          if (!other.fakeLabels_.isEmpty()) {
            if (fakeLabelsBuilder_.isEmpty()) {
              fakeLabelsBuilder_.dispose();
              fakeLabelsBuilder_ = null;
              fakeLabels_ = other.fakeLabels_;
              bitField0_ = (bitField0_ & ~0x00000001);
              fakeLabelsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getFakeLabelsFieldBuilder() : null;
            } else {
              fakeLabelsBuilder_.addAllMessages(other.fakeLabels_);
            }
          }
        }
        if (other.getTimeIndexColumnIdx() != 0L) {
          setTimeIndexColumnIdx(other.getTimeIndexColumnIdx());
        }
        if (other.getValueColumnIdx() != 0L) {
          setValueColumnIdx(other.getValueColumnIdx());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        substrait_extension.PromqlPlan.Absent parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (substrait_extension.PromqlPlan.Absent) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long start_ ;
      /**
       * <pre>
       * Start timestamp in millisecond
       * </pre>
       *
       * <code>int64 start = 1;</code>
       * @return The start.
       */
      @java.lang.Override
      public long getStart() {
        return start_;
      }
      /**
       * <pre>
       * Start timestamp in millisecond
       * </pre>
       *
       * <code>int64 start = 1;</code>
       * @param value The start to set.
       * @return This builder for chaining.
       */
      public Builder setStart(long value) {
        
        start_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Start timestamp in millisecond
       * </pre>
       *
       * <code>int64 start = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearStart() {
        
        start_ = 0L;
        onChanged();
        return this;
      }

      private long end_ ;
      /**
       * <pre>
       * End timestamp in millisecond
       * </pre>
       *
       * <code>int64 end = 2;</code>
       * @return The end.
       */
      @java.lang.Override
      public long getEnd() {
        return end_;
      }
      /**
       * <pre>
       * End timestamp in millisecond
       * </pre>
       *
       * <code>int64 end = 2;</code>
       * @param value The end to set.
       * @return This builder for chaining.
       */
      public Builder setEnd(long value) {
        
        end_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * End timestamp in millisecond
       * </pre>
       *
       * <code>int64 end = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearEnd() {
        
        end_ = 0L;
        onChanged();
        return this;
      }

      private long step_ ;
      /**
       * <pre>
       * Step in millisecond
       * </pre>
       *
       * <code>int64 step = 3;</code>
       * @return The step.
       */
      @java.lang.Override
      public long getStep() {
        return step_;
      }
      /**
       * <pre>
       * Step in millisecond
       * </pre>
       *
       * <code>int64 step = 3;</code>
       * @param value The step to set.
       * @return This builder for chaining.
       */
      public Builder setStep(long value) {
        
        step_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Step in millisecond
       * </pre>
       *
       * <code>int64 step = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearStep() {
        
        step_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object timeIndexColumn_ = "";
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_column_idx` instead.
       * </pre>
       *
       * <code>string time_index_column = 4 [deprecated = true];</code>
       * @deprecated substrait_extension.Absent.time_index_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=134
       * @return The timeIndexColumn.
       */
      @java.lang.Deprecated public java.lang.String getTimeIndexColumn() {
        java.lang.Object ref = timeIndexColumn_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          timeIndexColumn_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_column_idx` instead.
       * </pre>
       *
       * <code>string time_index_column = 4 [deprecated = true];</code>
       * @deprecated substrait_extension.Absent.time_index_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=134
       * @return The bytes for timeIndexColumn.
       */
      @java.lang.Deprecated public com.google.protobuf.ByteString
          getTimeIndexColumnBytes() {
        java.lang.Object ref = timeIndexColumn_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          timeIndexColumn_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_column_idx` instead.
       * </pre>
       *
       * <code>string time_index_column = 4 [deprecated = true];</code>
       * @deprecated substrait_extension.Absent.time_index_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=134
       * @param value The timeIndexColumn to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTimeIndexColumn(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        timeIndexColumn_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_column_idx` instead.
       * </pre>
       *
       * <code>string time_index_column = 4 [deprecated = true];</code>
       * @deprecated substrait_extension.Absent.time_index_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=134
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder clearTimeIndexColumn() {
        
        timeIndexColumn_ = getDefaultInstance().getTimeIndexColumn();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of time index column.
       * Use `time_index_column_idx` instead.
       * </pre>
       *
       * <code>string time_index_column = 4 [deprecated = true];</code>
       * @deprecated substrait_extension.Absent.time_index_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=134
       * @param value The bytes for timeIndexColumn to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setTimeIndexColumnBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        timeIndexColumn_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object valueColumn_ = "";
      /**
       * <pre>
       * [DEPRECATED] Column name of value column.
       * Use `value_column_idx` instead.
       * </pre>
       *
       * <code>string value_column = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.Absent.value_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=137
       * @return The valueColumn.
       */
      @java.lang.Deprecated public java.lang.String getValueColumn() {
        java.lang.Object ref = valueColumn_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          valueColumn_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of value column.
       * Use `value_column_idx` instead.
       * </pre>
       *
       * <code>string value_column = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.Absent.value_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=137
       * @return The bytes for valueColumn.
       */
      @java.lang.Deprecated public com.google.protobuf.ByteString
          getValueColumnBytes() {
        java.lang.Object ref = valueColumn_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          valueColumn_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of value column.
       * Use `value_column_idx` instead.
       * </pre>
       *
       * <code>string value_column = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.Absent.value_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=137
       * @param value The valueColumn to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setValueColumn(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        valueColumn_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of value column.
       * Use `value_column_idx` instead.
       * </pre>
       *
       * <code>string value_column = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.Absent.value_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=137
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder clearValueColumn() {
        
        valueColumn_ = getDefaultInstance().getValueColumn();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * [DEPRECATED] Column name of value column.
       * Use `value_column_idx` instead.
       * </pre>
       *
       * <code>string value_column = 5 [deprecated = true];</code>
       * @deprecated substrait_extension.Absent.value_column is deprecated.
       *     See substrait_extension/promql_plan.proto;l=137
       * @param value The bytes for valueColumn to set.
       * @return This builder for chaining.
       */
      @java.lang.Deprecated public Builder setValueColumnBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        valueColumn_ = value;
        onChanged();
        return this;
      }

      private java.util.List<substrait_extension.PromqlPlan.LabelPair> fakeLabels_ =
        java.util.Collections.emptyList();
      private void ensureFakeLabelsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          fakeLabels_ = new java.util.ArrayList<substrait_extension.PromqlPlan.LabelPair>(fakeLabels_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          substrait_extension.PromqlPlan.LabelPair, substrait_extension.PromqlPlan.LabelPair.Builder, substrait_extension.PromqlPlan.LabelPairOrBuilder> fakeLabelsBuilder_;

      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public java.util.List<substrait_extension.PromqlPlan.LabelPair> getFakeLabelsList() {
        if (fakeLabelsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(fakeLabels_);
        } else {
          return fakeLabelsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public int getFakeLabelsCount() {
        if (fakeLabelsBuilder_ == null) {
          return fakeLabels_.size();
        } else {
          return fakeLabelsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public substrait_extension.PromqlPlan.LabelPair getFakeLabels(int index) {
        if (fakeLabelsBuilder_ == null) {
          return fakeLabels_.get(index);
        } else {
          return fakeLabelsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public Builder setFakeLabels(
          int index, substrait_extension.PromqlPlan.LabelPair value) {
        if (fakeLabelsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFakeLabelsIsMutable();
          fakeLabels_.set(index, value);
          onChanged();
        } else {
          fakeLabelsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public Builder setFakeLabels(
          int index, substrait_extension.PromqlPlan.LabelPair.Builder builderForValue) {
        if (fakeLabelsBuilder_ == null) {
          ensureFakeLabelsIsMutable();
          fakeLabels_.set(index, builderForValue.build());
          onChanged();
        } else {
          fakeLabelsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public Builder addFakeLabels(substrait_extension.PromqlPlan.LabelPair value) {
        if (fakeLabelsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFakeLabelsIsMutable();
          fakeLabels_.add(value);
          onChanged();
        } else {
          fakeLabelsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public Builder addFakeLabels(
          int index, substrait_extension.PromqlPlan.LabelPair value) {
        if (fakeLabelsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFakeLabelsIsMutable();
          fakeLabels_.add(index, value);
          onChanged();
        } else {
          fakeLabelsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public Builder addFakeLabels(
          substrait_extension.PromqlPlan.LabelPair.Builder builderForValue) {
        if (fakeLabelsBuilder_ == null) {
          ensureFakeLabelsIsMutable();
          fakeLabels_.add(builderForValue.build());
          onChanged();
        } else {
          fakeLabelsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public Builder addFakeLabels(
          int index, substrait_extension.PromqlPlan.LabelPair.Builder builderForValue) {
        if (fakeLabelsBuilder_ == null) {
          ensureFakeLabelsIsMutable();
          fakeLabels_.add(index, builderForValue.build());
          onChanged();
        } else {
          fakeLabelsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public Builder addAllFakeLabels(
          java.lang.Iterable<? extends substrait_extension.PromqlPlan.LabelPair> values) {
        if (fakeLabelsBuilder_ == null) {
          ensureFakeLabelsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, fakeLabels_);
          onChanged();
        } else {
          fakeLabelsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public Builder clearFakeLabels() {
        if (fakeLabelsBuilder_ == null) {
          fakeLabels_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          fakeLabelsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public Builder removeFakeLabels(int index) {
        if (fakeLabelsBuilder_ == null) {
          ensureFakeLabelsIsMutable();
          fakeLabels_.remove(index);
          onChanged();
        } else {
          fakeLabelsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public substrait_extension.PromqlPlan.LabelPair.Builder getFakeLabelsBuilder(
          int index) {
        return getFakeLabelsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public substrait_extension.PromqlPlan.LabelPairOrBuilder getFakeLabelsOrBuilder(
          int index) {
        if (fakeLabelsBuilder_ == null) {
          return fakeLabels_.get(index);  } else {
          return fakeLabelsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public java.util.List<? extends substrait_extension.PromqlPlan.LabelPairOrBuilder> 
           getFakeLabelsOrBuilderList() {
        if (fakeLabelsBuilder_ != null) {
          return fakeLabelsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(fakeLabels_);
        }
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public substrait_extension.PromqlPlan.LabelPair.Builder addFakeLabelsBuilder() {
        return getFakeLabelsFieldBuilder().addBuilder(
            substrait_extension.PromqlPlan.LabelPair.getDefaultInstance());
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public substrait_extension.PromqlPlan.LabelPair.Builder addFakeLabelsBuilder(
          int index) {
        return getFakeLabelsFieldBuilder().addBuilder(
            index, substrait_extension.PromqlPlan.LabelPair.getDefaultInstance());
      }
      /**
       * <pre>
       * Fake labels as key-value pairs
       * </pre>
       *
       * <code>repeated .substrait_extension.LabelPair fake_labels = 6;</code>
       */
      public java.util.List<substrait_extension.PromqlPlan.LabelPair.Builder> 
           getFakeLabelsBuilderList() {
        return getFakeLabelsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          substrait_extension.PromqlPlan.LabelPair, substrait_extension.PromqlPlan.LabelPair.Builder, substrait_extension.PromqlPlan.LabelPairOrBuilder> 
          getFakeLabelsFieldBuilder() {
        if (fakeLabelsBuilder_ == null) {
          fakeLabelsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              substrait_extension.PromqlPlan.LabelPair, substrait_extension.PromqlPlan.LabelPair.Builder, substrait_extension.PromqlPlan.LabelPairOrBuilder>(
                  fakeLabels_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          fakeLabels_ = null;
        }
        return fakeLabelsBuilder_;
      }

      private long timeIndexColumnIdx_ ;
      /**
       * <pre>
       * Column index of time index column
       * </pre>
       *
       * <code>uint64 time_index_column_idx = 7;</code>
       * @return The timeIndexColumnIdx.
       */
      @java.lang.Override
      public long getTimeIndexColumnIdx() {
        return timeIndexColumnIdx_;
      }
      /**
       * <pre>
       * Column index of time index column
       * </pre>
       *
       * <code>uint64 time_index_column_idx = 7;</code>
       * @param value The timeIndexColumnIdx to set.
       * @return This builder for chaining.
       */
      public Builder setTimeIndexColumnIdx(long value) {
        
        timeIndexColumnIdx_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Column index of time index column
       * </pre>
       *
       * <code>uint64 time_index_column_idx = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimeIndexColumnIdx() {
        
        timeIndexColumnIdx_ = 0L;
        onChanged();
        return this;
      }

      private long valueColumnIdx_ ;
      /**
       * <pre>
       * Column index of value column
       * </pre>
       *
       * <code>uint64 value_column_idx = 8;</code>
       * @return The valueColumnIdx.
       */
      @java.lang.Override
      public long getValueColumnIdx() {
        return valueColumnIdx_;
      }
      /**
       * <pre>
       * Column index of value column
       * </pre>
       *
       * <code>uint64 value_column_idx = 8;</code>
       * @param value The valueColumnIdx to set.
       * @return This builder for chaining.
       */
      public Builder setValueColumnIdx(long value) {
        
        valueColumnIdx_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Column index of value column
       * </pre>
       *
       * <code>uint64 value_column_idx = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearValueColumnIdx() {
        
        valueColumnIdx_ = 0L;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:substrait_extension.Absent)
    }

    // @@protoc_insertion_point(class_scope:substrait_extension.Absent)
    private static final substrait_extension.PromqlPlan.Absent DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new substrait_extension.PromqlPlan.Absent();
    }

    public static substrait_extension.PromqlPlan.Absent getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Absent>
        PARSER = new com.google.protobuf.AbstractParser<Absent>() {
      @java.lang.Override
      public Absent parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Absent(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Absent> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Absent> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public substrait_extension.PromqlPlan.Absent getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface LabelPairOrBuilder extends
      // @@protoc_insertion_point(interface_extends:substrait_extension.LabelPair)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string key = 1;</code>
     * @return The key.
     */
    java.lang.String getKey();
    /**
     * <code>string key = 1;</code>
     * @return The bytes for key.
     */
    com.google.protobuf.ByteString
        getKeyBytes();

    /**
     * <code>string value = 2;</code>
     * @return The value.
     */
    java.lang.String getValue();
    /**
     * <code>string value = 2;</code>
     * @return The bytes for value.
     */
    com.google.protobuf.ByteString
        getValueBytes();
  }
  /**
   * Protobuf type {@code substrait_extension.LabelPair}
   */
  public static final class LabelPair extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:substrait_extension.LabelPair)
      LabelPairOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use LabelPair.newBuilder() to construct.
    private LabelPair(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private LabelPair() {
      key_ = "";
      value_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new LabelPair();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private LabelPair(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              key_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              value_ = s;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_LabelPair_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_LabelPair_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              substrait_extension.PromqlPlan.LabelPair.class, substrait_extension.PromqlPlan.LabelPair.Builder.class);
    }

    public static final int KEY_FIELD_NUMBER = 1;
    private volatile java.lang.Object key_;
    /**
     * <code>string key = 1;</code>
     * @return The key.
     */
    @java.lang.Override
    public java.lang.String getKey() {
      java.lang.Object ref = key_;
      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();
        key_ = s;
        return s;
      }
    }
    /**
     * <code>string key = 1;</code>
     * @return The bytes for key.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getKeyBytes() {
      java.lang.Object ref = key_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        key_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 2;
    private volatile java.lang.Object value_;
    /**
     * <code>string value = 2;</code>
     * @return The value.
     */
    @java.lang.Override
    public java.lang.String getValue() {
      java.lang.Object ref = value_;
      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();
        value_ = s;
        return s;
      }
    }
    /**
     * <code>string value = 2;</code>
     * @return The bytes for value.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getValueBytes() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        value_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(key_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, key_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(value_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, value_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(key_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, key_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(value_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, value_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof substrait_extension.PromqlPlan.LabelPair)) {
        return super.equals(obj);
      }
      substrait_extension.PromqlPlan.LabelPair other = (substrait_extension.PromqlPlan.LabelPair) obj;

      if (!getKey()
          .equals(other.getKey())) return false;
      if (!getValue()
          .equals(other.getValue())) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + KEY_FIELD_NUMBER;
      hash = (53 * hash) + getKey().hashCode();
      hash = (37 * hash) + VALUE_FIELD_NUMBER;
      hash = (53 * hash) + getValue().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static substrait_extension.PromqlPlan.LabelPair parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.LabelPair parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.LabelPair parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.LabelPair parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.LabelPair parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.LabelPair parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.LabelPair parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.LabelPair parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.LabelPair parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.LabelPair parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.LabelPair parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.LabelPair parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(substrait_extension.PromqlPlan.LabelPair prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code substrait_extension.LabelPair}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:substrait_extension.LabelPair)
        substrait_extension.PromqlPlan.LabelPairOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_LabelPair_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_LabelPair_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                substrait_extension.PromqlPlan.LabelPair.class, substrait_extension.PromqlPlan.LabelPair.Builder.class);
      }

      // Construct using substrait_extension.PromqlPlan.LabelPair.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        key_ = "";

        value_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_LabelPair_descriptor;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.LabelPair getDefaultInstanceForType() {
        return substrait_extension.PromqlPlan.LabelPair.getDefaultInstance();
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.LabelPair build() {
        substrait_extension.PromqlPlan.LabelPair result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.LabelPair buildPartial() {
        substrait_extension.PromqlPlan.LabelPair result = new substrait_extension.PromqlPlan.LabelPair(this);
        result.key_ = key_;
        result.value_ = value_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof substrait_extension.PromqlPlan.LabelPair) {
          return mergeFrom((substrait_extension.PromqlPlan.LabelPair)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(substrait_extension.PromqlPlan.LabelPair other) {
        if (other == substrait_extension.PromqlPlan.LabelPair.getDefaultInstance()) return this;
        if (!other.getKey().isEmpty()) {
          key_ = other.key_;
          onChanged();
        }
        if (!other.getValue().isEmpty()) {
          value_ = other.value_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        substrait_extension.PromqlPlan.LabelPair parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (substrait_extension.PromqlPlan.LabelPair) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object key_ = "";
      /**
       * <code>string key = 1;</code>
       * @return The key.
       */
      public java.lang.String getKey() {
        java.lang.Object ref = key_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          key_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string key = 1;</code>
       * @return The bytes for key.
       */
      public com.google.protobuf.ByteString
          getKeyBytes() {
        java.lang.Object ref = key_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string key = 1;</code>
       * @param value The key to set.
       * @return This builder for chaining.
       */
      public Builder setKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        key_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string key = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearKey() {
        
        key_ = getDefaultInstance().getKey();
        onChanged();
        return this;
      }
      /**
       * <code>string key = 1;</code>
       * @param value The bytes for key to set.
       * @return This builder for chaining.
       */
      public Builder setKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        key_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object value_ = "";
      /**
       * <code>string value = 2;</code>
       * @return The value.
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          value_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string value = 2;</code>
       * @return The bytes for value.
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string value = 2;</code>
       * @param value The value to set.
       * @return This builder for chaining.
       */
      public Builder setValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string value = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearValue() {
        
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /**
       * <code>string value = 2;</code>
       * @param value The bytes for value to set.
       * @return This builder for chaining.
       */
      public Builder setValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        value_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:substrait_extension.LabelPair)
    }

    // @@protoc_insertion_point(class_scope:substrait_extension.LabelPair)
    private static final substrait_extension.PromqlPlan.LabelPair DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new substrait_extension.PromqlPlan.LabelPair();
    }

    public static substrait_extension.PromqlPlan.LabelPair getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<LabelPair>
        PARSER = new com.google.protobuf.AbstractParser<LabelPair>() {
      @java.lang.Override
      public LabelPair parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new LabelPair(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<LabelPair> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<LabelPair> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public substrait_extension.PromqlPlan.LabelPair getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface HistogramFoldOrBuilder extends
      // @@protoc_insertion_point(interface_extends:substrait_extension.HistogramFold)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Column index of the `le` column (histogram bucket bounds)
     * </pre>
     *
     * <code>uint64 le_column_idx = 1;</code>
     * @return The leColumnIdx.
     */
    long getLeColumnIdx();

    /**
     * <pre>
     * Column index of the timestamp column
     * </pre>
     *
     * <code>uint64 ts_column_idx = 2;</code>
     * @return The tsColumnIdx.
     */
    long getTsColumnIdx();

    /**
     * <pre>
     * Column index of the field column (histogram values)
     * </pre>
     *
     * <code>uint64 field_column_idx = 3;</code>
     * @return The fieldColumnIdx.
     */
    long getFieldColumnIdx();

    /**
     * <pre>
     * Quantile value
     * </pre>
     *
     * <code>double quantile = 4;</code>
     * @return The quantile.
     */
    double getQuantile();
  }
  /**
   * Protobuf type {@code substrait_extension.HistogramFold}
   */
  public static final class HistogramFold extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:substrait_extension.HistogramFold)
      HistogramFoldOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use HistogramFold.newBuilder() to construct.
    private HistogramFold(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private HistogramFold() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new HistogramFold();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private HistogramFold(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 8: {

              leColumnIdx_ = input.readUInt64();
              break;
            }
            case 16: {

              tsColumnIdx_ = input.readUInt64();
              break;
            }
            case 24: {

              fieldColumnIdx_ = input.readUInt64();
              break;
            }
            case 33: {

              quantile_ = input.readDouble();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_HistogramFold_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_HistogramFold_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              substrait_extension.PromqlPlan.HistogramFold.class, substrait_extension.PromqlPlan.HistogramFold.Builder.class);
    }

    public static final int LE_COLUMN_IDX_FIELD_NUMBER = 1;
    private long leColumnIdx_;
    /**
     * <pre>
     * Column index of the `le` column (histogram bucket bounds)
     * </pre>
     *
     * <code>uint64 le_column_idx = 1;</code>
     * @return The leColumnIdx.
     */
    @java.lang.Override
    public long getLeColumnIdx() {
      return leColumnIdx_;
    }

    public static final int TS_COLUMN_IDX_FIELD_NUMBER = 2;
    private long tsColumnIdx_;
    /**
     * <pre>
     * Column index of the timestamp column
     * </pre>
     *
     * <code>uint64 ts_column_idx = 2;</code>
     * @return The tsColumnIdx.
     */
    @java.lang.Override
    public long getTsColumnIdx() {
      return tsColumnIdx_;
    }

    public static final int FIELD_COLUMN_IDX_FIELD_NUMBER = 3;
    private long fieldColumnIdx_;
    /**
     * <pre>
     * Column index of the field column (histogram values)
     * </pre>
     *
     * <code>uint64 field_column_idx = 3;</code>
     * @return The fieldColumnIdx.
     */
    @java.lang.Override
    public long getFieldColumnIdx() {
      return fieldColumnIdx_;
    }

    public static final int QUANTILE_FIELD_NUMBER = 4;
    private double quantile_;
    /**
     * <pre>
     * Quantile value
     * </pre>
     *
     * <code>double quantile = 4;</code>
     * @return The quantile.
     */
    @java.lang.Override
    public double getQuantile() {
      return quantile_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (leColumnIdx_ != 0L) {
        output.writeUInt64(1, leColumnIdx_);
      }
      if (tsColumnIdx_ != 0L) {
        output.writeUInt64(2, tsColumnIdx_);
      }
      if (fieldColumnIdx_ != 0L) {
        output.writeUInt64(3, fieldColumnIdx_);
      }
      if (java.lang.Double.doubleToRawLongBits(quantile_) != 0) {
        output.writeDouble(4, quantile_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (leColumnIdx_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(1, leColumnIdx_);
      }
      if (tsColumnIdx_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(2, tsColumnIdx_);
      }
      if (fieldColumnIdx_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(3, fieldColumnIdx_);
      }
      if (java.lang.Double.doubleToRawLongBits(quantile_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(4, quantile_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof substrait_extension.PromqlPlan.HistogramFold)) {
        return super.equals(obj);
      }
      substrait_extension.PromqlPlan.HistogramFold other = (substrait_extension.PromqlPlan.HistogramFold) obj;

      if (getLeColumnIdx()
          != other.getLeColumnIdx()) return false;
      if (getTsColumnIdx()
          != other.getTsColumnIdx()) return false;
      if (getFieldColumnIdx()
          != other.getFieldColumnIdx()) return false;
      if (java.lang.Double.doubleToLongBits(getQuantile())
          != java.lang.Double.doubleToLongBits(
              other.getQuantile())) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + LE_COLUMN_IDX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getLeColumnIdx());
      hash = (37 * hash) + TS_COLUMN_IDX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getTsColumnIdx());
      hash = (37 * hash) + FIELD_COLUMN_IDX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getFieldColumnIdx());
      hash = (37 * hash) + QUANTILE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getQuantile()));
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static substrait_extension.PromqlPlan.HistogramFold parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.HistogramFold parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.HistogramFold parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.HistogramFold parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.HistogramFold parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.HistogramFold parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.HistogramFold parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.HistogramFold parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.HistogramFold parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.HistogramFold parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.HistogramFold parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.HistogramFold parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(substrait_extension.PromqlPlan.HistogramFold prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code substrait_extension.HistogramFold}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:substrait_extension.HistogramFold)
        substrait_extension.PromqlPlan.HistogramFoldOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_HistogramFold_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_HistogramFold_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                substrait_extension.PromqlPlan.HistogramFold.class, substrait_extension.PromqlPlan.HistogramFold.Builder.class);
      }

      // Construct using substrait_extension.PromqlPlan.HistogramFold.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        leColumnIdx_ = 0L;

        tsColumnIdx_ = 0L;

        fieldColumnIdx_ = 0L;

        quantile_ = 0D;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_HistogramFold_descriptor;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.HistogramFold getDefaultInstanceForType() {
        return substrait_extension.PromqlPlan.HistogramFold.getDefaultInstance();
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.HistogramFold build() {
        substrait_extension.PromqlPlan.HistogramFold result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.HistogramFold buildPartial() {
        substrait_extension.PromqlPlan.HistogramFold result = new substrait_extension.PromqlPlan.HistogramFold(this);
        result.leColumnIdx_ = leColumnIdx_;
        result.tsColumnIdx_ = tsColumnIdx_;
        result.fieldColumnIdx_ = fieldColumnIdx_;
        result.quantile_ = quantile_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof substrait_extension.PromqlPlan.HistogramFold) {
          return mergeFrom((substrait_extension.PromqlPlan.HistogramFold)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(substrait_extension.PromqlPlan.HistogramFold other) {
        if (other == substrait_extension.PromqlPlan.HistogramFold.getDefaultInstance()) return this;
        if (other.getLeColumnIdx() != 0L) {
          setLeColumnIdx(other.getLeColumnIdx());
        }
        if (other.getTsColumnIdx() != 0L) {
          setTsColumnIdx(other.getTsColumnIdx());
        }
        if (other.getFieldColumnIdx() != 0L) {
          setFieldColumnIdx(other.getFieldColumnIdx());
        }
        if (other.getQuantile() != 0D) {
          setQuantile(other.getQuantile());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        substrait_extension.PromqlPlan.HistogramFold parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (substrait_extension.PromqlPlan.HistogramFold) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private long leColumnIdx_ ;
      /**
       * <pre>
       * Column index of the `le` column (histogram bucket bounds)
       * </pre>
       *
       * <code>uint64 le_column_idx = 1;</code>
       * @return The leColumnIdx.
       */
      @java.lang.Override
      public long getLeColumnIdx() {
        return leColumnIdx_;
      }
      /**
       * <pre>
       * Column index of the `le` column (histogram bucket bounds)
       * </pre>
       *
       * <code>uint64 le_column_idx = 1;</code>
       * @param value The leColumnIdx to set.
       * @return This builder for chaining.
       */
      public Builder setLeColumnIdx(long value) {
        
        leColumnIdx_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Column index of the `le` column (histogram bucket bounds)
       * </pre>
       *
       * <code>uint64 le_column_idx = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearLeColumnIdx() {
        
        leColumnIdx_ = 0L;
        onChanged();
        return this;
      }

      private long tsColumnIdx_ ;
      /**
       * <pre>
       * Column index of the timestamp column
       * </pre>
       *
       * <code>uint64 ts_column_idx = 2;</code>
       * @return The tsColumnIdx.
       */
      @java.lang.Override
      public long getTsColumnIdx() {
        return tsColumnIdx_;
      }
      /**
       * <pre>
       * Column index of the timestamp column
       * </pre>
       *
       * <code>uint64 ts_column_idx = 2;</code>
       * @param value The tsColumnIdx to set.
       * @return This builder for chaining.
       */
      public Builder setTsColumnIdx(long value) {
        
        tsColumnIdx_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Column index of the timestamp column
       * </pre>
       *
       * <code>uint64 ts_column_idx = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearTsColumnIdx() {
        
        tsColumnIdx_ = 0L;
        onChanged();
        return this;
      }

      private long fieldColumnIdx_ ;
      /**
       * <pre>
       * Column index of the field column (histogram values)
       * </pre>
       *
       * <code>uint64 field_column_idx = 3;</code>
       * @return The fieldColumnIdx.
       */
      @java.lang.Override
      public long getFieldColumnIdx() {
        return fieldColumnIdx_;
      }
      /**
       * <pre>
       * Column index of the field column (histogram values)
       * </pre>
       *
       * <code>uint64 field_column_idx = 3;</code>
       * @param value The fieldColumnIdx to set.
       * @return This builder for chaining.
       */
      public Builder setFieldColumnIdx(long value) {
        
        fieldColumnIdx_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Column index of the field column (histogram values)
       * </pre>
       *
       * <code>uint64 field_column_idx = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearFieldColumnIdx() {
        
        fieldColumnIdx_ = 0L;
        onChanged();
        return this;
      }

      private double quantile_ ;
      /**
       * <pre>
       * Quantile value
       * </pre>
       *
       * <code>double quantile = 4;</code>
       * @return The quantile.
       */
      @java.lang.Override
      public double getQuantile() {
        return quantile_;
      }
      /**
       * <pre>
       * Quantile value
       * </pre>
       *
       * <code>double quantile = 4;</code>
       * @param value The quantile to set.
       * @return This builder for chaining.
       */
      public Builder setQuantile(double value) {
        
        quantile_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Quantile value
       * </pre>
       *
       * <code>double quantile = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearQuantile() {
        
        quantile_ = 0D;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:substrait_extension.HistogramFold)
    }

    // @@protoc_insertion_point(class_scope:substrait_extension.HistogramFold)
    private static final substrait_extension.PromqlPlan.HistogramFold DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new substrait_extension.PromqlPlan.HistogramFold();
    }

    public static substrait_extension.PromqlPlan.HistogramFold getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<HistogramFold>
        PARSER = new com.google.protobuf.AbstractParser<HistogramFold>() {
      @java.lang.Override
      public HistogramFold parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new HistogramFold(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<HistogramFold> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<HistogramFold> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public substrait_extension.PromqlPlan.HistogramFold getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface UnionDistinctOnOrBuilder extends
      // @@protoc_insertion_point(interface_extends:substrait_extension.UnionDistinctOn)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Indices of columns to compare for equality
     * </pre>
     *
     * <code>repeated uint64 compare_key_indices = 1;</code>
     * @return A list containing the compareKeyIndices.
     */
    java.util.List<java.lang.Long> getCompareKeyIndicesList();
    /**
     * <pre>
     * Indices of columns to compare for equality
     * </pre>
     *
     * <code>repeated uint64 compare_key_indices = 1;</code>
     * @return The count of compareKeyIndices.
     */
    int getCompareKeyIndicesCount();
    /**
     * <pre>
     * Indices of columns to compare for equality
     * </pre>
     *
     * <code>repeated uint64 compare_key_indices = 1;</code>
     * @param index The index of the element to return.
     * @return The compareKeyIndices at the given index.
     */
    long getCompareKeyIndices(int index);

    /**
     * <pre>
     * Column index of the timestamp column
     * </pre>
     *
     * <code>uint64 ts_col_idx = 2;</code>
     * @return The tsColIdx.
     */
    long getTsColIdx();
  }
  /**
   * Protobuf type {@code substrait_extension.UnionDistinctOn}
   */
  public static final class UnionDistinctOn extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:substrait_extension.UnionDistinctOn)
      UnionDistinctOnOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use UnionDistinctOn.newBuilder() to construct.
    private UnionDistinctOn(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private UnionDistinctOn() {
      compareKeyIndices_ = emptyLongList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new UnionDistinctOn();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private UnionDistinctOn(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 8: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                compareKeyIndices_ = newLongList();
                mutable_bitField0_ |= 0x00000001;
              }
              compareKeyIndices_.addLong(input.readUInt64());
              break;
            }
            case 10: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000001) != 0) && input.getBytesUntilLimit() > 0) {
                compareKeyIndices_ = newLongList();
                mutable_bitField0_ |= 0x00000001;
              }
              while (input.getBytesUntilLimit() > 0) {
                compareKeyIndices_.addLong(input.readUInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 16: {

              tsColIdx_ = input.readUInt64();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          compareKeyIndices_.makeImmutable(); // C
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_UnionDistinctOn_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return substrait_extension.PromqlPlan.internal_static_substrait_extension_UnionDistinctOn_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              substrait_extension.PromqlPlan.UnionDistinctOn.class, substrait_extension.PromqlPlan.UnionDistinctOn.Builder.class);
    }

    public static final int COMPARE_KEY_INDICES_FIELD_NUMBER = 1;
    private com.google.protobuf.Internal.LongList compareKeyIndices_;
    /**
     * <pre>
     * Indices of columns to compare for equality
     * </pre>
     *
     * <code>repeated uint64 compare_key_indices = 1;</code>
     * @return A list containing the compareKeyIndices.
     */
    @java.lang.Override
    public java.util.List<java.lang.Long>
        getCompareKeyIndicesList() {
      return compareKeyIndices_;
    }
    /**
     * <pre>
     * Indices of columns to compare for equality
     * </pre>
     *
     * <code>repeated uint64 compare_key_indices = 1;</code>
     * @return The count of compareKeyIndices.
     */
    public int getCompareKeyIndicesCount() {
      return compareKeyIndices_.size();
    }
    /**
     * <pre>
     * Indices of columns to compare for equality
     * </pre>
     *
     * <code>repeated uint64 compare_key_indices = 1;</code>
     * @param index The index of the element to return.
     * @return The compareKeyIndices at the given index.
     */
    public long getCompareKeyIndices(int index) {
      return compareKeyIndices_.getLong(index);
    }
    private int compareKeyIndicesMemoizedSerializedSize = -1;

    public static final int TS_COL_IDX_FIELD_NUMBER = 2;
    private long tsColIdx_;
    /**
     * <pre>
     * Column index of the timestamp column
     * </pre>
     *
     * <code>uint64 ts_col_idx = 2;</code>
     * @return The tsColIdx.
     */
    @java.lang.Override
    public long getTsColIdx() {
      return tsColIdx_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (getCompareKeyIndicesList().size() > 0) {
        output.writeUInt32NoTag(10);
        output.writeUInt32NoTag(compareKeyIndicesMemoizedSerializedSize);
      }
      for (int i = 0; i < compareKeyIndices_.size(); i++) {
        output.writeUInt64NoTag(compareKeyIndices_.getLong(i));
      }
      if (tsColIdx_ != 0L) {
        output.writeUInt64(2, tsColIdx_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < compareKeyIndices_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt64SizeNoTag(compareKeyIndices_.getLong(i));
        }
        size += dataSize;
        if (!getCompareKeyIndicesList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        compareKeyIndicesMemoizedSerializedSize = dataSize;
      }
      if (tsColIdx_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(2, tsColIdx_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof substrait_extension.PromqlPlan.UnionDistinctOn)) {
        return super.equals(obj);
      }
      substrait_extension.PromqlPlan.UnionDistinctOn other = (substrait_extension.PromqlPlan.UnionDistinctOn) obj;

      if (!getCompareKeyIndicesList()
          .equals(other.getCompareKeyIndicesList())) return false;
      if (getTsColIdx()
          != other.getTsColIdx()) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getCompareKeyIndicesCount() > 0) {
        hash = (37 * hash) + COMPARE_KEY_INDICES_FIELD_NUMBER;
        hash = (53 * hash) + getCompareKeyIndicesList().hashCode();
      }
      hash = (37 * hash) + TS_COL_IDX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getTsColIdx());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static substrait_extension.PromqlPlan.UnionDistinctOn parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.UnionDistinctOn parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.UnionDistinctOn parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.UnionDistinctOn parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.UnionDistinctOn parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static substrait_extension.PromqlPlan.UnionDistinctOn parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.UnionDistinctOn parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.UnionDistinctOn parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.UnionDistinctOn parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.UnionDistinctOn parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static substrait_extension.PromqlPlan.UnionDistinctOn parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static substrait_extension.PromqlPlan.UnionDistinctOn parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(substrait_extension.PromqlPlan.UnionDistinctOn prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code substrait_extension.UnionDistinctOn}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:substrait_extension.UnionDistinctOn)
        substrait_extension.PromqlPlan.UnionDistinctOnOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_UnionDistinctOn_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_UnionDistinctOn_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                substrait_extension.PromqlPlan.UnionDistinctOn.class, substrait_extension.PromqlPlan.UnionDistinctOn.Builder.class);
      }

      // Construct using substrait_extension.PromqlPlan.UnionDistinctOn.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        compareKeyIndices_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000001);
        tsColIdx_ = 0L;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return substrait_extension.PromqlPlan.internal_static_substrait_extension_UnionDistinctOn_descriptor;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.UnionDistinctOn getDefaultInstanceForType() {
        return substrait_extension.PromqlPlan.UnionDistinctOn.getDefaultInstance();
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.UnionDistinctOn build() {
        substrait_extension.PromqlPlan.UnionDistinctOn result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public substrait_extension.PromqlPlan.UnionDistinctOn buildPartial() {
        substrait_extension.PromqlPlan.UnionDistinctOn result = new substrait_extension.PromqlPlan.UnionDistinctOn(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) != 0)) {
          compareKeyIndices_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.compareKeyIndices_ = compareKeyIndices_;
        result.tsColIdx_ = tsColIdx_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof substrait_extension.PromqlPlan.UnionDistinctOn) {
          return mergeFrom((substrait_extension.PromqlPlan.UnionDistinctOn)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(substrait_extension.PromqlPlan.UnionDistinctOn other) {
        if (other == substrait_extension.PromqlPlan.UnionDistinctOn.getDefaultInstance()) return this;
        if (!other.compareKeyIndices_.isEmpty()) {
          if (compareKeyIndices_.isEmpty()) {
            compareKeyIndices_ = other.compareKeyIndices_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureCompareKeyIndicesIsMutable();
            compareKeyIndices_.addAll(other.compareKeyIndices_);
          }
          onChanged();
        }
        if (other.getTsColIdx() != 0L) {
          setTsColIdx(other.getTsColIdx());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        substrait_extension.PromqlPlan.UnionDistinctOn parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (substrait_extension.PromqlPlan.UnionDistinctOn) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.Internal.LongList compareKeyIndices_ = emptyLongList();
      private void ensureCompareKeyIndicesIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          compareKeyIndices_ = mutableCopy(compareKeyIndices_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * Indices of columns to compare for equality
       * </pre>
       *
       * <code>repeated uint64 compare_key_indices = 1;</code>
       * @return A list containing the compareKeyIndices.
       */
      public java.util.List<java.lang.Long>
          getCompareKeyIndicesList() {
        return ((bitField0_ & 0x00000001) != 0) ?
                 java.util.Collections.unmodifiableList(compareKeyIndices_) : compareKeyIndices_;
      }
      /**
       * <pre>
       * Indices of columns to compare for equality
       * </pre>
       *
       * <code>repeated uint64 compare_key_indices = 1;</code>
       * @return The count of compareKeyIndices.
       */
      public int getCompareKeyIndicesCount() {
        return compareKeyIndices_.size();
      }
      /**
       * <pre>
       * Indices of columns to compare for equality
       * </pre>
       *
       * <code>repeated uint64 compare_key_indices = 1;</code>
       * @param index The index of the element to return.
       * @return The compareKeyIndices at the given index.
       */
      public long getCompareKeyIndices(int index) {
        return compareKeyIndices_.getLong(index);
      }
      /**
       * <pre>
       * Indices of columns to compare for equality
       * </pre>
       *
       * <code>repeated uint64 compare_key_indices = 1;</code>
       * @param index The index to set the value at.
       * @param value The compareKeyIndices to set.
       * @return This builder for chaining.
       */
      public Builder setCompareKeyIndices(
          int index, long value) {
        ensureCompareKeyIndicesIsMutable();
        compareKeyIndices_.setLong(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Indices of columns to compare for equality
       * </pre>
       *
       * <code>repeated uint64 compare_key_indices = 1;</code>
       * @param value The compareKeyIndices to add.
       * @return This builder for chaining.
       */
      public Builder addCompareKeyIndices(long value) {
        ensureCompareKeyIndicesIsMutable();
        compareKeyIndices_.addLong(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Indices of columns to compare for equality
       * </pre>
       *
       * <code>repeated uint64 compare_key_indices = 1;</code>
       * @param values The compareKeyIndices to add.
       * @return This builder for chaining.
       */
      public Builder addAllCompareKeyIndices(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureCompareKeyIndicesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, compareKeyIndices_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Indices of columns to compare for equality
       * </pre>
       *
       * <code>repeated uint64 compare_key_indices = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearCompareKeyIndices() {
        compareKeyIndices_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }

      private long tsColIdx_ ;
      /**
       * <pre>
       * Column index of the timestamp column
       * </pre>
       *
       * <code>uint64 ts_col_idx = 2;</code>
       * @return The tsColIdx.
       */
      @java.lang.Override
      public long getTsColIdx() {
        return tsColIdx_;
      }
      /**
       * <pre>
       * Column index of the timestamp column
       * </pre>
       *
       * <code>uint64 ts_col_idx = 2;</code>
       * @param value The tsColIdx to set.
       * @return This builder for chaining.
       */
      public Builder setTsColIdx(long value) {
        
        tsColIdx_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Column index of the timestamp column
       * </pre>
       *
       * <code>uint64 ts_col_idx = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearTsColIdx() {
        
        tsColIdx_ = 0L;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:substrait_extension.UnionDistinctOn)
    }

    // @@protoc_insertion_point(class_scope:substrait_extension.UnionDistinctOn)
    private static final substrait_extension.PromqlPlan.UnionDistinctOn DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new substrait_extension.PromqlPlan.UnionDistinctOn();
    }

    public static substrait_extension.PromqlPlan.UnionDistinctOn getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<UnionDistinctOn>
        PARSER = new com.google.protobuf.AbstractParser<UnionDistinctOn>() {
      @java.lang.Override
      public UnionDistinctOn parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new UnionDistinctOn(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<UnionDistinctOn> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<UnionDistinctOn> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public substrait_extension.PromqlPlan.UnionDistinctOn getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_substrait_extension_EmptyMetric_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_substrait_extension_EmptyMetric_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_substrait_extension_InstantManipulate_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_substrait_extension_InstantManipulate_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_substrait_extension_SeriesNormalize_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_substrait_extension_SeriesNormalize_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_substrait_extension_SeriesDivide_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_substrait_extension_SeriesDivide_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_substrait_extension_RangeManipulate_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_substrait_extension_RangeManipulate_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_substrait_extension_ScalarCalculate_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_substrait_extension_ScalarCalculate_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_substrait_extension_Absent_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_substrait_extension_Absent_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_substrait_extension_LabelPair_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_substrait_extension_LabelPair_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_substrait_extension_HistogramFold_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_substrait_extension_HistogramFold_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_substrait_extension_UnionDistinctOn_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_substrait_extension_UnionDistinctOn_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n%substrait_extension/promql_plan.proto\022" +
      "\023substrait_extension\";\n\013EmptyMetric\022\r\n\005s" +
      "tart\030\001 \001(\003\022\013\n\003end\030\002 \001(\003\022\020\n\010interval\030\003 \001(" +
      "\003\"\273\001\n\021InstantManipulate\022\r\n\005start\030\001 \001(\003\022\013" +
      "\n\003end\030\002 \001(\003\022\020\n\010interval\030\003 \001(\003\022\026\n\016lookbac" +
      "k_delta\030\004 \001(\003\022\026\n\ntime_index\030\005 \001(\tB\002\030\001\022\027\n" +
      "\013field_index\030\006 \001(\tB\002\030\001\022\026\n\016time_index_idx" +
      "\030\007 \001(\004\022\027\n\017field_index_idx\030\010 \001(\004\"\232\001\n\017Seri" +
      "esNormalize\022\016\n\006offset\030\001 \001(\003\022\026\n\ntime_inde" +
      "x\030\002 \001(\tB\002\030\001\022\022\n\nfilter_nan\030\003 \001(\010\022\027\n\013tag_c" +
      "olumns\030\004 \003(\tB\002\030\001\022\026\n\016time_index_idx\030\005 \001(\004" +
      "\022\032\n\022tag_column_indices\030\006 \003(\004\"\201\001\n\014SeriesD" +
      "ivide\022\027\n\013tag_columns\030\001 \003(\tB\002\030\001\022\035\n\021time_i" +
      "ndex_column\030\002 \001(\tB\002\030\001\022\032\n\022tag_column_indi" +
      "ces\030\003 \003(\004\022\035\n\025time_index_column_idx\030\004 \001(\004" +
      "\"\263\001\n\017RangeManipulate\022\r\n\005start\030\001 \001(\003\022\013\n\003e" +
      "nd\030\002 \001(\003\022\020\n\010interval\030\003 \001(\003\022\r\n\005range\030\004 \001(" +
      "\003\022\026\n\ntime_index\030\005 \001(\tB\002\030\001\022\027\n\013tag_columns" +
      "\030\006 \003(\tB\002\030\001\022\026\n\016time_index_idx\030\007 \001(\004\022\032\n\022ta" +
      "g_column_indices\030\010 \003(\004\"\330\001\n\017ScalarCalcula" +
      "te\022\r\n\005start\030\001 \001(\003\022\013\n\003end\030\002 \001(\003\022\020\n\010interv" +
      "al\030\003 \001(\003\022\026\n\ntime_index\030\005 \001(\tB\002\030\001\022\027\n\013tag_" +
      "columns\030\006 \003(\tB\002\030\001\022\030\n\014field_column\030\007 \001(\tB" +
      "\002\030\001\022\026\n\016time_index_idx\030\010 \001(\004\022\032\n\022tag_colum" +
      "n_indices\030\t \003(\004\022\030\n\020field_column_idx\030\n \001(" +
      "\004\"\331\001\n\006Absent\022\r\n\005start\030\001 \001(\003\022\013\n\003end\030\002 \001(\003" +
      "\022\014\n\004step\030\003 \001(\003\022\035\n\021time_index_column\030\004 \001(" +
      "\tB\002\030\001\022\030\n\014value_column\030\005 \001(\tB\002\030\001\0223\n\013fake_" +
      "labels\030\006 \003(\0132\036.substrait_extension.Label" +
      "Pair\022\035\n\025time_index_column_idx\030\007 \001(\004\022\030\n\020v" +
      "alue_column_idx\030\010 \001(\004\"\'\n\tLabelPair\022\013\n\003ke" +
      "y\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\"i\n\rHistogramFold\022" +
      "\025\n\rle_column_idx\030\001 \001(\004\022\025\n\rts_column_idx\030" +
      "\002 \001(\004\022\030\n\020field_column_idx\030\003 \001(\004\022\020\n\010quant" +
      "ile\030\004 \001(\001\"B\n\017UnionDistinctOn\022\033\n\023compare_" +
      "key_indices\030\001 \003(\004\022\022\n\nts_col_idx\030\002 \001(\004B?Z" +
      "=github.com/GreptimeTeam/greptime-proto/" +
      "go/substrait_extensionb\006proto3"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        });
    internal_static_substrait_extension_EmptyMetric_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_substrait_extension_EmptyMetric_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_substrait_extension_EmptyMetric_descriptor,
        new java.lang.String[] { "Start", "End", "Interval", });
    internal_static_substrait_extension_InstantManipulate_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_substrait_extension_InstantManipulate_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_substrait_extension_InstantManipulate_descriptor,
        new java.lang.String[] { "Start", "End", "Interval", "LookbackDelta", "TimeIndex", "FieldIndex", "TimeIndexIdx", "FieldIndexIdx", });
    internal_static_substrait_extension_SeriesNormalize_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_substrait_extension_SeriesNormalize_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_substrait_extension_SeriesNormalize_descriptor,
        new java.lang.String[] { "Offset", "TimeIndex", "FilterNan", "TagColumns", "TimeIndexIdx", "TagColumnIndices", });
    internal_static_substrait_extension_SeriesDivide_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_substrait_extension_SeriesDivide_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_substrait_extension_SeriesDivide_descriptor,
        new java.lang.String[] { "TagColumns", "TimeIndexColumn", "TagColumnIndices", "TimeIndexColumnIdx", });
    internal_static_substrait_extension_RangeManipulate_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_substrait_extension_RangeManipulate_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_substrait_extension_RangeManipulate_descriptor,
        new java.lang.String[] { "Start", "End", "Interval", "Range", "TimeIndex", "TagColumns", "TimeIndexIdx", "TagColumnIndices", });
    internal_static_substrait_extension_ScalarCalculate_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_substrait_extension_ScalarCalculate_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_substrait_extension_ScalarCalculate_descriptor,
        new java.lang.String[] { "Start", "End", "Interval", "TimeIndex", "TagColumns", "FieldColumn", "TimeIndexIdx", "TagColumnIndices", "FieldColumnIdx", });
    internal_static_substrait_extension_Absent_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_substrait_extension_Absent_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_substrait_extension_Absent_descriptor,
        new java.lang.String[] { "Start", "End", "Step", "TimeIndexColumn", "ValueColumn", "FakeLabels", "TimeIndexColumnIdx", "ValueColumnIdx", });
    internal_static_substrait_extension_LabelPair_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_substrait_extension_LabelPair_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_substrait_extension_LabelPair_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_substrait_extension_HistogramFold_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_substrait_extension_HistogramFold_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_substrait_extension_HistogramFold_descriptor,
        new java.lang.String[] { "LeColumnIdx", "TsColumnIdx", "FieldColumnIdx", "Quantile", });
    internal_static_substrait_extension_UnionDistinctOn_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_substrait_extension_UnionDistinctOn_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_substrait_extension_UnionDistinctOn_descriptor,
        new java.lang.String[] { "CompareKeyIndices", "TsColIdx", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
