// Copyright (c) 2015, Google Inc.
//
// 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
//
//     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 = "proto3";

package google.bigtable.v1;

import "google.golang.org/cloud/bigtable/internal/data_proto/bigtable_data.proto";
import "google.golang.org/cloud/bigtable/internal/rpc_status_proto/status.proto";

option java_multiple_files = true;
option java_outer_classname = "BigtableServiceMessagesProto";
option java_package = "com.google.bigtable.v1";


// Request message for BigtableServer.ReadRows.
message ReadRowsRequest {
  // The unique name of the table from which to read.
  string table_name = 1;

  // If neither row_key nor row_range is set, reads from all rows.
  oneof target {
    // The key of a single row from which to read.
    bytes row_key = 2;

    // A range of rows from which to read.
    RowRange row_range = 3;

    // A set of rows from which to read. Entries need not be in order, and will
    // be deduplicated before reading.
    // The total serialized size of the set must not exceed 1MB.
    RowSet row_set = 8;
  }

  // The filter to apply to the contents of the specified row(s). If unset,
  // reads the entire table.
  RowFilter filter = 5;

  // By default, rows are read sequentially, producing results which are
  // guaranteed to arrive in increasing row order. Setting
  // "allow_row_interleaving" to true allows multiple rows to be interleaved in
  // the response stream, which increases throughput but breaks this guarantee,
  // and may force the client to use more memory to buffer partially-received
  // rows. Cannot be set to true when specifying "num_rows_limit".
  bool allow_row_interleaving = 6;

  // The read will terminate after committing to N rows' worth of results. The
  // default (zero) is to return all results.
  // Note that "allow_row_interleaving" cannot be set to true when this is set.
  int64 num_rows_limit = 7;
}

// Response message for BigtableService.ReadRows.
message ReadRowsResponse {
  // Specifies a piece of a row's contents returned as part of the read
  // response stream.
  message Chunk {
    oneof chunk {
      // A subset of the data from a particular row. As long as no "reset_row"
      // is received in between, multiple "row_contents" from the same row are
      // from the same atomic view of that row, and will be received in the
      // expected family/column/timestamp order.
      Family row_contents = 1;

      // Indicates that the client should drop all previous chunks for
      // "row_key", as it will be re-read from the beginning.
      bool reset_row = 2;

      // Indicates that the client can safely process all previous chunks for
      // "row_key", as its data has been fully read.
      bool commit_row = 3;
    }
  }

  // The key of the row for which we're receiving data.
  // Results will be received in increasing row key order, unless
  // "allow_row_interleaving" was specified in the request.
  bytes row_key = 1;

  // One or more chunks of the row specified by "row_key".
  repeated Chunk chunks = 2;
}

// Request message for BigtableService.SampleRowKeys.
message SampleRowKeysRequest {
  // The unique name of the table from which to sample row keys.
  string table_name = 1;
}

// Response message for BigtableService.SampleRowKeys.
message SampleRowKeysResponse {
  // Sorted streamed sequence of sample row keys in the table. The table might
  // have contents before the first row key in the list and after the last one,
  // but a key containing the empty string indicates "end of table" and will be
  // the last response given, if present.
  // Note that row keys in this list may not have ever been written to or read
  // from, and users should therefore not make any assumptions about the row key
  // structure that are specific to their use case.
  bytes row_key = 1;

  // Approximate total storage space used by all rows in the table which precede
  // "row_key". Buffering the contents of all rows between two subsequent
  // samples would require space roughly equal to the difference in their
  // "offset_bytes" fields.
  int64 offset_bytes = 2;
}

// Request message for BigtableService.MutateRow.
message MutateRowRequest {
  // The unique name of the table to which the mutation should be applied.
  string table_name = 1;

  // The key of the row to which the mutation should be applied.
  bytes row_key = 2;

  // Changes to be atomically applied to the specified row. Entries are applied
  // in order, meaning that earlier mutations can be masked by later ones.
  // Must contain at least one entry and at most 100000.
  repeated Mutation mutations = 3;
}

// Request message for BigtableService.MutateRows.
message MutateRowsRequest {
  message Entry {
    // The key of the row to which the `mutations` should be applied.
    bytes row_key = 1;

    // Changes to be atomically applied to the specified row. Mutations are
    // applied in order, meaning that earlier mutations can be masked by
    // later ones.
    // At least one mutation must be specified.
    repeated Mutation mutations = 2;
  }

  // The unique name of the table to which the mutations should be applied.
  string table_name = 1;

  // The row keys/mutations to be applied in bulk.
  // Each entry is applied as an atomic mutation, but the entries may be
  // applied in arbitrary order (even between entries for the same row).
  // At least one entry must be specified, and in total the entries may
  // contain at most 100000 mutations.
  repeated Entry entries = 2;
}

// Response message for BigtableService.MutateRows.
message MutateRowsResponse {
  // The results for each Entry from the request, presented in the order
  // in which the entries were originally given.
  // Depending on how requests are batched during execution, it is possible
  // for one Entry to fail due to an error with another Entry. In the event
  // that this occurs, the same error will be reported for both entries.
  repeated google.rpc.Status statuses = 1;
}

// Request message for BigtableService.CheckAndMutateRowRequest
message CheckAndMutateRowRequest {
  // The unique name of the table to which the conditional mutation should be
  // applied.
  string table_name = 1;

  // The key of the row to which the conditional mutation should be applied.
  bytes row_key = 2;

  // The filter to be applied to the contents of the specified row. Depending
  // on whether or not any results are yielded, either "true_mutations" or
  // "false_mutations" will be executed. If unset, checks that the row contains
  // any values at all.
  RowFilter predicate_filter = 6;

  // Changes to be atomically applied to the specified row if "predicate_filter"
  // yields at least one cell when applied to "row_key". Entries are applied in
  // order, meaning that earlier mutations can be masked by later ones.
  // Must contain at least one entry if "false_mutations" is empty, and at most
  // 100000.
  repeated Mutation true_mutations = 4;

  // Changes to be atomically applied to the specified row if "predicate_filter"
  // does not yield any cells when applied to "row_key". Entries are applied in
  // order, meaning that earlier mutations can be masked by later ones.
  // Must contain at least one entry if "true_mutations" is empty, and at most
  // 100000.
  repeated Mutation false_mutations = 5;
}

// Response message for BigtableService.CheckAndMutateRowRequest.
message CheckAndMutateRowResponse {
  // Whether or not the request's "predicate_filter" yielded any results for
  // the specified row.
  bool predicate_matched = 1;
}

// Request message for BigtableService.ReadModifyWriteRowRequest.
message ReadModifyWriteRowRequest {
  // The unique name of the table to which the read/modify/write rules should be
  // applied.
  string table_name = 1;

  // The key of the row to which the read/modify/write rules should be applied.
  bytes row_key = 2;

  // Rules specifying how the specified row's contents are to be transformed
  // into writes. Entries are applied in order, meaning that earlier rules will
  // affect the results of later ones.
  repeated ReadModifyWriteRule rules = 3;
}
