/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
syntax = "proto2";

// This file contains protocol buffers that are used for filters
package hbase.pb;

option java_package = "org.apache.hadoop.hbase.protobuf.generated";
option java_outer_classname = "FilterProtos";
option java_generic_services = true;
option java_generate_equals_and_hash = true;
option optimize_for = SPEED;

import "HBase.proto";
import "Comparator.proto";

message Filter {
  required string name = 1;
  optional bytes serialized_filter = 2;
}

message ColumnCountGetFilter {
  required int32 limit = 1;
}

message ColumnPaginationFilter {
  required int32 limit = 1;
  optional int32 offset = 2;
  optional bytes column_offset = 3;
}

message ColumnPrefixFilter {
  required bytes prefix = 1;
}

message ColumnRangeFilter {
  optional bytes min_column = 1;
  optional bool min_column_inclusive = 2;
  optional bytes max_column = 3;
  optional bool max_column_inclusive = 4;
}

message CompareFilter {
  required CompareType compare_op = 1;
  optional Comparator comparator = 2;
}

message DependentColumnFilter {
  required CompareFilter compare_filter = 1;
  optional bytes column_family = 2;
  optional bytes column_qualifier = 3;
  optional bool drop_dependent_column = 4;
}

message FamilyFilter {
  required CompareFilter compare_filter = 1;
}

message FilterList {
  required Operator operator = 1;
  repeated Filter filters = 2;

  enum Operator {
    MUST_PASS_ALL = 1;
    MUST_PASS_ONE = 2;
  }
}

message FilterWrapper {
  required Filter filter = 1;
}

message FirstKeyOnlyFilter {
}

message FirstKeyValueMatchingQualifiersFilter {
  repeated bytes qualifiers = 1;
}

message FuzzyRowFilter {
  repeated BytesBytesPair fuzzy_keys_data = 1;
}

message InclusiveStopFilter {
  optional bytes stop_row_key = 1;
}

message KeyOnlyFilter {
  required bool len_as_val = 1;
}

message MultipleColumnPrefixFilter {
  repeated bytes sorted_prefixes = 1;
}

message PageFilter {
  required int64 page_size = 1;
}

message PrefixFilter {
  optional bytes prefix = 1;
}

message QualifierFilter {
  required CompareFilter compare_filter = 1;
}

message RandomRowFilter {
  required float chance = 1;
}

message RowFilter {
  required CompareFilter compare_filter = 1;
}

message SingleColumnValueExcludeFilter {
  required SingleColumnValueFilter single_column_value_filter = 1;
}

message SingleColumnValueFilter {
  optional bytes column_family = 1;
  optional bytes column_qualifier = 2;
  required CompareType compare_op = 3;
  required Comparator comparator = 4;
  optional bool filter_if_missing = 5;
  optional bool latest_version_only = 6;
}

message SkipFilter {
  required Filter filter = 1;
}

message TimestampsFilter {
  repeated int64 timestamps = 1 [packed=true];
  optional bool can_hint = 2;
}

message ValueFilter {
  required CompareFilter compare_filter = 1;
}

message WhileMatchFilter {
  required Filter filter = 1;
}
message FilterAllFilter {
}

message RowRange {
  optional bytes start_row = 1;
  optional bool start_row_inclusive = 2;
  optional bytes stop_row = 3;
  optional bool stop_row_inclusive =4;
}

message MultiRowRangeFilter {
  repeated RowRange row_range_list = 1;
}

message ColumnValueFilter {
  required bytes family = 1;
  required bytes qualifier = 2;
  required CompareType compare_op = 3;
  required Comparator comparator = 4;
}
