# frozen_string_literal: true # Copyright 2018 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. module Google module Cloud module Bigtable module RowFilter # # ConditionFilter # # A RowFilter which evaluates one of two possible RowFilters, depending on # whether or not a predicate RowFilter outputs any cells from the input row. # # IMPORTANT NOTE: The predicate filter does not execute atomically with the # true and false filters, which may lead to inconsistent or unexpected # results. Additionally, Condition filters have poor performance, especially # when filters are set for the false condition. # # If `predicate_filter` outputs any cells, then `true_filter` will be # evaluated on the input row. Otherwise, `false_filter` will be evaluated. # # @example # predicate = Google::Cloud::Bigtable::RowFilter.key("user-*") # # label = Google::Cloud::Bigtable::RowFilter.label("user") # strip_value = Google::Cloud::Bigtable::RowFilter.strip_value # # Google::Cloud::Bigtable::RowFilter.condition(predicate).on_match(label).otherwise(strip_value) # class ConditionFilter # @private # Create condition filter instance # # @param predicate [SimpleFilter, ChainFilter, InterleaveFilter, ConditionFilter] # def initialize predicate @grpc = Google::Bigtable::V2::RowFilter::Condition.new @grpc.predicate_filter = predicate.to_grpc end # Set true filter on predicate filter match. # # The filter to apply to the input row if `predicate_filter` returns any # results. If not provided, no results will be returned in the true case. # # @param filter [SimpleFilter, ChainFilter, InterleaveFilter, ConditionFilter] # @return [Google::Cloud::Bigtable::RowFilter::ConditionFilter] # # @example # predicate = Google::Cloud::Bigtable::RowFilter.key("user-*") # # label = Google::Cloud::Bigtable::RowFilter.label("user") # strip_value = Google::Cloud::Bigtable::RowFilter.strip_value # # Google::Cloud::Bigtable::RowFilter.condition(predicate).on_match(label).otherwise(strip_value) # def on_match filter @grpc.true_filter = filter.to_grpc self end # Set otherwise(false) filter. # # The filter to apply to the input row if `predicate_filter` does not # return any results. If not provided, no results will be returned in the # false case. # # @param filter [SimpleFilter, ChainFilter, InterleaveFilter, ConditionFilter] # @return [Google::Cloud::Bigtable::RowFilter::ConditionFilter] # # @example # predicate = Google::Cloud::Bigtable::RowFilter.key("user-*") # # label = Google::Cloud::Bigtable::RowFilter.label("user") # strip_value = Google::Cloud::Bigtable::RowFilter.strip_value # # Google::Cloud::Bigtable::RowFilter.condition(predicate).on_match(label).otherwise(strip_value) # def otherwise filter @grpc.false_filter = filter.to_grpc self end # @private # Get row filter gRPC instance. # @return [Google::Bigtable::V2::RowFilter] # def to_grpc Google::Bigtable::V2::RowFilter.new(condition: @grpc) end end end end end end