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

message DBConfigRequest {
    enum RequestType {
        ADD_TABLE    = 2;
        DELETE_TABLE = 3;
        QUERY_TABLES = 4;
        CREATE_USER  = 5;
        UPDATE_USER  = 6;
        DELETE_USER  = 7;
        ASSIGN_USER  = 8;
        LIST_USERS   = 9;
    }
    message AddTableMessage {
        required string     Provider     = 1;
        required TableMeta  Table        = 2;
        optional string     TargetSchema = 3;
        optional string     TableToken   = 4;
        optional string     UserName     = 5;
    }
    message DeleteTableMessage {
        required string     Provider     = 1;
        required TableMeta  Table        = 2;
        optional string     TargetSchema = 3;
        optional string     UserName     = 4;
    }
    message QueryTablesMessage {
        required string     Provider     = 1; // exact match on Provider name
        optional string     UserName     = 2;
    }
    message CreateUserMessage {
        required string     UserName     = 1;
        optional string     Password     = 2;
    }
    message UpdateUserMessage {
        required string     UserName     = 1;
        optional string     Password     = 2;
    }
    message DeleteUserMessage {
        required string     UserName     = 1;
    }
    message AssignUserMessage {
        required string     Provider    = 1;
        required string     UserName    = 2;
        required string     Token       = 3;
    }
    required RequestType        Type        = 1;
    optional AddTableMessage    AddTable    = 2;
    optional DeleteTableMessage DeleteTable = 3;
    optional QueryTablesMessage QueryTables = 4;
    optional CreateUserMessage  CreateUser  = 5;
    optional UpdateUserMessage  UpdateUser  = 6;
    optional DeleteUserMessage  DeleteUser  = 7;
    optional AssignUserMessage  AssignUser  = 8;
}

message DBConfigReply {
    enum ReplyType {
        ADD_TABLE    = 2;
        DELETE_TABLE = 3;
        QUERY_TABLES = 4;
        CREATE_USER  = 5;
        UPDATE_USER  = 6;
        DELETE_USER  = 7;
        ASSIGN_USER  = 8;
        LIST_USERS   = 9;
    }
    message QueryTablesMessage {
        repeated TableMeta Tables = 1;
    }
    message ListUsers {
        repeated string Name = 1;
    }
    message Error {
        required   string   Msg = 1;
    }
    required ReplyType          Type         = 1;
    optional QueryTablesMessage QueryTables  = 4;
    optional ListUsers          Users        = 9;
    optional Error              Err          = 15;
}

