package virtdb.interface.pb;
import "common.proto";

enum CompressionType {
  NO_COMPRESSION    = 0;
  LZ4_COMPRESSION   = 1;
};

message Column { // PUB-SUB: channel: "QueryId SegmenId-IfPresent"
    required string           QueryId           = 1;
    required string           Name              = 2;
    required ValueType        Data              = 3;
    required uint64           SeqNo             = 4;
    optional bool             EndOfData         = 5;
    optional CompressionType  CompType          = 6 [default=NO_COMPRESSION];
    optional bytes            CompressedData    = 7;
    optional uint64           UncompressedSize  = 8;
    optional string           ErroMessage       = 9;
}

message SimpleExpression {
    required string Variable  = 1;
    required string Value     = 2;
}

message CompositeExpression {
    required Expression Left   = 1;
    required Expression Right  = 2;
}

message Expression {
    required string               Operand    = 1;
    optional CompositeExpression  Composite  = 2;
    optional SimpleExpression     Simple     = 3;
}

message Query { // PUSH

    enum Command {
      STOP            = 1;  //
      RESEND_TABLE    = 2;  // must send full query info
      RESEND_CHUNK    = 3;  // must send QueryId + Fields + SeqNos
    }

    required string           QueryId              = 1;
    required string           Table                = 2;
    repeated string           Fields               = 3;
    repeated Expression       Filter               = 4;
    optional uint64           Limit                = 5;
    optional string           Schema               = 6;
    optional string           UserToken            = 7;
    optional KeyValue         AccessInfo           = 8;
    optional uint64           MaxChunkSize         = 9;
    repeated uint64           SeqNos               = 10 [packed=true];
    optional Command          QueryControl         = 11;
    optional string           SegmentId            = 12;
}

