mongreldb-protocol 0.64.8

MongrelDB versioned protocol messages and service definitions (S1D).
Documentation
syntax = "proto3";

package mongreldb.v1;

import "common.proto";

service QueryService {
  rpc Prepare(PrepareRequest) returns (PrepareResponse);
  rpc Execute(ExecuteRequest) returns (ExecuteResponse);
  rpc ExecuteStream(ExecuteRequest) returns (stream ArrowFrame);
  rpc CancelQuery(CancelQueryRequest) returns (CancelQueryResponse);
  rpc GetQueryStatus(GetQueryStatusRequest) returns (QueryStatusResponse);
}

message PrepareRequest {
  RequestContext context = 1;
  bytes session_id = 2;
  string sql = 3;
}

message PrepareResponse {
  uint64 statement_id = 1;
  uint64 schema_version = 2;
}

message ExecuteRequest {
  RequestContext context = 1;
  bytes session_id = 2;
  bytes query_id = 3;
  oneof command {
    string sql = 4;
    uint64 prepared_statement_id = 5;
    bytes admin_command = 6;
  }
  repeated bytes parameters = 7;
}

// P0.6: durable write outcome for safe lost-response recovery.
message DurableOutcome {
  bool committed = 1;
  uint64 committed_statements = 2;
  // 16-byte big-endian HLC, or empty when no commit timestamp is available.
  bytes last_commit_hlc = 3;
  optional uint64 first_commit_statement_index = 4;
  optional uint64 last_commit_statement_index = 5;
  uint64 completed_statements = 6;
  uint64 current_statement_index = 7;
  string terminal_state = 8;
  string serialization_state = 9;
  // Optional legacy epoch; absence means "no epoch" (never use 0 as missing).
  optional uint64 last_commit_epoch = 10;
}

enum CancelOutcome {
  CANCEL_OUTCOME_UNSPECIFIED = 0;
  ACCEPTED = 1;
  ALREADY_CANCELLING = 2;
  TOO_LATE = 3;
  ALREADY_FINISHED = 4;
  NOT_FOUND = 5;
  PRE_CANCELLED = 6;
}

message ExecuteResponse {
  bytes query_id = 1;
  uint64 rows_affected = 2;
  repeated ArrowFrame frames = 3;
  bool idempotency_replayed = 4;
  bool committed = 5;
  uint64 commit_epoch = 6;
  bytes original_query_id = 7;
  DurableOutcome durable = 8;
}

message CancelQueryRequest {
  RequestContext context = 1;
  bytes query_id = 2;
  bytes session_id = 3;
}

message CancelQueryResponse {
  CancelOutcome outcome = 1;
  DurableOutcome durable = 2;
}

message GetQueryStatusRequest {
  RequestContext context = 1;
  bytes query_id = 2;
  bytes session_id = 3;
}

enum QueryPhase {
  QUERY_PHASE_UNSPECIFIED = 0;
  QUERY_PHASE_QUEUED = 1;
  QUERY_PHASE_PLANNING = 2;
  QUERY_PHASE_EXECUTING = 3;
  QUERY_PHASE_SERIALIZING = 4;
  QUERY_PHASE_COMPLETED = 5;
  QUERY_PHASE_FAILED = 6;
  QUERY_PHASE_CANCELLED = 7;
}

message QueryStatusResponse {
  bytes query_id = 1;
  QueryPhase phase = 2;
  ErrorDetail error = 3;
  DurableOutcome durable = 4;
}