syntax = "proto3"; package ella.engine; service EngineService { rpc GetTable(TableRef) returns (ResolvedTable); rpc CreateTable(CreateTableReq) returns (ResolvedTable); rpc CreateCatalog(CreateCatalogReq) returns (CatalogId); rpc CreateSchema(CreateSchemaReq) returns (SchemaId); rpc SetConfig(Config) returns (Config); rpc GetConfig(GetConfigReq) returns (Config); } message CreateTableReq { TableRef table = 1; TableInfo info = 2; bool if_not_exists = 3; bool or_replace = 4; } message CreateCatalogReq { string catalog = 1; bool if_not_exists = 2; } message CreateSchemaReq { optional string catalog = 1; string schema = 2; bool if_not_exists = 3; } enum ConfigScope { CONNECTION = 0; CLUSTER = 1; } message Config { ConfigScope scope = 1; bytes config = 2; } message GetConfigReq { ConfigScope scope = 1; } message ResolvedTable { TableId table = 1; TableInfo info = 2; } message Empty {} enum TensorType { UNKNOWN = 0; BOOL = 1; INT8 = 2; INT16 = 3; INT32 = 4; INT64 = 5; UINT8 = 6; UINT16 = 7; UINT32 = 8; UINT64 = 9; FLOAT32 = 10; FLOAT64 = 11; TIMESTAMP = 12; DURATION = 13; STRING = 14; } message Column { string name = 1; TensorType data_type = 2; repeated uint32 row_shape = 3; bool required = 4; } message TableIndex { string column = 1; bool ascending = 3; } message ViewInfo { bytes plan = 1; optional string definition = 2; bool materialized = 3; repeated TableIndex index = 4; optional bytes config = 5; } message TopicInfo { repeated Column columns = 1; bool temporary = 2; repeated TableIndex index = 3; optional bytes config = 4; } message TableInfo { oneof kind { ViewInfo view = 2; TopicInfo topic = 3; } } message TableId { string catalog = 1; string schema = 2; string table = 3; } message TableRef { optional string catalog = 1; optional string schema = 2; string table = 3; } message SchemaId { string catalog = 1; string schema = 2; } message CatalogId { string catalog = 1; }