package exec.user;

option java_package = "org.apache.drill.exec.proto";
option java_outer_classname = "UserProtos";
option optimize_for = SPEED;

import "SchemaDef.proto";
import "UserBitShared.proto";

////// UserToBit RPC ///////
enum RpcType {
  HANDSHAKE = 0;
  ACK = 1;
  GOODBYE = 2;

  // user to bit
  RUN_QUERY = 3;
  CANCEL_QUERY = 4;
  REQUEST_RESULTS = 5;

  // bit to user
  QUERY_RESULT = 6;
  QUERY_HANDLE = 7;

  REQ_META_FUNCTIONS = 8;
  RESP_FUNCTION_LIST = 9;
}

message Property {
  required string key = 1;
  required string value = 2;
}

message UserProperties {
  repeated Property properties = 1;
}

message UserToBitHandshake {
  optional exec.shared.RpcChannel channel = 1 [default = USER];
  optional bool support_listening = 2;
  optional int32 rpc_version = 3;
  optional exec.shared.UserCredentials credentials = 4;
  optional UserProperties properties = 5;
  optional bool support_complex_types = 6 [default = false];
}

message RequestResults {
  optional exec.shared.QueryId query_id = 1;
  optional int32 maximum_responses = 2;
}

message RunQuery {
  optional QueryResultsMode results_mode = 1;
  optional exec.shared.QueryType type = 2;
  optional string plan = 3;
}

enum QueryResultsMode {
  STREAM_FULL = 1; // Server will inform the client regularly on the status of the query. Once the query is completed, service will inform the client as each query chunk is made available.
  // STREAM_FIRST = 2; // Server will inform the client regularly on the status of the query.  Once the query is completed, server will inform the client of the first query chunk.
  // QUERY_FOR_STATUS = 3; // Client will need to query for status of query.
}

message BitToUserHandshake {
  optional int32 rpc_version = 2;
}
