/*
 * Copyright 2020 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/cloud/dataplex/v1/data_quality.proto

package com.google.cloud.dataplex.v1;

/**
 *
 *
 * <pre>
 * A rule captures data quality intent about a data source.
 * </pre>
 *
 * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule}
 */
public final class DataQualityRule extends com.google.protobuf.GeneratedMessageV3
    implements
    // @@protoc_insertion_point(message_implements:google.cloud.dataplex.v1.DataQualityRule)
    DataQualityRuleOrBuilder {
  private static final long serialVersionUID = 0L;
  // Use DataQualityRule.newBuilder() to construct.
  private DataQualityRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
    super(builder);
  }

  private DataQualityRule() {
    column_ = "";
    dimension_ = "";
  }

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

  @java.lang.Override
  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
    return this.unknownFields;
  }

  public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
    return com.google.cloud.dataplex.v1.DataQualityProto
        .internal_static_google_cloud_dataplex_v1_DataQualityRule_descriptor;
  }

  @java.lang.Override
  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internalGetFieldAccessorTable() {
    return com.google.cloud.dataplex.v1.DataQualityProto
        .internal_static_google_cloud_dataplex_v1_DataQualityRule_fieldAccessorTable
        .ensureFieldAccessorsInitialized(
            com.google.cloud.dataplex.v1.DataQualityRule.class,
            com.google.cloud.dataplex.v1.DataQualityRule.Builder.class);
  }

  public interface RangeExpectationOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:google.cloud.dataplex.v1.DataQualityRule.RangeExpectation)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * Optional. The minimum column value allowed for a row to pass this
     * validation. At least one of `min_value` and `max_value` need to be
     * provided.
     * </pre>
     *
     * <code>string min_value = 1 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The minValue.
     */
    java.lang.String getMinValue();
    /**
     *
     *
     * <pre>
     * Optional. The minimum column value allowed for a row to pass this
     * validation. At least one of `min_value` and `max_value` need to be
     * provided.
     * </pre>
     *
     * <code>string min_value = 1 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The bytes for minValue.
     */
    com.google.protobuf.ByteString getMinValueBytes();

    /**
     *
     *
     * <pre>
     * Optional. The maximum column value allowed for a row to pass this
     * validation. At least one of `min_value` and `max_value` need to be
     * provided.
     * </pre>
     *
     * <code>string max_value = 2 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The maxValue.
     */
    java.lang.String getMaxValue();
    /**
     *
     *
     * <pre>
     * Optional. The maximum column value allowed for a row to pass this
     * validation. At least one of `min_value` and `max_value` need to be
     * provided.
     * </pre>
     *
     * <code>string max_value = 2 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The bytes for maxValue.
     */
    com.google.protobuf.ByteString getMaxValueBytes();

    /**
     *
     *
     * <pre>
     * Optional. Whether each value needs to be strictly greater than ('&gt;') the
     * minimum, or if equality is allowed.
     * Only relevant if a `min_value` has been defined. Default = false.
     * </pre>
     *
     * <code>bool strict_min_enabled = 3 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The strictMinEnabled.
     */
    boolean getStrictMinEnabled();

    /**
     *
     *
     * <pre>
     * Optional. Whether each value needs to be strictly lesser than ('&lt;') the
     * maximum, or if equality is allowed.
     * Only relevant if a `max_value` has been defined. Default = false.
     * </pre>
     *
     * <code>bool strict_max_enabled = 4 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The strictMaxEnabled.
     */
    boolean getStrictMaxEnabled();
  }
  /**
   *
   *
   * <pre>
   * Evaluates whether each column value lies between a specified range.
   * </pre>
   *
   * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.RangeExpectation}
   */
  public static final class RangeExpectation extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:google.cloud.dataplex.v1.DataQualityRule.RangeExpectation)
      RangeExpectationOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use RangeExpectation.newBuilder() to construct.
    private RangeExpectation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private RangeExpectation() {
      minValue_ = "";
      maxValue_ = "";
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_RangeExpectation_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_RangeExpectation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.class,
              com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.Builder.class);
    }

    public static final int MIN_VALUE_FIELD_NUMBER = 1;

    @SuppressWarnings("serial")
    private volatile java.lang.Object minValue_ = "";
    /**
     *
     *
     * <pre>
     * Optional. The minimum column value allowed for a row to pass this
     * validation. At least one of `min_value` and `max_value` need to be
     * provided.
     * </pre>
     *
     * <code>string min_value = 1 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The minValue.
     */
    @java.lang.Override
    public java.lang.String getMinValue() {
      java.lang.Object ref = minValue_;
      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();
        minValue_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * Optional. The minimum column value allowed for a row to pass this
     * validation. At least one of `min_value` and `max_value` need to be
     * provided.
     * </pre>
     *
     * <code>string min_value = 1 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The bytes for minValue.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getMinValueBytes() {
      java.lang.Object ref = minValue_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        minValue_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MAX_VALUE_FIELD_NUMBER = 2;

    @SuppressWarnings("serial")
    private volatile java.lang.Object maxValue_ = "";
    /**
     *
     *
     * <pre>
     * Optional. The maximum column value allowed for a row to pass this
     * validation. At least one of `min_value` and `max_value` need to be
     * provided.
     * </pre>
     *
     * <code>string max_value = 2 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The maxValue.
     */
    @java.lang.Override
    public java.lang.String getMaxValue() {
      java.lang.Object ref = maxValue_;
      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();
        maxValue_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * Optional. The maximum column value allowed for a row to pass this
     * validation. At least one of `min_value` and `max_value` need to be
     * provided.
     * </pre>
     *
     * <code>string max_value = 2 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The bytes for maxValue.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getMaxValueBytes() {
      java.lang.Object ref = maxValue_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        maxValue_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int STRICT_MIN_ENABLED_FIELD_NUMBER = 3;
    private boolean strictMinEnabled_ = false;
    /**
     *
     *
     * <pre>
     * Optional. Whether each value needs to be strictly greater than ('&gt;') the
     * minimum, or if equality is allowed.
     * Only relevant if a `min_value` has been defined. Default = false.
     * </pre>
     *
     * <code>bool strict_min_enabled = 3 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The strictMinEnabled.
     */
    @java.lang.Override
    public boolean getStrictMinEnabled() {
      return strictMinEnabled_;
    }

    public static final int STRICT_MAX_ENABLED_FIELD_NUMBER = 4;
    private boolean strictMaxEnabled_ = false;
    /**
     *
     *
     * <pre>
     * Optional. Whether each value needs to be strictly lesser than ('&lt;') the
     * maximum, or if equality is allowed.
     * Only relevant if a `max_value` has been defined. Default = false.
     * </pre>
     *
     * <code>bool strict_max_enabled = 4 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The strictMaxEnabled.
     */
    @java.lang.Override
    public boolean getStrictMaxEnabled() {
      return strictMaxEnabled_;
    }

    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(minValue_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, minValue_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(maxValue_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, maxValue_);
      }
      if (strictMinEnabled_ != false) {
        output.writeBool(3, strictMinEnabled_);
      }
      if (strictMaxEnabled_ != false) {
        output.writeBool(4, strictMaxEnabled_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(minValue_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, minValue_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(maxValue_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, maxValue_);
      }
      if (strictMinEnabled_ != false) {
        size += com.google.protobuf.CodedOutputStream.computeBoolSize(3, strictMinEnabled_);
      }
      if (strictMaxEnabled_ != false) {
        size += com.google.protobuf.CodedOutputStream.computeBoolSize(4, strictMaxEnabled_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation)) {
        return super.equals(obj);
      }
      com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation other =
          (com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation) obj;

      if (!getMinValue().equals(other.getMinValue())) return false;
      if (!getMaxValue().equals(other.getMaxValue())) return false;
      if (getStrictMinEnabled() != other.getStrictMinEnabled()) return false;
      if (getStrictMaxEnabled() != other.getStrictMaxEnabled()) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) 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) + MIN_VALUE_FIELD_NUMBER;
      hash = (53 * hash) + getMinValue().hashCode();
      hash = (37 * hash) + MAX_VALUE_FIELD_NUMBER;
      hash = (53 * hash) + getMaxValue().hashCode();
      hash = (37 * hash) + STRICT_MIN_ENABLED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getStrictMinEnabled());
      hash = (37 * hash) + STRICT_MAX_ENABLED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getStrictMaxEnabled());
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation parseFrom(
        java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation parseFrom(
        byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation parseFrom(
        java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation 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 com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation parseDelimitedFrom(
        java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation 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 com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation parseFrom(
        com.google.protobuf.CodedInputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation 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(
        com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation 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;
    }
    /**
     *
     *
     * <pre>
     * Evaluates whether each column value lies between a specified range.
     * </pre>
     *
     * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.RangeExpectation}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:google.cloud.dataplex.v1.DataQualityRule.RangeExpectation)
        com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_RangeExpectation_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_RangeExpectation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.class,
                com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.Builder.class);
      }

      // Construct using com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.newBuilder()
      private Builder() {}

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        minValue_ = "";
        maxValue_ = "";
        strictMinEnabled_ = false;
        strictMaxEnabled_ = false;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_RangeExpectation_descriptor;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation
          getDefaultInstanceForType() {
        return com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.getDefaultInstance();
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation build() {
        com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation buildPartial() {
        com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation result =
            new com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation(this);
        if (bitField0_ != 0) {
          buildPartial0(result);
        }
        onBuilt();
        return result;
      }

      private void buildPartial0(
          com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.minValue_ = minValue_;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.maxValue_ = maxValue_;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.strictMinEnabled_ = strictMinEnabled_;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.strictMaxEnabled_ = strictMaxEnabled_;
        }
      }

      @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 com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation) {
          return mergeFrom((com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(
          com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation other) {
        if (other
            == com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.getDefaultInstance())
          return this;
        if (!other.getMinValue().isEmpty()) {
          minValue_ = other.minValue_;
          bitField0_ |= 0x00000001;
          onChanged();
        }
        if (!other.getMaxValue().isEmpty()) {
          maxValue_ = other.maxValue_;
          bitField0_ |= 0x00000002;
          onChanged();
        }
        if (other.getStrictMinEnabled() != false) {
          setStrictMinEnabled(other.getStrictMinEnabled());
        }
        if (other.getStrictMaxEnabled() != false) {
          setStrictMaxEnabled(other.getStrictMaxEnabled());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        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 {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10:
                {
                  minValue_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000001;
                  break;
                } // case 10
              case 18:
                {
                  maxValue_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000002;
                  break;
                } // case 18
              case 24:
                {
                  strictMinEnabled_ = input.readBool();
                  bitField0_ |= 0x00000004;
                  break;
                } // case 24
              case 32:
                {
                  strictMaxEnabled_ = input.readBool();
                  bitField0_ |= 0x00000008;
                  break;
                } // case 32
              default:
                {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private int bitField0_;

      private java.lang.Object minValue_ = "";
      /**
       *
       *
       * <pre>
       * Optional. The minimum column value allowed for a row to pass this
       * validation. At least one of `min_value` and `max_value` need to be
       * provided.
       * </pre>
       *
       * <code>string min_value = 1 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @return The minValue.
       */
      public java.lang.String getMinValue() {
        java.lang.Object ref = minValue_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          minValue_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * Optional. The minimum column value allowed for a row to pass this
       * validation. At least one of `min_value` and `max_value` need to be
       * provided.
       * </pre>
       *
       * <code>string min_value = 1 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @return The bytes for minValue.
       */
      public com.google.protobuf.ByteString getMinValueBytes() {
        java.lang.Object ref = minValue_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          minValue_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * Optional. The minimum column value allowed for a row to pass this
       * validation. At least one of `min_value` and `max_value` need to be
       * provided.
       * </pre>
       *
       * <code>string min_value = 1 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @param value The minValue to set.
       * @return This builder for chaining.
       */
      public Builder setMinValue(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        minValue_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Optional. The minimum column value allowed for a row to pass this
       * validation. At least one of `min_value` and `max_value` need to be
       * provided.
       * </pre>
       *
       * <code>string min_value = 1 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @return This builder for chaining.
       */
      public Builder clearMinValue() {
        minValue_ = getDefaultInstance().getMinValue();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Optional. The minimum column value allowed for a row to pass this
       * validation. At least one of `min_value` and `max_value` need to be
       * provided.
       * </pre>
       *
       * <code>string min_value = 1 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @param value The bytes for minValue to set.
       * @return This builder for chaining.
       */
      public Builder setMinValueBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);
        minValue_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }

      private java.lang.Object maxValue_ = "";
      /**
       *
       *
       * <pre>
       * Optional. The maximum column value allowed for a row to pass this
       * validation. At least one of `min_value` and `max_value` need to be
       * provided.
       * </pre>
       *
       * <code>string max_value = 2 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @return The maxValue.
       */
      public java.lang.String getMaxValue() {
        java.lang.Object ref = maxValue_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          maxValue_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * Optional. The maximum column value allowed for a row to pass this
       * validation. At least one of `min_value` and `max_value` need to be
       * provided.
       * </pre>
       *
       * <code>string max_value = 2 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @return The bytes for maxValue.
       */
      public com.google.protobuf.ByteString getMaxValueBytes() {
        java.lang.Object ref = maxValue_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          maxValue_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * Optional. The maximum column value allowed for a row to pass this
       * validation. At least one of `min_value` and `max_value` need to be
       * provided.
       * </pre>
       *
       * <code>string max_value = 2 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @param value The maxValue to set.
       * @return This builder for chaining.
       */
      public Builder setMaxValue(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        maxValue_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Optional. The maximum column value allowed for a row to pass this
       * validation. At least one of `min_value` and `max_value` need to be
       * provided.
       * </pre>
       *
       * <code>string max_value = 2 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @return This builder for chaining.
       */
      public Builder clearMaxValue() {
        maxValue_ = getDefaultInstance().getMaxValue();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Optional. The maximum column value allowed for a row to pass this
       * validation. At least one of `min_value` and `max_value` need to be
       * provided.
       * </pre>
       *
       * <code>string max_value = 2 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @param value The bytes for maxValue to set.
       * @return This builder for chaining.
       */
      public Builder setMaxValueBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);
        maxValue_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }

      private boolean strictMinEnabled_;
      /**
       *
       *
       * <pre>
       * Optional. Whether each value needs to be strictly greater than ('&gt;') the
       * minimum, or if equality is allowed.
       * Only relevant if a `min_value` has been defined. Default = false.
       * </pre>
       *
       * <code>bool strict_min_enabled = 3 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @return The strictMinEnabled.
       */
      @java.lang.Override
      public boolean getStrictMinEnabled() {
        return strictMinEnabled_;
      }
      /**
       *
       *
       * <pre>
       * Optional. Whether each value needs to be strictly greater than ('&gt;') the
       * minimum, or if equality is allowed.
       * Only relevant if a `min_value` has been defined. Default = false.
       * </pre>
       *
       * <code>bool strict_min_enabled = 3 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @param value The strictMinEnabled to set.
       * @return This builder for chaining.
       */
      public Builder setStrictMinEnabled(boolean value) {

        strictMinEnabled_ = value;
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Optional. Whether each value needs to be strictly greater than ('&gt;') the
       * minimum, or if equality is allowed.
       * Only relevant if a `min_value` has been defined. Default = false.
       * </pre>
       *
       * <code>bool strict_min_enabled = 3 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @return This builder for chaining.
       */
      public Builder clearStrictMinEnabled() {
        bitField0_ = (bitField0_ & ~0x00000004);
        strictMinEnabled_ = false;
        onChanged();
        return this;
      }

      private boolean strictMaxEnabled_;
      /**
       *
       *
       * <pre>
       * Optional. Whether each value needs to be strictly lesser than ('&lt;') the
       * maximum, or if equality is allowed.
       * Only relevant if a `max_value` has been defined. Default = false.
       * </pre>
       *
       * <code>bool strict_max_enabled = 4 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @return The strictMaxEnabled.
       */
      @java.lang.Override
      public boolean getStrictMaxEnabled() {
        return strictMaxEnabled_;
      }
      /**
       *
       *
       * <pre>
       * Optional. Whether each value needs to be strictly lesser than ('&lt;') the
       * maximum, or if equality is allowed.
       * Only relevant if a `max_value` has been defined. Default = false.
       * </pre>
       *
       * <code>bool strict_max_enabled = 4 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @param value The strictMaxEnabled to set.
       * @return This builder for chaining.
       */
      public Builder setStrictMaxEnabled(boolean value) {

        strictMaxEnabled_ = value;
        bitField0_ |= 0x00000008;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Optional. Whether each value needs to be strictly lesser than ('&lt;') the
       * maximum, or if equality is allowed.
       * Only relevant if a `max_value` has been defined. Default = false.
       * </pre>
       *
       * <code>bool strict_max_enabled = 4 [(.google.api.field_behavior) = OPTIONAL];</code>
       *
       * @return This builder for chaining.
       */
      public Builder clearStrictMaxEnabled() {
        bitField0_ = (bitField0_ & ~0x00000008);
        strictMaxEnabled_ = false;
        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:google.cloud.dataplex.v1.DataQualityRule.RangeExpectation)
    }

    // @@protoc_insertion_point(class_scope:google.cloud.dataplex.v1.DataQualityRule.RangeExpectation)
    private static final com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation
        DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation();
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation
        getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<RangeExpectation> PARSER =
        new com.google.protobuf.AbstractParser<RangeExpectation>() {
          @java.lang.Override
          public RangeExpectation parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            Builder builder = newBuilder();
            try {
              builder.mergeFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              throw e.setUnfinishedMessage(builder.buildPartial());
            } catch (com.google.protobuf.UninitializedMessageException e) {
              throw e.asInvalidProtocolBufferException()
                  .setUnfinishedMessage(builder.buildPartial());
            } catch (java.io.IOException e) {
              throw new com.google.protobuf.InvalidProtocolBufferException(e)
                  .setUnfinishedMessage(builder.buildPartial());
            }
            return builder.buildPartial();
          }
        };

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

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

    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation
        getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface NonNullExpectationOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation)
      com.google.protobuf.MessageOrBuilder {}
  /**
   *
   *
   * <pre>
   * Evaluates whether each column value is null.
   * </pre>
   *
   * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation}
   */
  public static final class NonNullExpectation extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation)
      NonNullExpectationOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use NonNullExpectation.newBuilder() to construct.
    private NonNullExpectation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private NonNullExpectation() {}

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_NonNullExpectation_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_NonNullExpectation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.class,
              com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.Builder.class);
    }

    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 {
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation)) {
        return super.equals(obj);
      }
      com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation other =
          (com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation) obj;

      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation parseFrom(
        java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation parseFrom(
        byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation parseFrom(
        java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation 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 com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation
        parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation
        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 com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation parseFrom(
        com.google.protobuf.CodedInputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation 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(
        com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation 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;
    }
    /**
     *
     *
     * <pre>
     * Evaluates whether each column value is null.
     * </pre>
     *
     * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation)
        com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_NonNullExpectation_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_NonNullExpectation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.class,
                com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.Builder.class);
      }

      // Construct using
      // com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.newBuilder()
      private Builder() {}

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_NonNullExpectation_descriptor;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation
          getDefaultInstanceForType() {
        return com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.getDefaultInstance();
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation build() {
        com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation buildPartial() {
        com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation result =
            new com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation(this);
        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 com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation) {
          return mergeFrom((com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(
          com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation other) {
        if (other
            == com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.getDefaultInstance())
          return this;
        this.mergeUnknownFields(other.getUnknownFields());
        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 {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default:
                {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        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:google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation)
    }

    // @@protoc_insertion_point(class_scope:google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation)
    private static final com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation
        DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation();
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation
        getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<NonNullExpectation> PARSER =
        new com.google.protobuf.AbstractParser<NonNullExpectation>() {
          @java.lang.Override
          public NonNullExpectation parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            Builder builder = newBuilder();
            try {
              builder.mergeFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              throw e.setUnfinishedMessage(builder.buildPartial());
            } catch (com.google.protobuf.UninitializedMessageException e) {
              throw e.asInvalidProtocolBufferException()
                  .setUnfinishedMessage(builder.buildPartial());
            } catch (java.io.IOException e) {
              throw new com.google.protobuf.InvalidProtocolBufferException(e)
                  .setUnfinishedMessage(builder.buildPartial());
            }
            return builder.buildPartial();
          }
        };

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

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

    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation
        getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface SetExpectationOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:google.cloud.dataplex.v1.DataQualityRule.SetExpectation)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * Expected values for the column value.
     * </pre>
     *
     * <code>repeated string values = 1;</code>
     *
     * @return A list containing the values.
     */
    java.util.List<java.lang.String> getValuesList();
    /**
     *
     *
     * <pre>
     * Expected values for the column value.
     * </pre>
     *
     * <code>repeated string values = 1;</code>
     *
     * @return The count of values.
     */
    int getValuesCount();
    /**
     *
     *
     * <pre>
     * Expected values for the column value.
     * </pre>
     *
     * <code>repeated string values = 1;</code>
     *
     * @param index The index of the element to return.
     * @return The values at the given index.
     */
    java.lang.String getValues(int index);
    /**
     *
     *
     * <pre>
     * Expected values for the column value.
     * </pre>
     *
     * <code>repeated string values = 1;</code>
     *
     * @param index The index of the value to return.
     * @return The bytes of the values at the given index.
     */
    com.google.protobuf.ByteString getValuesBytes(int index);
  }
  /**
   *
   *
   * <pre>
   * Evaluates whether each column value is contained by a specified set.
   * </pre>
   *
   * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.SetExpectation}
   */
  public static final class SetExpectation extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:google.cloud.dataplex.v1.DataQualityRule.SetExpectation)
      SetExpectationOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use SetExpectation.newBuilder() to construct.
    private SetExpectation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private SetExpectation() {
      values_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_SetExpectation_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_SetExpectation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.class,
              com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.Builder.class);
    }

    public static final int VALUES_FIELD_NUMBER = 1;

    @SuppressWarnings("serial")
    private com.google.protobuf.LazyStringList values_;
    /**
     *
     *
     * <pre>
     * Expected values for the column value.
     * </pre>
     *
     * <code>repeated string values = 1;</code>
     *
     * @return A list containing the values.
     */
    public com.google.protobuf.ProtocolStringList getValuesList() {
      return values_;
    }
    /**
     *
     *
     * <pre>
     * Expected values for the column value.
     * </pre>
     *
     * <code>repeated string values = 1;</code>
     *
     * @return The count of values.
     */
    public int getValuesCount() {
      return values_.size();
    }
    /**
     *
     *
     * <pre>
     * Expected values for the column value.
     * </pre>
     *
     * <code>repeated string values = 1;</code>
     *
     * @param index The index of the element to return.
     * @return The values at the given index.
     */
    public java.lang.String getValues(int index) {
      return values_.get(index);
    }
    /**
     *
     *
     * <pre>
     * Expected values for the column value.
     * </pre>
     *
     * <code>repeated string values = 1;</code>
     *
     * @param index The index of the value to return.
     * @return The bytes of the values at the given index.
     */
    public com.google.protobuf.ByteString getValuesBytes(int index) {
      return values_.getByteString(index);
    }

    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 {
      for (int i = 0; i < values_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, values_.getRaw(i));
      }
      getUnknownFields().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 < values_.size(); i++) {
          dataSize += computeStringSizeNoTag(values_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getValuesList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation)) {
        return super.equals(obj);
      }
      com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation other =
          (com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation) obj;

      if (!getValuesList().equals(other.getValuesList())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getValuesCount() > 0) {
        hash = (37 * hash) + VALUES_FIELD_NUMBER;
        hash = (53 * hash) + getValuesList().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation parseFrom(
        java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation parseFrom(
        java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation 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 com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation parseDelimitedFrom(
        java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation 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 com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation parseFrom(
        com.google.protobuf.CodedInputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation 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(
        com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation 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;
    }
    /**
     *
     *
     * <pre>
     * Evaluates whether each column value is contained by a specified set.
     * </pre>
     *
     * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.SetExpectation}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:google.cloud.dataplex.v1.DataQualityRule.SetExpectation)
        com.google.cloud.dataplex.v1.DataQualityRule.SetExpectationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_SetExpectation_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_SetExpectation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.class,
                com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.Builder.class);
      }

      // Construct using com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.newBuilder()
      private Builder() {}

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        values_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_SetExpectation_descriptor;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation
          getDefaultInstanceForType() {
        return com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.getDefaultInstance();
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation build() {
        com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation buildPartial() {
        com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation result =
            new com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation(this);
        buildPartialRepeatedFields(result);
        if (bitField0_ != 0) {
          buildPartial0(result);
        }
        onBuilt();
        return result;
      }

      private void buildPartialRepeatedFields(
          com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation result) {
        if (((bitField0_ & 0x00000001) != 0)) {
          values_ = values_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.values_ = values_;
      }

      private void buildPartial0(
          com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation result) {
        int from_bitField0_ = bitField0_;
      }

      @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 com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation) {
          return mergeFrom((com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation other) {
        if (other
            == com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.getDefaultInstance())
          return this;
        if (!other.values_.isEmpty()) {
          if (values_.isEmpty()) {
            values_ = other.values_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureValuesIsMutable();
            values_.addAll(other.values_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        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 {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        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();
                  ensureValuesIsMutable();
                  values_.add(s);
                  break;
                } // case 10
              default:
                {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private int bitField0_;

      private com.google.protobuf.LazyStringList values_ =
          com.google.protobuf.LazyStringArrayList.EMPTY;

      private void ensureValuesIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          values_ = new com.google.protobuf.LazyStringArrayList(values_);
          bitField0_ |= 0x00000001;
        }
      }
      /**
       *
       *
       * <pre>
       * Expected values for the column value.
       * </pre>
       *
       * <code>repeated string values = 1;</code>
       *
       * @return A list containing the values.
       */
      public com.google.protobuf.ProtocolStringList getValuesList() {
        return values_.getUnmodifiableView();
      }
      /**
       *
       *
       * <pre>
       * Expected values for the column value.
       * </pre>
       *
       * <code>repeated string values = 1;</code>
       *
       * @return The count of values.
       */
      public int getValuesCount() {
        return values_.size();
      }
      /**
       *
       *
       * <pre>
       * Expected values for the column value.
       * </pre>
       *
       * <code>repeated string values = 1;</code>
       *
       * @param index The index of the element to return.
       * @return The values at the given index.
       */
      public java.lang.String getValues(int index) {
        return values_.get(index);
      }
      /**
       *
       *
       * <pre>
       * Expected values for the column value.
       * </pre>
       *
       * <code>repeated string values = 1;</code>
       *
       * @param index The index of the value to return.
       * @return The bytes of the values at the given index.
       */
      public com.google.protobuf.ByteString getValuesBytes(int index) {
        return values_.getByteString(index);
      }
      /**
       *
       *
       * <pre>
       * Expected values for the column value.
       * </pre>
       *
       * <code>repeated string values = 1;</code>
       *
       * @param index The index to set the value at.
       * @param value The values to set.
       * @return This builder for chaining.
       */
      public Builder setValues(int index, java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureValuesIsMutable();
        values_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Expected values for the column value.
       * </pre>
       *
       * <code>repeated string values = 1;</code>
       *
       * @param value The values to add.
       * @return This builder for chaining.
       */
      public Builder addValues(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureValuesIsMutable();
        values_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Expected values for the column value.
       * </pre>
       *
       * <code>repeated string values = 1;</code>
       *
       * @param values The values to add.
       * @return This builder for chaining.
       */
      public Builder addAllValues(java.lang.Iterable<java.lang.String> values) {
        ensureValuesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, values_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Expected values for the column value.
       * </pre>
       *
       * <code>repeated string values = 1;</code>
       *
       * @return This builder for chaining.
       */
      public Builder clearValues() {
        values_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Expected values for the column value.
       * </pre>
       *
       * <code>repeated string values = 1;</code>
       *
       * @param value The bytes of the values to add.
       * @return This builder for chaining.
       */
      public Builder addValuesBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);
        ensureValuesIsMutable();
        values_.add(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:google.cloud.dataplex.v1.DataQualityRule.SetExpectation)
    }

    // @@protoc_insertion_point(class_scope:google.cloud.dataplex.v1.DataQualityRule.SetExpectation)
    private static final com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation
        DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation();
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<SetExpectation> PARSER =
        new com.google.protobuf.AbstractParser<SetExpectation>() {
          @java.lang.Override
          public SetExpectation parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            Builder builder = newBuilder();
            try {
              builder.mergeFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              throw e.setUnfinishedMessage(builder.buildPartial());
            } catch (com.google.protobuf.UninitializedMessageException e) {
              throw e.asInvalidProtocolBufferException()
                  .setUnfinishedMessage(builder.buildPartial());
            } catch (java.io.IOException e) {
              throw new com.google.protobuf.InvalidProtocolBufferException(e)
                  .setUnfinishedMessage(builder.buildPartial());
            }
            return builder.buildPartial();
          }
        };

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

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

    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface RegexExpectationOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:google.cloud.dataplex.v1.DataQualityRule.RegexExpectation)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * A regular expression the column value is expected to match.
     * </pre>
     *
     * <code>string regex = 1;</code>
     *
     * @return The regex.
     */
    java.lang.String getRegex();
    /**
     *
     *
     * <pre>
     * A regular expression the column value is expected to match.
     * </pre>
     *
     * <code>string regex = 1;</code>
     *
     * @return The bytes for regex.
     */
    com.google.protobuf.ByteString getRegexBytes();
  }
  /**
   *
   *
   * <pre>
   * Evaluates whether each column value matches a specified regex.
   * </pre>
   *
   * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.RegexExpectation}
   */
  public static final class RegexExpectation extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:google.cloud.dataplex.v1.DataQualityRule.RegexExpectation)
      RegexExpectationOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use RegexExpectation.newBuilder() to construct.
    private RegexExpectation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private RegexExpectation() {
      regex_ = "";
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_RegexExpectation_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_RegexExpectation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.class,
              com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.Builder.class);
    }

    public static final int REGEX_FIELD_NUMBER = 1;

    @SuppressWarnings("serial")
    private volatile java.lang.Object regex_ = "";
    /**
     *
     *
     * <pre>
     * A regular expression the column value is expected to match.
     * </pre>
     *
     * <code>string regex = 1;</code>
     *
     * @return The regex.
     */
    @java.lang.Override
    public java.lang.String getRegex() {
      java.lang.Object ref = regex_;
      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();
        regex_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * A regular expression the column value is expected to match.
     * </pre>
     *
     * <code>string regex = 1;</code>
     *
     * @return The bytes for regex.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getRegexBytes() {
      java.lang.Object ref = regex_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        regex_ = 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(regex_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, regex_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(regex_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, regex_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation)) {
        return super.equals(obj);
      }
      com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation other =
          (com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation) obj;

      if (!getRegex().equals(other.getRegex())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) 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) + REGEX_FIELD_NUMBER;
      hash = (53 * hash) + getRegex().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation parseFrom(
        java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation parseFrom(
        byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation parseFrom(
        java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation 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 com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation parseDelimitedFrom(
        java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation 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 com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation parseFrom(
        com.google.protobuf.CodedInputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation 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(
        com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation 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;
    }
    /**
     *
     *
     * <pre>
     * Evaluates whether each column value matches a specified regex.
     * </pre>
     *
     * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.RegexExpectation}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:google.cloud.dataplex.v1.DataQualityRule.RegexExpectation)
        com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_RegexExpectation_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_RegexExpectation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.class,
                com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.Builder.class);
      }

      // Construct using com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.newBuilder()
      private Builder() {}

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        regex_ = "";
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_RegexExpectation_descriptor;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation
          getDefaultInstanceForType() {
        return com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.getDefaultInstance();
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation build() {
        com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation buildPartial() {
        com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation result =
            new com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation(this);
        if (bitField0_ != 0) {
          buildPartial0(result);
        }
        onBuilt();
        return result;
      }

      private void buildPartial0(
          com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.regex_ = regex_;
        }
      }

      @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 com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation) {
          return mergeFrom((com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(
          com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation other) {
        if (other
            == com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.getDefaultInstance())
          return this;
        if (!other.getRegex().isEmpty()) {
          regex_ = other.regex_;
          bitField0_ |= 0x00000001;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        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 {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10:
                {
                  regex_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000001;
                  break;
                } // case 10
              default:
                {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private int bitField0_;

      private java.lang.Object regex_ = "";
      /**
       *
       *
       * <pre>
       * A regular expression the column value is expected to match.
       * </pre>
       *
       * <code>string regex = 1;</code>
       *
       * @return The regex.
       */
      public java.lang.String getRegex() {
        java.lang.Object ref = regex_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          regex_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A regular expression the column value is expected to match.
       * </pre>
       *
       * <code>string regex = 1;</code>
       *
       * @return The bytes for regex.
       */
      public com.google.protobuf.ByteString getRegexBytes() {
        java.lang.Object ref = regex_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          regex_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A regular expression the column value is expected to match.
       * </pre>
       *
       * <code>string regex = 1;</code>
       *
       * @param value The regex to set.
       * @return This builder for chaining.
       */
      public Builder setRegex(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        regex_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A regular expression the column value is expected to match.
       * </pre>
       *
       * <code>string regex = 1;</code>
       *
       * @return This builder for chaining.
       */
      public Builder clearRegex() {
        regex_ = getDefaultInstance().getRegex();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A regular expression the column value is expected to match.
       * </pre>
       *
       * <code>string regex = 1;</code>
       *
       * @param value The bytes for regex to set.
       * @return This builder for chaining.
       */
      public Builder setRegexBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);
        regex_ = value;
        bitField0_ |= 0x00000001;
        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:google.cloud.dataplex.v1.DataQualityRule.RegexExpectation)
    }

    // @@protoc_insertion_point(class_scope:google.cloud.dataplex.v1.DataQualityRule.RegexExpectation)
    private static final com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation
        DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation();
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation
        getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<RegexExpectation> PARSER =
        new com.google.protobuf.AbstractParser<RegexExpectation>() {
          @java.lang.Override
          public RegexExpectation parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            Builder builder = newBuilder();
            try {
              builder.mergeFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              throw e.setUnfinishedMessage(builder.buildPartial());
            } catch (com.google.protobuf.UninitializedMessageException e) {
              throw e.asInvalidProtocolBufferException()
                  .setUnfinishedMessage(builder.buildPartial());
            } catch (java.io.IOException e) {
              throw new com.google.protobuf.InvalidProtocolBufferException(e)
                  .setUnfinishedMessage(builder.buildPartial());
            }
            return builder.buildPartial();
          }
        };

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

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

    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation
        getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface UniquenessExpectationOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation)
      com.google.protobuf.MessageOrBuilder {}
  /**
   *
   *
   * <pre>
   * Evaluates whether the column has duplicates.
   * </pre>
   *
   * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation}
   */
  public static final class UniquenessExpectation extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation)
      UniquenessExpectationOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use UniquenessExpectation.newBuilder() to construct.
    private UniquenessExpectation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private UniquenessExpectation() {}

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_UniquenessExpectation_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_UniquenessExpectation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation.class,
              com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation.Builder.class);
    }

    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 {
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation)) {
        return super.equals(obj);
      }
      com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation other =
          (com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation) obj;

      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation parseFrom(
        java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation parseFrom(
        byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation parseFrom(
        java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation 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 com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation
        parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation
        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 com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation parseFrom(
        com.google.protobuf.CodedInputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation 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(
        com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation 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;
    }
    /**
     *
     *
     * <pre>
     * Evaluates whether the column has duplicates.
     * </pre>
     *
     * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation)
        com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_UniquenessExpectation_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_UniquenessExpectation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation.class,
                com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation.Builder.class);
      }

      // Construct using
      // com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation.newBuilder()
      private Builder() {}

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_UniquenessExpectation_descriptor;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation
          getDefaultInstanceForType() {
        return com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation
            .getDefaultInstance();
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation build() {
        com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation buildPartial() {
        com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation result =
            new com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation(this);
        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 com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation) {
          return mergeFrom(
              (com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(
          com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation other) {
        if (other
            == com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation
                .getDefaultInstance()) return this;
        this.mergeUnknownFields(other.getUnknownFields());
        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 {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default:
                {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        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:google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation)
    }

    // @@protoc_insertion_point(class_scope:google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation)
    private static final com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation
        DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation();
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation
        getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<UniquenessExpectation> PARSER =
        new com.google.protobuf.AbstractParser<UniquenessExpectation>() {
          @java.lang.Override
          public UniquenessExpectation parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            Builder builder = newBuilder();
            try {
              builder.mergeFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              throw e.setUnfinishedMessage(builder.buildPartial());
            } catch (com.google.protobuf.UninitializedMessageException e) {
              throw e.asInvalidProtocolBufferException()
                  .setUnfinishedMessage(builder.buildPartial());
            } catch (java.io.IOException e) {
              throw new com.google.protobuf.InvalidProtocolBufferException(e)
                  .setUnfinishedMessage(builder.buildPartial());
            }
            return builder.buildPartial();
          }
        };

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

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

    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation
        getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface StatisticRangeExpectationOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * The aggregate metric to evaluate.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic statistic = 1;
     * </code>
     *
     * @return The enum numeric value on the wire for statistic.
     */
    int getStatisticValue();
    /**
     *
     *
     * <pre>
     * The aggregate metric to evaluate.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic statistic = 1;
     * </code>
     *
     * @return The statistic.
     */
    com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic
        getStatistic();

    /**
     *
     *
     * <pre>
     * The minimum column statistic value allowed for a row to pass this
     * validation.
     * At least one of `min_value` and `max_value` need to be provided.
     * </pre>
     *
     * <code>string min_value = 2;</code>
     *
     * @return The minValue.
     */
    java.lang.String getMinValue();
    /**
     *
     *
     * <pre>
     * The minimum column statistic value allowed for a row to pass this
     * validation.
     * At least one of `min_value` and `max_value` need to be provided.
     * </pre>
     *
     * <code>string min_value = 2;</code>
     *
     * @return The bytes for minValue.
     */
    com.google.protobuf.ByteString getMinValueBytes();

    /**
     *
     *
     * <pre>
     * The maximum column statistic value allowed for a row to pass this
     * validation.
     * At least one of `min_value` and `max_value` need to be provided.
     * </pre>
     *
     * <code>string max_value = 3;</code>
     *
     * @return The maxValue.
     */
    java.lang.String getMaxValue();
    /**
     *
     *
     * <pre>
     * The maximum column statistic value allowed for a row to pass this
     * validation.
     * At least one of `min_value` and `max_value` need to be provided.
     * </pre>
     *
     * <code>string max_value = 3;</code>
     *
     * @return The bytes for maxValue.
     */
    com.google.protobuf.ByteString getMaxValueBytes();

    /**
     *
     *
     * <pre>
     * Whether column statistic needs to be strictly greater than ('&gt;')
     * the minimum, or if equality is allowed.
     * Only relevant if a `min_value` has been defined. Default = false.
     * </pre>
     *
     * <code>bool strict_min_enabled = 4;</code>
     *
     * @return The strictMinEnabled.
     */
    boolean getStrictMinEnabled();

    /**
     *
     *
     * <pre>
     * Whether column statistic needs to be strictly lesser than ('&lt;') the
     * maximum, or if equality is allowed.
     * Only relevant if a `max_value` has been defined. Default = false.
     * </pre>
     *
     * <code>bool strict_max_enabled = 5;</code>
     *
     * @return The strictMaxEnabled.
     */
    boolean getStrictMaxEnabled();
  }
  /**
   *
   *
   * <pre>
   * Evaluates whether the column aggregate statistic lies between a specified
   * range.
   * </pre>
   *
   * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation}
   */
  public static final class StatisticRangeExpectation extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation)
      StatisticRangeExpectationOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use StatisticRangeExpectation.newBuilder() to construct.
    private StatisticRangeExpectation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private StatisticRangeExpectation() {
      statistic_ = 0;
      minValue_ = "";
      maxValue_ = "";
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_StatisticRangeExpectation_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_StatisticRangeExpectation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.class,
              com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.Builder.class);
    }

    /**
     *
     *
     * <pre>
     * The list of aggregate metrics a rule can be evaluated against.
     * </pre>
     *
     * Protobuf enum {@code
     * google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic}
     */
    public enum ColumnStatistic implements com.google.protobuf.ProtocolMessageEnum {
      /**
       *
       *
       * <pre>
       * Unspecified statistic type
       * </pre>
       *
       * <code>STATISTIC_UNDEFINED = 0;</code>
       */
      STATISTIC_UNDEFINED(0),
      /**
       *
       *
       * <pre>
       * Evaluate the column mean
       * </pre>
       *
       * <code>MEAN = 1;</code>
       */
      MEAN(1),
      /**
       *
       *
       * <pre>
       * Evaluate the column min
       * </pre>
       *
       * <code>MIN = 2;</code>
       */
      MIN(2),
      /**
       *
       *
       * <pre>
       * Evaluate the column max
       * </pre>
       *
       * <code>MAX = 3;</code>
       */
      MAX(3),
      UNRECOGNIZED(-1),
      ;

      /**
       *
       *
       * <pre>
       * Unspecified statistic type
       * </pre>
       *
       * <code>STATISTIC_UNDEFINED = 0;</code>
       */
      public static final int STATISTIC_UNDEFINED_VALUE = 0;
      /**
       *
       *
       * <pre>
       * Evaluate the column mean
       * </pre>
       *
       * <code>MEAN = 1;</code>
       */
      public static final int MEAN_VALUE = 1;
      /**
       *
       *
       * <pre>
       * Evaluate the column min
       * </pre>
       *
       * <code>MIN = 2;</code>
       */
      public static final int MIN_VALUE = 2;
      /**
       *
       *
       * <pre>
       * Evaluate the column max
       * </pre>
       *
       * <code>MAX = 3;</code>
       */
      public static final int MAX_VALUE = 3;

      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ColumnStatistic valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static ColumnStatistic forNumber(int value) {
        switch (value) {
          case 0:
            return STATISTIC_UNDEFINED;
          case 1:
            return MEAN;
          case 2:
            return MIN;
          case 3:
            return MAX;
          default:
            return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<ColumnStatistic>
          internalGetValueMap() {
        return internalValueMap;
      }

      private static final com.google.protobuf.Internal.EnumLiteMap<ColumnStatistic>
          internalValueMap =
              new com.google.protobuf.Internal.EnumLiteMap<ColumnStatistic>() {
                public ColumnStatistic findValueByNumber(int number) {
                  return ColumnStatistic.forNumber(number);
                }
              };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalStateException(
              "Can't get the descriptor of an unrecognized enum value.");
        }
        return getDescriptor().getValues().get(ordinal());
      }

      public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
        return getDescriptor();
      }

      public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
        return com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
            .getDescriptor()
            .getEnumTypes()
            .get(0);
      }

      private static final ColumnStatistic[] VALUES = values();

      public static ColumnStatistic valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
        }
        if (desc.getIndex() == -1) {
          return UNRECOGNIZED;
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private ColumnStatistic(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic)
    }

    public static final int STATISTIC_FIELD_NUMBER = 1;
    private int statistic_ = 0;
    /**
     *
     *
     * <pre>
     * The aggregate metric to evaluate.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic statistic = 1;
     * </code>
     *
     * @return The enum numeric value on the wire for statistic.
     */
    @java.lang.Override
    public int getStatisticValue() {
      return statistic_;
    }
    /**
     *
     *
     * <pre>
     * The aggregate metric to evaluate.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic statistic = 1;
     * </code>
     *
     * @return The statistic.
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic
        getStatistic() {
      com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic
          result =
              com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic
                  .forNumber(statistic_);
      return result == null
          ? com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic
              .UNRECOGNIZED
          : result;
    }

    public static final int MIN_VALUE_FIELD_NUMBER = 2;

    @SuppressWarnings("serial")
    private volatile java.lang.Object minValue_ = "";
    /**
     *
     *
     * <pre>
     * The minimum column statistic value allowed for a row to pass this
     * validation.
     * At least one of `min_value` and `max_value` need to be provided.
     * </pre>
     *
     * <code>string min_value = 2;</code>
     *
     * @return The minValue.
     */
    @java.lang.Override
    public java.lang.String getMinValue() {
      java.lang.Object ref = minValue_;
      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();
        minValue_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * The minimum column statistic value allowed for a row to pass this
     * validation.
     * At least one of `min_value` and `max_value` need to be provided.
     * </pre>
     *
     * <code>string min_value = 2;</code>
     *
     * @return The bytes for minValue.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getMinValueBytes() {
      java.lang.Object ref = minValue_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        minValue_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MAX_VALUE_FIELD_NUMBER = 3;

    @SuppressWarnings("serial")
    private volatile java.lang.Object maxValue_ = "";
    /**
     *
     *
     * <pre>
     * The maximum column statistic value allowed for a row to pass this
     * validation.
     * At least one of `min_value` and `max_value` need to be provided.
     * </pre>
     *
     * <code>string max_value = 3;</code>
     *
     * @return The maxValue.
     */
    @java.lang.Override
    public java.lang.String getMaxValue() {
      java.lang.Object ref = maxValue_;
      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();
        maxValue_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * The maximum column statistic value allowed for a row to pass this
     * validation.
     * At least one of `min_value` and `max_value` need to be provided.
     * </pre>
     *
     * <code>string max_value = 3;</code>
     *
     * @return The bytes for maxValue.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getMaxValueBytes() {
      java.lang.Object ref = maxValue_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        maxValue_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int STRICT_MIN_ENABLED_FIELD_NUMBER = 4;
    private boolean strictMinEnabled_ = false;
    /**
     *
     *
     * <pre>
     * Whether column statistic needs to be strictly greater than ('&gt;')
     * the minimum, or if equality is allowed.
     * Only relevant if a `min_value` has been defined. Default = false.
     * </pre>
     *
     * <code>bool strict_min_enabled = 4;</code>
     *
     * @return The strictMinEnabled.
     */
    @java.lang.Override
    public boolean getStrictMinEnabled() {
      return strictMinEnabled_;
    }

    public static final int STRICT_MAX_ENABLED_FIELD_NUMBER = 5;
    private boolean strictMaxEnabled_ = false;
    /**
     *
     *
     * <pre>
     * Whether column statistic needs to be strictly lesser than ('&lt;') the
     * maximum, or if equality is allowed.
     * Only relevant if a `max_value` has been defined. Default = false.
     * </pre>
     *
     * <code>bool strict_max_enabled = 5;</code>
     *
     * @return The strictMaxEnabled.
     */
    @java.lang.Override
    public boolean getStrictMaxEnabled() {
      return strictMaxEnabled_;
    }

    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 (statistic_
          != com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic
              .STATISTIC_UNDEFINED
              .getNumber()) {
        output.writeEnum(1, statistic_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(minValue_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, minValue_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(maxValue_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, maxValue_);
      }
      if (strictMinEnabled_ != false) {
        output.writeBool(4, strictMinEnabled_);
      }
      if (strictMaxEnabled_ != false) {
        output.writeBool(5, strictMaxEnabled_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (statistic_
          != com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic
              .STATISTIC_UNDEFINED
              .getNumber()) {
        size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, statistic_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(minValue_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, minValue_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(maxValue_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, maxValue_);
      }
      if (strictMinEnabled_ != false) {
        size += com.google.protobuf.CodedOutputStream.computeBoolSize(4, strictMinEnabled_);
      }
      if (strictMaxEnabled_ != false) {
        size += com.google.protobuf.CodedOutputStream.computeBoolSize(5, strictMaxEnabled_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj
          instanceof com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation)) {
        return super.equals(obj);
      }
      com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation other =
          (com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation) obj;

      if (statistic_ != other.statistic_) return false;
      if (!getMinValue().equals(other.getMinValue())) return false;
      if (!getMaxValue().equals(other.getMaxValue())) return false;
      if (getStrictMinEnabled() != other.getStrictMinEnabled()) return false;
      if (getStrictMaxEnabled() != other.getStrictMaxEnabled()) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) 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) + STATISTIC_FIELD_NUMBER;
      hash = (53 * hash) + statistic_;
      hash = (37 * hash) + MIN_VALUE_FIELD_NUMBER;
      hash = (53 * hash) + getMinValue().hashCode();
      hash = (37 * hash) + MAX_VALUE_FIELD_NUMBER;
      hash = (53 * hash) + getMaxValue().hashCode();
      hash = (37 * hash) + STRICT_MIN_ENABLED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getStrictMinEnabled());
      hash = (37 * hash) + STRICT_MAX_ENABLED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getStrictMaxEnabled());
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation parseFrom(
        java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation parseFrom(
        byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation parseFrom(
        java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation 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 com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
        parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
        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 com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation parseFrom(
        com.google.protobuf.CodedInputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation 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(
        com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation 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;
    }
    /**
     *
     *
     * <pre>
     * Evaluates whether the column aggregate statistic lies between a specified
     * range.
     * </pre>
     *
     * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation)
        com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_StatisticRangeExpectation_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_StatisticRangeExpectation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.class,
                com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.Builder
                    .class);
      }

      // Construct using
      // com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.newBuilder()
      private Builder() {}

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        statistic_ = 0;
        minValue_ = "";
        maxValue_ = "";
        strictMinEnabled_ = false;
        strictMaxEnabled_ = false;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_StatisticRangeExpectation_descriptor;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
          getDefaultInstanceForType() {
        return com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
            .getDefaultInstance();
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation build() {
        com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation result =
            buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation buildPartial() {
        com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation result =
            new com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation(this);
        if (bitField0_ != 0) {
          buildPartial0(result);
        }
        onBuilt();
        return result;
      }

      private void buildPartial0(
          com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.statistic_ = statistic_;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.minValue_ = minValue_;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.maxValue_ = maxValue_;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.strictMinEnabled_ = strictMinEnabled_;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.strictMaxEnabled_ = strictMaxEnabled_;
        }
      }

      @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 com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation) {
          return mergeFrom(
              (com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(
          com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation other) {
        if (other
            == com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
                .getDefaultInstance()) return this;
        if (other.statistic_ != 0) {
          setStatisticValue(other.getStatisticValue());
        }
        if (!other.getMinValue().isEmpty()) {
          minValue_ = other.minValue_;
          bitField0_ |= 0x00000002;
          onChanged();
        }
        if (!other.getMaxValue().isEmpty()) {
          maxValue_ = other.maxValue_;
          bitField0_ |= 0x00000004;
          onChanged();
        }
        if (other.getStrictMinEnabled() != false) {
          setStrictMinEnabled(other.getStrictMinEnabled());
        }
        if (other.getStrictMaxEnabled() != false) {
          setStrictMaxEnabled(other.getStrictMaxEnabled());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        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 {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8:
                {
                  statistic_ = input.readEnum();
                  bitField0_ |= 0x00000001;
                  break;
                } // case 8
              case 18:
                {
                  minValue_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000002;
                  break;
                } // case 18
              case 26:
                {
                  maxValue_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000004;
                  break;
                } // case 26
              case 32:
                {
                  strictMinEnabled_ = input.readBool();
                  bitField0_ |= 0x00000008;
                  break;
                } // case 32
              case 40:
                {
                  strictMaxEnabled_ = input.readBool();
                  bitField0_ |= 0x00000010;
                  break;
                } // case 40
              default:
                {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private int bitField0_;

      private int statistic_ = 0;
      /**
       *
       *
       * <pre>
       * The aggregate metric to evaluate.
       * </pre>
       *
       * <code>
       * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic statistic = 1;
       * </code>
       *
       * @return The enum numeric value on the wire for statistic.
       */
      @java.lang.Override
      public int getStatisticValue() {
        return statistic_;
      }
      /**
       *
       *
       * <pre>
       * The aggregate metric to evaluate.
       * </pre>
       *
       * <code>
       * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic statistic = 1;
       * </code>
       *
       * @param value The enum numeric value on the wire for statistic to set.
       * @return This builder for chaining.
       */
      public Builder setStatisticValue(int value) {
        statistic_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The aggregate metric to evaluate.
       * </pre>
       *
       * <code>
       * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic statistic = 1;
       * </code>
       *
       * @return The statistic.
       */
      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic
          getStatistic() {
        com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic
            result =
                com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
                    .ColumnStatistic.forNumber(statistic_);
        return result == null
            ? com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic
                .UNRECOGNIZED
            : result;
      }
      /**
       *
       *
       * <pre>
       * The aggregate metric to evaluate.
       * </pre>
       *
       * <code>
       * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic statistic = 1;
       * </code>
       *
       * @param value The statistic to set.
       * @return This builder for chaining.
       */
      public Builder setStatistic(
          com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic
              value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        statistic_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The aggregate metric to evaluate.
       * </pre>
       *
       * <code>
       * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.ColumnStatistic statistic = 1;
       * </code>
       *
       * @return This builder for chaining.
       */
      public Builder clearStatistic() {
        bitField0_ = (bitField0_ & ~0x00000001);
        statistic_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object minValue_ = "";
      /**
       *
       *
       * <pre>
       * The minimum column statistic value allowed for a row to pass this
       * validation.
       * At least one of `min_value` and `max_value` need to be provided.
       * </pre>
       *
       * <code>string min_value = 2;</code>
       *
       * @return The minValue.
       */
      public java.lang.String getMinValue() {
        java.lang.Object ref = minValue_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          minValue_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The minimum column statistic value allowed for a row to pass this
       * validation.
       * At least one of `min_value` and `max_value` need to be provided.
       * </pre>
       *
       * <code>string min_value = 2;</code>
       *
       * @return The bytes for minValue.
       */
      public com.google.protobuf.ByteString getMinValueBytes() {
        java.lang.Object ref = minValue_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          minValue_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The minimum column statistic value allowed for a row to pass this
       * validation.
       * At least one of `min_value` and `max_value` need to be provided.
       * </pre>
       *
       * <code>string min_value = 2;</code>
       *
       * @param value The minValue to set.
       * @return This builder for chaining.
       */
      public Builder setMinValue(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        minValue_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The minimum column statistic value allowed for a row to pass this
       * validation.
       * At least one of `min_value` and `max_value` need to be provided.
       * </pre>
       *
       * <code>string min_value = 2;</code>
       *
       * @return This builder for chaining.
       */
      public Builder clearMinValue() {
        minValue_ = getDefaultInstance().getMinValue();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The minimum column statistic value allowed for a row to pass this
       * validation.
       * At least one of `min_value` and `max_value` need to be provided.
       * </pre>
       *
       * <code>string min_value = 2;</code>
       *
       * @param value The bytes for minValue to set.
       * @return This builder for chaining.
       */
      public Builder setMinValueBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);
        minValue_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }

      private java.lang.Object maxValue_ = "";
      /**
       *
       *
       * <pre>
       * The maximum column statistic value allowed for a row to pass this
       * validation.
       * At least one of `min_value` and `max_value` need to be provided.
       * </pre>
       *
       * <code>string max_value = 3;</code>
       *
       * @return The maxValue.
       */
      public java.lang.String getMaxValue() {
        java.lang.Object ref = maxValue_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          maxValue_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The maximum column statistic value allowed for a row to pass this
       * validation.
       * At least one of `min_value` and `max_value` need to be provided.
       * </pre>
       *
       * <code>string max_value = 3;</code>
       *
       * @return The bytes for maxValue.
       */
      public com.google.protobuf.ByteString getMaxValueBytes() {
        java.lang.Object ref = maxValue_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          maxValue_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The maximum column statistic value allowed for a row to pass this
       * validation.
       * At least one of `min_value` and `max_value` need to be provided.
       * </pre>
       *
       * <code>string max_value = 3;</code>
       *
       * @param value The maxValue to set.
       * @return This builder for chaining.
       */
      public Builder setMaxValue(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        maxValue_ = value;
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The maximum column statistic value allowed for a row to pass this
       * validation.
       * At least one of `min_value` and `max_value` need to be provided.
       * </pre>
       *
       * <code>string max_value = 3;</code>
       *
       * @return This builder for chaining.
       */
      public Builder clearMaxValue() {
        maxValue_ = getDefaultInstance().getMaxValue();
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The maximum column statistic value allowed for a row to pass this
       * validation.
       * At least one of `min_value` and `max_value` need to be provided.
       * </pre>
       *
       * <code>string max_value = 3;</code>
       *
       * @param value The bytes for maxValue to set.
       * @return This builder for chaining.
       */
      public Builder setMaxValueBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);
        maxValue_ = value;
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }

      private boolean strictMinEnabled_;
      /**
       *
       *
       * <pre>
       * Whether column statistic needs to be strictly greater than ('&gt;')
       * the minimum, or if equality is allowed.
       * Only relevant if a `min_value` has been defined. Default = false.
       * </pre>
       *
       * <code>bool strict_min_enabled = 4;</code>
       *
       * @return The strictMinEnabled.
       */
      @java.lang.Override
      public boolean getStrictMinEnabled() {
        return strictMinEnabled_;
      }
      /**
       *
       *
       * <pre>
       * Whether column statistic needs to be strictly greater than ('&gt;')
       * the minimum, or if equality is allowed.
       * Only relevant if a `min_value` has been defined. Default = false.
       * </pre>
       *
       * <code>bool strict_min_enabled = 4;</code>
       *
       * @param value The strictMinEnabled to set.
       * @return This builder for chaining.
       */
      public Builder setStrictMinEnabled(boolean value) {

        strictMinEnabled_ = value;
        bitField0_ |= 0x00000008;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Whether column statistic needs to be strictly greater than ('&gt;')
       * the minimum, or if equality is allowed.
       * Only relevant if a `min_value` has been defined. Default = false.
       * </pre>
       *
       * <code>bool strict_min_enabled = 4;</code>
       *
       * @return This builder for chaining.
       */
      public Builder clearStrictMinEnabled() {
        bitField0_ = (bitField0_ & ~0x00000008);
        strictMinEnabled_ = false;
        onChanged();
        return this;
      }

      private boolean strictMaxEnabled_;
      /**
       *
       *
       * <pre>
       * Whether column statistic needs to be strictly lesser than ('&lt;') the
       * maximum, or if equality is allowed.
       * Only relevant if a `max_value` has been defined. Default = false.
       * </pre>
       *
       * <code>bool strict_max_enabled = 5;</code>
       *
       * @return The strictMaxEnabled.
       */
      @java.lang.Override
      public boolean getStrictMaxEnabled() {
        return strictMaxEnabled_;
      }
      /**
       *
       *
       * <pre>
       * Whether column statistic needs to be strictly lesser than ('&lt;') the
       * maximum, or if equality is allowed.
       * Only relevant if a `max_value` has been defined. Default = false.
       * </pre>
       *
       * <code>bool strict_max_enabled = 5;</code>
       *
       * @param value The strictMaxEnabled to set.
       * @return This builder for chaining.
       */
      public Builder setStrictMaxEnabled(boolean value) {

        strictMaxEnabled_ = value;
        bitField0_ |= 0x00000010;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Whether column statistic needs to be strictly lesser than ('&lt;') the
       * maximum, or if equality is allowed.
       * Only relevant if a `max_value` has been defined. Default = false.
       * </pre>
       *
       * <code>bool strict_max_enabled = 5;</code>
       *
       * @return This builder for chaining.
       */
      public Builder clearStrictMaxEnabled() {
        bitField0_ = (bitField0_ & ~0x00000010);
        strictMaxEnabled_ = false;
        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:google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation)
    }

    // @@protoc_insertion_point(class_scope:google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation)
    private static final com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
        DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE =
          new com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation();
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
        getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<StatisticRangeExpectation> PARSER =
        new com.google.protobuf.AbstractParser<StatisticRangeExpectation>() {
          @java.lang.Override
          public StatisticRangeExpectation parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            Builder builder = newBuilder();
            try {
              builder.mergeFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              throw e.setUnfinishedMessage(builder.buildPartial());
            } catch (com.google.protobuf.UninitializedMessageException e) {
              throw e.asInvalidProtocolBufferException()
                  .setUnfinishedMessage(builder.buildPartial());
            } catch (java.io.IOException e) {
              throw new com.google.protobuf.InvalidProtocolBufferException(e)
                  .setUnfinishedMessage(builder.buildPartial());
            }
            return builder.buildPartial();
          }
        };

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

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

    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
        getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface RowConditionExpectationOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * The SQL expression.
     * </pre>
     *
     * <code>string sql_expression = 1;</code>
     *
     * @return The sqlExpression.
     */
    java.lang.String getSqlExpression();
    /**
     *
     *
     * <pre>
     * The SQL expression.
     * </pre>
     *
     * <code>string sql_expression = 1;</code>
     *
     * @return The bytes for sqlExpression.
     */
    com.google.protobuf.ByteString getSqlExpressionBytes();
  }
  /**
   *
   *
   * <pre>
   * Evaluates whether each row passes the specified condition.
   * The SQL expression needs to use BigQuery standard SQL syntax and should
   * produce a boolean value per row as the result.
   * Example: col1 &gt;= 0 AND col2 &lt; 10
   * </pre>
   *
   * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation}
   */
  public static final class RowConditionExpectation extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation)
      RowConditionExpectationOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use RowConditionExpectation.newBuilder() to construct.
    private RowConditionExpectation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private RowConditionExpectation() {
      sqlExpression_ = "";
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_RowConditionExpectation_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_RowConditionExpectation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation.class,
              com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation.Builder.class);
    }

    public static final int SQL_EXPRESSION_FIELD_NUMBER = 1;

    @SuppressWarnings("serial")
    private volatile java.lang.Object sqlExpression_ = "";
    /**
     *
     *
     * <pre>
     * The SQL expression.
     * </pre>
     *
     * <code>string sql_expression = 1;</code>
     *
     * @return The sqlExpression.
     */
    @java.lang.Override
    public java.lang.String getSqlExpression() {
      java.lang.Object ref = sqlExpression_;
      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();
        sqlExpression_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * The SQL expression.
     * </pre>
     *
     * <code>string sql_expression = 1;</code>
     *
     * @return The bytes for sqlExpression.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getSqlExpressionBytes() {
      java.lang.Object ref = sqlExpression_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        sqlExpression_ = 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(sqlExpression_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, sqlExpression_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sqlExpression_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, sqlExpression_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation)) {
        return super.equals(obj);
      }
      com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation other =
          (com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation) obj;

      if (!getSqlExpression().equals(other.getSqlExpression())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) 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) + SQL_EXPRESSION_FIELD_NUMBER;
      hash = (53 * hash) + getSqlExpression().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation parseFrom(
        java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation parseFrom(
        byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation parseFrom(
        java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation 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 com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
        parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
        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 com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation parseFrom(
        com.google.protobuf.CodedInputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation 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(
        com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation 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;
    }
    /**
     *
     *
     * <pre>
     * Evaluates whether each row passes the specified condition.
     * The SQL expression needs to use BigQuery standard SQL syntax and should
     * produce a boolean value per row as the result.
     * Example: col1 &gt;= 0 AND col2 &lt; 10
     * </pre>
     *
     * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation)
        com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_RowConditionExpectation_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_RowConditionExpectation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation.class,
                com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation.Builder.class);
      }

      // Construct using
      // com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation.newBuilder()
      private Builder() {}

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        sqlExpression_ = "";
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_RowConditionExpectation_descriptor;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
          getDefaultInstanceForType() {
        return com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
            .getDefaultInstance();
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation build() {
        com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation result =
            buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation buildPartial() {
        com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation result =
            new com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation(this);
        if (bitField0_ != 0) {
          buildPartial0(result);
        }
        onBuilt();
        return result;
      }

      private void buildPartial0(
          com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.sqlExpression_ = sqlExpression_;
        }
      }

      @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 com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation) {
          return mergeFrom(
              (com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(
          com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation other) {
        if (other
            == com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
                .getDefaultInstance()) return this;
        if (!other.getSqlExpression().isEmpty()) {
          sqlExpression_ = other.sqlExpression_;
          bitField0_ |= 0x00000001;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        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 {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10:
                {
                  sqlExpression_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000001;
                  break;
                } // case 10
              default:
                {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private int bitField0_;

      private java.lang.Object sqlExpression_ = "";
      /**
       *
       *
       * <pre>
       * The SQL expression.
       * </pre>
       *
       * <code>string sql_expression = 1;</code>
       *
       * @return The sqlExpression.
       */
      public java.lang.String getSqlExpression() {
        java.lang.Object ref = sqlExpression_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          sqlExpression_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The SQL expression.
       * </pre>
       *
       * <code>string sql_expression = 1;</code>
       *
       * @return The bytes for sqlExpression.
       */
      public com.google.protobuf.ByteString getSqlExpressionBytes() {
        java.lang.Object ref = sqlExpression_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          sqlExpression_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The SQL expression.
       * </pre>
       *
       * <code>string sql_expression = 1;</code>
       *
       * @param value The sqlExpression to set.
       * @return This builder for chaining.
       */
      public Builder setSqlExpression(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        sqlExpression_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The SQL expression.
       * </pre>
       *
       * <code>string sql_expression = 1;</code>
       *
       * @return This builder for chaining.
       */
      public Builder clearSqlExpression() {
        sqlExpression_ = getDefaultInstance().getSqlExpression();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The SQL expression.
       * </pre>
       *
       * <code>string sql_expression = 1;</code>
       *
       * @param value The bytes for sqlExpression to set.
       * @return This builder for chaining.
       */
      public Builder setSqlExpressionBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);
        sqlExpression_ = value;
        bitField0_ |= 0x00000001;
        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:google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation)
    }

    // @@protoc_insertion_point(class_scope:google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation)
    private static final com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
        DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation();
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
        getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<RowConditionExpectation> PARSER =
        new com.google.protobuf.AbstractParser<RowConditionExpectation>() {
          @java.lang.Override
          public RowConditionExpectation parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            Builder builder = newBuilder();
            try {
              builder.mergeFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              throw e.setUnfinishedMessage(builder.buildPartial());
            } catch (com.google.protobuf.UninitializedMessageException e) {
              throw e.asInvalidProtocolBufferException()
                  .setUnfinishedMessage(builder.buildPartial());
            } catch (java.io.IOException e) {
              throw new com.google.protobuf.InvalidProtocolBufferException(e)
                  .setUnfinishedMessage(builder.buildPartial());
            }
            return builder.buildPartial();
          }
        };

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

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

    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
        getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface TableConditionExpectationOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * The SQL expression.
     * </pre>
     *
     * <code>string sql_expression = 1;</code>
     *
     * @return The sqlExpression.
     */
    java.lang.String getSqlExpression();
    /**
     *
     *
     * <pre>
     * The SQL expression.
     * </pre>
     *
     * <code>string sql_expression = 1;</code>
     *
     * @return The bytes for sqlExpression.
     */
    com.google.protobuf.ByteString getSqlExpressionBytes();
  }
  /**
   *
   *
   * <pre>
   * Evaluates whether the provided expression is true.
   * The SQL expression needs to use BigQuery standard SQL syntax and should
   * produce a scalar boolean result.
   * Example: MIN(col1) &gt;= 0
   * </pre>
   *
   * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation}
   */
  public static final class TableConditionExpectation extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation)
      TableConditionExpectationOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use TableConditionExpectation.newBuilder() to construct.
    private TableConditionExpectation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private TableConditionExpectation() {
      sqlExpression_ = "";
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_TableConditionExpectation_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_TableConditionExpectation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation.class,
              com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation.Builder.class);
    }

    public static final int SQL_EXPRESSION_FIELD_NUMBER = 1;

    @SuppressWarnings("serial")
    private volatile java.lang.Object sqlExpression_ = "";
    /**
     *
     *
     * <pre>
     * The SQL expression.
     * </pre>
     *
     * <code>string sql_expression = 1;</code>
     *
     * @return The sqlExpression.
     */
    @java.lang.Override
    public java.lang.String getSqlExpression() {
      java.lang.Object ref = sqlExpression_;
      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();
        sqlExpression_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * The SQL expression.
     * </pre>
     *
     * <code>string sql_expression = 1;</code>
     *
     * @return The bytes for sqlExpression.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getSqlExpressionBytes() {
      java.lang.Object ref = sqlExpression_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        sqlExpression_ = 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(sqlExpression_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, sqlExpression_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sqlExpression_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, sqlExpression_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj
          instanceof com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation)) {
        return super.equals(obj);
      }
      com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation other =
          (com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation) obj;

      if (!getSqlExpression().equals(other.getSqlExpression())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) 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) + SQL_EXPRESSION_FIELD_NUMBER;
      hash = (53 * hash) + getSqlExpression().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation parseFrom(
        java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation parseFrom(
        byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation parseFrom(
        java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation 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 com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
        parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
        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 com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation parseFrom(
        com.google.protobuf.CodedInputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation 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(
        com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation 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;
    }
    /**
     *
     *
     * <pre>
     * Evaluates whether the provided expression is true.
     * The SQL expression needs to use BigQuery standard SQL syntax and should
     * produce a scalar boolean result.
     * Example: MIN(col1) &gt;= 0
     * </pre>
     *
     * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation)
        com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_TableConditionExpectation_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_TableConditionExpectation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation.class,
                com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation.Builder
                    .class);
      }

      // Construct using
      // com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation.newBuilder()
      private Builder() {}

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        sqlExpression_ = "";
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return com.google.cloud.dataplex.v1.DataQualityProto
            .internal_static_google_cloud_dataplex_v1_DataQualityRule_TableConditionExpectation_descriptor;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
          getDefaultInstanceForType() {
        return com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
            .getDefaultInstance();
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation build() {
        com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation result =
            buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation buildPartial() {
        com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation result =
            new com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation(this);
        if (bitField0_ != 0) {
          buildPartial0(result);
        }
        onBuilt();
        return result;
      }

      private void buildPartial0(
          com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.sqlExpression_ = sqlExpression_;
        }
      }

      @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 com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation) {
          return mergeFrom(
              (com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(
          com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation other) {
        if (other
            == com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
                .getDefaultInstance()) return this;
        if (!other.getSqlExpression().isEmpty()) {
          sqlExpression_ = other.sqlExpression_;
          bitField0_ |= 0x00000001;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        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 {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10:
                {
                  sqlExpression_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000001;
                  break;
                } // case 10
              default:
                {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private int bitField0_;

      private java.lang.Object sqlExpression_ = "";
      /**
       *
       *
       * <pre>
       * The SQL expression.
       * </pre>
       *
       * <code>string sql_expression = 1;</code>
       *
       * @return The sqlExpression.
       */
      public java.lang.String getSqlExpression() {
        java.lang.Object ref = sqlExpression_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          sqlExpression_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The SQL expression.
       * </pre>
       *
       * <code>string sql_expression = 1;</code>
       *
       * @return The bytes for sqlExpression.
       */
      public com.google.protobuf.ByteString getSqlExpressionBytes() {
        java.lang.Object ref = sqlExpression_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          sqlExpression_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The SQL expression.
       * </pre>
       *
       * <code>string sql_expression = 1;</code>
       *
       * @param value The sqlExpression to set.
       * @return This builder for chaining.
       */
      public Builder setSqlExpression(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        sqlExpression_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The SQL expression.
       * </pre>
       *
       * <code>string sql_expression = 1;</code>
       *
       * @return This builder for chaining.
       */
      public Builder clearSqlExpression() {
        sqlExpression_ = getDefaultInstance().getSqlExpression();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The SQL expression.
       * </pre>
       *
       * <code>string sql_expression = 1;</code>
       *
       * @param value The bytes for sqlExpression to set.
       * @return This builder for chaining.
       */
      public Builder setSqlExpressionBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);
        sqlExpression_ = value;
        bitField0_ |= 0x00000001;
        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:google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation)
    }

    // @@protoc_insertion_point(class_scope:google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation)
    private static final com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
        DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE =
          new com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation();
    }

    public static com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
        getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<TableConditionExpectation> PARSER =
        new com.google.protobuf.AbstractParser<TableConditionExpectation>() {
          @java.lang.Override
          public TableConditionExpectation parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            Builder builder = newBuilder();
            try {
              builder.mergeFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              throw e.setUnfinishedMessage(builder.buildPartial());
            } catch (com.google.protobuf.UninitializedMessageException e) {
              throw e.asInvalidProtocolBufferException()
                  .setUnfinishedMessage(builder.buildPartial());
            } catch (java.io.IOException e) {
              throw new com.google.protobuf.InvalidProtocolBufferException(e)
                  .setUnfinishedMessage(builder.buildPartial());
            }
            return builder.buildPartial();
          }
        };

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

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

    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
        getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  private int ruleTypeCase_ = 0;
  private java.lang.Object ruleType_;

  public enum RuleTypeCase
      implements
          com.google.protobuf.Internal.EnumLite,
          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
    RANGE_EXPECTATION(1),
    NON_NULL_EXPECTATION(2),
    SET_EXPECTATION(3),
    REGEX_EXPECTATION(4),
    UNIQUENESS_EXPECTATION(100),
    STATISTIC_RANGE_EXPECTATION(101),
    ROW_CONDITION_EXPECTATION(200),
    TABLE_CONDITION_EXPECTATION(201),
    RULETYPE_NOT_SET(0);
    private final int value;

    private RuleTypeCase(int value) {
      this.value = value;
    }
    /**
     * @param value The number of the enum to look for.
     * @return The enum associated with the given number.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static RuleTypeCase valueOf(int value) {
      return forNumber(value);
    }

    public static RuleTypeCase forNumber(int value) {
      switch (value) {
        case 1:
          return RANGE_EXPECTATION;
        case 2:
          return NON_NULL_EXPECTATION;
        case 3:
          return SET_EXPECTATION;
        case 4:
          return REGEX_EXPECTATION;
        case 100:
          return UNIQUENESS_EXPECTATION;
        case 101:
          return STATISTIC_RANGE_EXPECTATION;
        case 200:
          return ROW_CONDITION_EXPECTATION;
        case 201:
          return TABLE_CONDITION_EXPECTATION;
        case 0:
          return RULETYPE_NOT_SET;
        default:
          return null;
      }
    }

    public int getNumber() {
      return this.value;
    }
  };

  public RuleTypeCase getRuleTypeCase() {
    return RuleTypeCase.forNumber(ruleTypeCase_);
  }

  public static final int RANGE_EXPECTATION_FIELD_NUMBER = 1;
  /**
   *
   *
   * <pre>
   * ColumnMap rule which evaluates whether each column value lies between a
   * specified range.
   * </pre>
   *
   * <code>.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation range_expectation = 1;</code>
   *
   * @return Whether the rangeExpectation field is set.
   */
  @java.lang.Override
  public boolean hasRangeExpectation() {
    return ruleTypeCase_ == 1;
  }
  /**
   *
   *
   * <pre>
   * ColumnMap rule which evaluates whether each column value lies between a
   * specified range.
   * </pre>
   *
   * <code>.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation range_expectation = 1;</code>
   *
   * @return The rangeExpectation.
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation getRangeExpectation() {
    if (ruleTypeCase_ == 1) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.getDefaultInstance();
  }
  /**
   *
   *
   * <pre>
   * ColumnMap rule which evaluates whether each column value lies between a
   * specified range.
   * </pre>
   *
   * <code>.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation range_expectation = 1;</code>
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectationOrBuilder
      getRangeExpectationOrBuilder() {
    if (ruleTypeCase_ == 1) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.getDefaultInstance();
  }

  public static final int NON_NULL_EXPECTATION_FIELD_NUMBER = 2;
  /**
   *
   *
   * <pre>
   * ColumnMap rule which evaluates whether each column value is null.
   * </pre>
   *
   * <code>.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation non_null_expectation = 2;
   * </code>
   *
   * @return Whether the nonNullExpectation field is set.
   */
  @java.lang.Override
  public boolean hasNonNullExpectation() {
    return ruleTypeCase_ == 2;
  }
  /**
   *
   *
   * <pre>
   * ColumnMap rule which evaluates whether each column value is null.
   * </pre>
   *
   * <code>.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation non_null_expectation = 2;
   * </code>
   *
   * @return The nonNullExpectation.
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation getNonNullExpectation() {
    if (ruleTypeCase_ == 2) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.getDefaultInstance();
  }
  /**
   *
   *
   * <pre>
   * ColumnMap rule which evaluates whether each column value is null.
   * </pre>
   *
   * <code>.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation non_null_expectation = 2;
   * </code>
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectationOrBuilder
      getNonNullExpectationOrBuilder() {
    if (ruleTypeCase_ == 2) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.getDefaultInstance();
  }

  public static final int SET_EXPECTATION_FIELD_NUMBER = 3;
  /**
   *
   *
   * <pre>
   * ColumnMap rule which evaluates whether each column value is contained by
   * a specified set.
   * </pre>
   *
   * <code>.google.cloud.dataplex.v1.DataQualityRule.SetExpectation set_expectation = 3;</code>
   *
   * @return Whether the setExpectation field is set.
   */
  @java.lang.Override
  public boolean hasSetExpectation() {
    return ruleTypeCase_ == 3;
  }
  /**
   *
   *
   * <pre>
   * ColumnMap rule which evaluates whether each column value is contained by
   * a specified set.
   * </pre>
   *
   * <code>.google.cloud.dataplex.v1.DataQualityRule.SetExpectation set_expectation = 3;</code>
   *
   * @return The setExpectation.
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation getSetExpectation() {
    if (ruleTypeCase_ == 3) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.getDefaultInstance();
  }
  /**
   *
   *
   * <pre>
   * ColumnMap rule which evaluates whether each column value is contained by
   * a specified set.
   * </pre>
   *
   * <code>.google.cloud.dataplex.v1.DataQualityRule.SetExpectation set_expectation = 3;</code>
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.SetExpectationOrBuilder
      getSetExpectationOrBuilder() {
    if (ruleTypeCase_ == 3) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.getDefaultInstance();
  }

  public static final int REGEX_EXPECTATION_FIELD_NUMBER = 4;
  /**
   *
   *
   * <pre>
   * ColumnMap rule which evaluates whether each column value matches a
   * specified regex.
   * </pre>
   *
   * <code>.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation regex_expectation = 4;</code>
   *
   * @return Whether the regexExpectation field is set.
   */
  @java.lang.Override
  public boolean hasRegexExpectation() {
    return ruleTypeCase_ == 4;
  }
  /**
   *
   *
   * <pre>
   * ColumnMap rule which evaluates whether each column value matches a
   * specified regex.
   * </pre>
   *
   * <code>.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation regex_expectation = 4;</code>
   *
   * @return The regexExpectation.
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation getRegexExpectation() {
    if (ruleTypeCase_ == 4) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.getDefaultInstance();
  }
  /**
   *
   *
   * <pre>
   * ColumnMap rule which evaluates whether each column value matches a
   * specified regex.
   * </pre>
   *
   * <code>.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation regex_expectation = 4;</code>
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectationOrBuilder
      getRegexExpectationOrBuilder() {
    if (ruleTypeCase_ == 4) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.getDefaultInstance();
  }

  public static final int UNIQUENESS_EXPECTATION_FIELD_NUMBER = 100;
  /**
   *
   *
   * <pre>
   * ColumnAggregate rule which evaluates whether the column has duplicates.
   * </pre>
   *
   * <code>
   * .google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation uniqueness_expectation = 100;
   * </code>
   *
   * @return Whether the uniquenessExpectation field is set.
   */
  @java.lang.Override
  public boolean hasUniquenessExpectation() {
    return ruleTypeCase_ == 100;
  }
  /**
   *
   *
   * <pre>
   * ColumnAggregate rule which evaluates whether the column has duplicates.
   * </pre>
   *
   * <code>
   * .google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation uniqueness_expectation = 100;
   * </code>
   *
   * @return The uniquenessExpectation.
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation
      getUniquenessExpectation() {
    if (ruleTypeCase_ == 100) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation.getDefaultInstance();
  }
  /**
   *
   *
   * <pre>
   * ColumnAggregate rule which evaluates whether the column has duplicates.
   * </pre>
   *
   * <code>
   * .google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation uniqueness_expectation = 100;
   * </code>
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectationOrBuilder
      getUniquenessExpectationOrBuilder() {
    if (ruleTypeCase_ == 100) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation.getDefaultInstance();
  }

  public static final int STATISTIC_RANGE_EXPECTATION_FIELD_NUMBER = 101;
  /**
   *
   *
   * <pre>
   * ColumnAggregate rule which evaluates whether the column aggregate
   * statistic lies between a specified range.
   * </pre>
   *
   * <code>
   * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation statistic_range_expectation = 101;
   * </code>
   *
   * @return Whether the statisticRangeExpectation field is set.
   */
  @java.lang.Override
  public boolean hasStatisticRangeExpectation() {
    return ruleTypeCase_ == 101;
  }
  /**
   *
   *
   * <pre>
   * ColumnAggregate rule which evaluates whether the column aggregate
   * statistic lies between a specified range.
   * </pre>
   *
   * <code>
   * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation statistic_range_expectation = 101;
   * </code>
   *
   * @return The statisticRangeExpectation.
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
      getStatisticRangeExpectation() {
    if (ruleTypeCase_ == 101) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
        .getDefaultInstance();
  }
  /**
   *
   *
   * <pre>
   * ColumnAggregate rule which evaluates whether the column aggregate
   * statistic lies between a specified range.
   * </pre>
   *
   * <code>
   * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation statistic_range_expectation = 101;
   * </code>
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectationOrBuilder
      getStatisticRangeExpectationOrBuilder() {
    if (ruleTypeCase_ == 101) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
        .getDefaultInstance();
  }

  public static final int ROW_CONDITION_EXPECTATION_FIELD_NUMBER = 200;
  /**
   *
   *
   * <pre>
   * Table rule which evaluates whether each row passes the specified
   * condition.
   * </pre>
   *
   * <code>
   * .google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation row_condition_expectation = 200;
   * </code>
   *
   * @return Whether the rowConditionExpectation field is set.
   */
  @java.lang.Override
  public boolean hasRowConditionExpectation() {
    return ruleTypeCase_ == 200;
  }
  /**
   *
   *
   * <pre>
   * Table rule which evaluates whether each row passes the specified
   * condition.
   * </pre>
   *
   * <code>
   * .google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation row_condition_expectation = 200;
   * </code>
   *
   * @return The rowConditionExpectation.
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
      getRowConditionExpectation() {
    if (ruleTypeCase_ == 200) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
        .getDefaultInstance();
  }
  /**
   *
   *
   * <pre>
   * Table rule which evaluates whether each row passes the specified
   * condition.
   * </pre>
   *
   * <code>
   * .google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation row_condition_expectation = 200;
   * </code>
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectationOrBuilder
      getRowConditionExpectationOrBuilder() {
    if (ruleTypeCase_ == 200) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
        .getDefaultInstance();
  }

  public static final int TABLE_CONDITION_EXPECTATION_FIELD_NUMBER = 201;
  /**
   *
   *
   * <pre>
   * Table rule which evaluates whether the provided expression is true.
   * </pre>
   *
   * <code>
   * .google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation table_condition_expectation = 201;
   * </code>
   *
   * @return Whether the tableConditionExpectation field is set.
   */
  @java.lang.Override
  public boolean hasTableConditionExpectation() {
    return ruleTypeCase_ == 201;
  }
  /**
   *
   *
   * <pre>
   * Table rule which evaluates whether the provided expression is true.
   * </pre>
   *
   * <code>
   * .google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation table_condition_expectation = 201;
   * </code>
   *
   * @return The tableConditionExpectation.
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
      getTableConditionExpectation() {
    if (ruleTypeCase_ == 201) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
        .getDefaultInstance();
  }
  /**
   *
   *
   * <pre>
   * Table rule which evaluates whether the provided expression is true.
   * </pre>
   *
   * <code>
   * .google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation table_condition_expectation = 201;
   * </code>
   */
  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectationOrBuilder
      getTableConditionExpectationOrBuilder() {
    if (ruleTypeCase_ == 201) {
      return (com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation) ruleType_;
    }
    return com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
        .getDefaultInstance();
  }

  public static final int COLUMN_FIELD_NUMBER = 500;

  @SuppressWarnings("serial")
  private volatile java.lang.Object column_ = "";
  /**
   *
   *
   * <pre>
   * Optional. The unnested column which this rule is evaluated against.
   * </pre>
   *
   * <code>string column = 500 [(.google.api.field_behavior) = OPTIONAL];</code>
   *
   * @return The column.
   */
  @java.lang.Override
  public java.lang.String getColumn() {
    java.lang.Object ref = column_;
    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();
      column_ = s;
      return s;
    }
  }
  /**
   *
   *
   * <pre>
   * Optional. The unnested column which this rule is evaluated against.
   * </pre>
   *
   * <code>string column = 500 [(.google.api.field_behavior) = OPTIONAL];</code>
   *
   * @return The bytes for column.
   */
  @java.lang.Override
  public com.google.protobuf.ByteString getColumnBytes() {
    java.lang.Object ref = column_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b =
          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
      column_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int IGNORE_NULL_FIELD_NUMBER = 501;
  private boolean ignoreNull_ = false;
  /**
   *
   *
   * <pre>
   * Optional. Rows with `null` values will automatically fail a rule, unless
   * `ignore_null` is `true`. In that case, such `null` rows are trivially
   * considered passing.
   * Only applicable to ColumnMap rules.
   * </pre>
   *
   * <code>bool ignore_null = 501 [(.google.api.field_behavior) = OPTIONAL];</code>
   *
   * @return The ignoreNull.
   */
  @java.lang.Override
  public boolean getIgnoreNull() {
    return ignoreNull_;
  }

  public static final int DIMENSION_FIELD_NUMBER = 502;

  @SuppressWarnings("serial")
  private volatile java.lang.Object dimension_ = "";
  /**
   *
   *
   * <pre>
   * Required. The dimension a rule belongs to. Results are also aggregated at
   * the dimension level. Supported dimensions are **["COMPLETENESS",
   * "ACCURACY", "CONSISTENCY", "VALIDITY", "UNIQUENESS", "INTEGRITY"]**
   * </pre>
   *
   * <code>string dimension = 502 [(.google.api.field_behavior) = REQUIRED];</code>
   *
   * @return The dimension.
   */
  @java.lang.Override
  public java.lang.String getDimension() {
    java.lang.Object ref = dimension_;
    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();
      dimension_ = s;
      return s;
    }
  }
  /**
   *
   *
   * <pre>
   * Required. The dimension a rule belongs to. Results are also aggregated at
   * the dimension level. Supported dimensions are **["COMPLETENESS",
   * "ACCURACY", "CONSISTENCY", "VALIDITY", "UNIQUENESS", "INTEGRITY"]**
   * </pre>
   *
   * <code>string dimension = 502 [(.google.api.field_behavior) = REQUIRED];</code>
   *
   * @return The bytes for dimension.
   */
  @java.lang.Override
  public com.google.protobuf.ByteString getDimensionBytes() {
    java.lang.Object ref = dimension_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b =
          com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
      dimension_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int THRESHOLD_FIELD_NUMBER = 503;
  private double threshold_ = 0D;
  /**
   *
   *
   * <pre>
   * Optional. The minimum ratio of **passing_rows / total_rows** required to
   * pass this rule, with a range of [0.0, 1.0].
   * 0 indicates default value (i.e. 1.0).
   * </pre>
   *
   * <code>double threshold = 503 [(.google.api.field_behavior) = OPTIONAL];</code>
   *
   * @return The threshold.
   */
  @java.lang.Override
  public double getThreshold() {
    return threshold_;
  }

  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 (ruleTypeCase_ == 1) {
      output.writeMessage(
          1, (com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation) ruleType_);
    }
    if (ruleTypeCase_ == 2) {
      output.writeMessage(
          2, (com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation) ruleType_);
    }
    if (ruleTypeCase_ == 3) {
      output.writeMessage(
          3, (com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation) ruleType_);
    }
    if (ruleTypeCase_ == 4) {
      output.writeMessage(
          4, (com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation) ruleType_);
    }
    if (ruleTypeCase_ == 100) {
      output.writeMessage(
          100, (com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation) ruleType_);
    }
    if (ruleTypeCase_ == 101) {
      output.writeMessage(
          101, (com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation) ruleType_);
    }
    if (ruleTypeCase_ == 200) {
      output.writeMessage(
          200, (com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation) ruleType_);
    }
    if (ruleTypeCase_ == 201) {
      output.writeMessage(
          201, (com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation) ruleType_);
    }
    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(column_)) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 500, column_);
    }
    if (ignoreNull_ != false) {
      output.writeBool(501, ignoreNull_);
    }
    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dimension_)) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 502, dimension_);
    }
    if (java.lang.Double.doubleToRawLongBits(threshold_) != 0) {
      output.writeDouble(503, threshold_);
    }
    getUnknownFields().writeTo(output);
  }

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

    size = 0;
    if (ruleTypeCase_ == 1) {
      size +=
          com.google.protobuf.CodedOutputStream.computeMessageSize(
              1, (com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation) ruleType_);
    }
    if (ruleTypeCase_ == 2) {
      size +=
          com.google.protobuf.CodedOutputStream.computeMessageSize(
              2, (com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation) ruleType_);
    }
    if (ruleTypeCase_ == 3) {
      size +=
          com.google.protobuf.CodedOutputStream.computeMessageSize(
              3, (com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation) ruleType_);
    }
    if (ruleTypeCase_ == 4) {
      size +=
          com.google.protobuf.CodedOutputStream.computeMessageSize(
              4, (com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation) ruleType_);
    }
    if (ruleTypeCase_ == 100) {
      size +=
          com.google.protobuf.CodedOutputStream.computeMessageSize(
              100, (com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation) ruleType_);
    }
    if (ruleTypeCase_ == 101) {
      size +=
          com.google.protobuf.CodedOutputStream.computeMessageSize(
              101,
              (com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation) ruleType_);
    }
    if (ruleTypeCase_ == 200) {
      size +=
          com.google.protobuf.CodedOutputStream.computeMessageSize(
              200,
              (com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation) ruleType_);
    }
    if (ruleTypeCase_ == 201) {
      size +=
          com.google.protobuf.CodedOutputStream.computeMessageSize(
              201,
              (com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation) ruleType_);
    }
    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(column_)) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(500, column_);
    }
    if (ignoreNull_ != false) {
      size += com.google.protobuf.CodedOutputStream.computeBoolSize(501, ignoreNull_);
    }
    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(dimension_)) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(502, dimension_);
    }
    if (java.lang.Double.doubleToRawLongBits(threshold_) != 0) {
      size += com.google.protobuf.CodedOutputStream.computeDoubleSize(503, threshold_);
    }
    size += getUnknownFields().getSerializedSize();
    memoizedSize = size;
    return size;
  }

  @java.lang.Override
  public boolean equals(final java.lang.Object obj) {
    if (obj == this) {
      return true;
    }
    if (!(obj instanceof com.google.cloud.dataplex.v1.DataQualityRule)) {
      return super.equals(obj);
    }
    com.google.cloud.dataplex.v1.DataQualityRule other =
        (com.google.cloud.dataplex.v1.DataQualityRule) obj;

    if (!getColumn().equals(other.getColumn())) return false;
    if (getIgnoreNull() != other.getIgnoreNull()) return false;
    if (!getDimension().equals(other.getDimension())) return false;
    if (java.lang.Double.doubleToLongBits(getThreshold())
        != java.lang.Double.doubleToLongBits(other.getThreshold())) return false;
    if (!getRuleTypeCase().equals(other.getRuleTypeCase())) return false;
    switch (ruleTypeCase_) {
      case 1:
        if (!getRangeExpectation().equals(other.getRangeExpectation())) return false;
        break;
      case 2:
        if (!getNonNullExpectation().equals(other.getNonNullExpectation())) return false;
        break;
      case 3:
        if (!getSetExpectation().equals(other.getSetExpectation())) return false;
        break;
      case 4:
        if (!getRegexExpectation().equals(other.getRegexExpectation())) return false;
        break;
      case 100:
        if (!getUniquenessExpectation().equals(other.getUniquenessExpectation())) return false;
        break;
      case 101:
        if (!getStatisticRangeExpectation().equals(other.getStatisticRangeExpectation()))
          return false;
        break;
      case 200:
        if (!getRowConditionExpectation().equals(other.getRowConditionExpectation())) return false;
        break;
      case 201:
        if (!getTableConditionExpectation().equals(other.getTableConditionExpectation()))
          return false;
        break;
      case 0:
      default:
    }
    if (!getUnknownFields().equals(other.getUnknownFields())) 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) + COLUMN_FIELD_NUMBER;
    hash = (53 * hash) + getColumn().hashCode();
    hash = (37 * hash) + IGNORE_NULL_FIELD_NUMBER;
    hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getIgnoreNull());
    hash = (37 * hash) + DIMENSION_FIELD_NUMBER;
    hash = (53 * hash) + getDimension().hashCode();
    hash = (37 * hash) + THRESHOLD_FIELD_NUMBER;
    hash =
        (53 * hash)
            + com.google.protobuf.Internal.hashLong(
                java.lang.Double.doubleToLongBits(getThreshold()));
    switch (ruleTypeCase_) {
      case 1:
        hash = (37 * hash) + RANGE_EXPECTATION_FIELD_NUMBER;
        hash = (53 * hash) + getRangeExpectation().hashCode();
        break;
      case 2:
        hash = (37 * hash) + NON_NULL_EXPECTATION_FIELD_NUMBER;
        hash = (53 * hash) + getNonNullExpectation().hashCode();
        break;
      case 3:
        hash = (37 * hash) + SET_EXPECTATION_FIELD_NUMBER;
        hash = (53 * hash) + getSetExpectation().hashCode();
        break;
      case 4:
        hash = (37 * hash) + REGEX_EXPECTATION_FIELD_NUMBER;
        hash = (53 * hash) + getRegexExpectation().hashCode();
        break;
      case 100:
        hash = (37 * hash) + UNIQUENESS_EXPECTATION_FIELD_NUMBER;
        hash = (53 * hash) + getUniquenessExpectation().hashCode();
        break;
      case 101:
        hash = (37 * hash) + STATISTIC_RANGE_EXPECTATION_FIELD_NUMBER;
        hash = (53 * hash) + getStatisticRangeExpectation().hashCode();
        break;
      case 200:
        hash = (37 * hash) + ROW_CONDITION_EXPECTATION_FIELD_NUMBER;
        hash = (53 * hash) + getRowConditionExpectation().hashCode();
        break;
      case 201:
        hash = (37 * hash) + TABLE_CONDITION_EXPECTATION_FIELD_NUMBER;
        hash = (53 * hash) + getTableConditionExpectation().hashCode();
        break;
      case 0:
      default:
    }
    hash = (29 * hash) + getUnknownFields().hashCode();
    memoizedHashCode = hash;
    return hash;
  }

  public static com.google.cloud.dataplex.v1.DataQualityRule parseFrom(java.nio.ByteBuffer data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }

  public static com.google.cloud.dataplex.v1.DataQualityRule parseFrom(
      java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }

  public static com.google.cloud.dataplex.v1.DataQualityRule parseFrom(
      com.google.protobuf.ByteString data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }

  public static com.google.cloud.dataplex.v1.DataQualityRule parseFrom(
      com.google.protobuf.ByteString data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }

  public static com.google.cloud.dataplex.v1.DataQualityRule parseFrom(byte[] data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }

  public static com.google.cloud.dataplex.v1.DataQualityRule parseFrom(
      byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }

  public static com.google.cloud.dataplex.v1.DataQualityRule parseFrom(java.io.InputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
  }

  public static com.google.cloud.dataplex.v1.DataQualityRule 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 com.google.cloud.dataplex.v1.DataQualityRule parseDelimitedFrom(
      java.io.InputStream input) throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
  }

  public static com.google.cloud.dataplex.v1.DataQualityRule 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 com.google.cloud.dataplex.v1.DataQualityRule parseFrom(
      com.google.protobuf.CodedInputStream input) throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
  }

  public static com.google.cloud.dataplex.v1.DataQualityRule 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(com.google.cloud.dataplex.v1.DataQualityRule 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;
  }
  /**
   *
   *
   * <pre>
   * A rule captures data quality intent about a data source.
   * </pre>
   *
   * Protobuf type {@code google.cloud.dataplex.v1.DataQualityRule}
   */
  public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
      implements
      // @@protoc_insertion_point(builder_implements:google.cloud.dataplex.v1.DataQualityRule)
      com.google.cloud.dataplex.v1.DataQualityRuleOrBuilder {
    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.cloud.dataplex.v1.DataQualityRule.class,
              com.google.cloud.dataplex.v1.DataQualityRule.Builder.class);
    }

    // Construct using com.google.cloud.dataplex.v1.DataQualityRule.newBuilder()
    private Builder() {}

    private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      super(parent);
    }

    @java.lang.Override
    public Builder clear() {
      super.clear();
      bitField0_ = 0;
      if (rangeExpectationBuilder_ != null) {
        rangeExpectationBuilder_.clear();
      }
      if (nonNullExpectationBuilder_ != null) {
        nonNullExpectationBuilder_.clear();
      }
      if (setExpectationBuilder_ != null) {
        setExpectationBuilder_.clear();
      }
      if (regexExpectationBuilder_ != null) {
        regexExpectationBuilder_.clear();
      }
      if (uniquenessExpectationBuilder_ != null) {
        uniquenessExpectationBuilder_.clear();
      }
      if (statisticRangeExpectationBuilder_ != null) {
        statisticRangeExpectationBuilder_.clear();
      }
      if (rowConditionExpectationBuilder_ != null) {
        rowConditionExpectationBuilder_.clear();
      }
      if (tableConditionExpectationBuilder_ != null) {
        tableConditionExpectationBuilder_.clear();
      }
      column_ = "";
      ignoreNull_ = false;
      dimension_ = "";
      threshold_ = 0D;
      ruleTypeCase_ = 0;
      ruleType_ = null;
      return this;
    }

    @java.lang.Override
    public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
      return com.google.cloud.dataplex.v1.DataQualityProto
          .internal_static_google_cloud_dataplex_v1_DataQualityRule_descriptor;
    }

    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule getDefaultInstanceForType() {
      return com.google.cloud.dataplex.v1.DataQualityRule.getDefaultInstance();
    }

    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule build() {
      com.google.cloud.dataplex.v1.DataQualityRule result = buildPartial();
      if (!result.isInitialized()) {
        throw newUninitializedMessageException(result);
      }
      return result;
    }

    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule buildPartial() {
      com.google.cloud.dataplex.v1.DataQualityRule result =
          new com.google.cloud.dataplex.v1.DataQualityRule(this);
      if (bitField0_ != 0) {
        buildPartial0(result);
      }
      buildPartialOneofs(result);
      onBuilt();
      return result;
    }

    private void buildPartial0(com.google.cloud.dataplex.v1.DataQualityRule result) {
      int from_bitField0_ = bitField0_;
      if (((from_bitField0_ & 0x00000100) != 0)) {
        result.column_ = column_;
      }
      if (((from_bitField0_ & 0x00000200) != 0)) {
        result.ignoreNull_ = ignoreNull_;
      }
      if (((from_bitField0_ & 0x00000400) != 0)) {
        result.dimension_ = dimension_;
      }
      if (((from_bitField0_ & 0x00000800) != 0)) {
        result.threshold_ = threshold_;
      }
    }

    private void buildPartialOneofs(com.google.cloud.dataplex.v1.DataQualityRule result) {
      result.ruleTypeCase_ = ruleTypeCase_;
      result.ruleType_ = this.ruleType_;
      if (ruleTypeCase_ == 1 && rangeExpectationBuilder_ != null) {
        result.ruleType_ = rangeExpectationBuilder_.build();
      }
      if (ruleTypeCase_ == 2 && nonNullExpectationBuilder_ != null) {
        result.ruleType_ = nonNullExpectationBuilder_.build();
      }
      if (ruleTypeCase_ == 3 && setExpectationBuilder_ != null) {
        result.ruleType_ = setExpectationBuilder_.build();
      }
      if (ruleTypeCase_ == 4 && regexExpectationBuilder_ != null) {
        result.ruleType_ = regexExpectationBuilder_.build();
      }
      if (ruleTypeCase_ == 100 && uniquenessExpectationBuilder_ != null) {
        result.ruleType_ = uniquenessExpectationBuilder_.build();
      }
      if (ruleTypeCase_ == 101 && statisticRangeExpectationBuilder_ != null) {
        result.ruleType_ = statisticRangeExpectationBuilder_.build();
      }
      if (ruleTypeCase_ == 200 && rowConditionExpectationBuilder_ != null) {
        result.ruleType_ = rowConditionExpectationBuilder_.build();
      }
      if (ruleTypeCase_ == 201 && tableConditionExpectationBuilder_ != null) {
        result.ruleType_ = tableConditionExpectationBuilder_.build();
      }
    }

    @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 com.google.cloud.dataplex.v1.DataQualityRule) {
        return mergeFrom((com.google.cloud.dataplex.v1.DataQualityRule) other);
      } else {
        super.mergeFrom(other);
        return this;
      }
    }

    public Builder mergeFrom(com.google.cloud.dataplex.v1.DataQualityRule other) {
      if (other == com.google.cloud.dataplex.v1.DataQualityRule.getDefaultInstance()) return this;
      if (!other.getColumn().isEmpty()) {
        column_ = other.column_;
        bitField0_ |= 0x00000100;
        onChanged();
      }
      if (other.getIgnoreNull() != false) {
        setIgnoreNull(other.getIgnoreNull());
      }
      if (!other.getDimension().isEmpty()) {
        dimension_ = other.dimension_;
        bitField0_ |= 0x00000400;
        onChanged();
      }
      if (other.getThreshold() != 0D) {
        setThreshold(other.getThreshold());
      }
      switch (other.getRuleTypeCase()) {
        case RANGE_EXPECTATION:
          {
            mergeRangeExpectation(other.getRangeExpectation());
            break;
          }
        case NON_NULL_EXPECTATION:
          {
            mergeNonNullExpectation(other.getNonNullExpectation());
            break;
          }
        case SET_EXPECTATION:
          {
            mergeSetExpectation(other.getSetExpectation());
            break;
          }
        case REGEX_EXPECTATION:
          {
            mergeRegexExpectation(other.getRegexExpectation());
            break;
          }
        case UNIQUENESS_EXPECTATION:
          {
            mergeUniquenessExpectation(other.getUniquenessExpectation());
            break;
          }
        case STATISTIC_RANGE_EXPECTATION:
          {
            mergeStatisticRangeExpectation(other.getStatisticRangeExpectation());
            break;
          }
        case ROW_CONDITION_EXPECTATION:
          {
            mergeRowConditionExpectation(other.getRowConditionExpectation());
            break;
          }
        case TABLE_CONDITION_EXPECTATION:
          {
            mergeTableConditionExpectation(other.getTableConditionExpectation());
            break;
          }
        case RULETYPE_NOT_SET:
          {
            break;
          }
      }
      this.mergeUnknownFields(other.getUnknownFields());
      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 {
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10:
              {
                input.readMessage(
                    getRangeExpectationFieldBuilder().getBuilder(), extensionRegistry);
                ruleTypeCase_ = 1;
                break;
              } // case 10
            case 18:
              {
                input.readMessage(
                    getNonNullExpectationFieldBuilder().getBuilder(), extensionRegistry);
                ruleTypeCase_ = 2;
                break;
              } // case 18
            case 26:
              {
                input.readMessage(getSetExpectationFieldBuilder().getBuilder(), extensionRegistry);
                ruleTypeCase_ = 3;
                break;
              } // case 26
            case 34:
              {
                input.readMessage(
                    getRegexExpectationFieldBuilder().getBuilder(), extensionRegistry);
                ruleTypeCase_ = 4;
                break;
              } // case 34
            case 802:
              {
                input.readMessage(
                    getUniquenessExpectationFieldBuilder().getBuilder(), extensionRegistry);
                ruleTypeCase_ = 100;
                break;
              } // case 802
            case 810:
              {
                input.readMessage(
                    getStatisticRangeExpectationFieldBuilder().getBuilder(), extensionRegistry);
                ruleTypeCase_ = 101;
                break;
              } // case 810
            case 1602:
              {
                input.readMessage(
                    getRowConditionExpectationFieldBuilder().getBuilder(), extensionRegistry);
                ruleTypeCase_ = 200;
                break;
              } // case 1602
            case 1610:
              {
                input.readMessage(
                    getTableConditionExpectationFieldBuilder().getBuilder(), extensionRegistry);
                ruleTypeCase_ = 201;
                break;
              } // case 1610
            case 4002:
              {
                column_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000100;
                break;
              } // case 4002
            case 4008:
              {
                ignoreNull_ = input.readBool();
                bitField0_ |= 0x00000200;
                break;
              } // case 4008
            case 4018:
              {
                dimension_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000400;
                break;
              } // case 4018
            case 4025:
              {
                threshold_ = input.readDouble();
                bitField0_ |= 0x00000800;
                break;
              } // case 4025
            default:
              {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
          } // switch (tag)
        } // while (!done)
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.unwrapIOException();
      } finally {
        onChanged();
      } // finally
      return this;
    }

    private int ruleTypeCase_ = 0;
    private java.lang.Object ruleType_;

    public RuleTypeCase getRuleTypeCase() {
      return RuleTypeCase.forNumber(ruleTypeCase_);
    }

    public Builder clearRuleType() {
      ruleTypeCase_ = 0;
      ruleType_ = null;
      onChanged();
      return this;
    }

    private int bitField0_;

    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectationOrBuilder>
        rangeExpectationBuilder_;
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value lies between a
     * specified range.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation range_expectation = 1;
     * </code>
     *
     * @return Whether the rangeExpectation field is set.
     */
    @java.lang.Override
    public boolean hasRangeExpectation() {
      return ruleTypeCase_ == 1;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value lies between a
     * specified range.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation range_expectation = 1;
     * </code>
     *
     * @return The rangeExpectation.
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation getRangeExpectation() {
      if (rangeExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 1) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.getDefaultInstance();
      } else {
        if (ruleTypeCase_ == 1) {
          return rangeExpectationBuilder_.getMessage();
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value lies between a
     * specified range.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation range_expectation = 1;
     * </code>
     */
    public Builder setRangeExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation value) {
      if (rangeExpectationBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ruleType_ = value;
        onChanged();
      } else {
        rangeExpectationBuilder_.setMessage(value);
      }
      ruleTypeCase_ = 1;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value lies between a
     * specified range.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation range_expectation = 1;
     * </code>
     */
    public Builder setRangeExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.Builder builderForValue) {
      if (rangeExpectationBuilder_ == null) {
        ruleType_ = builderForValue.build();
        onChanged();
      } else {
        rangeExpectationBuilder_.setMessage(builderForValue.build());
      }
      ruleTypeCase_ = 1;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value lies between a
     * specified range.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation range_expectation = 1;
     * </code>
     */
    public Builder mergeRangeExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation value) {
      if (rangeExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 1
            && ruleType_
                != com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation
                    .getDefaultInstance()) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.newBuilder(
                      (com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation) ruleType_)
                  .mergeFrom(value)
                  .buildPartial();
        } else {
          ruleType_ = value;
        }
        onChanged();
      } else {
        if (ruleTypeCase_ == 1) {
          rangeExpectationBuilder_.mergeFrom(value);
        } else {
          rangeExpectationBuilder_.setMessage(value);
        }
      }
      ruleTypeCase_ = 1;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value lies between a
     * specified range.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation range_expectation = 1;
     * </code>
     */
    public Builder clearRangeExpectation() {
      if (rangeExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 1) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
          onChanged();
        }
      } else {
        if (ruleTypeCase_ == 1) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
        }
        rangeExpectationBuilder_.clear();
      }
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value lies between a
     * specified range.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation range_expectation = 1;
     * </code>
     */
    public com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.Builder
        getRangeExpectationBuilder() {
      return getRangeExpectationFieldBuilder().getBuilder();
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value lies between a
     * specified range.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation range_expectation = 1;
     * </code>
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectationOrBuilder
        getRangeExpectationOrBuilder() {
      if ((ruleTypeCase_ == 1) && (rangeExpectationBuilder_ != null)) {
        return rangeExpectationBuilder_.getMessageOrBuilder();
      } else {
        if (ruleTypeCase_ == 1) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value lies between a
     * specified range.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation range_expectation = 1;
     * </code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectationOrBuilder>
        getRangeExpectationFieldBuilder() {
      if (rangeExpectationBuilder_ == null) {
        if (!(ruleTypeCase_ == 1)) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.getDefaultInstance();
        }
        rangeExpectationBuilder_ =
            new com.google.protobuf.SingleFieldBuilderV3<
                com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation,
                com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation.Builder,
                com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectationOrBuilder>(
                (com.google.cloud.dataplex.v1.DataQualityRule.RangeExpectation) ruleType_,
                getParentForChildren(),
                isClean());
        ruleType_ = null;
      }
      ruleTypeCase_ = 1;
      onChanged();
      return rangeExpectationBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectationOrBuilder>
        nonNullExpectationBuilder_;
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is null.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation non_null_expectation = 2;
     * </code>
     *
     * @return Whether the nonNullExpectation field is set.
     */
    @java.lang.Override
    public boolean hasNonNullExpectation() {
      return ruleTypeCase_ == 2;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is null.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation non_null_expectation = 2;
     * </code>
     *
     * @return The nonNullExpectation.
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation getNonNullExpectation() {
      if (nonNullExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 2) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.getDefaultInstance();
      } else {
        if (ruleTypeCase_ == 2) {
          return nonNullExpectationBuilder_.getMessage();
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is null.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation non_null_expectation = 2;
     * </code>
     */
    public Builder setNonNullExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation value) {
      if (nonNullExpectationBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ruleType_ = value;
        onChanged();
      } else {
        nonNullExpectationBuilder_.setMessage(value);
      }
      ruleTypeCase_ = 2;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is null.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation non_null_expectation = 2;
     * </code>
     */
    public Builder setNonNullExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.Builder builderForValue) {
      if (nonNullExpectationBuilder_ == null) {
        ruleType_ = builderForValue.build();
        onChanged();
      } else {
        nonNullExpectationBuilder_.setMessage(builderForValue.build());
      }
      ruleTypeCase_ = 2;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is null.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation non_null_expectation = 2;
     * </code>
     */
    public Builder mergeNonNullExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation value) {
      if (nonNullExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 2
            && ruleType_
                != com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation
                    .getDefaultInstance()) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.newBuilder(
                      (com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation) ruleType_)
                  .mergeFrom(value)
                  .buildPartial();
        } else {
          ruleType_ = value;
        }
        onChanged();
      } else {
        if (ruleTypeCase_ == 2) {
          nonNullExpectationBuilder_.mergeFrom(value);
        } else {
          nonNullExpectationBuilder_.setMessage(value);
        }
      }
      ruleTypeCase_ = 2;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is null.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation non_null_expectation = 2;
     * </code>
     */
    public Builder clearNonNullExpectation() {
      if (nonNullExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 2) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
          onChanged();
        }
      } else {
        if (ruleTypeCase_ == 2) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
        }
        nonNullExpectationBuilder_.clear();
      }
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is null.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation non_null_expectation = 2;
     * </code>
     */
    public com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.Builder
        getNonNullExpectationBuilder() {
      return getNonNullExpectationFieldBuilder().getBuilder();
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is null.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation non_null_expectation = 2;
     * </code>
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectationOrBuilder
        getNonNullExpectationOrBuilder() {
      if ((ruleTypeCase_ == 2) && (nonNullExpectationBuilder_ != null)) {
        return nonNullExpectationBuilder_.getMessageOrBuilder();
      } else {
        if (ruleTypeCase_ == 2) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is null.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation non_null_expectation = 2;
     * </code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectationOrBuilder>
        getNonNullExpectationFieldBuilder() {
      if (nonNullExpectationBuilder_ == null) {
        if (!(ruleTypeCase_ == 2)) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.getDefaultInstance();
        }
        nonNullExpectationBuilder_ =
            new com.google.protobuf.SingleFieldBuilderV3<
                com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation,
                com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation.Builder,
                com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectationOrBuilder>(
                (com.google.cloud.dataplex.v1.DataQualityRule.NonNullExpectation) ruleType_,
                getParentForChildren(),
                isClean());
        ruleType_ = null;
      }
      ruleTypeCase_ = 2;
      onChanged();
      return nonNullExpectationBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.SetExpectationOrBuilder>
        setExpectationBuilder_;
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is contained by
     * a specified set.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.SetExpectation set_expectation = 3;</code>
     *
     * @return Whether the setExpectation field is set.
     */
    @java.lang.Override
    public boolean hasSetExpectation() {
      return ruleTypeCase_ == 3;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is contained by
     * a specified set.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.SetExpectation set_expectation = 3;</code>
     *
     * @return The setExpectation.
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation getSetExpectation() {
      if (setExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 3) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.getDefaultInstance();
      } else {
        if (ruleTypeCase_ == 3) {
          return setExpectationBuilder_.getMessage();
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is contained by
     * a specified set.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.SetExpectation set_expectation = 3;</code>
     */
    public Builder setSetExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation value) {
      if (setExpectationBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ruleType_ = value;
        onChanged();
      } else {
        setExpectationBuilder_.setMessage(value);
      }
      ruleTypeCase_ = 3;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is contained by
     * a specified set.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.SetExpectation set_expectation = 3;</code>
     */
    public Builder setSetExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.Builder builderForValue) {
      if (setExpectationBuilder_ == null) {
        ruleType_ = builderForValue.build();
        onChanged();
      } else {
        setExpectationBuilder_.setMessage(builderForValue.build());
      }
      ruleTypeCase_ = 3;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is contained by
     * a specified set.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.SetExpectation set_expectation = 3;</code>
     */
    public Builder mergeSetExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation value) {
      if (setExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 3
            && ruleType_
                != com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation
                    .getDefaultInstance()) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.newBuilder(
                      (com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation) ruleType_)
                  .mergeFrom(value)
                  .buildPartial();
        } else {
          ruleType_ = value;
        }
        onChanged();
      } else {
        if (ruleTypeCase_ == 3) {
          setExpectationBuilder_.mergeFrom(value);
        } else {
          setExpectationBuilder_.setMessage(value);
        }
      }
      ruleTypeCase_ = 3;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is contained by
     * a specified set.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.SetExpectation set_expectation = 3;</code>
     */
    public Builder clearSetExpectation() {
      if (setExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 3) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
          onChanged();
        }
      } else {
        if (ruleTypeCase_ == 3) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
        }
        setExpectationBuilder_.clear();
      }
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is contained by
     * a specified set.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.SetExpectation set_expectation = 3;</code>
     */
    public com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.Builder
        getSetExpectationBuilder() {
      return getSetExpectationFieldBuilder().getBuilder();
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is contained by
     * a specified set.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.SetExpectation set_expectation = 3;</code>
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.SetExpectationOrBuilder
        getSetExpectationOrBuilder() {
      if ((ruleTypeCase_ == 3) && (setExpectationBuilder_ != null)) {
        return setExpectationBuilder_.getMessageOrBuilder();
      } else {
        if (ruleTypeCase_ == 3) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value is contained by
     * a specified set.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.SetExpectation set_expectation = 3;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.SetExpectationOrBuilder>
        getSetExpectationFieldBuilder() {
      if (setExpectationBuilder_ == null) {
        if (!(ruleTypeCase_ == 3)) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.getDefaultInstance();
        }
        setExpectationBuilder_ =
            new com.google.protobuf.SingleFieldBuilderV3<
                com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation,
                com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation.Builder,
                com.google.cloud.dataplex.v1.DataQualityRule.SetExpectationOrBuilder>(
                (com.google.cloud.dataplex.v1.DataQualityRule.SetExpectation) ruleType_,
                getParentForChildren(),
                isClean());
        ruleType_ = null;
      }
      ruleTypeCase_ = 3;
      onChanged();
      return setExpectationBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectationOrBuilder>
        regexExpectationBuilder_;
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value matches a
     * specified regex.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation regex_expectation = 4;
     * </code>
     *
     * @return Whether the regexExpectation field is set.
     */
    @java.lang.Override
    public boolean hasRegexExpectation() {
      return ruleTypeCase_ == 4;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value matches a
     * specified regex.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation regex_expectation = 4;
     * </code>
     *
     * @return The regexExpectation.
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation getRegexExpectation() {
      if (regexExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 4) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.getDefaultInstance();
      } else {
        if (ruleTypeCase_ == 4) {
          return regexExpectationBuilder_.getMessage();
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value matches a
     * specified regex.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation regex_expectation = 4;
     * </code>
     */
    public Builder setRegexExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation value) {
      if (regexExpectationBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ruleType_ = value;
        onChanged();
      } else {
        regexExpectationBuilder_.setMessage(value);
      }
      ruleTypeCase_ = 4;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value matches a
     * specified regex.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation regex_expectation = 4;
     * </code>
     */
    public Builder setRegexExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.Builder builderForValue) {
      if (regexExpectationBuilder_ == null) {
        ruleType_ = builderForValue.build();
        onChanged();
      } else {
        regexExpectationBuilder_.setMessage(builderForValue.build());
      }
      ruleTypeCase_ = 4;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value matches a
     * specified regex.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation regex_expectation = 4;
     * </code>
     */
    public Builder mergeRegexExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation value) {
      if (regexExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 4
            && ruleType_
                != com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation
                    .getDefaultInstance()) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.newBuilder(
                      (com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation) ruleType_)
                  .mergeFrom(value)
                  .buildPartial();
        } else {
          ruleType_ = value;
        }
        onChanged();
      } else {
        if (ruleTypeCase_ == 4) {
          regexExpectationBuilder_.mergeFrom(value);
        } else {
          regexExpectationBuilder_.setMessage(value);
        }
      }
      ruleTypeCase_ = 4;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value matches a
     * specified regex.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation regex_expectation = 4;
     * </code>
     */
    public Builder clearRegexExpectation() {
      if (regexExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 4) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
          onChanged();
        }
      } else {
        if (ruleTypeCase_ == 4) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
        }
        regexExpectationBuilder_.clear();
      }
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value matches a
     * specified regex.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation regex_expectation = 4;
     * </code>
     */
    public com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.Builder
        getRegexExpectationBuilder() {
      return getRegexExpectationFieldBuilder().getBuilder();
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value matches a
     * specified regex.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation regex_expectation = 4;
     * </code>
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectationOrBuilder
        getRegexExpectationOrBuilder() {
      if ((ruleTypeCase_ == 4) && (regexExpectationBuilder_ != null)) {
        return regexExpectationBuilder_.getMessageOrBuilder();
      } else {
        if (ruleTypeCase_ == 4) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * ColumnMap rule which evaluates whether each column value matches a
     * specified regex.
     * </pre>
     *
     * <code>.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation regex_expectation = 4;
     * </code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectationOrBuilder>
        getRegexExpectationFieldBuilder() {
      if (regexExpectationBuilder_ == null) {
        if (!(ruleTypeCase_ == 4)) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.getDefaultInstance();
        }
        regexExpectationBuilder_ =
            new com.google.protobuf.SingleFieldBuilderV3<
                com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation,
                com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation.Builder,
                com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectationOrBuilder>(
                (com.google.cloud.dataplex.v1.DataQualityRule.RegexExpectation) ruleType_,
                getParentForChildren(),
                isClean());
        ruleType_ = null;
      }
      ruleTypeCase_ = 4;
      onChanged();
      return regexExpectationBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectationOrBuilder>
        uniquenessExpectationBuilder_;
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column has duplicates.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation uniqueness_expectation = 100;
     * </code>
     *
     * @return Whether the uniquenessExpectation field is set.
     */
    @java.lang.Override
    public boolean hasUniquenessExpectation() {
      return ruleTypeCase_ == 100;
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column has duplicates.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation uniqueness_expectation = 100;
     * </code>
     *
     * @return The uniquenessExpectation.
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation
        getUniquenessExpectation() {
      if (uniquenessExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 100) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation
            .getDefaultInstance();
      } else {
        if (ruleTypeCase_ == 100) {
          return uniquenessExpectationBuilder_.getMessage();
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation
            .getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column has duplicates.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation uniqueness_expectation = 100;
     * </code>
     */
    public Builder setUniquenessExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation value) {
      if (uniquenessExpectationBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ruleType_ = value;
        onChanged();
      } else {
        uniquenessExpectationBuilder_.setMessage(value);
      }
      ruleTypeCase_ = 100;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column has duplicates.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation uniqueness_expectation = 100;
     * </code>
     */
    public Builder setUniquenessExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation.Builder
            builderForValue) {
      if (uniquenessExpectationBuilder_ == null) {
        ruleType_ = builderForValue.build();
        onChanged();
      } else {
        uniquenessExpectationBuilder_.setMessage(builderForValue.build());
      }
      ruleTypeCase_ = 100;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column has duplicates.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation uniqueness_expectation = 100;
     * </code>
     */
    public Builder mergeUniquenessExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation value) {
      if (uniquenessExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 100
            && ruleType_
                != com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation
                    .getDefaultInstance()) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation.newBuilder(
                      (com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation)
                          ruleType_)
                  .mergeFrom(value)
                  .buildPartial();
        } else {
          ruleType_ = value;
        }
        onChanged();
      } else {
        if (ruleTypeCase_ == 100) {
          uniquenessExpectationBuilder_.mergeFrom(value);
        } else {
          uniquenessExpectationBuilder_.setMessage(value);
        }
      }
      ruleTypeCase_ = 100;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column has duplicates.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation uniqueness_expectation = 100;
     * </code>
     */
    public Builder clearUniquenessExpectation() {
      if (uniquenessExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 100) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
          onChanged();
        }
      } else {
        if (ruleTypeCase_ == 100) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
        }
        uniquenessExpectationBuilder_.clear();
      }
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column has duplicates.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation uniqueness_expectation = 100;
     * </code>
     */
    public com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation.Builder
        getUniquenessExpectationBuilder() {
      return getUniquenessExpectationFieldBuilder().getBuilder();
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column has duplicates.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation uniqueness_expectation = 100;
     * </code>
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectationOrBuilder
        getUniquenessExpectationOrBuilder() {
      if ((ruleTypeCase_ == 100) && (uniquenessExpectationBuilder_ != null)) {
        return uniquenessExpectationBuilder_.getMessageOrBuilder();
      } else {
        if (ruleTypeCase_ == 100) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation
            .getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column has duplicates.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation uniqueness_expectation = 100;
     * </code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectationOrBuilder>
        getUniquenessExpectationFieldBuilder() {
      if (uniquenessExpectationBuilder_ == null) {
        if (!(ruleTypeCase_ == 100)) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation
                  .getDefaultInstance();
        }
        uniquenessExpectationBuilder_ =
            new com.google.protobuf.SingleFieldBuilderV3<
                com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation,
                com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation.Builder,
                com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectationOrBuilder>(
                (com.google.cloud.dataplex.v1.DataQualityRule.UniquenessExpectation) ruleType_,
                getParentForChildren(),
                isClean());
        ruleType_ = null;
      }
      ruleTypeCase_ = 100;
      onChanged();
      return uniquenessExpectationBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectationOrBuilder>
        statisticRangeExpectationBuilder_;
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column aggregate
     * statistic lies between a specified range.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation statistic_range_expectation = 101;
     * </code>
     *
     * @return Whether the statisticRangeExpectation field is set.
     */
    @java.lang.Override
    public boolean hasStatisticRangeExpectation() {
      return ruleTypeCase_ == 101;
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column aggregate
     * statistic lies between a specified range.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation statistic_range_expectation = 101;
     * </code>
     *
     * @return The statisticRangeExpectation.
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
        getStatisticRangeExpectation() {
      if (statisticRangeExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 101) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
            .getDefaultInstance();
      } else {
        if (ruleTypeCase_ == 101) {
          return statisticRangeExpectationBuilder_.getMessage();
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
            .getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column aggregate
     * statistic lies between a specified range.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation statistic_range_expectation = 101;
     * </code>
     */
    public Builder setStatisticRangeExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation value) {
      if (statisticRangeExpectationBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ruleType_ = value;
        onChanged();
      } else {
        statisticRangeExpectationBuilder_.setMessage(value);
      }
      ruleTypeCase_ = 101;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column aggregate
     * statistic lies between a specified range.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation statistic_range_expectation = 101;
     * </code>
     */
    public Builder setStatisticRangeExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.Builder
            builderForValue) {
      if (statisticRangeExpectationBuilder_ == null) {
        ruleType_ = builderForValue.build();
        onChanged();
      } else {
        statisticRangeExpectationBuilder_.setMessage(builderForValue.build());
      }
      ruleTypeCase_ = 101;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column aggregate
     * statistic lies between a specified range.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation statistic_range_expectation = 101;
     * </code>
     */
    public Builder mergeStatisticRangeExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation value) {
      if (statisticRangeExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 101
            && ruleType_
                != com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
                    .getDefaultInstance()) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.newBuilder(
                      (com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation)
                          ruleType_)
                  .mergeFrom(value)
                  .buildPartial();
        } else {
          ruleType_ = value;
        }
        onChanged();
      } else {
        if (ruleTypeCase_ == 101) {
          statisticRangeExpectationBuilder_.mergeFrom(value);
        } else {
          statisticRangeExpectationBuilder_.setMessage(value);
        }
      }
      ruleTypeCase_ = 101;
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column aggregate
     * statistic lies between a specified range.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation statistic_range_expectation = 101;
     * </code>
     */
    public Builder clearStatisticRangeExpectation() {
      if (statisticRangeExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 101) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
          onChanged();
        }
      } else {
        if (ruleTypeCase_ == 101) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
        }
        statisticRangeExpectationBuilder_.clear();
      }
      return this;
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column aggregate
     * statistic lies between a specified range.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation statistic_range_expectation = 101;
     * </code>
     */
    public com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.Builder
        getStatisticRangeExpectationBuilder() {
      return getStatisticRangeExpectationFieldBuilder().getBuilder();
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column aggregate
     * statistic lies between a specified range.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation statistic_range_expectation = 101;
     * </code>
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectationOrBuilder
        getStatisticRangeExpectationOrBuilder() {
      if ((ruleTypeCase_ == 101) && (statisticRangeExpectationBuilder_ != null)) {
        return statisticRangeExpectationBuilder_.getMessageOrBuilder();
      } else {
        if (ruleTypeCase_ == 101) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
            .getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * ColumnAggregate rule which evaluates whether the column aggregate
     * statistic lies between a specified range.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation statistic_range_expectation = 101;
     * </code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectationOrBuilder>
        getStatisticRangeExpectationFieldBuilder() {
      if (statisticRangeExpectationBuilder_ == null) {
        if (!(ruleTypeCase_ == 101)) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation
                  .getDefaultInstance();
        }
        statisticRangeExpectationBuilder_ =
            new com.google.protobuf.SingleFieldBuilderV3<
                com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation,
                com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation.Builder,
                com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectationOrBuilder>(
                (com.google.cloud.dataplex.v1.DataQualityRule.StatisticRangeExpectation) ruleType_,
                getParentForChildren(),
                isClean());
        ruleType_ = null;
      }
      ruleTypeCase_ = 101;
      onChanged();
      return statisticRangeExpectationBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectationOrBuilder>
        rowConditionExpectationBuilder_;
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether each row passes the specified
     * condition.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation row_condition_expectation = 200;
     * </code>
     *
     * @return Whether the rowConditionExpectation field is set.
     */
    @java.lang.Override
    public boolean hasRowConditionExpectation() {
      return ruleTypeCase_ == 200;
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether each row passes the specified
     * condition.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation row_condition_expectation = 200;
     * </code>
     *
     * @return The rowConditionExpectation.
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
        getRowConditionExpectation() {
      if (rowConditionExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 200) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
            .getDefaultInstance();
      } else {
        if (ruleTypeCase_ == 200) {
          return rowConditionExpectationBuilder_.getMessage();
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
            .getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether each row passes the specified
     * condition.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation row_condition_expectation = 200;
     * </code>
     */
    public Builder setRowConditionExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation value) {
      if (rowConditionExpectationBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ruleType_ = value;
        onChanged();
      } else {
        rowConditionExpectationBuilder_.setMessage(value);
      }
      ruleTypeCase_ = 200;
      return this;
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether each row passes the specified
     * condition.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation row_condition_expectation = 200;
     * </code>
     */
    public Builder setRowConditionExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation.Builder
            builderForValue) {
      if (rowConditionExpectationBuilder_ == null) {
        ruleType_ = builderForValue.build();
        onChanged();
      } else {
        rowConditionExpectationBuilder_.setMessage(builderForValue.build());
      }
      ruleTypeCase_ = 200;
      return this;
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether each row passes the specified
     * condition.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation row_condition_expectation = 200;
     * </code>
     */
    public Builder mergeRowConditionExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation value) {
      if (rowConditionExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 200
            && ruleType_
                != com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
                    .getDefaultInstance()) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation.newBuilder(
                      (com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation)
                          ruleType_)
                  .mergeFrom(value)
                  .buildPartial();
        } else {
          ruleType_ = value;
        }
        onChanged();
      } else {
        if (ruleTypeCase_ == 200) {
          rowConditionExpectationBuilder_.mergeFrom(value);
        } else {
          rowConditionExpectationBuilder_.setMessage(value);
        }
      }
      ruleTypeCase_ = 200;
      return this;
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether each row passes the specified
     * condition.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation row_condition_expectation = 200;
     * </code>
     */
    public Builder clearRowConditionExpectation() {
      if (rowConditionExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 200) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
          onChanged();
        }
      } else {
        if (ruleTypeCase_ == 200) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
        }
        rowConditionExpectationBuilder_.clear();
      }
      return this;
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether each row passes the specified
     * condition.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation row_condition_expectation = 200;
     * </code>
     */
    public com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation.Builder
        getRowConditionExpectationBuilder() {
      return getRowConditionExpectationFieldBuilder().getBuilder();
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether each row passes the specified
     * condition.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation row_condition_expectation = 200;
     * </code>
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectationOrBuilder
        getRowConditionExpectationOrBuilder() {
      if ((ruleTypeCase_ == 200) && (rowConditionExpectationBuilder_ != null)) {
        return rowConditionExpectationBuilder_.getMessageOrBuilder();
      } else {
        if (ruleTypeCase_ == 200) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
            .getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether each row passes the specified
     * condition.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation row_condition_expectation = 200;
     * </code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectationOrBuilder>
        getRowConditionExpectationFieldBuilder() {
      if (rowConditionExpectationBuilder_ == null) {
        if (!(ruleTypeCase_ == 200)) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation
                  .getDefaultInstance();
        }
        rowConditionExpectationBuilder_ =
            new com.google.protobuf.SingleFieldBuilderV3<
                com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation,
                com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation.Builder,
                com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectationOrBuilder>(
                (com.google.cloud.dataplex.v1.DataQualityRule.RowConditionExpectation) ruleType_,
                getParentForChildren(),
                isClean());
        ruleType_ = null;
      }
      ruleTypeCase_ = 200;
      onChanged();
      return rowConditionExpectationBuilder_;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectationOrBuilder>
        tableConditionExpectationBuilder_;
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether the provided expression is true.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation table_condition_expectation = 201;
     * </code>
     *
     * @return Whether the tableConditionExpectation field is set.
     */
    @java.lang.Override
    public boolean hasTableConditionExpectation() {
      return ruleTypeCase_ == 201;
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether the provided expression is true.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation table_condition_expectation = 201;
     * </code>
     *
     * @return The tableConditionExpectation.
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
        getTableConditionExpectation() {
      if (tableConditionExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 201) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
            .getDefaultInstance();
      } else {
        if (ruleTypeCase_ == 201) {
          return tableConditionExpectationBuilder_.getMessage();
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
            .getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether the provided expression is true.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation table_condition_expectation = 201;
     * </code>
     */
    public Builder setTableConditionExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation value) {
      if (tableConditionExpectationBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ruleType_ = value;
        onChanged();
      } else {
        tableConditionExpectationBuilder_.setMessage(value);
      }
      ruleTypeCase_ = 201;
      return this;
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether the provided expression is true.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation table_condition_expectation = 201;
     * </code>
     */
    public Builder setTableConditionExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation.Builder
            builderForValue) {
      if (tableConditionExpectationBuilder_ == null) {
        ruleType_ = builderForValue.build();
        onChanged();
      } else {
        tableConditionExpectationBuilder_.setMessage(builderForValue.build());
      }
      ruleTypeCase_ = 201;
      return this;
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether the provided expression is true.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation table_condition_expectation = 201;
     * </code>
     */
    public Builder mergeTableConditionExpectation(
        com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation value) {
      if (tableConditionExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 201
            && ruleType_
                != com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
                    .getDefaultInstance()) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation.newBuilder(
                      (com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation)
                          ruleType_)
                  .mergeFrom(value)
                  .buildPartial();
        } else {
          ruleType_ = value;
        }
        onChanged();
      } else {
        if (ruleTypeCase_ == 201) {
          tableConditionExpectationBuilder_.mergeFrom(value);
        } else {
          tableConditionExpectationBuilder_.setMessage(value);
        }
      }
      ruleTypeCase_ = 201;
      return this;
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether the provided expression is true.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation table_condition_expectation = 201;
     * </code>
     */
    public Builder clearTableConditionExpectation() {
      if (tableConditionExpectationBuilder_ == null) {
        if (ruleTypeCase_ == 201) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
          onChanged();
        }
      } else {
        if (ruleTypeCase_ == 201) {
          ruleTypeCase_ = 0;
          ruleType_ = null;
        }
        tableConditionExpectationBuilder_.clear();
      }
      return this;
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether the provided expression is true.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation table_condition_expectation = 201;
     * </code>
     */
    public com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation.Builder
        getTableConditionExpectationBuilder() {
      return getTableConditionExpectationFieldBuilder().getBuilder();
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether the provided expression is true.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation table_condition_expectation = 201;
     * </code>
     */
    @java.lang.Override
    public com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectationOrBuilder
        getTableConditionExpectationOrBuilder() {
      if ((ruleTypeCase_ == 201) && (tableConditionExpectationBuilder_ != null)) {
        return tableConditionExpectationBuilder_.getMessageOrBuilder();
      } else {
        if (ruleTypeCase_ == 201) {
          return (com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation) ruleType_;
        }
        return com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
            .getDefaultInstance();
      }
    }
    /**
     *
     *
     * <pre>
     * Table rule which evaluates whether the provided expression is true.
     * </pre>
     *
     * <code>
     * .google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation table_condition_expectation = 201;
     * </code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation,
            com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation.Builder,
            com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectationOrBuilder>
        getTableConditionExpectationFieldBuilder() {
      if (tableConditionExpectationBuilder_ == null) {
        if (!(ruleTypeCase_ == 201)) {
          ruleType_ =
              com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation
                  .getDefaultInstance();
        }
        tableConditionExpectationBuilder_ =
            new com.google.protobuf.SingleFieldBuilderV3<
                com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation,
                com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation.Builder,
                com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectationOrBuilder>(
                (com.google.cloud.dataplex.v1.DataQualityRule.TableConditionExpectation) ruleType_,
                getParentForChildren(),
                isClean());
        ruleType_ = null;
      }
      ruleTypeCase_ = 201;
      onChanged();
      return tableConditionExpectationBuilder_;
    }

    private java.lang.Object column_ = "";
    /**
     *
     *
     * <pre>
     * Optional. The unnested column which this rule is evaluated against.
     * </pre>
     *
     * <code>string column = 500 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The column.
     */
    public java.lang.String getColumn() {
      java.lang.Object ref = column_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        column_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     *
     *
     * <pre>
     * Optional. The unnested column which this rule is evaluated against.
     * </pre>
     *
     * <code>string column = 500 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The bytes for column.
     */
    public com.google.protobuf.ByteString getColumnBytes() {
      java.lang.Object ref = column_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        column_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     *
     *
     * <pre>
     * Optional. The unnested column which this rule is evaluated against.
     * </pre>
     *
     * <code>string column = 500 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param value The column to set.
     * @return This builder for chaining.
     */
    public Builder setColumn(java.lang.String value) {
      if (value == null) {
        throw new NullPointerException();
      }
      column_ = value;
      bitField0_ |= 0x00000100;
      onChanged();
      return this;
    }
    /**
     *
     *
     * <pre>
     * Optional. The unnested column which this rule is evaluated against.
     * </pre>
     *
     * <code>string column = 500 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return This builder for chaining.
     */
    public Builder clearColumn() {
      column_ = getDefaultInstance().getColumn();
      bitField0_ = (bitField0_ & ~0x00000100);
      onChanged();
      return this;
    }
    /**
     *
     *
     * <pre>
     * Optional. The unnested column which this rule is evaluated against.
     * </pre>
     *
     * <code>string column = 500 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param value The bytes for column to set.
     * @return This builder for chaining.
     */
    public Builder setColumnBytes(com.google.protobuf.ByteString value) {
      if (value == null) {
        throw new NullPointerException();
      }
      checkByteStringIsUtf8(value);
      column_ = value;
      bitField0_ |= 0x00000100;
      onChanged();
      return this;
    }

    private boolean ignoreNull_;
    /**
     *
     *
     * <pre>
     * Optional. Rows with `null` values will automatically fail a rule, unless
     * `ignore_null` is `true`. In that case, such `null` rows are trivially
     * considered passing.
     * Only applicable to ColumnMap rules.
     * </pre>
     *
     * <code>bool ignore_null = 501 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The ignoreNull.
     */
    @java.lang.Override
    public boolean getIgnoreNull() {
      return ignoreNull_;
    }
    /**
     *
     *
     * <pre>
     * Optional. Rows with `null` values will automatically fail a rule, unless
     * `ignore_null` is `true`. In that case, such `null` rows are trivially
     * considered passing.
     * Only applicable to ColumnMap rules.
     * </pre>
     *
     * <code>bool ignore_null = 501 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param value The ignoreNull to set.
     * @return This builder for chaining.
     */
    public Builder setIgnoreNull(boolean value) {

      ignoreNull_ = value;
      bitField0_ |= 0x00000200;
      onChanged();
      return this;
    }
    /**
     *
     *
     * <pre>
     * Optional. Rows with `null` values will automatically fail a rule, unless
     * `ignore_null` is `true`. In that case, such `null` rows are trivially
     * considered passing.
     * Only applicable to ColumnMap rules.
     * </pre>
     *
     * <code>bool ignore_null = 501 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return This builder for chaining.
     */
    public Builder clearIgnoreNull() {
      bitField0_ = (bitField0_ & ~0x00000200);
      ignoreNull_ = false;
      onChanged();
      return this;
    }

    private java.lang.Object dimension_ = "";
    /**
     *
     *
     * <pre>
     * Required. The dimension a rule belongs to. Results are also aggregated at
     * the dimension level. Supported dimensions are **["COMPLETENESS",
     * "ACCURACY", "CONSISTENCY", "VALIDITY", "UNIQUENESS", "INTEGRITY"]**
     * </pre>
     *
     * <code>string dimension = 502 [(.google.api.field_behavior) = REQUIRED];</code>
     *
     * @return The dimension.
     */
    public java.lang.String getDimension() {
      java.lang.Object ref = dimension_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        dimension_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     *
     *
     * <pre>
     * Required. The dimension a rule belongs to. Results are also aggregated at
     * the dimension level. Supported dimensions are **["COMPLETENESS",
     * "ACCURACY", "CONSISTENCY", "VALIDITY", "UNIQUENESS", "INTEGRITY"]**
     * </pre>
     *
     * <code>string dimension = 502 [(.google.api.field_behavior) = REQUIRED];</code>
     *
     * @return The bytes for dimension.
     */
    public com.google.protobuf.ByteString getDimensionBytes() {
      java.lang.Object ref = dimension_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        dimension_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     *
     *
     * <pre>
     * Required. The dimension a rule belongs to. Results are also aggregated at
     * the dimension level. Supported dimensions are **["COMPLETENESS",
     * "ACCURACY", "CONSISTENCY", "VALIDITY", "UNIQUENESS", "INTEGRITY"]**
     * </pre>
     *
     * <code>string dimension = 502 [(.google.api.field_behavior) = REQUIRED];</code>
     *
     * @param value The dimension to set.
     * @return This builder for chaining.
     */
    public Builder setDimension(java.lang.String value) {
      if (value == null) {
        throw new NullPointerException();
      }
      dimension_ = value;
      bitField0_ |= 0x00000400;
      onChanged();
      return this;
    }
    /**
     *
     *
     * <pre>
     * Required. The dimension a rule belongs to. Results are also aggregated at
     * the dimension level. Supported dimensions are **["COMPLETENESS",
     * "ACCURACY", "CONSISTENCY", "VALIDITY", "UNIQUENESS", "INTEGRITY"]**
     * </pre>
     *
     * <code>string dimension = 502 [(.google.api.field_behavior) = REQUIRED];</code>
     *
     * @return This builder for chaining.
     */
    public Builder clearDimension() {
      dimension_ = getDefaultInstance().getDimension();
      bitField0_ = (bitField0_ & ~0x00000400);
      onChanged();
      return this;
    }
    /**
     *
     *
     * <pre>
     * Required. The dimension a rule belongs to. Results are also aggregated at
     * the dimension level. Supported dimensions are **["COMPLETENESS",
     * "ACCURACY", "CONSISTENCY", "VALIDITY", "UNIQUENESS", "INTEGRITY"]**
     * </pre>
     *
     * <code>string dimension = 502 [(.google.api.field_behavior) = REQUIRED];</code>
     *
     * @param value The bytes for dimension to set.
     * @return This builder for chaining.
     */
    public Builder setDimensionBytes(com.google.protobuf.ByteString value) {
      if (value == null) {
        throw new NullPointerException();
      }
      checkByteStringIsUtf8(value);
      dimension_ = value;
      bitField0_ |= 0x00000400;
      onChanged();
      return this;
    }

    private double threshold_;
    /**
     *
     *
     * <pre>
     * Optional. The minimum ratio of **passing_rows / total_rows** required to
     * pass this rule, with a range of [0.0, 1.0].
     * 0 indicates default value (i.e. 1.0).
     * </pre>
     *
     * <code>double threshold = 503 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return The threshold.
     */
    @java.lang.Override
    public double getThreshold() {
      return threshold_;
    }
    /**
     *
     *
     * <pre>
     * Optional. The minimum ratio of **passing_rows / total_rows** required to
     * pass this rule, with a range of [0.0, 1.0].
     * 0 indicates default value (i.e. 1.0).
     * </pre>
     *
     * <code>double threshold = 503 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param value The threshold to set.
     * @return This builder for chaining.
     */
    public Builder setThreshold(double value) {

      threshold_ = value;
      bitField0_ |= 0x00000800;
      onChanged();
      return this;
    }
    /**
     *
     *
     * <pre>
     * Optional. The minimum ratio of **passing_rows / total_rows** required to
     * pass this rule, with a range of [0.0, 1.0].
     * 0 indicates default value (i.e. 1.0).
     * </pre>
     *
     * <code>double threshold = 503 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return This builder for chaining.
     */
    public Builder clearThreshold() {
      bitField0_ = (bitField0_ & ~0x00000800);
      threshold_ = 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:google.cloud.dataplex.v1.DataQualityRule)
  }

  // @@protoc_insertion_point(class_scope:google.cloud.dataplex.v1.DataQualityRule)
  private static final com.google.cloud.dataplex.v1.DataQualityRule DEFAULT_INSTANCE;

  static {
    DEFAULT_INSTANCE = new com.google.cloud.dataplex.v1.DataQualityRule();
  }

  public static com.google.cloud.dataplex.v1.DataQualityRule getDefaultInstance() {
    return DEFAULT_INSTANCE;
  }

  private static final com.google.protobuf.Parser<DataQualityRule> PARSER =
      new com.google.protobuf.AbstractParser<DataQualityRule>() {
        @java.lang.Override
        public DataQualityRule parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          Builder builder = newBuilder();
          try {
            builder.mergeFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.setUnfinishedMessage(builder.buildPartial());
          } catch (com.google.protobuf.UninitializedMessageException e) {
            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                .setUnfinishedMessage(builder.buildPartial());
          }
          return builder.buildPartial();
        }
      };

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

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

  @java.lang.Override
  public com.google.cloud.dataplex.v1.DataQualityRule getDefaultInstanceForType() {
    return DEFAULT_INSTANCE;
  }
}
