/**
 * 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.
 */

// This file contains protocol buffers that are used for Spark filters
// over in the hbase-spark module
package hbase.pb;

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

message SQLPredicatePushDownCellToColumnMapping {
  required bytes column_family = 1;
  required bytes qualifier = 2;
  required string column_name = 3;
}

message SQLPredicatePushDownFilter {
  required string dynamic_logic_expression = 1;
  repeated bytes value_from_query_array = 2;
  repeated SQLPredicatePushDownCellToColumnMapping cell_to_column_mapping = 3;
  optional string encoderClassName = 4;
}
