polardbxengine/plugin/polarx_rpc/protocol/polarx_exec_plan.proto

211 lines
6.0 KiB
Protocol Buffer
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

syntax = "proto2";
// ifdef PROTOBUF_LITE: option optimize_for = LITE_RUNTIME;
package Polarx.ExecPlan;
option java_package = "com.mysql.cj.x.protobuf";
import "polarx.proto"; // comment_out_if PROTOBUF_LITE
import "polarx_expr.proto";
import "polarx_datatypes.proto";
//
// Reserved for session.
// Session id in header.
//
// Request.
message NewSession {
}
message CloseSession {
}
message EnumSession {
}
// Response.
message SessionInfo {
}
message SessionInfos {
repeated SessionInfo sessions = 1;
}
//
// Basic components.
//
message TableInfo {
optional int64 version = 1; // Multi-version?
required Polarx.Datatypes.Scalar name = 2; // Need support string and place holder.
optional Polarx.Datatypes.Scalar schema_name = 3; // Need support string and place holder.
}
message IndexInfo {
required Polarx.Datatypes.Scalar name = 1; // Need support string and place holder.
optional int32 use_parts = 2;
}
message Transaction {
}
message BloomFilter {
required uint32 total_bits = 1;
required uint32 number_hash = 2;
required bytes strategy = 3; // 'murmur3_128'
required bytes data = 4;
}
//Client send GetTSO message to Server
message GetTSO {
required bytes leader_name = 1;
required int32 batch_count = 2;
}
//Server return ResultTSO message to Client
message ResultTSO {
required int32 error_no = 1;
required uint64 ts = 2;
}
//
// Exec plan.
//
// 单个列条件
message KeyExpr {
required Polarx.Datatypes.Scalar field = 1; // 需要能处理列名或列id列id从0开始
required Polarx.Datatypes.Scalar value = 2; // 需要能处理动态参数
}
// 完整的行条件可包含多个列条件and关系
message GetExpr {
repeated KeyExpr keys = 1;
}
message GetPlan {
required TableInfo table_info = 1;
optional IndexInfo index_info = 2; // 如果没指定默认走primary
repeated GetExpr keys = 3; // 索引列过滤条件如果为空就报错全表扫描走TableScanPlan
}
message TableScanPlan {
required TableInfo table_info = 1;
optional IndexInfo index_info = 2; // 如果没指定默认走primary
optional bool reverse = 3; // 扫描顺序,默认正向
}
message KeyOnlyRangeScan {
optional Transaction snapshot = 1; // 读取快照,只有作为 top plan 时填写
optional TableInfo table_info = 3; // 读取的目标 table
optional IndexInfo index_info = 4; // 读取的目标 index
// optional Polarx.Expr.Expr key_expr = 5; // scan 的条件
// 这里写的应该是是索引列中的条件,类似
// idx_field1 > 5 and idx_field2 > 1
optional GetExpr key = 5;
optional GetExpr end_key = 6; // end 条件,可选
optional bool reverse = 8; // 扫描顺序
optional int64 flag = 9; // 预留
}
message RangeScan {
optional Transaction snapshot = 1; // 读取快照,只有作为 top plan 时填写
optional TableInfo table_info = 3; // 读取的目标 table
optional IndexInfo index_info = 4; // 读取的目标 index
// optional Polarx.Expr.Expr key_expr = 5; // scan 的条件
// 这里写的应该是是索引列中的条件,类似
// idx_field1 > 5 and idx_field2 > 1
optional GetExpr key = 5;
optional GetExpr end_key = 6; // end 条件,可选
optional bool reverse = 8; // 扫描顺序
optional int64 flag = 9; // 预留
}
message TableProject {
required AnyPlan sub_read_plan = 1; // 只支持GET和SCAN两种就行
repeated Polarx.Datatypes.Scalar fields = 2; // 支持列名和列idint uint从0开始
}
message Project {
required AnyPlan sub_read_plan = 1;
repeated Polarx.Datatypes.Scalar fields = 2; // 输出列名
repeated Polarx.Expr.Expr exprs = 3; // 支持使用Expr全部功能包括新增的ref引用sub_read_plan的输出
}
message Filter {
required AnyPlan sub_read_plan = 1;
required Polarx.Expr.Expr expr = 2;
}
message Aggr {
enum AggrType {
COUNT_FUNC = 1; // COUNT
COUNT_DISTINCT_FUNC = 2; // COUNT(DISTINCT)
SUM_FUNC = 3; // SUM
SUM_DISTINCT_FUNC = 4; // SUM(DISTINCT)
AVG_FUNC = 5; // AVG
AVG_DISTINCT_FUNC = 6; // AVG(DISTINCT)
MIN_FUNC = 7; // MIN
MAX_FUNC = 8; // MAX
};
required AnyPlan sub_read_plan = 1;
required AggrType type = 2; //聚集函数类型
required Polarx.Datatypes.Scalar field = 3; //列名
required Polarx.Expr.Expr expr = 4; //聚集函数对应的表达式
}
message AnyPlan {
enum PlanType {
GET = 1;
TABLE_SCAN = 2;
TABLE_PROJECT = 3;
PROJECT = 4;
FILTER = 5;
RANGE_SCAN = 8;
//LIMIT = 7;
AGGR = 9;
};
required PlanType plan_type = 1;
optional GetPlan get_plan = 2;
optional TableScanPlan table_scan_plan = 3;
optional TableProject table_project = 4;
optional Project project = 5;
optional Filter filter = 6;
optional RangeScan range_scan = 8;
optional Aggr aggr = 9;
// SortPlan sort_plan = 5;
// ProjectPlan project_plan = 6;
// FilterPlan filter_plan = 7;
// LimitPlan limit_plan = 8;
// AggPlan agg_plan = 9;
}
// server接收的plan
message ExecPlan {
optional Transaction transaction = 1;
optional AnyPlan plan = 2;
optional bytes plan_digest = 3;
repeated Polarx.Datatypes.Scalar parameters = 4; // 动态参数记录在这从0开始 **有修改**
repeated Polarx.Datatypes.SessionVariable session_variables = 5;
optional int32 token = 6;
optional bool reset_error = 7;
optional bool compact_metadata = 8 [ default = false ];
optional uint64 snapshot_seq = 9;
optional uint64 commit_seq = 10;
optional bool use_cts_transaction = 12;
optional bool chunk_result = 11 [default = false];
optional bool feed_back = 13 [default = false];
}