From 3ef3fad33c2750483a026c4819da1759b72d4acc Mon Sep 17 00:00:00 2001 From: Dennis Zhuang Date: Fri, 31 May 2024 15:04:44 -0700 Subject: [PATCH 1/4] feat: adds view definition to CreateViewExpr --- c++/greptime/v1/ddl.pb.cc | 223 +++++++++------- c++/greptime/v1/ddl.pb.h | 66 +++++ go/greptime/v1/ddl.pb.go | 14 +- java/src/main/java/io/greptime/v1/Ddl.java | 281 ++++++++++++++++----- proto/greptime/v1/ddl.proto | 1 + 5 files changed, 433 insertions(+), 152 deletions(-) diff --git a/c++/greptime/v1/ddl.pb.cc b/c++/greptime/v1/ddl.pb.cc index 483ac081..5b880622 100644 --- a/c++/greptime/v1/ddl.pb.cc +++ b/c++/greptime/v1/ddl.pb.cc @@ -92,6 +92,7 @@ PROTOBUF_CONSTEXPR CreateViewExpr::CreateViewExpr( , /*decltype(_impl_.schema_name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} , /*decltype(_impl_.view_name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} , /*decltype(_impl_.logical_plan_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} + , /*decltype(_impl_.definition_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}} , /*decltype(_impl_.create_if_not_exists_)*/false , /*decltype(_impl_.or_replace_)*/false , /*decltype(_impl_._cached_size_)*/{}} {} @@ -473,6 +474,7 @@ const uint32_t TableStruct_greptime_2fv1_2fddl_2eproto::offsets[] PROTOBUF_SECTI PROTOBUF_FIELD_OFFSET(::greptime::v1::CreateViewExpr, _impl_.create_if_not_exists_), PROTOBUF_FIELD_OFFSET(::greptime::v1::CreateViewExpr, _impl_.or_replace_), PROTOBUF_FIELD_OFFSET(::greptime::v1::CreateViewExpr, _impl_.table_names_), + PROTOBUF_FIELD_OFFSET(::greptime::v1::CreateViewExpr, _impl_.definition_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::greptime::v1::DropViewExpr, _internal_metadata_), ~0u, // no _extensions_ @@ -670,26 +672,26 @@ static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protode { 26, -1, -1, sizeof(::greptime::v1::CreateFlowExpr)}, { 42, -1, -1, sizeof(::greptime::v1::DropFlowExpr)}, { 52, -1, -1, sizeof(::greptime::v1::CreateViewExpr)}, - { 65, -1, -1, sizeof(::greptime::v1::DropViewExpr)}, - { 76, 84, -1, sizeof(::greptime::v1::CreateTableExpr_TableOptionsEntry_DoNotUse)}, - { 86, -1, -1, sizeof(::greptime::v1::CreateTableExpr)}, - { 103, -1, -1, sizeof(::greptime::v1::AlterExpr)}, - { 117, -1, -1, sizeof(::greptime::v1::DropTableExpr)}, - { 128, 136, -1, sizeof(::greptime::v1::CreateDatabaseExpr_OptionsEntry_DoNotUse)}, - { 138, -1, -1, sizeof(::greptime::v1::CreateDatabaseExpr)}, - { 148, -1, -1, sizeof(::greptime::v1::TruncateTableExpr)}, - { 158, -1, -1, sizeof(::greptime::v1::DropDatabaseExpr)}, - { 167, -1, -1, sizeof(::greptime::v1::AddColumns)}, - { 174, -1, -1, sizeof(::greptime::v1::DropColumns)}, - { 181, -1, -1, sizeof(::greptime::v1::ChangeColumnTypes)}, - { 188, -1, -1, sizeof(::greptime::v1::RenameTable)}, - { 195, -1, -1, sizeof(::greptime::v1::AddColumn)}, - { 203, -1, -1, sizeof(::greptime::v1::ChangeColumnType)}, - { 212, -1, -1, sizeof(::greptime::v1::DropColumn)}, - { 219, -1, -1, sizeof(::greptime::v1::TableId)}, - { 226, -1, -1, sizeof(::greptime::v1::FlowId)}, - { 233, -1, -1, sizeof(::greptime::v1::ColumnDef)}, - { 247, -1, -1, sizeof(::greptime::v1::AddColumnLocation)}, + { 66, -1, -1, sizeof(::greptime::v1::DropViewExpr)}, + { 77, 85, -1, sizeof(::greptime::v1::CreateTableExpr_TableOptionsEntry_DoNotUse)}, + { 87, -1, -1, sizeof(::greptime::v1::CreateTableExpr)}, + { 104, -1, -1, sizeof(::greptime::v1::AlterExpr)}, + { 118, -1, -1, sizeof(::greptime::v1::DropTableExpr)}, + { 129, 137, -1, sizeof(::greptime::v1::CreateDatabaseExpr_OptionsEntry_DoNotUse)}, + { 139, -1, -1, sizeof(::greptime::v1::CreateDatabaseExpr)}, + { 149, -1, -1, sizeof(::greptime::v1::TruncateTableExpr)}, + { 159, -1, -1, sizeof(::greptime::v1::DropDatabaseExpr)}, + { 168, -1, -1, sizeof(::greptime::v1::AddColumns)}, + { 175, -1, -1, sizeof(::greptime::v1::DropColumns)}, + { 182, -1, -1, sizeof(::greptime::v1::ChangeColumnTypes)}, + { 189, -1, -1, sizeof(::greptime::v1::RenameTable)}, + { 196, -1, -1, sizeof(::greptime::v1::AddColumn)}, + { 204, -1, -1, sizeof(::greptime::v1::ChangeColumnType)}, + { 213, -1, -1, sizeof(::greptime::v1::DropColumn)}, + { 220, -1, -1, sizeof(::greptime::v1::TableId)}, + { 227, -1, -1, sizeof(::greptime::v1::FlowId)}, + { 234, -1, -1, sizeof(::greptime::v1::ColumnDef)}, + { 248, -1, -1, sizeof(::greptime::v1::AddColumnLocation)}, }; static const ::_pb::Message* const file_default_instances[] = { @@ -747,82 +749,83 @@ const char descriptor_table_protodef_greptime_2fv1_2fddl_2eproto[] PROTOBUF_SECT "Entry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"u\n" "\014DropFlowExpr\022\024\n\014catalog_name\030\001 \001(\t\022\021\n\tf" "low_name\030\002 \001(\t\022$\n\007flow_id\030\003 \001(\0132\023.grepti" - "me.v1.FlowId\022\026\n\016drop_if_exists\030\005 \001(\010\"\303\001\n" + "me.v1.FlowId\022\026\n\016drop_if_exists\030\005 \001(\010\"\327\001\n" "\016CreateViewExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n" "\013schema_name\030\002 \001(\t\022\021\n\tview_name\030\003 \001(\t\022\024\n" "\014logical_plan\030\004 \001(\014\022\034\n\024create_if_not_exi" "sts\030\005 \001(\010\022\022\n\nor_replace\030\006 \001(\010\022+\n\013table_n" - "ames\030\007 \003(\0132\026.greptime.v1.TableName\"\213\001\n\014D" - "ropViewExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013sch" - "ema_name\030\002 \001(\t\022\021\n\tview_name\030\003 \001(\t\022%\n\007vie" - "w_id\030\004 \001(\0132\024.greptime.v1.TableId\022\026\n\016drop" - "_if_exists\030\005 \001(\010\"\207\003\n\017CreateTableExpr\022\024\n\014" - "catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022" - "\022\n\ntable_name\030\003 \001(\t\022\014\n\004desc\030\004 \001(\t\022+\n\013col" - "umn_defs\030\005 \003(\0132\026.greptime.v1.ColumnDef\022\022" - "\n\ntime_index\030\006 \001(\t\022\024\n\014primary_keys\030\007 \003(\t" - "\022\034\n\024create_if_not_exists\030\010 \001(\010\022E\n\rtable_" - "options\030\t \003(\0132..greptime.v1.CreateTableE" - "xpr.TableOptionsEntry\022&\n\010table_id\030\n \001(\0132" - "\024.greptime.v1.TableId\022\016\n\006engine\030\014 \001(\t\0323\n" - "\021TableOptionsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value" - "\030\002 \001(\t:\0028\001\"\245\002\n\tAlterExpr\022\024\n\014catalog_name" - "\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_nam" - "e\030\003 \001(\t\022.\n\013add_columns\030\004 \001(\0132\027.greptime." - "v1.AddColumnsH\000\0220\n\014drop_columns\030\005 \001(\0132\030." - "greptime.v1.DropColumnsH\000\0220\n\014rename_tabl" - "e\030\006 \001(\0132\030.greptime.v1.RenameTableH\000\022=\n\023c" - "hange_column_types\030\007 \001(\0132\036.greptime.v1.C" - "hangeColumnTypesH\000B\006\n\004kind\"\216\001\n\rDropTable" + "ames\030\007 \003(\0132\026.greptime.v1.TableName\022\022\n\nde" + "finition\030\010 \001(\t\"\213\001\n\014DropViewExpr\022\024\n\014catal" + "og_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\021\n\tvi" + "ew_name\030\003 \001(\t\022%\n\007view_id\030\004 \001(\0132\024.greptim" + "e.v1.TableId\022\026\n\016drop_if_exists\030\005 \001(\010\"\207\003\n" + "\017CreateTableExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023" + "\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003 \001(\t\022" + "\014\n\004desc\030\004 \001(\t\022+\n\013column_defs\030\005 \003(\0132\026.gre" + "ptime.v1.ColumnDef\022\022\n\ntime_index\030\006 \001(\t\022\024" + "\n\014primary_keys\030\007 \003(\t\022\034\n\024create_if_not_ex" + "ists\030\010 \001(\010\022E\n\rtable_options\030\t \003(\0132..grep" + "time.v1.CreateTableExpr.TableOptionsEntr" + "y\022&\n\010table_id\030\n \001(\0132\024.greptime.v1.TableI" + "d\022\016\n\006engine\030\014 \001(\t\0323\n\021TableOptionsEntry\022\013" + "\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\245\002\n\tAlter" "Expr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_nam" - "e\030\002 \001(\t\022\022\n\ntable_name\030\003 \001(\t\022&\n\010table_id\030" - "\004 \001(\0132\024.greptime.v1.TableId\022\026\n\016drop_if_e" - "xists\030\005 \001(\010\"\314\001\n\022CreateDatabaseExpr\022\024\n\014ca" - "talog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\034\n" - "\024create_if_not_exists\030\003 \001(\010\022=\n\007options\030\004" - " \003(\0132,.greptime.v1.CreateDatabaseExpr.Op" - "tionsEntry\032.\n\014OptionsEntry\022\013\n\003key\030\001 \001(\t\022" - "\r\n\005value\030\002 \001(\t:\0028\001\"z\n\021TruncateTableExpr\022" - "\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001" - "(\t\022\022\n\ntable_name\030\003 \001(\t\022&\n\010table_id\030\004 \001(\013" - "2\024.greptime.v1.TableId\"U\n\020DropDatabaseEx" - "pr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_name\030" - "\002 \001(\t\022\026\n\016drop_if_exists\030\003 \001(\010\"9\n\nAddColu" - "mns\022+\n\013add_columns\030\001 \003(\0132\026.greptime.v1.A" - "ddColumn\"<\n\013DropColumns\022-\n\014drop_columns\030" - "\001 \003(\0132\027.greptime.v1.DropColumn\"O\n\021Change" - "ColumnTypes\022:\n\023change_column_types\030\001 \003(\013" - "2\035.greptime.v1.ChangeColumnType\"%\n\013Renam" - "eTable\022\026\n\016new_table_name\030\001 \001(\t\"i\n\tAddCol" - "umn\022*\n\ncolumn_def\030\001 \001(\0132\026.greptime.v1.Co" - "lumnDef\0220\n\010location\030\003 \001(\0132\036.greptime.v1." - "AddColumnLocation\"\236\001\n\020ChangeColumnType\022\023" - "\n\013column_name\030\001 \001(\t\0220\n\013target_type\030\002 \001(\016" - "2\033.greptime.v1.ColumnDataType\022C\n\025target_" - "type_extension\030\003 \001(\0132$.greptime.v1.Colum" - "nDataTypeExtension\"\032\n\nDropColumn\022\014\n\004name" - "\030\001 \001(\t\"\025\n\007TableId\022\n\n\002id\030\001 \001(\r\"\024\n\006FlowId\022" - "\n\n\002id\030\001 \001(\r\"\254\002\n\tColumnDef\022\014\n\004name\030\001 \001(\t\022" - ".\n\tdata_type\030\002 \001(\0162\033.greptime.v1.ColumnD" - "ataType\022\023\n\013is_nullable\030\003 \001(\010\022\032\n\022default_" - "constraint\030\004 \001(\014\0220\n\rsemantic_type\030\005 \001(\0162" - "\031.greptime.v1.SemanticType\022\017\n\007comment\030\006 " - "\001(\t\022@\n\022datatype_extension\030\007 \001(\0132$.grepti" - "me.v1.ColumnDataTypeExtension\022+\n\007options" - "\030\010 \001(\0132\032.greptime.v1.ColumnOptions\"\230\001\n\021A" - "ddColumnLocation\022B\n\rlocation_type\030\001 \001(\0162" - "+.greptime.v1.AddColumnLocation.Location" - "Type\022\031\n\021after_column_name\030\002 \001(\t\"$\n\014Locat" - "ionType\022\t\n\005FIRST\020\000\022\t\n\005AFTER\020\001BL\n\016io.grep" - "time.v1B\003DdlZ5github.com/GreptimeTeam/gr" - "eptime-proto/go/greptime/v1b\006proto3" + "e\030\002 \001(\t\022\022\n\ntable_name\030\003 \001(\t\022.\n\013add_colum" + "ns\030\004 \001(\0132\027.greptime.v1.AddColumnsH\000\0220\n\014d" + "rop_columns\030\005 \001(\0132\030.greptime.v1.DropColu" + "mnsH\000\0220\n\014rename_table\030\006 \001(\0132\030.greptime.v" + "1.RenameTableH\000\022=\n\023change_column_types\030\007" + " \001(\0132\036.greptime.v1.ChangeColumnTypesH\000B\006" + "\n\004kind\"\216\001\n\rDropTableExpr\022\024\n\014catalog_name" + "\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_nam" + "e\030\003 \001(\t\022&\n\010table_id\030\004 \001(\0132\024.greptime.v1." + "TableId\022\026\n\016drop_if_exists\030\005 \001(\010\"\314\001\n\022Crea" + "teDatabaseExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013" + "schema_name\030\002 \001(\t\022\034\n\024create_if_not_exist" + "s\030\003 \001(\010\022=\n\007options\030\004 \003(\0132,.greptime.v1.C" + "reateDatabaseExpr.OptionsEntry\032.\n\014Option" + "sEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"z" + "\n\021TruncateTableExpr\022\024\n\014catalog_name\030\001 \001(" + "\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003 \001" + "(\t\022&\n\010table_id\030\004 \001(\0132\024.greptime.v1.Table" + "Id\"U\n\020DropDatabaseExpr\022\024\n\014catalog_name\030\001" + " \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\026\n\016drop_if_exi" + "sts\030\003 \001(\010\"9\n\nAddColumns\022+\n\013add_columns\030\001" + " \003(\0132\026.greptime.v1.AddColumn\"<\n\013DropColu" + "mns\022-\n\014drop_columns\030\001 \003(\0132\027.greptime.v1." + "DropColumn\"O\n\021ChangeColumnTypes\022:\n\023chang" + "e_column_types\030\001 \003(\0132\035.greptime.v1.Chang" + "eColumnType\"%\n\013RenameTable\022\026\n\016new_table_" + "name\030\001 \001(\t\"i\n\tAddColumn\022*\n\ncolumn_def\030\001 " + "\001(\0132\026.greptime.v1.ColumnDef\0220\n\010location\030" + "\003 \001(\0132\036.greptime.v1.AddColumnLocation\"\236\001" + "\n\020ChangeColumnType\022\023\n\013column_name\030\001 \001(\t\022" + "0\n\013target_type\030\002 \001(\0162\033.greptime.v1.Colum" + "nDataType\022C\n\025target_type_extension\030\003 \001(\013" + "2$.greptime.v1.ColumnDataTypeExtension\"\032" + "\n\nDropColumn\022\014\n\004name\030\001 \001(\t\"\025\n\007TableId\022\n\n" + "\002id\030\001 \001(\r\"\024\n\006FlowId\022\n\n\002id\030\001 \001(\r\"\254\002\n\tColu" + "mnDef\022\014\n\004name\030\001 \001(\t\022.\n\tdata_type\030\002 \001(\0162\033" + ".greptime.v1.ColumnDataType\022\023\n\013is_nullab" + "le\030\003 \001(\010\022\032\n\022default_constraint\030\004 \001(\014\0220\n\r" + "semantic_type\030\005 \001(\0162\031.greptime.v1.Semant" + "icType\022\017\n\007comment\030\006 \001(\t\022@\n\022datatype_exte" + "nsion\030\007 \001(\0132$.greptime.v1.ColumnDataType" + "Extension\022+\n\007options\030\010 \001(\0132\032.greptime.v1" + ".ColumnOptions\"\230\001\n\021AddColumnLocation\022B\n\r" + "location_type\030\001 \001(\0162+.greptime.v1.AddCol" + "umnLocation.LocationType\022\031\n\021after_column" + "_name\030\002 \001(\t\"$\n\014LocationType\022\t\n\005FIRST\020\000\022\t" + "\n\005AFTER\020\001BL\n\016io.greptime.v1B\003DdlZ5github" + ".com/GreptimeTeam/greptime-proto/go/grep" + "time/v1b\006proto3" ; static const ::_pbi::DescriptorTable* const descriptor_table_greptime_2fv1_2fddl_2eproto_deps[1] = { &::descriptor_table_greptime_2fv1_2fcommon_2eproto, }; static ::_pbi::once_flag descriptor_table_greptime_2fv1_2fddl_2eproto_once; const ::_pbi::DescriptorTable descriptor_table_greptime_2fv1_2fddl_2eproto = { - false, false, 3795, descriptor_table_protodef_greptime_2fv1_2fddl_2eproto, + false, false, 3815, descriptor_table_protodef_greptime_2fv1_2fddl_2eproto, "greptime/v1/ddl.proto", &descriptor_table_greptime_2fv1_2fddl_2eproto_once, descriptor_table_greptime_2fv1_2fddl_2eproto_deps, 1, 25, schemas, file_default_instances, TableStruct_greptime_2fv1_2fddl_2eproto::offsets, @@ -2546,6 +2549,7 @@ CreateViewExpr::CreateViewExpr(const CreateViewExpr& from) , decltype(_impl_.schema_name_){} , decltype(_impl_.view_name_){} , decltype(_impl_.logical_plan_){} + , decltype(_impl_.definition_){} , decltype(_impl_.create_if_not_exists_){} , decltype(_impl_.or_replace_){} , /*decltype(_impl_._cached_size_)*/{}}; @@ -2583,6 +2587,14 @@ CreateViewExpr::CreateViewExpr(const CreateViewExpr& from) _this->_impl_.logical_plan_.Set(from._internal_logical_plan(), _this->GetArenaForAllocation()); } + _impl_.definition_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.definition_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (!from._internal_definition().empty()) { + _this->_impl_.definition_.Set(from._internal_definition(), + _this->GetArenaForAllocation()); + } ::memcpy(&_impl_.create_if_not_exists_, &from._impl_.create_if_not_exists_, static_cast(reinterpret_cast(&_impl_.or_replace_) - reinterpret_cast(&_impl_.create_if_not_exists_)) + sizeof(_impl_.or_replace_)); @@ -2599,6 +2611,7 @@ inline void CreateViewExpr::SharedCtor( , decltype(_impl_.schema_name_){} , decltype(_impl_.view_name_){} , decltype(_impl_.logical_plan_){} + , decltype(_impl_.definition_){} , decltype(_impl_.create_if_not_exists_){false} , decltype(_impl_.or_replace_){false} , /*decltype(_impl_._cached_size_)*/{} @@ -2619,6 +2632,10 @@ inline void CreateViewExpr::SharedCtor( #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING _impl_.logical_plan_.Set("", GetArenaForAllocation()); #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.definition_.InitDefault(); + #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + _impl_.definition_.Set("", GetArenaForAllocation()); + #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING } CreateViewExpr::~CreateViewExpr() { @@ -2637,6 +2654,7 @@ inline void CreateViewExpr::SharedDtor() { _impl_.schema_name_.Destroy(); _impl_.view_name_.Destroy(); _impl_.logical_plan_.Destroy(); + _impl_.definition_.Destroy(); } void CreateViewExpr::SetCachedSize(int size) const { @@ -2654,6 +2672,7 @@ void CreateViewExpr::Clear() { _impl_.schema_name_.ClearToEmpty(); _impl_.view_name_.ClearToEmpty(); _impl_.logical_plan_.ClearToEmpty(); + _impl_.definition_.ClearToEmpty(); ::memset(&_impl_.create_if_not_exists_, 0, static_cast( reinterpret_cast(&_impl_.or_replace_) - reinterpret_cast(&_impl_.create_if_not_exists_)) + sizeof(_impl_.or_replace_)); @@ -2734,6 +2753,16 @@ const char* CreateViewExpr::_InternalParse(const char* ptr, ::_pbi::ParseContext } else goto handle_unusual; continue; + // string definition = 8; + case 8: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 66)) { + auto str = _internal_mutable_definition(); + ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + CHK_(::_pbi::VerifyUTF8(str, "greptime.v1.CreateViewExpr.definition")); + } else + goto handle_unusual; + continue; default: goto handle_unusual; } // switch @@ -2819,6 +2848,16 @@ uint8_t* CreateViewExpr::_InternalSerialize( InternalWriteMessage(7, repfield, repfield.GetCachedSize(), target, stream); } + // string definition = 8; + if (!this->_internal_definition().empty()) { + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + this->_internal_definition().data(), static_cast(this->_internal_definition().length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, + "greptime.v1.CreateViewExpr.definition"); + target = stream->WriteStringMaybeAliased( + 8, this->_internal_definition(), target); + } + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); @@ -2870,6 +2909,13 @@ size_t CreateViewExpr::ByteSizeLong() const { this->_internal_logical_plan()); } + // string definition = 8; + if (!this->_internal_definition().empty()) { + total_size += 1 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + this->_internal_definition()); + } + // bool create_if_not_exists = 5; if (this->_internal_create_if_not_exists() != 0) { total_size += 1 + 1; @@ -2911,6 +2957,9 @@ void CreateViewExpr::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const : if (!from._internal_logical_plan().empty()) { _this->_internal_set_logical_plan(from._internal_logical_plan()); } + if (!from._internal_definition().empty()) { + _this->_internal_set_definition(from._internal_definition()); + } if (from._internal_create_if_not_exists() != 0) { _this->_internal_set_create_if_not_exists(from._internal_create_if_not_exists()); } @@ -2953,6 +3002,10 @@ void CreateViewExpr::InternalSwap(CreateViewExpr* other) { &_impl_.logical_plan_, lhs_arena, &other->_impl_.logical_plan_, rhs_arena ); + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap( + &_impl_.definition_, lhs_arena, + &other->_impl_.definition_, rhs_arena + ); ::PROTOBUF_NAMESPACE_ID::internal::memswap< PROTOBUF_FIELD_OFFSET(CreateViewExpr, _impl_.or_replace_) + sizeof(CreateViewExpr::_impl_.or_replace_) diff --git a/c++/greptime/v1/ddl.pb.h b/c++/greptime/v1/ddl.pb.h index 575018c5..b2f3380e 100644 --- a/c++/greptime/v1/ddl.pb.h +++ b/c++/greptime/v1/ddl.pb.h @@ -1198,6 +1198,7 @@ class CreateViewExpr final : kSchemaNameFieldNumber = 2, kViewNameFieldNumber = 3, kLogicalPlanFieldNumber = 4, + kDefinitionFieldNumber = 8, kCreateIfNotExistsFieldNumber = 5, kOrReplaceFieldNumber = 6, }; @@ -1275,6 +1276,20 @@ class CreateViewExpr final : std::string* _internal_mutable_logical_plan(); public: + // string definition = 8; + void clear_definition(); + const std::string& definition() const; + template + void set_definition(ArgT0&& arg0, ArgT... args); + std::string* mutable_definition(); + PROTOBUF_NODISCARD std::string* release_definition(); + void set_allocated_definition(std::string* definition); + private: + const std::string& _internal_definition() const; + inline PROTOBUF_ALWAYS_INLINE void _internal_set_definition(const std::string& value); + std::string* _internal_mutable_definition(); + public: + // bool create_if_not_exists = 5; void clear_create_if_not_exists(); bool create_if_not_exists() const; @@ -1306,6 +1321,7 @@ class CreateViewExpr final : ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr schema_name_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr view_name_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr logical_plan_; + ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr definition_; bool create_if_not_exists_; bool or_replace_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; @@ -6565,6 +6581,56 @@ CreateViewExpr::table_names() const { return _impl_.table_names_; } +// string definition = 8; +inline void CreateViewExpr::clear_definition() { + _impl_.definition_.ClearToEmpty(); +} +inline const std::string& CreateViewExpr::definition() const { + // @@protoc_insertion_point(field_get:greptime.v1.CreateViewExpr.definition) + return _internal_definition(); +} +template +inline PROTOBUF_ALWAYS_INLINE +void CreateViewExpr::set_definition(ArgT0&& arg0, ArgT... args) { + + _impl_.definition_.Set(static_cast(arg0), args..., GetArenaForAllocation()); + // @@protoc_insertion_point(field_set:greptime.v1.CreateViewExpr.definition) +} +inline std::string* CreateViewExpr::mutable_definition() { + std::string* _s = _internal_mutable_definition(); + // @@protoc_insertion_point(field_mutable:greptime.v1.CreateViewExpr.definition) + return _s; +} +inline const std::string& CreateViewExpr::_internal_definition() const { + return _impl_.definition_.Get(); +} +inline void CreateViewExpr::_internal_set_definition(const std::string& value) { + + _impl_.definition_.Set(value, GetArenaForAllocation()); +} +inline std::string* CreateViewExpr::_internal_mutable_definition() { + + return _impl_.definition_.Mutable(GetArenaForAllocation()); +} +inline std::string* CreateViewExpr::release_definition() { + // @@protoc_insertion_point(field_release:greptime.v1.CreateViewExpr.definition) + return _impl_.definition_.Release(); +} +inline void CreateViewExpr::set_allocated_definition(std::string* definition) { + if (definition != nullptr) { + + } else { + + } + _impl_.definition_.SetAllocated(definition, GetArenaForAllocation()); +#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING + if (_impl_.definition_.IsDefault()) { + _impl_.definition_.Set("", GetArenaForAllocation()); + } +#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING + // @@protoc_insertion_point(field_set_allocated:greptime.v1.CreateViewExpr.definition) +} + // ------------------------------------------------------------------- // DropViewExpr diff --git a/go/greptime/v1/ddl.pb.go b/go/greptime/v1/ddl.pb.go index 34d03258..64cccb9d 100644 --- a/go/greptime/v1/ddl.pb.go +++ b/go/greptime/v1/ddl.pb.go @@ -469,6 +469,7 @@ type CreateViewExpr struct { CreateIfNotExists bool `protobuf:"varint,5,opt,name=create_if_not_exists,json=createIfNotExists,proto3" json:"create_if_not_exists,omitempty"` OrReplace bool `protobuf:"varint,6,opt,name=or_replace,json=orReplace,proto3" json:"or_replace,omitempty"` TableNames []*TableName `protobuf:"bytes,7,rep,name=table_names,json=tableNames,proto3" json:"table_names,omitempty"` + Definition string `protobuf:"bytes,8,opt,name=definition,proto3" json:"definition,omitempty"` } func (x *CreateViewExpr) Reset() { @@ -552,6 +553,13 @@ func (x *CreateViewExpr) GetTableNames() []*TableName { return nil } +func (x *CreateViewExpr) GetDefinition() string { + if x != nil { + return x.Definition + } + return "" +} + // Drop a view type DropViewExpr struct { state protoimpl.MessageState @@ -1871,7 +1879,7 @@ var file_greptime_v1_ddl_proto_rawDesc = []byte{ 0x31, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x49, 0x64, 0x52, 0x06, 0x66, 0x6c, 0x6f, 0x77, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x69, 0x66, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x49, 0x66, - 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x9d, 0x02, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0xbd, 0x02, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, @@ -1889,7 +1897,9 @@ var file_greptime_v1_ddl_proto_rawDesc = []byte{ 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x0c, 0x44, 0x72, 0x6f, 0x70, 0x56, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc4, 0x01, 0x0a, 0x0c, 0x44, 0x72, 0x6f, 0x70, 0x56, 0x69, 0x65, 0x77, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, diff --git a/java/src/main/java/io/greptime/v1/Ddl.java b/java/src/main/java/io/greptime/v1/Ddl.java index 83fae760..1b4d0923 100644 --- a/java/src/main/java/io/greptime/v1/Ddl.java +++ b/java/src/main/java/io/greptime/v1/Ddl.java @@ -6005,6 +6005,18 @@ public interface CreateViewExprOrBuilder extends */ io.greptime.v1.Common.TableNameOrBuilder getTableNamesOrBuilder( int index); + + /** + * string definition = 8; + * @return The definition. + */ + java.lang.String getDefinition(); + /** + * string definition = 8; + * @return The bytes for definition. + */ + com.google.protobuf.ByteString + getDefinitionBytes(); } /** *
@@ -6028,6 +6040,7 @@ private CreateViewExpr() {
       viewName_ = "";
       logicalPlan_ = com.google.protobuf.ByteString.EMPTY;
       tableNames_ = java.util.Collections.emptyList();
+      definition_ = "";
     }
 
     @java.lang.Override
@@ -6103,6 +6116,12 @@ private CreateViewExpr(
                   input.readMessage(io.greptime.v1.Common.TableName.parser(), extensionRegistry));
               break;
             }
+            case 66: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              definition_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -6327,6 +6346,44 @@ public io.greptime.v1.Common.TableNameOrBuilder getTableNamesOrBuilder(
       return tableNames_.get(index);
     }
 
+    public static final int DEFINITION_FIELD_NUMBER = 8;
+    private volatile java.lang.Object definition_;
+    /**
+     * string definition = 8;
+     * @return The definition.
+     */
+    @java.lang.Override
+    public java.lang.String getDefinition() {
+      java.lang.Object ref = definition_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        definition_ = s;
+        return s;
+      }
+    }
+    /**
+     * string definition = 8;
+     * @return The bytes for definition.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDefinitionBytes() {
+      java.lang.Object ref = definition_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        definition_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -6362,6 +6419,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       for (int i = 0; i < tableNames_.size(); i++) {
         output.writeMessage(7, tableNames_.get(i));
       }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(definition_)) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, definition_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -6396,6 +6456,9 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(7, tableNames_.get(i));
       }
+      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(definition_)) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, definition_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -6425,6 +6488,8 @@ public boolean equals(final java.lang.Object obj) {
           != other.getOrReplace()) return false;
       if (!getTableNamesList()
           .equals(other.getTableNamesList())) return false;
+      if (!getDefinition()
+          .equals(other.getDefinition())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -6454,6 +6519,8 @@ public int hashCode() {
         hash = (37 * hash) + TABLE_NAMES_FIELD_NUMBER;
         hash = (53 * hash) + getTableNamesList().hashCode();
       }
+      hash = (37 * hash) + DEFINITION_FIELD_NUMBER;
+      hash = (53 * hash) + getDefinition().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -6610,6 +6677,8 @@ public Builder clear() {
         } else {
           tableNamesBuilder_.clear();
         }
+        definition_ = "";
+
         return this;
       }
 
@@ -6652,6 +6721,7 @@ public io.greptime.v1.Ddl.CreateViewExpr buildPartial() {
         } else {
           result.tableNames_ = tableNamesBuilder_.build();
         }
+        result.definition_ = definition_;
         onBuilt();
         return result;
       }
@@ -6747,6 +6817,10 @@ public Builder mergeFrom(io.greptime.v1.Ddl.CreateViewExpr other) {
             }
           }
         }
+        if (!other.getDefinition().isEmpty()) {
+          definition_ = other.definition_;
+          onChanged();
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -7340,6 +7414,82 @@ public io.greptime.v1.Common.TableName.Builder addTableNamesBuilder(
         }
         return tableNamesBuilder_;
       }
+
+      private java.lang.Object definition_ = "";
+      /**
+       * string definition = 8;
+       * @return The definition.
+       */
+      public java.lang.String getDefinition() {
+        java.lang.Object ref = definition_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          definition_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * string definition = 8;
+       * @return The bytes for definition.
+       */
+      public com.google.protobuf.ByteString
+          getDefinitionBytes() {
+        java.lang.Object ref = definition_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          definition_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * string definition = 8;
+       * @param value The definition to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDefinition(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        definition_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * string definition = 8;
+       * @return This builder for chaining.
+       */
+      public Builder clearDefinition() {
+        
+        definition_ = getDefaultInstance().getDefinition();
+        onChanged();
+        return this;
+      }
+      /**
+       * string definition = 8;
+       * @param value The bytes for definition to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDefinitionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        definition_ = value;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -25799,75 +25949,76 @@ public io.greptime.v1.Ddl.AddColumnLocation getDefaultInstanceForType() {
       "Entry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"u\n" +
       "\014DropFlowExpr\022\024\n\014catalog_name\030\001 \001(\t\022\021\n\tf" +
       "low_name\030\002 \001(\t\022$\n\007flow_id\030\003 \001(\0132\023.grepti" +
-      "me.v1.FlowId\022\026\n\016drop_if_exists\030\005 \001(\010\"\303\001\n" +
+      "me.v1.FlowId\022\026\n\016drop_if_exists\030\005 \001(\010\"\327\001\n" +
       "\016CreateViewExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n" +
       "\013schema_name\030\002 \001(\t\022\021\n\tview_name\030\003 \001(\t\022\024\n" +
       "\014logical_plan\030\004 \001(\014\022\034\n\024create_if_not_exi" +
       "sts\030\005 \001(\010\022\022\n\nor_replace\030\006 \001(\010\022+\n\013table_n" +
-      "ames\030\007 \003(\0132\026.greptime.v1.TableName\"\213\001\n\014D" +
-      "ropViewExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013sch" +
-      "ema_name\030\002 \001(\t\022\021\n\tview_name\030\003 \001(\t\022%\n\007vie" +
-      "w_id\030\004 \001(\0132\024.greptime.v1.TableId\022\026\n\016drop" +
-      "_if_exists\030\005 \001(\010\"\207\003\n\017CreateTableExpr\022\024\n\014" +
-      "catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022" +
-      "\022\n\ntable_name\030\003 \001(\t\022\014\n\004desc\030\004 \001(\t\022+\n\013col" +
-      "umn_defs\030\005 \003(\0132\026.greptime.v1.ColumnDef\022\022" +
-      "\n\ntime_index\030\006 \001(\t\022\024\n\014primary_keys\030\007 \003(\t" +
-      "\022\034\n\024create_if_not_exists\030\010 \001(\010\022E\n\rtable_" +
-      "options\030\t \003(\0132..greptime.v1.CreateTableE" +
-      "xpr.TableOptionsEntry\022&\n\010table_id\030\n \001(\0132" +
-      "\024.greptime.v1.TableId\022\016\n\006engine\030\014 \001(\t\0323\n" +
-      "\021TableOptionsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value" +
-      "\030\002 \001(\t:\0028\001\"\245\002\n\tAlterExpr\022\024\n\014catalog_name" +
-      "\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_nam" +
-      "e\030\003 \001(\t\022.\n\013add_columns\030\004 \001(\0132\027.greptime." +
-      "v1.AddColumnsH\000\0220\n\014drop_columns\030\005 \001(\0132\030." +
-      "greptime.v1.DropColumnsH\000\0220\n\014rename_tabl" +
-      "e\030\006 \001(\0132\030.greptime.v1.RenameTableH\000\022=\n\023c" +
-      "hange_column_types\030\007 \001(\0132\036.greptime.v1.C" +
-      "hangeColumnTypesH\000B\006\n\004kind\"\216\001\n\rDropTable" +
+      "ames\030\007 \003(\0132\026.greptime.v1.TableName\022\022\n\nde" +
+      "finition\030\010 \001(\t\"\213\001\n\014DropViewExpr\022\024\n\014catal" +
+      "og_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\021\n\tvi" +
+      "ew_name\030\003 \001(\t\022%\n\007view_id\030\004 \001(\0132\024.greptim" +
+      "e.v1.TableId\022\026\n\016drop_if_exists\030\005 \001(\010\"\207\003\n" +
+      "\017CreateTableExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023" +
+      "\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003 \001(\t\022" +
+      "\014\n\004desc\030\004 \001(\t\022+\n\013column_defs\030\005 \003(\0132\026.gre" +
+      "ptime.v1.ColumnDef\022\022\n\ntime_index\030\006 \001(\t\022\024" +
+      "\n\014primary_keys\030\007 \003(\t\022\034\n\024create_if_not_ex" +
+      "ists\030\010 \001(\010\022E\n\rtable_options\030\t \003(\0132..grep" +
+      "time.v1.CreateTableExpr.TableOptionsEntr" +
+      "y\022&\n\010table_id\030\n \001(\0132\024.greptime.v1.TableI" +
+      "d\022\016\n\006engine\030\014 \001(\t\0323\n\021TableOptionsEntry\022\013" +
+      "\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\245\002\n\tAlter" +
       "Expr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_nam" +
-      "e\030\002 \001(\t\022\022\n\ntable_name\030\003 \001(\t\022&\n\010table_id\030" +
-      "\004 \001(\0132\024.greptime.v1.TableId\022\026\n\016drop_if_e" +
-      "xists\030\005 \001(\010\"\314\001\n\022CreateDatabaseExpr\022\024\n\014ca" +
-      "talog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\034\n" +
-      "\024create_if_not_exists\030\003 \001(\010\022=\n\007options\030\004" +
-      " \003(\0132,.greptime.v1.CreateDatabaseExpr.Op" +
-      "tionsEntry\032.\n\014OptionsEntry\022\013\n\003key\030\001 \001(\t\022" +
-      "\r\n\005value\030\002 \001(\t:\0028\001\"z\n\021TruncateTableExpr\022" +
-      "\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001" +
-      "(\t\022\022\n\ntable_name\030\003 \001(\t\022&\n\010table_id\030\004 \001(\013" +
-      "2\024.greptime.v1.TableId\"U\n\020DropDatabaseEx" +
-      "pr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_name\030" +
-      "\002 \001(\t\022\026\n\016drop_if_exists\030\003 \001(\010\"9\n\nAddColu" +
-      "mns\022+\n\013add_columns\030\001 \003(\0132\026.greptime.v1.A" +
-      "ddColumn\"<\n\013DropColumns\022-\n\014drop_columns\030" +
-      "\001 \003(\0132\027.greptime.v1.DropColumn\"O\n\021Change" +
-      "ColumnTypes\022:\n\023change_column_types\030\001 \003(\013" +
-      "2\035.greptime.v1.ChangeColumnType\"%\n\013Renam" +
-      "eTable\022\026\n\016new_table_name\030\001 \001(\t\"i\n\tAddCol" +
-      "umn\022*\n\ncolumn_def\030\001 \001(\0132\026.greptime.v1.Co" +
-      "lumnDef\0220\n\010location\030\003 \001(\0132\036.greptime.v1." +
-      "AddColumnLocation\"\236\001\n\020ChangeColumnType\022\023" +
-      "\n\013column_name\030\001 \001(\t\0220\n\013target_type\030\002 \001(\016" +
-      "2\033.greptime.v1.ColumnDataType\022C\n\025target_" +
-      "type_extension\030\003 \001(\0132$.greptime.v1.Colum" +
-      "nDataTypeExtension\"\032\n\nDropColumn\022\014\n\004name" +
-      "\030\001 \001(\t\"\025\n\007TableId\022\n\n\002id\030\001 \001(\r\"\024\n\006FlowId\022" +
-      "\n\n\002id\030\001 \001(\r\"\254\002\n\tColumnDef\022\014\n\004name\030\001 \001(\t\022" +
-      ".\n\tdata_type\030\002 \001(\0162\033.greptime.v1.ColumnD" +
-      "ataType\022\023\n\013is_nullable\030\003 \001(\010\022\032\n\022default_" +
-      "constraint\030\004 \001(\014\0220\n\rsemantic_type\030\005 \001(\0162" +
-      "\031.greptime.v1.SemanticType\022\017\n\007comment\030\006 " +
-      "\001(\t\022@\n\022datatype_extension\030\007 \001(\0132$.grepti" +
-      "me.v1.ColumnDataTypeExtension\022+\n\007options" +
-      "\030\010 \001(\0132\032.greptime.v1.ColumnOptions\"\230\001\n\021A" +
-      "ddColumnLocation\022B\n\rlocation_type\030\001 \001(\0162" +
-      "+.greptime.v1.AddColumnLocation.Location" +
-      "Type\022\031\n\021after_column_name\030\002 \001(\t\"$\n\014Locat" +
-      "ionType\022\t\n\005FIRST\020\000\022\t\n\005AFTER\020\001BL\n\016io.grep" +
-      "time.v1B\003DdlZ5github.com/GreptimeTeam/gr" +
-      "eptime-proto/go/greptime/v1b\006proto3"
+      "e\030\002 \001(\t\022\022\n\ntable_name\030\003 \001(\t\022.\n\013add_colum" +
+      "ns\030\004 \001(\0132\027.greptime.v1.AddColumnsH\000\0220\n\014d" +
+      "rop_columns\030\005 \001(\0132\030.greptime.v1.DropColu" +
+      "mnsH\000\0220\n\014rename_table\030\006 \001(\0132\030.greptime.v" +
+      "1.RenameTableH\000\022=\n\023change_column_types\030\007" +
+      " \001(\0132\036.greptime.v1.ChangeColumnTypesH\000B\006" +
+      "\n\004kind\"\216\001\n\rDropTableExpr\022\024\n\014catalog_name" +
+      "\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_nam" +
+      "e\030\003 \001(\t\022&\n\010table_id\030\004 \001(\0132\024.greptime.v1." +
+      "TableId\022\026\n\016drop_if_exists\030\005 \001(\010\"\314\001\n\022Crea" +
+      "teDatabaseExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013" +
+      "schema_name\030\002 \001(\t\022\034\n\024create_if_not_exist" +
+      "s\030\003 \001(\010\022=\n\007options\030\004 \003(\0132,.greptime.v1.C" +
+      "reateDatabaseExpr.OptionsEntry\032.\n\014Option" +
+      "sEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"z" +
+      "\n\021TruncateTableExpr\022\024\n\014catalog_name\030\001 \001(" +
+      "\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003 \001" +
+      "(\t\022&\n\010table_id\030\004 \001(\0132\024.greptime.v1.Table" +
+      "Id\"U\n\020DropDatabaseExpr\022\024\n\014catalog_name\030\001" +
+      " \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\026\n\016drop_if_exi" +
+      "sts\030\003 \001(\010\"9\n\nAddColumns\022+\n\013add_columns\030\001" +
+      " \003(\0132\026.greptime.v1.AddColumn\"<\n\013DropColu" +
+      "mns\022-\n\014drop_columns\030\001 \003(\0132\027.greptime.v1." +
+      "DropColumn\"O\n\021ChangeColumnTypes\022:\n\023chang" +
+      "e_column_types\030\001 \003(\0132\035.greptime.v1.Chang" +
+      "eColumnType\"%\n\013RenameTable\022\026\n\016new_table_" +
+      "name\030\001 \001(\t\"i\n\tAddColumn\022*\n\ncolumn_def\030\001 " +
+      "\001(\0132\026.greptime.v1.ColumnDef\0220\n\010location\030" +
+      "\003 \001(\0132\036.greptime.v1.AddColumnLocation\"\236\001" +
+      "\n\020ChangeColumnType\022\023\n\013column_name\030\001 \001(\t\022" +
+      "0\n\013target_type\030\002 \001(\0162\033.greptime.v1.Colum" +
+      "nDataType\022C\n\025target_type_extension\030\003 \001(\013" +
+      "2$.greptime.v1.ColumnDataTypeExtension\"\032" +
+      "\n\nDropColumn\022\014\n\004name\030\001 \001(\t\"\025\n\007TableId\022\n\n" +
+      "\002id\030\001 \001(\r\"\024\n\006FlowId\022\n\n\002id\030\001 \001(\r\"\254\002\n\tColu" +
+      "mnDef\022\014\n\004name\030\001 \001(\t\022.\n\tdata_type\030\002 \001(\0162\033" +
+      ".greptime.v1.ColumnDataType\022\023\n\013is_nullab" +
+      "le\030\003 \001(\010\022\032\n\022default_constraint\030\004 \001(\014\0220\n\r" +
+      "semantic_type\030\005 \001(\0162\031.greptime.v1.Semant" +
+      "icType\022\017\n\007comment\030\006 \001(\t\022@\n\022datatype_exte" +
+      "nsion\030\007 \001(\0132$.greptime.v1.ColumnDataType" +
+      "Extension\022+\n\007options\030\010 \001(\0132\032.greptime.v1" +
+      ".ColumnOptions\"\230\001\n\021AddColumnLocation\022B\n\r" +
+      "location_type\030\001 \001(\0162+.greptime.v1.AddCol" +
+      "umnLocation.LocationType\022\031\n\021after_column" +
+      "_name\030\002 \001(\t\"$\n\014LocationType\022\t\n\005FIRST\020\000\022\t" +
+      "\n\005AFTER\020\001BL\n\016io.greptime.v1B\003DdlZ5github" +
+      ".com/GreptimeTeam/greptime-proto/go/grep" +
+      "time/v1b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -25903,7 +26054,7 @@ public io.greptime.v1.Ddl.AddColumnLocation getDefaultInstanceForType() {
     internal_static_greptime_v1_CreateViewExpr_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_greptime_v1_CreateViewExpr_descriptor,
-        new java.lang.String[] { "CatalogName", "SchemaName", "ViewName", "LogicalPlan", "CreateIfNotExists", "OrReplace", "TableNames", });
+        new java.lang.String[] { "CatalogName", "SchemaName", "ViewName", "LogicalPlan", "CreateIfNotExists", "OrReplace", "TableNames", "Definition", });
     internal_static_greptime_v1_DropViewExpr_descriptor =
       getDescriptor().getMessageTypes().get(4);
     internal_static_greptime_v1_DropViewExpr_fieldAccessorTable = new
diff --git a/proto/greptime/v1/ddl.proto b/proto/greptime/v1/ddl.proto
index 275be74d..d7e02fde 100644
--- a/proto/greptime/v1/ddl.proto
+++ b/proto/greptime/v1/ddl.proto
@@ -72,6 +72,7 @@ message CreateViewExpr {
   bool create_if_not_exists = 5;
   bool or_replace = 6;
   repeated TableName table_names = 7;
+  string definition = 8;
 }
 
 // Drop a view

From 4fb3cc1b32dfbd48037feb232316fcc4f3592235 Mon Sep 17 00:00:00 2001
From: Dennis Zhuang 
Date: Fri, 21 Jun 2024 14:17:14 -0700
Subject: [PATCH 2/4] feat: adds columns to CreateViewExpr

---
 c++/greptime/v1/ddl.pb.cc                  | 223 ++++++-----
 c++/greptime/v1/ddl.pb.h                   | 107 +++++-
 go/greptime/v1/ddl.pb.go                   | 414 +++++++++++----------
 java/src/main/java/io/greptime/v1/Ddl.java | 375 +++++++++++++++----
 proto/greptime/v1/ddl.proto                |   3 +-
 5 files changed, 746 insertions(+), 376 deletions(-)

diff --git a/c++/greptime/v1/ddl.pb.cc b/c++/greptime/v1/ddl.pb.cc
index 5b880622..84fa94aa 100644
--- a/c++/greptime/v1/ddl.pb.cc
+++ b/c++/greptime/v1/ddl.pb.cc
@@ -88,6 +88,7 @@ PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORIT
 PROTOBUF_CONSTEXPR CreateViewExpr::CreateViewExpr(
     ::_pbi::ConstantInitialized): _impl_{
     /*decltype(_impl_.table_names_)*/{}
+  , /*decltype(_impl_.columns_)*/{}
   , /*decltype(_impl_.catalog_name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
   , /*decltype(_impl_.schema_name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
   , /*decltype(_impl_.view_name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
@@ -474,6 +475,7 @@ const uint32_t TableStruct_greptime_2fv1_2fddl_2eproto::offsets[] PROTOBUF_SECTI
   PROTOBUF_FIELD_OFFSET(::greptime::v1::CreateViewExpr, _impl_.create_if_not_exists_),
   PROTOBUF_FIELD_OFFSET(::greptime::v1::CreateViewExpr, _impl_.or_replace_),
   PROTOBUF_FIELD_OFFSET(::greptime::v1::CreateViewExpr, _impl_.table_names_),
+  PROTOBUF_FIELD_OFFSET(::greptime::v1::CreateViewExpr, _impl_.columns_),
   PROTOBUF_FIELD_OFFSET(::greptime::v1::CreateViewExpr, _impl_.definition_),
   ~0u,  // no _has_bits_
   PROTOBUF_FIELD_OFFSET(::greptime::v1::DropViewExpr, _internal_metadata_),
@@ -672,26 +674,26 @@ static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protode
   { 26, -1, -1, sizeof(::greptime::v1::CreateFlowExpr)},
   { 42, -1, -1, sizeof(::greptime::v1::DropFlowExpr)},
   { 52, -1, -1, sizeof(::greptime::v1::CreateViewExpr)},
-  { 66, -1, -1, sizeof(::greptime::v1::DropViewExpr)},
-  { 77, 85, -1, sizeof(::greptime::v1::CreateTableExpr_TableOptionsEntry_DoNotUse)},
-  { 87, -1, -1, sizeof(::greptime::v1::CreateTableExpr)},
-  { 104, -1, -1, sizeof(::greptime::v1::AlterExpr)},
-  { 118, -1, -1, sizeof(::greptime::v1::DropTableExpr)},
-  { 129, 137, -1, sizeof(::greptime::v1::CreateDatabaseExpr_OptionsEntry_DoNotUse)},
-  { 139, -1, -1, sizeof(::greptime::v1::CreateDatabaseExpr)},
-  { 149, -1, -1, sizeof(::greptime::v1::TruncateTableExpr)},
-  { 159, -1, -1, sizeof(::greptime::v1::DropDatabaseExpr)},
-  { 168, -1, -1, sizeof(::greptime::v1::AddColumns)},
-  { 175, -1, -1, sizeof(::greptime::v1::DropColumns)},
-  { 182, -1, -1, sizeof(::greptime::v1::ChangeColumnTypes)},
-  { 189, -1, -1, sizeof(::greptime::v1::RenameTable)},
-  { 196, -1, -1, sizeof(::greptime::v1::AddColumn)},
-  { 204, -1, -1, sizeof(::greptime::v1::ChangeColumnType)},
-  { 213, -1, -1, sizeof(::greptime::v1::DropColumn)},
-  { 220, -1, -1, sizeof(::greptime::v1::TableId)},
-  { 227, -1, -1, sizeof(::greptime::v1::FlowId)},
-  { 234, -1, -1, sizeof(::greptime::v1::ColumnDef)},
-  { 248, -1, -1, sizeof(::greptime::v1::AddColumnLocation)},
+  { 67, -1, -1, sizeof(::greptime::v1::DropViewExpr)},
+  { 78, 86, -1, sizeof(::greptime::v1::CreateTableExpr_TableOptionsEntry_DoNotUse)},
+  { 88, -1, -1, sizeof(::greptime::v1::CreateTableExpr)},
+  { 105, -1, -1, sizeof(::greptime::v1::AlterExpr)},
+  { 119, -1, -1, sizeof(::greptime::v1::DropTableExpr)},
+  { 130, 138, -1, sizeof(::greptime::v1::CreateDatabaseExpr_OptionsEntry_DoNotUse)},
+  { 140, -1, -1, sizeof(::greptime::v1::CreateDatabaseExpr)},
+  { 150, -1, -1, sizeof(::greptime::v1::TruncateTableExpr)},
+  { 160, -1, -1, sizeof(::greptime::v1::DropDatabaseExpr)},
+  { 169, -1, -1, sizeof(::greptime::v1::AddColumns)},
+  { 176, -1, -1, sizeof(::greptime::v1::DropColumns)},
+  { 183, -1, -1, sizeof(::greptime::v1::ChangeColumnTypes)},
+  { 190, -1, -1, sizeof(::greptime::v1::RenameTable)},
+  { 197, -1, -1, sizeof(::greptime::v1::AddColumn)},
+  { 205, -1, -1, sizeof(::greptime::v1::ChangeColumnType)},
+  { 214, -1, -1, sizeof(::greptime::v1::DropColumn)},
+  { 221, -1, -1, sizeof(::greptime::v1::TableId)},
+  { 228, -1, -1, sizeof(::greptime::v1::FlowId)},
+  { 235, -1, -1, sizeof(::greptime::v1::ColumnDef)},
+  { 249, -1, -1, sizeof(::greptime::v1::AddColumnLocation)},
 };
 
 static const ::_pb::Message* const file_default_instances[] = {
@@ -749,83 +751,83 @@ const char descriptor_table_protodef_greptime_2fv1_2fddl_2eproto[] PROTOBUF_SECT
   "Entry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"u\n"
   "\014DropFlowExpr\022\024\n\014catalog_name\030\001 \001(\t\022\021\n\tf"
   "low_name\030\002 \001(\t\022$\n\007flow_id\030\003 \001(\0132\023.grepti"
-  "me.v1.FlowId\022\026\n\016drop_if_exists\030\005 \001(\010\"\327\001\n"
+  "me.v1.FlowId\022\026\n\016drop_if_exists\030\005 \001(\010\"\350\001\n"
   "\016CreateViewExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n"
   "\013schema_name\030\002 \001(\t\022\021\n\tview_name\030\003 \001(\t\022\024\n"
   "\014logical_plan\030\004 \001(\014\022\034\n\024create_if_not_exi"
   "sts\030\005 \001(\010\022\022\n\nor_replace\030\006 \001(\010\022+\n\013table_n"
-  "ames\030\007 \003(\0132\026.greptime.v1.TableName\022\022\n\nde"
-  "finition\030\010 \001(\t\"\213\001\n\014DropViewExpr\022\024\n\014catal"
-  "og_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\021\n\tvi"
-  "ew_name\030\003 \001(\t\022%\n\007view_id\030\004 \001(\0132\024.greptim"
-  "e.v1.TableId\022\026\n\016drop_if_exists\030\005 \001(\010\"\207\003\n"
-  "\017CreateTableExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023"
-  "\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003 \001(\t\022"
-  "\014\n\004desc\030\004 \001(\t\022+\n\013column_defs\030\005 \003(\0132\026.gre"
-  "ptime.v1.ColumnDef\022\022\n\ntime_index\030\006 \001(\t\022\024"
-  "\n\014primary_keys\030\007 \003(\t\022\034\n\024create_if_not_ex"
-  "ists\030\010 \001(\010\022E\n\rtable_options\030\t \003(\0132..grep"
-  "time.v1.CreateTableExpr.TableOptionsEntr"
-  "y\022&\n\010table_id\030\n \001(\0132\024.greptime.v1.TableI"
-  "d\022\016\n\006engine\030\014 \001(\t\0323\n\021TableOptionsEntry\022\013"
-  "\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\245\002\n\tAlter"
-  "Expr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_nam"
-  "e\030\002 \001(\t\022\022\n\ntable_name\030\003 \001(\t\022.\n\013add_colum"
-  "ns\030\004 \001(\0132\027.greptime.v1.AddColumnsH\000\0220\n\014d"
-  "rop_columns\030\005 \001(\0132\030.greptime.v1.DropColu"
-  "mnsH\000\0220\n\014rename_table\030\006 \001(\0132\030.greptime.v"
-  "1.RenameTableH\000\022=\n\023change_column_types\030\007"
-  " \001(\0132\036.greptime.v1.ChangeColumnTypesH\000B\006"
-  "\n\004kind\"\216\001\n\rDropTableExpr\022\024\n\014catalog_name"
-  "\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_nam"
-  "e\030\003 \001(\t\022&\n\010table_id\030\004 \001(\0132\024.greptime.v1."
-  "TableId\022\026\n\016drop_if_exists\030\005 \001(\010\"\314\001\n\022Crea"
-  "teDatabaseExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013"
-  "schema_name\030\002 \001(\t\022\034\n\024create_if_not_exist"
-  "s\030\003 \001(\010\022=\n\007options\030\004 \003(\0132,.greptime.v1.C"
-  "reateDatabaseExpr.OptionsEntry\032.\n\014Option"
-  "sEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"z"
-  "\n\021TruncateTableExpr\022\024\n\014catalog_name\030\001 \001("
-  "\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003 \001"
-  "(\t\022&\n\010table_id\030\004 \001(\0132\024.greptime.v1.Table"
-  "Id\"U\n\020DropDatabaseExpr\022\024\n\014catalog_name\030\001"
-  " \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\026\n\016drop_if_exi"
-  "sts\030\003 \001(\010\"9\n\nAddColumns\022+\n\013add_columns\030\001"
-  " \003(\0132\026.greptime.v1.AddColumn\"<\n\013DropColu"
-  "mns\022-\n\014drop_columns\030\001 \003(\0132\027.greptime.v1."
-  "DropColumn\"O\n\021ChangeColumnTypes\022:\n\023chang"
-  "e_column_types\030\001 \003(\0132\035.greptime.v1.Chang"
-  "eColumnType\"%\n\013RenameTable\022\026\n\016new_table_"
-  "name\030\001 \001(\t\"i\n\tAddColumn\022*\n\ncolumn_def\030\001 "
-  "\001(\0132\026.greptime.v1.ColumnDef\0220\n\010location\030"
-  "\003 \001(\0132\036.greptime.v1.AddColumnLocation\"\236\001"
-  "\n\020ChangeColumnType\022\023\n\013column_name\030\001 \001(\t\022"
-  "0\n\013target_type\030\002 \001(\0162\033.greptime.v1.Colum"
-  "nDataType\022C\n\025target_type_extension\030\003 \001(\013"
-  "2$.greptime.v1.ColumnDataTypeExtension\"\032"
-  "\n\nDropColumn\022\014\n\004name\030\001 \001(\t\"\025\n\007TableId\022\n\n"
-  "\002id\030\001 \001(\r\"\024\n\006FlowId\022\n\n\002id\030\001 \001(\r\"\254\002\n\tColu"
-  "mnDef\022\014\n\004name\030\001 \001(\t\022.\n\tdata_type\030\002 \001(\0162\033"
-  ".greptime.v1.ColumnDataType\022\023\n\013is_nullab"
-  "le\030\003 \001(\010\022\032\n\022default_constraint\030\004 \001(\014\0220\n\r"
-  "semantic_type\030\005 \001(\0162\031.greptime.v1.Semant"
-  "icType\022\017\n\007comment\030\006 \001(\t\022@\n\022datatype_exte"
-  "nsion\030\007 \001(\0132$.greptime.v1.ColumnDataType"
-  "Extension\022+\n\007options\030\010 \001(\0132\032.greptime.v1"
-  ".ColumnOptions\"\230\001\n\021AddColumnLocation\022B\n\r"
-  "location_type\030\001 \001(\0162+.greptime.v1.AddCol"
-  "umnLocation.LocationType\022\031\n\021after_column"
-  "_name\030\002 \001(\t\"$\n\014LocationType\022\t\n\005FIRST\020\000\022\t"
-  "\n\005AFTER\020\001BL\n\016io.greptime.v1B\003DdlZ5github"
-  ".com/GreptimeTeam/greptime-proto/go/grep"
-  "time/v1b\006proto3"
+  "ames\030\007 \003(\0132\026.greptime.v1.TableName\022\017\n\007co"
+  "lumns\030\010 \003(\t\022\022\n\ndefinition\030\t \001(\t\"\213\001\n\014Drop"
+  "ViewExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema"
+  "_name\030\002 \001(\t\022\021\n\tview_name\030\003 \001(\t\022%\n\007view_i"
+  "d\030\004 \001(\0132\024.greptime.v1.TableId\022\026\n\016drop_if"
+  "_exists\030\005 \001(\010\"\207\003\n\017CreateTableExpr\022\024\n\014cat"
+  "alog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\n"
+  "table_name\030\003 \001(\t\022\014\n\004desc\030\004 \001(\t\022+\n\013column"
+  "_defs\030\005 \003(\0132\026.greptime.v1.ColumnDef\022\022\n\nt"
+  "ime_index\030\006 \001(\t\022\024\n\014primary_keys\030\007 \003(\t\022\034\n"
+  "\024create_if_not_exists\030\010 \001(\010\022E\n\rtable_opt"
+  "ions\030\t \003(\0132..greptime.v1.CreateTableExpr"
+  ".TableOptionsEntry\022&\n\010table_id\030\n \001(\0132\024.g"
+  "reptime.v1.TableId\022\016\n\006engine\030\014 \001(\t\0323\n\021Ta"
+  "bleOptionsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 "
+  "\001(\t:\0028\001\"\245\002\n\tAlterExpr\022\024\n\014catalog_name\030\001 "
+  "\001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003"
+  " \001(\t\022.\n\013add_columns\030\004 \001(\0132\027.greptime.v1."
+  "AddColumnsH\000\0220\n\014drop_columns\030\005 \001(\0132\030.gre"
+  "ptime.v1.DropColumnsH\000\0220\n\014rename_table\030\006"
+  " \001(\0132\030.greptime.v1.RenameTableH\000\022=\n\023chan"
+  "ge_column_types\030\007 \001(\0132\036.greptime.v1.Chan"
+  "geColumnTypesH\000B\006\n\004kind\"\216\001\n\rDropTableExp"
+  "r\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002"
+  " \001(\t\022\022\n\ntable_name\030\003 \001(\t\022&\n\010table_id\030\004 \001"
+  "(\0132\024.greptime.v1.TableId\022\026\n\016drop_if_exis"
+  "ts\030\005 \001(\010\"\314\001\n\022CreateDatabaseExpr\022\024\n\014catal"
+  "og_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\034\n\024cr"
+  "eate_if_not_exists\030\003 \001(\010\022=\n\007options\030\004 \003("
+  "\0132,.greptime.v1.CreateDatabaseExpr.Optio"
+  "nsEntry\032.\n\014OptionsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005"
+  "value\030\002 \001(\t:\0028\001\"z\n\021TruncateTableExpr\022\024\n\014"
+  "catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022"
+  "\022\n\ntable_name\030\003 \001(\t\022&\n\010table_id\030\004 \001(\0132\024."
+  "greptime.v1.TableId\"U\n\020DropDatabaseExpr\022"
+  "\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001"
+  "(\t\022\026\n\016drop_if_exists\030\003 \001(\010\"9\n\nAddColumns"
+  "\022+\n\013add_columns\030\001 \003(\0132\026.greptime.v1.AddC"
+  "olumn\"<\n\013DropColumns\022-\n\014drop_columns\030\001 \003"
+  "(\0132\027.greptime.v1.DropColumn\"O\n\021ChangeCol"
+  "umnTypes\022:\n\023change_column_types\030\001 \003(\0132\035."
+  "greptime.v1.ChangeColumnType\"%\n\013RenameTa"
+  "ble\022\026\n\016new_table_name\030\001 \001(\t\"i\n\tAddColumn"
+  "\022*\n\ncolumn_def\030\001 \001(\0132\026.greptime.v1.Colum"
+  "nDef\0220\n\010location\030\003 \001(\0132\036.greptime.v1.Add"
+  "ColumnLocation\"\236\001\n\020ChangeColumnType\022\023\n\013c"
+  "olumn_name\030\001 \001(\t\0220\n\013target_type\030\002 \001(\0162\033."
+  "greptime.v1.ColumnDataType\022C\n\025target_typ"
+  "e_extension\030\003 \001(\0132$.greptime.v1.ColumnDa"
+  "taTypeExtension\"\032\n\nDropColumn\022\014\n\004name\030\001 "
+  "\001(\t\"\025\n\007TableId\022\n\n\002id\030\001 \001(\r\"\024\n\006FlowId\022\n\n\002"
+  "id\030\001 \001(\r\"\254\002\n\tColumnDef\022\014\n\004name\030\001 \001(\t\022.\n\t"
+  "data_type\030\002 \001(\0162\033.greptime.v1.ColumnData"
+  "Type\022\023\n\013is_nullable\030\003 \001(\010\022\032\n\022default_con"
+  "straint\030\004 \001(\014\0220\n\rsemantic_type\030\005 \001(\0162\031.g"
+  "reptime.v1.SemanticType\022\017\n\007comment\030\006 \001(\t"
+  "\022@\n\022datatype_extension\030\007 \001(\0132$.greptime."
+  "v1.ColumnDataTypeExtension\022+\n\007options\030\010 "
+  "\001(\0132\032.greptime.v1.ColumnOptions\"\230\001\n\021AddC"
+  "olumnLocation\022B\n\rlocation_type\030\001 \001(\0162+.g"
+  "reptime.v1.AddColumnLocation.LocationTyp"
+  "e\022\031\n\021after_column_name\030\002 \001(\t\"$\n\014Location"
+  "Type\022\t\n\005FIRST\020\000\022\t\n\005AFTER\020\001BL\n\016io.greptim"
+  "e.v1B\003DdlZ5github.com/GreptimeTeam/grept"
+  "ime-proto/go/greptime/v1b\006proto3"
   ;
 static const ::_pbi::DescriptorTable* const descriptor_table_greptime_2fv1_2fddl_2eproto_deps[1] = {
   &::descriptor_table_greptime_2fv1_2fcommon_2eproto,
 };
 static ::_pbi::once_flag descriptor_table_greptime_2fv1_2fddl_2eproto_once;
 const ::_pbi::DescriptorTable descriptor_table_greptime_2fv1_2fddl_2eproto = {
-    false, false, 3815, descriptor_table_protodef_greptime_2fv1_2fddl_2eproto,
+    false, false, 3832, descriptor_table_protodef_greptime_2fv1_2fddl_2eproto,
     "greptime/v1/ddl.proto",
     &descriptor_table_greptime_2fv1_2fddl_2eproto_once, descriptor_table_greptime_2fv1_2fddl_2eproto_deps, 1, 25,
     schemas, file_default_instances, TableStruct_greptime_2fv1_2fddl_2eproto::offsets,
@@ -2545,6 +2547,7 @@ CreateViewExpr::CreateViewExpr(const CreateViewExpr& from)
   CreateViewExpr* const _this = this; (void)_this;
   new (&_impl_) Impl_{
       decltype(_impl_.table_names_){from._impl_.table_names_}
+    , decltype(_impl_.columns_){from._impl_.columns_}
     , decltype(_impl_.catalog_name_){}
     , decltype(_impl_.schema_name_){}
     , decltype(_impl_.view_name_){}
@@ -2607,6 +2610,7 @@ inline void CreateViewExpr::SharedCtor(
   (void)is_message_owned;
   new (&_impl_) Impl_{
       decltype(_impl_.table_names_){arena}
+    , decltype(_impl_.columns_){arena}
     , decltype(_impl_.catalog_name_){}
     , decltype(_impl_.schema_name_){}
     , decltype(_impl_.view_name_){}
@@ -2650,6 +2654,7 @@ CreateViewExpr::~CreateViewExpr() {
 inline void CreateViewExpr::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
   _impl_.table_names_.~RepeatedPtrField();
+  _impl_.columns_.~RepeatedPtrField();
   _impl_.catalog_name_.Destroy();
   _impl_.schema_name_.Destroy();
   _impl_.view_name_.Destroy();
@@ -2668,6 +2673,7 @@ void CreateViewExpr::Clear() {
   (void) cached_has_bits;
 
   _impl_.table_names_.Clear();
+  _impl_.columns_.Clear();
   _impl_.catalog_name_.ClearToEmpty();
   _impl_.schema_name_.ClearToEmpty();
   _impl_.view_name_.ClearToEmpty();
@@ -2753,9 +2759,24 @@ const char* CreateViewExpr::_InternalParse(const char* ptr, ::_pbi::ParseContext
         } else
           goto handle_unusual;
         continue;
-      // string definition = 8;
+      // repeated string columns = 8;
       case 8:
         if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 66)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            auto str = _internal_add_columns();
+            ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+            CHK_(ptr);
+            CHK_(::_pbi::VerifyUTF8(str, "greptime.v1.CreateViewExpr.columns"));
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<66>(ptr));
+        } else
+          goto handle_unusual;
+        continue;
+      // string definition = 9;
+      case 9:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 74)) {
           auto str = _internal_mutable_definition();
           ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
           CHK_(ptr);
@@ -2848,14 +2869,24 @@ uint8_t* CreateViewExpr::_InternalSerialize(
         InternalWriteMessage(7, repfield, repfield.GetCachedSize(), target, stream);
   }
 
-  // string definition = 8;
+  // repeated string columns = 8;
+  for (int i = 0, n = this->_internal_columns_size(); i < n; i++) {
+    const auto& s = this->_internal_columns(i);
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      s.data(), static_cast(s.length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "greptime.v1.CreateViewExpr.columns");
+    target = stream->WriteString(8, s, target);
+  }
+
+  // string definition = 9;
   if (!this->_internal_definition().empty()) {
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
       this->_internal_definition().data(), static_cast(this->_internal_definition().length()),
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
       "greptime.v1.CreateViewExpr.definition");
     target = stream->WriteStringMaybeAliased(
-        8, this->_internal_definition(), target);
+        9, this->_internal_definition(), target);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
@@ -2881,6 +2912,14 @@ size_t CreateViewExpr::ByteSizeLong() const {
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
   }
 
+  // repeated string columns = 8;
+  total_size += 1 *
+      ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(_impl_.columns_.size());
+  for (int i = 0, n = _impl_.columns_.size(); i < n; i++) {
+    total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+      _impl_.columns_.Get(i));
+  }
+
   // string catalog_name = 1;
   if (!this->_internal_catalog_name().empty()) {
     total_size += 1 +
@@ -2909,7 +2948,7 @@ size_t CreateViewExpr::ByteSizeLong() const {
         this->_internal_logical_plan());
   }
 
-  // string definition = 8;
+  // string definition = 9;
   if (!this->_internal_definition().empty()) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
@@ -2945,6 +2984,7 @@ void CreateViewExpr::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const :
   (void) cached_has_bits;
 
   _this->_impl_.table_names_.MergeFrom(from._impl_.table_names_);
+  _this->_impl_.columns_.MergeFrom(from._impl_.columns_);
   if (!from._internal_catalog_name().empty()) {
     _this->_internal_set_catalog_name(from._internal_catalog_name());
   }
@@ -2986,6 +3026,7 @@ void CreateViewExpr::InternalSwap(CreateViewExpr* other) {
   auto* rhs_arena = other->GetArenaForAllocation();
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
   _impl_.table_names_.InternalSwap(&other->_impl_.table_names_);
+  _impl_.columns_.InternalSwap(&other->_impl_.columns_);
   ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
       &_impl_.catalog_name_, lhs_arena,
       &other->_impl_.catalog_name_, rhs_arena
diff --git a/c++/greptime/v1/ddl.pb.h b/c++/greptime/v1/ddl.pb.h
index b2f3380e..76b025a6 100644
--- a/c++/greptime/v1/ddl.pb.h
+++ b/c++/greptime/v1/ddl.pb.h
@@ -1194,11 +1194,12 @@ class CreateViewExpr final :
 
   enum : int {
     kTableNamesFieldNumber = 7,
+    kColumnsFieldNumber = 8,
     kCatalogNameFieldNumber = 1,
     kSchemaNameFieldNumber = 2,
     kViewNameFieldNumber = 3,
     kLogicalPlanFieldNumber = 4,
-    kDefinitionFieldNumber = 8,
+    kDefinitionFieldNumber = 9,
     kCreateIfNotExistsFieldNumber = 5,
     kOrReplaceFieldNumber = 6,
   };
@@ -1220,6 +1221,30 @@ class CreateViewExpr final :
   const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::greptime::v1::TableName >&
       table_names() const;
 
+  // repeated string columns = 8;
+  int columns_size() const;
+  private:
+  int _internal_columns_size() const;
+  public:
+  void clear_columns();
+  const std::string& columns(int index) const;
+  std::string* mutable_columns(int index);
+  void set_columns(int index, const std::string& value);
+  void set_columns(int index, std::string&& value);
+  void set_columns(int index, const char* value);
+  void set_columns(int index, const char* value, size_t size);
+  std::string* add_columns();
+  void add_columns(const std::string& value);
+  void add_columns(std::string&& value);
+  void add_columns(const char* value);
+  void add_columns(const char* value, size_t size);
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& columns() const;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* mutable_columns();
+  private:
+  const std::string& _internal_columns(int index) const;
+  std::string* _internal_add_columns();
+  public:
+
   // string catalog_name = 1;
   void clear_catalog_name();
   const std::string& catalog_name() const;
@@ -1276,7 +1301,7 @@ class CreateViewExpr final :
   std::string* _internal_mutable_logical_plan();
   public:
 
-  // string definition = 8;
+  // string definition = 9;
   void clear_definition();
   const std::string& definition() const;
   template 
@@ -1317,6 +1342,7 @@ class CreateViewExpr final :
   typedef void DestructorSkippable_;
   struct Impl_ {
     ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::greptime::v1::TableName > table_names_;
+    ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField columns_;
     ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr catalog_name_;
     ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr schema_name_;
     ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr view_name_;
@@ -6581,7 +6607,82 @@ CreateViewExpr::table_names() const {
   return _impl_.table_names_;
 }
 
-// string definition = 8;
+// repeated string columns = 8;
+inline int CreateViewExpr::_internal_columns_size() const {
+  return _impl_.columns_.size();
+}
+inline int CreateViewExpr::columns_size() const {
+  return _internal_columns_size();
+}
+inline void CreateViewExpr::clear_columns() {
+  _impl_.columns_.Clear();
+}
+inline std::string* CreateViewExpr::add_columns() {
+  std::string* _s = _internal_add_columns();
+  // @@protoc_insertion_point(field_add_mutable:greptime.v1.CreateViewExpr.columns)
+  return _s;
+}
+inline const std::string& CreateViewExpr::_internal_columns(int index) const {
+  return _impl_.columns_.Get(index);
+}
+inline const std::string& CreateViewExpr::columns(int index) const {
+  // @@protoc_insertion_point(field_get:greptime.v1.CreateViewExpr.columns)
+  return _internal_columns(index);
+}
+inline std::string* CreateViewExpr::mutable_columns(int index) {
+  // @@protoc_insertion_point(field_mutable:greptime.v1.CreateViewExpr.columns)
+  return _impl_.columns_.Mutable(index);
+}
+inline void CreateViewExpr::set_columns(int index, const std::string& value) {
+  _impl_.columns_.Mutable(index)->assign(value);
+  // @@protoc_insertion_point(field_set:greptime.v1.CreateViewExpr.columns)
+}
+inline void CreateViewExpr::set_columns(int index, std::string&& value) {
+  _impl_.columns_.Mutable(index)->assign(std::move(value));
+  // @@protoc_insertion_point(field_set:greptime.v1.CreateViewExpr.columns)
+}
+inline void CreateViewExpr::set_columns(int index, const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  _impl_.columns_.Mutable(index)->assign(value);
+  // @@protoc_insertion_point(field_set_char:greptime.v1.CreateViewExpr.columns)
+}
+inline void CreateViewExpr::set_columns(int index, const char* value, size_t size) {
+  _impl_.columns_.Mutable(index)->assign(
+    reinterpret_cast(value), size);
+  // @@protoc_insertion_point(field_set_pointer:greptime.v1.CreateViewExpr.columns)
+}
+inline std::string* CreateViewExpr::_internal_add_columns() {
+  return _impl_.columns_.Add();
+}
+inline void CreateViewExpr::add_columns(const std::string& value) {
+  _impl_.columns_.Add()->assign(value);
+  // @@protoc_insertion_point(field_add:greptime.v1.CreateViewExpr.columns)
+}
+inline void CreateViewExpr::add_columns(std::string&& value) {
+  _impl_.columns_.Add(std::move(value));
+  // @@protoc_insertion_point(field_add:greptime.v1.CreateViewExpr.columns)
+}
+inline void CreateViewExpr::add_columns(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  _impl_.columns_.Add()->assign(value);
+  // @@protoc_insertion_point(field_add_char:greptime.v1.CreateViewExpr.columns)
+}
+inline void CreateViewExpr::add_columns(const char* value, size_t size) {
+  _impl_.columns_.Add()->assign(reinterpret_cast(value), size);
+  // @@protoc_insertion_point(field_add_pointer:greptime.v1.CreateViewExpr.columns)
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField&
+CreateViewExpr::columns() const {
+  // @@protoc_insertion_point(field_list:greptime.v1.CreateViewExpr.columns)
+  return _impl_.columns_;
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField*
+CreateViewExpr::mutable_columns() {
+  // @@protoc_insertion_point(field_mutable_list:greptime.v1.CreateViewExpr.columns)
+  return &_impl_.columns_;
+}
+
+// string definition = 9;
 inline void CreateViewExpr::clear_definition() {
   _impl_.definition_.ClearToEmpty();
 }
diff --git a/go/greptime/v1/ddl.pb.go b/go/greptime/v1/ddl.pb.go
index 64cccb9d..5a1e3f78 100644
--- a/go/greptime/v1/ddl.pb.go
+++ b/go/greptime/v1/ddl.pb.go
@@ -469,7 +469,8 @@ type CreateViewExpr struct {
 	CreateIfNotExists bool         `protobuf:"varint,5,opt,name=create_if_not_exists,json=createIfNotExists,proto3" json:"create_if_not_exists,omitempty"`
 	OrReplace         bool         `protobuf:"varint,6,opt,name=or_replace,json=orReplace,proto3" json:"or_replace,omitempty"`
 	TableNames        []*TableName `protobuf:"bytes,7,rep,name=table_names,json=tableNames,proto3" json:"table_names,omitempty"`
-	Definition        string       `protobuf:"bytes,8,opt,name=definition,proto3" json:"definition,omitempty"`
+	Columns           []string     `protobuf:"bytes,8,rep,name=columns,proto3" json:"columns,omitempty"`
+	Definition        string       `protobuf:"bytes,9,opt,name=definition,proto3" json:"definition,omitempty"`
 }
 
 func (x *CreateViewExpr) Reset() {
@@ -553,6 +554,13 @@ func (x *CreateViewExpr) GetTableNames() []*TableName {
 	return nil
 }
 
+func (x *CreateViewExpr) GetColumns() []string {
+	if x != nil {
+		return x.Columns
+	}
+	return nil
+}
+
 func (x *CreateViewExpr) GetDefinition() string {
 	if x != nil {
 		return x.Definition
@@ -1879,7 +1887,7 @@ var file_greptime_v1_ddl_proto_rawDesc = []byte{
 	0x31, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x49, 0x64, 0x52, 0x06, 0x66, 0x6c, 0x6f, 0x77, 0x49, 0x64,
 	0x12, 0x24, 0x0a, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x69, 0x66, 0x5f, 0x65, 0x78, 0x69, 0x73,
 	0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x49, 0x66,
-	0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0xbd, 0x02, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74,
+	0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0xd7, 0x02, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74,
 	0x65, 0x56, 0x69, 0x65, 0x77, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74,
 	0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
 	0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b,
@@ -1897,214 +1905,216 @@ var file_greptime_v1_ddl_proto_rawDesc = []byte{
 	0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03,
 	0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31,
 	0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c,
-	0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69,
-	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x66, 0x69,
-	0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc4, 0x01, 0x0a, 0x0c, 0x44, 0x72, 0x6f, 0x70, 0x56,
-	0x69, 0x65, 0x77, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c,
-	0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63,
-	0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63,
-	0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76,
-	0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
-	0x76, 0x69, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x76, 0x69, 0x65, 0x77,
-	0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x65, 0x70,
-	0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x52,
-	0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x5f,
-	0x69, 0x66, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52,
-	0x0c, 0x64, 0x72, 0x6f, 0x70, 0x49, 0x66, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x93, 0x04,
-	0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x70,
+	0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
+	0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73,
+	0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+	0x22, 0xc4, 0x01, 0x0a, 0x0c, 0x44, 0x72, 0x6f, 0x70, 0x56, 0x69, 0x65, 0x77, 0x45, 0x78, 0x70,
 	0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d,
 	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67,
 	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e,
 	0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d,
-	0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e,
-	0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65,
-	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x37, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75,
-	0x6d, 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e,
-	0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75,
-	0x6d, 0x6e, 0x44, 0x65, 0x66, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66,
-	0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18,
-	0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78,
-	0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73,
-	0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x4b,
-	0x65, 0x79, 0x73, 0x12, 0x2f, 0x0a, 0x14, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x66,
-	0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28,
-	0x08, 0x52, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78,
-	0x69, 0x73, 0x74, 0x73, 0x12, 0x53, 0x0a, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6f, 0x70,
-	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x72,
-	0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
-	0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4f,
-	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x74, 0x61, 0x62,
-	0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x08, 0x74, 0x61, 0x62,
-	0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72,
-	0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49,
-	0x64, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e,
-	0x67, 0x69, 0x6e, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x67, 0x69,
-	0x6e, 0x65, 0x1a, 0x3f, 0x0a, 0x11, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f,
-	0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
-	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
-	0x02, 0x38, 0x01, 0x22, 0x82, 0x03, 0x0a, 0x09, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70,
-	0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d,
-	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67,
-	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e,
-	0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d,
-	0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e,
-	0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65,
-	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x0b, 0x61, 0x64, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x75,
-	0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x65, 0x70,
-	0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
-	0x6e, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x61, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73,
-	0x12, 0x3d, 0x0a, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73,
-	0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d,
-	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73,
-	0x48, 0x00, 0x52, 0x0b, 0x64, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12,
-	0x3d, 0x0a, 0x0c, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18,
-	0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65,
-	0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x48,
-	0x00, 0x52, 0x0b, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x50,
-	0x0a, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f,
-	0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72,
-	0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
-	0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x48, 0x00, 0x52, 0x11, 0x63,
-	0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73,
-	0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xc9, 0x01, 0x0a, 0x0d, 0x44, 0x72, 0x6f,
-	0x70, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61,
-	0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a,
-	0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d,
-	0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a,
-	0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x14, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61,
-	0x62, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x24,
-	0x0a, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x69, 0x66, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73,
-	0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x49, 0x66, 0x45, 0x78,
-	0x69, 0x73, 0x74, 0x73, 0x22, 0x8d, 0x02, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44,
-	0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63,
+	0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61,
+	0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, 0x65, 0x77, 0x4e, 0x61,
+	0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76,
+	0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49,
+	0x64, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x69, 0x66, 0x5f, 0x65, 0x78, 0x69,
+	0x73, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x49,
+	0x66, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x93, 0x04, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61,
+	0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63,
 	0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
 	0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f,
 	0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
 	0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12,
-	0x2f, 0x0a, 0x14, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x6f, 0x74,
-	0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x63,
-	0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73,
-	0x12, 0x46, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e,
-	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x45, 0x78,
-	0x70, 0x72, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
-	0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69,
-	0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
-	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
-	0x3a, 0x02, 0x38, 0x01, 0x22, 0xa7, 0x01, 0x0a, 0x11, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74,
-	0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61,
-	0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a,
-	0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d,
-	0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a,
-	0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x14, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61,
-	0x62, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x7c,
-	0x0a, 0x10, 0x44, 0x72, 0x6f, 0x70, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x45, 0x78,
-	0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61,
-	0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f,
-	0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f,
-	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65,
-	0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x69,
-	0x66, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c,
-	0x64, 0x72, 0x6f, 0x70, 0x49, 0x66, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x45, 0x0a, 0x0a,
-	0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x61, 0x64,
-	0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x16, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64,
-	0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x0a, 0x61, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75,
-	0x6d, 0x6e, 0x73, 0x22, 0x49, 0x0a, 0x0b, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
-	0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d,
-	0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74,
-	0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
-	0x6e, 0x52, 0x0b, 0x64, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0x62,
-	0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79,
-	0x70, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x6f,
-	0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
-	0x32, 0x1d, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43,
-	0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52,
-	0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70,
-	0x65, 0x73, 0x22, 0x33, 0x0a, 0x0b, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c,
-	0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e,
-	0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x54, 0x61,
-	0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x7e, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x43, 0x6f,
-	0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x35, 0x0a, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x64,
-	0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74,
-	0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66,
-	0x52, 0x09, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66, 0x12, 0x3a, 0x0a, 0x08, 0x6c,
-	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e,
-	0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43,
-	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c,
-	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xcb, 0x01, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e,
-	0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b,
-	0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a,
-	0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31,
-	0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52,
-	0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x58, 0x0a, 0x15, 0x74,
-	0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x65,
-	0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44,
-	0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
-	0x52, 0x13, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65,
-	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x0a, 0x0a, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c,
-	0x75, 0x6d, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x19, 0x0a, 0x07, 0x54, 0x61, 0x62, 0x6c, 0x65,
-	0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02,
-	0x69, 0x64, 0x22, 0x18, 0x0a, 0x06, 0x46, 0x6c, 0x6f, 0x77, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02,
-	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x8e, 0x03, 0x0a,
-	0x09, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
-	0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38,
-	0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e,
-	0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08,
-	0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x6e,
-	0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69,
-	0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x64, 0x65, 0x66,
-	0x61, 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x18,
-	0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f,
-	0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x0d, 0x73, 0x65, 0x6d, 0x61,
-	0x6e, 0x74, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32,
-	0x19, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65,
-	0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x73, 0x65, 0x6d, 0x61,
-	0x6e, 0x74, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d,
-	0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65,
-	0x6e, 0x74, 0x12, 0x53, 0x0a, 0x12, 0x64, 0x61, 0x74, 0x61, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x65,
-	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24,
-	0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c,
-	0x75, 0x6d, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x64, 0x61, 0x74, 0x61, 0x74, 0x79, 0x70, 0x65, 0x45, 0x78,
-	0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f,
-	0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74,
-	0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4f, 0x70, 0x74,
-	0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb7, 0x01,
-	0x0a, 0x11, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
-	0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x72, 0x65,
-	0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75,
-	0x6d, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63,
-	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d,
-	0x65, 0x22, 0x24, 0x0a, 0x0c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70,
-	0x65, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x49, 0x52, 0x53, 0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05,
-	0x41, 0x46, 0x54, 0x45, 0x52, 0x10, 0x01, 0x42, 0x4c, 0x0a, 0x0e, 0x69, 0x6f, 0x2e, 0x67, 0x72,
-	0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x03, 0x44, 0x64, 0x6c, 0x5a, 0x35,
-	0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x72, 0x65, 0x70, 0x74,
-	0x69, 0x6d, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x2f, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65,
-	0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69,
-	0x6d, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12,
+	0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65,
+	0x73, 0x63, 0x12, 0x37, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x64, 0x65, 0x66,
+	0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69,
+	0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66, 0x52,
+	0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74,
+	0x69, 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x09, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72,
+	0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09,
+	0x52, 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x2f, 0x0a,
+	0x14, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65,
+	0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x63, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x49, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x53,
+	0x0a, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+	0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65,
+	0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45,
+	0x78, 0x70, 0x72, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18,
+	0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65,
+	0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x07, 0x74, 0x61, 0x62,
+	0x6c, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x18, 0x0c,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x1a, 0x3f, 0x0a, 0x11,
+	0x54, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72,
+	0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+	0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x82, 0x03,
+	0x0a, 0x09, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63,
+	0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f,
+	0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+	0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a,
+	0x0a, 0x0b, 0x61, 0x64, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76,
+	0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0a,
+	0x61, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x64, 0x72,
+	0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x18, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44,
+	0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x72,
+	0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x72, 0x65, 0x6e,
+	0x61, 0x6d, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x18, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65,
+	0x6e, 0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x6e,
+	0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x6e,
+	0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65,
+	0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
+	0x54, 0x79, 0x70, 0x65, 0x73, 0x48, 0x00, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43,
+	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69,
+	0x6e, 0x64, 0x22, 0xc9, 0x01, 0x0a, 0x0d, 0x44, 0x72, 0x6f, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65,
+	0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61,
+	0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d,
+	0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63,
+	0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c,
+	0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61,
+	0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65,
+	0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x65, 0x70,
+	0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x52,
+	0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x72, 0x6f, 0x70,
+	0x5f, 0x69, 0x66, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x49, 0x66, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x8d,
+	0x02, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
+	0x65, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67,
+	0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74,
+	0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65,
+	0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73,
+	0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x14, 0x63, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74,
+	0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49,
+	0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x46, 0x0a, 0x07, 0x6f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x72,
+	0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x45, 0x78, 0x70, 0x72, 0x2e, 0x4f, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74,
+	0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa7,
+	0x01, 0x0a, 0x11, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65,
+	0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61,
+	0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d,
+	0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63,
+	0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c,
+	0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61,
+	0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65,
+	0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x65, 0x70,
+	0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x52,
+	0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x7c, 0x0a, 0x10, 0x44, 0x72, 0x6f, 0x70,
+	0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c,
+	0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+	0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65,
+	0x12, 0x24, 0x0a, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x69, 0x66, 0x5f, 0x65, 0x78, 0x69, 0x73,
+	0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x49, 0x66,
+	0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x45, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c,
+	0x75, 0x6d, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x61, 0x64, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x75,
+	0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x65, 0x70,
+	0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
+	0x6e, 0x52, 0x0a, 0x61, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0x49, 0x0a,
+	0x0b, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x0c,
+	0x64, 0x72, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31,
+	0x2e, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x0b, 0x64, 0x72, 0x6f,
+	0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0x62, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e,
+	0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4d, 0x0a,
+	0x13, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74,
+	0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x65,
+	0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43,
+	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67,
+	0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x33, 0x0a, 0x0b,
+	0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6e,
+	0x65, 0x77, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d,
+	0x65, 0x22, 0x7e, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x35,
+	0x0a, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31,
+	0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66, 0x52, 0x09, 0x63, 0x6f, 0x6c, 0x75,
+	0x6d, 0x6e, 0x44, 0x65, 0x66, 0x12, 0x3a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69,
+	0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4c,
+	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x22, 0xcb, 0x01, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75,
+	0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
+	0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c,
+	0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65,
+	0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67,
+	0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
+	0x6e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65,
+	0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x58, 0x0a, 0x15, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f,
+	0x74, 0x79, 0x70, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e,
+	0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70,
+	0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x74, 0x61, 0x72, 0x67,
+	0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22,
+	0x20, 0x0a, 0x0a, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x12, 0x0a,
+	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
+	0x65, 0x22, 0x19, 0x0a, 0x07, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02,
+	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x18, 0x0a, 0x06,
+	0x46, 0x6c, 0x6f, 0x77, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x8e, 0x03, 0x0a, 0x09, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
+	0x6e, 0x44, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61,
+	0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x72,
+	0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
+	0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79,
+	0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c,
+	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x61,
+	0x62, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x63,
+	0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52,
+	0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69,
+	0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x0d, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x5f, 0x74,
+	0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x65, 0x70,
+	0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63,
+	0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x54, 0x79,
+	0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x12,
+	0x64, 0x61, 0x74, 0x61, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74,
+	0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x61, 0x74,
+	0x61, 0x54, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11,
+	0x64, 0x61, 0x74, 0x61, 0x74, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x12, 0x34, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31,
+	0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07,
+	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x43,
+	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a,
+	0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e,
+	0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4c, 0x6f, 0x63, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70,
+	0x65, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12,
+	0x2a, 0x0a, 0x11, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x66, 0x74, 0x65,
+	0x72, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x0c, 0x4c,
+	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x46,
+	0x49, 0x52, 0x53, 0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x46, 0x54, 0x45, 0x52, 0x10,
+	0x01, 0x42, 0x4c, 0x0a, 0x0e, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65,
+	0x2e, 0x76, 0x31, 0x42, 0x03, 0x44, 0x64, 0x6c, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
+	0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x65, 0x61,
+	0x6d, 0x2f, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x76, 0x31, 0x62,
+	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/java/src/main/java/io/greptime/v1/Ddl.java b/java/src/main/java/io/greptime/v1/Ddl.java
index 1b4d0923..4ba679e7 100644
--- a/java/src/main/java/io/greptime/v1/Ddl.java
+++ b/java/src/main/java/io/greptime/v1/Ddl.java
@@ -6007,12 +6007,37 @@ io.greptime.v1.Common.TableNameOrBuilder getTableNamesOrBuilder(
         int index);
 
     /**
-     * string definition = 8;
+     * repeated string columns = 8;
+     * @return A list containing the columns.
+     */
+    java.util.List
+        getColumnsList();
+    /**
+     * repeated string columns = 8;
+     * @return The count of columns.
+     */
+    int getColumnsCount();
+    /**
+     * repeated string columns = 8;
+     * @param index The index of the element to return.
+     * @return The columns at the given index.
+     */
+    java.lang.String getColumns(int index);
+    /**
+     * repeated string columns = 8;
+     * @param index The index of the value to return.
+     * @return The bytes of the columns at the given index.
+     */
+    com.google.protobuf.ByteString
+        getColumnsBytes(int index);
+
+    /**
+     * string definition = 9;
      * @return The definition.
      */
     java.lang.String getDefinition();
     /**
-     * string definition = 8;
+     * string definition = 9;
      * @return The bytes for definition.
      */
     com.google.protobuf.ByteString
@@ -6040,6 +6065,7 @@ private CreateViewExpr() {
       viewName_ = "";
       logicalPlan_ = com.google.protobuf.ByteString.EMPTY;
       tableNames_ = java.util.Collections.emptyList();
+      columns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
       definition_ = "";
     }
 
@@ -6118,6 +6144,15 @@ private CreateViewExpr(
             }
             case 66: {
               java.lang.String s = input.readStringRequireUtf8();
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                columns_ = new com.google.protobuf.LazyStringArrayList();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              columns_.add(s);
+              break;
+            }
+            case 74: {
+              java.lang.String s = input.readStringRequireUtf8();
 
               definition_ = s;
               break;
@@ -6142,6 +6177,9 @@ private CreateViewExpr(
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
           tableNames_ = java.util.Collections.unmodifiableList(tableNames_);
         }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          columns_ = columns_.getUnmodifiableView();
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
@@ -6346,10 +6384,45 @@ public io.greptime.v1.Common.TableNameOrBuilder getTableNamesOrBuilder(
       return tableNames_.get(index);
     }
 
-    public static final int DEFINITION_FIELD_NUMBER = 8;
+    public static final int COLUMNS_FIELD_NUMBER = 8;
+    private com.google.protobuf.LazyStringList columns_;
+    /**
+     * repeated string columns = 8;
+     * @return A list containing the columns.
+     */
+    public com.google.protobuf.ProtocolStringList
+        getColumnsList() {
+      return columns_;
+    }
+    /**
+     * repeated string columns = 8;
+     * @return The count of columns.
+     */
+    public int getColumnsCount() {
+      return columns_.size();
+    }
+    /**
+     * repeated string columns = 8;
+     * @param index The index of the element to return.
+     * @return The columns at the given index.
+     */
+    public java.lang.String getColumns(int index) {
+      return columns_.get(index);
+    }
+    /**
+     * repeated string columns = 8;
+     * @param index The index of the value to return.
+     * @return The bytes of the columns at the given index.
+     */
+    public com.google.protobuf.ByteString
+        getColumnsBytes(int index) {
+      return columns_.getByteString(index);
+    }
+
+    public static final int DEFINITION_FIELD_NUMBER = 9;
     private volatile java.lang.Object definition_;
     /**
-     * string definition = 8;
+     * string definition = 9;
      * @return The definition.
      */
     @java.lang.Override
@@ -6366,7 +6439,7 @@ public java.lang.String getDefinition() {
       }
     }
     /**
-     * string definition = 8;
+     * string definition = 9;
      * @return The bytes for definition.
      */
     @java.lang.Override
@@ -6419,8 +6492,11 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       for (int i = 0; i < tableNames_.size(); i++) {
         output.writeMessage(7, tableNames_.get(i));
       }
+      for (int i = 0; i < columns_.size(); i++) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, columns_.getRaw(i));
+      }
       if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(definition_)) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, definition_);
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 9, definition_);
       }
       unknownFields.writeTo(output);
     }
@@ -6456,8 +6532,16 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(7, tableNames_.get(i));
       }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < columns_.size(); i++) {
+          dataSize += computeStringSizeNoTag(columns_.getRaw(i));
+        }
+        size += dataSize;
+        size += 1 * getColumnsList().size();
+      }
       if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(definition_)) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, definition_);
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, definition_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -6488,6 +6572,8 @@ public boolean equals(final java.lang.Object obj) {
           != other.getOrReplace()) return false;
       if (!getTableNamesList()
           .equals(other.getTableNamesList())) return false;
+      if (!getColumnsList()
+          .equals(other.getColumnsList())) return false;
       if (!getDefinition()
           .equals(other.getDefinition())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
@@ -6519,6 +6605,10 @@ public int hashCode() {
         hash = (37 * hash) + TABLE_NAMES_FIELD_NUMBER;
         hash = (53 * hash) + getTableNamesList().hashCode();
       }
+      if (getColumnsCount() > 0) {
+        hash = (37 * hash) + COLUMNS_FIELD_NUMBER;
+        hash = (53 * hash) + getColumnsList().hashCode();
+      }
       hash = (37 * hash) + DEFINITION_FIELD_NUMBER;
       hash = (53 * hash) + getDefinition().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
@@ -6677,6 +6767,8 @@ public Builder clear() {
         } else {
           tableNamesBuilder_.clear();
         }
+        columns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
         definition_ = "";
 
         return this;
@@ -6721,6 +6813,11 @@ public io.greptime.v1.Ddl.CreateViewExpr buildPartial() {
         } else {
           result.tableNames_ = tableNamesBuilder_.build();
         }
+        if (((bitField0_ & 0x00000002) != 0)) {
+          columns_ = columns_.getUnmodifiableView();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.columns_ = columns_;
         result.definition_ = definition_;
         onBuilt();
         return result;
@@ -6817,6 +6914,16 @@ public Builder mergeFrom(io.greptime.v1.Ddl.CreateViewExpr other) {
             }
           }
         }
+        if (!other.columns_.isEmpty()) {
+          if (columns_.isEmpty()) {
+            columns_ = other.columns_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensureColumnsIsMutable();
+            columns_.addAll(other.columns_);
+          }
+          onChanged();
+        }
         if (!other.getDefinition().isEmpty()) {
           definition_ = other.definition_;
           onChanged();
@@ -7415,9 +7522,119 @@ public io.greptime.v1.Common.TableName.Builder addTableNamesBuilder(
         return tableNamesBuilder_;
       }
 
+      private com.google.protobuf.LazyStringList columns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureColumnsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          columns_ = new com.google.protobuf.LazyStringArrayList(columns_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      /**
+       * repeated string columns = 8;
+       * @return A list containing the columns.
+       */
+      public com.google.protobuf.ProtocolStringList
+          getColumnsList() {
+        return columns_.getUnmodifiableView();
+      }
+      /**
+       * repeated string columns = 8;
+       * @return The count of columns.
+       */
+      public int getColumnsCount() {
+        return columns_.size();
+      }
+      /**
+       * repeated string columns = 8;
+       * @param index The index of the element to return.
+       * @return The columns at the given index.
+       */
+      public java.lang.String getColumns(int index) {
+        return columns_.get(index);
+      }
+      /**
+       * repeated string columns = 8;
+       * @param index The index of the value to return.
+       * @return The bytes of the columns at the given index.
+       */
+      public com.google.protobuf.ByteString
+          getColumnsBytes(int index) {
+        return columns_.getByteString(index);
+      }
+      /**
+       * repeated string columns = 8;
+       * @param index The index to set the value at.
+       * @param value The columns to set.
+       * @return This builder for chaining.
+       */
+      public Builder setColumns(
+          int index, java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureColumnsIsMutable();
+        columns_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * repeated string columns = 8;
+       * @param value The columns to add.
+       * @return This builder for chaining.
+       */
+      public Builder addColumns(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureColumnsIsMutable();
+        columns_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * repeated string columns = 8;
+       * @param values The columns to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllColumns(
+          java.lang.Iterable values) {
+        ensureColumnsIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, columns_);
+        onChanged();
+        return this;
+      }
+      /**
+       * repeated string columns = 8;
+       * @return This builder for chaining.
+       */
+      public Builder clearColumns() {
+        columns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        onChanged();
+        return this;
+      }
+      /**
+       * repeated string columns = 8;
+       * @param value The bytes of the columns to add.
+       * @return This builder for chaining.
+       */
+      public Builder addColumnsBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        ensureColumnsIsMutable();
+        columns_.add(value);
+        onChanged();
+        return this;
+      }
+
       private java.lang.Object definition_ = "";
       /**
-       * string definition = 8;
+       * string definition = 9;
        * @return The definition.
        */
       public java.lang.String getDefinition() {
@@ -7433,7 +7650,7 @@ public java.lang.String getDefinition() {
         }
       }
       /**
-       * string definition = 8;
+       * string definition = 9;
        * @return The bytes for definition.
        */
       public com.google.protobuf.ByteString
@@ -7450,7 +7667,7 @@ public java.lang.String getDefinition() {
         }
       }
       /**
-       * string definition = 8;
+       * string definition = 9;
        * @param value The definition to set.
        * @return This builder for chaining.
        */
@@ -7465,7 +7682,7 @@ public Builder setDefinition(
         return this;
       }
       /**
-       * string definition = 8;
+       * string definition = 9;
        * @return This builder for chaining.
        */
       public Builder clearDefinition() {
@@ -7475,7 +7692,7 @@ public Builder clearDefinition() {
         return this;
       }
       /**
-       * string definition = 8;
+       * string definition = 9;
        * @param value The bytes for definition to set.
        * @return This builder for chaining.
        */
@@ -25949,76 +26166,76 @@ public io.greptime.v1.Ddl.AddColumnLocation getDefaultInstanceForType() {
       "Entry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"u\n" +
       "\014DropFlowExpr\022\024\n\014catalog_name\030\001 \001(\t\022\021\n\tf" +
       "low_name\030\002 \001(\t\022$\n\007flow_id\030\003 \001(\0132\023.grepti" +
-      "me.v1.FlowId\022\026\n\016drop_if_exists\030\005 \001(\010\"\327\001\n" +
+      "me.v1.FlowId\022\026\n\016drop_if_exists\030\005 \001(\010\"\350\001\n" +
       "\016CreateViewExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n" +
       "\013schema_name\030\002 \001(\t\022\021\n\tview_name\030\003 \001(\t\022\024\n" +
       "\014logical_plan\030\004 \001(\014\022\034\n\024create_if_not_exi" +
       "sts\030\005 \001(\010\022\022\n\nor_replace\030\006 \001(\010\022+\n\013table_n" +
-      "ames\030\007 \003(\0132\026.greptime.v1.TableName\022\022\n\nde" +
-      "finition\030\010 \001(\t\"\213\001\n\014DropViewExpr\022\024\n\014catal" +
-      "og_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\021\n\tvi" +
-      "ew_name\030\003 \001(\t\022%\n\007view_id\030\004 \001(\0132\024.greptim" +
-      "e.v1.TableId\022\026\n\016drop_if_exists\030\005 \001(\010\"\207\003\n" +
-      "\017CreateTableExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023" +
-      "\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003 \001(\t\022" +
-      "\014\n\004desc\030\004 \001(\t\022+\n\013column_defs\030\005 \003(\0132\026.gre" +
-      "ptime.v1.ColumnDef\022\022\n\ntime_index\030\006 \001(\t\022\024" +
-      "\n\014primary_keys\030\007 \003(\t\022\034\n\024create_if_not_ex" +
-      "ists\030\010 \001(\010\022E\n\rtable_options\030\t \003(\0132..grep" +
-      "time.v1.CreateTableExpr.TableOptionsEntr" +
-      "y\022&\n\010table_id\030\n \001(\0132\024.greptime.v1.TableI" +
-      "d\022\016\n\006engine\030\014 \001(\t\0323\n\021TableOptionsEntry\022\013" +
-      "\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\245\002\n\tAlter" +
-      "Expr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_nam" +
-      "e\030\002 \001(\t\022\022\n\ntable_name\030\003 \001(\t\022.\n\013add_colum" +
-      "ns\030\004 \001(\0132\027.greptime.v1.AddColumnsH\000\0220\n\014d" +
-      "rop_columns\030\005 \001(\0132\030.greptime.v1.DropColu" +
-      "mnsH\000\0220\n\014rename_table\030\006 \001(\0132\030.greptime.v" +
-      "1.RenameTableH\000\022=\n\023change_column_types\030\007" +
-      " \001(\0132\036.greptime.v1.ChangeColumnTypesH\000B\006" +
-      "\n\004kind\"\216\001\n\rDropTableExpr\022\024\n\014catalog_name" +
-      "\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_nam" +
-      "e\030\003 \001(\t\022&\n\010table_id\030\004 \001(\0132\024.greptime.v1." +
-      "TableId\022\026\n\016drop_if_exists\030\005 \001(\010\"\314\001\n\022Crea" +
-      "teDatabaseExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013" +
-      "schema_name\030\002 \001(\t\022\034\n\024create_if_not_exist" +
-      "s\030\003 \001(\010\022=\n\007options\030\004 \003(\0132,.greptime.v1.C" +
-      "reateDatabaseExpr.OptionsEntry\032.\n\014Option" +
-      "sEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"z" +
-      "\n\021TruncateTableExpr\022\024\n\014catalog_name\030\001 \001(" +
-      "\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003 \001" +
-      "(\t\022&\n\010table_id\030\004 \001(\0132\024.greptime.v1.Table" +
-      "Id\"U\n\020DropDatabaseExpr\022\024\n\014catalog_name\030\001" +
-      " \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\026\n\016drop_if_exi" +
-      "sts\030\003 \001(\010\"9\n\nAddColumns\022+\n\013add_columns\030\001" +
-      " \003(\0132\026.greptime.v1.AddColumn\"<\n\013DropColu" +
-      "mns\022-\n\014drop_columns\030\001 \003(\0132\027.greptime.v1." +
-      "DropColumn\"O\n\021ChangeColumnTypes\022:\n\023chang" +
-      "e_column_types\030\001 \003(\0132\035.greptime.v1.Chang" +
-      "eColumnType\"%\n\013RenameTable\022\026\n\016new_table_" +
-      "name\030\001 \001(\t\"i\n\tAddColumn\022*\n\ncolumn_def\030\001 " +
-      "\001(\0132\026.greptime.v1.ColumnDef\0220\n\010location\030" +
-      "\003 \001(\0132\036.greptime.v1.AddColumnLocation\"\236\001" +
-      "\n\020ChangeColumnType\022\023\n\013column_name\030\001 \001(\t\022" +
-      "0\n\013target_type\030\002 \001(\0162\033.greptime.v1.Colum" +
-      "nDataType\022C\n\025target_type_extension\030\003 \001(\013" +
-      "2$.greptime.v1.ColumnDataTypeExtension\"\032" +
-      "\n\nDropColumn\022\014\n\004name\030\001 \001(\t\"\025\n\007TableId\022\n\n" +
-      "\002id\030\001 \001(\r\"\024\n\006FlowId\022\n\n\002id\030\001 \001(\r\"\254\002\n\tColu" +
-      "mnDef\022\014\n\004name\030\001 \001(\t\022.\n\tdata_type\030\002 \001(\0162\033" +
-      ".greptime.v1.ColumnDataType\022\023\n\013is_nullab" +
-      "le\030\003 \001(\010\022\032\n\022default_constraint\030\004 \001(\014\0220\n\r" +
-      "semantic_type\030\005 \001(\0162\031.greptime.v1.Semant" +
-      "icType\022\017\n\007comment\030\006 \001(\t\022@\n\022datatype_exte" +
-      "nsion\030\007 \001(\0132$.greptime.v1.ColumnDataType" +
-      "Extension\022+\n\007options\030\010 \001(\0132\032.greptime.v1" +
-      ".ColumnOptions\"\230\001\n\021AddColumnLocation\022B\n\r" +
-      "location_type\030\001 \001(\0162+.greptime.v1.AddCol" +
-      "umnLocation.LocationType\022\031\n\021after_column" +
-      "_name\030\002 \001(\t\"$\n\014LocationType\022\t\n\005FIRST\020\000\022\t" +
-      "\n\005AFTER\020\001BL\n\016io.greptime.v1B\003DdlZ5github" +
-      ".com/GreptimeTeam/greptime-proto/go/grep" +
-      "time/v1b\006proto3"
+      "ames\030\007 \003(\0132\026.greptime.v1.TableName\022\017\n\007co" +
+      "lumns\030\010 \003(\t\022\022\n\ndefinition\030\t \001(\t\"\213\001\n\014Drop" +
+      "ViewExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema" +
+      "_name\030\002 \001(\t\022\021\n\tview_name\030\003 \001(\t\022%\n\007view_i" +
+      "d\030\004 \001(\0132\024.greptime.v1.TableId\022\026\n\016drop_if" +
+      "_exists\030\005 \001(\010\"\207\003\n\017CreateTableExpr\022\024\n\014cat" +
+      "alog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\n" +
+      "table_name\030\003 \001(\t\022\014\n\004desc\030\004 \001(\t\022+\n\013column" +
+      "_defs\030\005 \003(\0132\026.greptime.v1.ColumnDef\022\022\n\nt" +
+      "ime_index\030\006 \001(\t\022\024\n\014primary_keys\030\007 \003(\t\022\034\n" +
+      "\024create_if_not_exists\030\010 \001(\010\022E\n\rtable_opt" +
+      "ions\030\t \003(\0132..greptime.v1.CreateTableExpr" +
+      ".TableOptionsEntry\022&\n\010table_id\030\n \001(\0132\024.g" +
+      "reptime.v1.TableId\022\016\n\006engine\030\014 \001(\t\0323\n\021Ta" +
+      "bleOptionsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 " +
+      "\001(\t:\0028\001\"\245\002\n\tAlterExpr\022\024\n\014catalog_name\030\001 " +
+      "\001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003" +
+      " \001(\t\022.\n\013add_columns\030\004 \001(\0132\027.greptime.v1." +
+      "AddColumnsH\000\0220\n\014drop_columns\030\005 \001(\0132\030.gre" +
+      "ptime.v1.DropColumnsH\000\0220\n\014rename_table\030\006" +
+      " \001(\0132\030.greptime.v1.RenameTableH\000\022=\n\023chan" +
+      "ge_column_types\030\007 \001(\0132\036.greptime.v1.Chan" +
+      "geColumnTypesH\000B\006\n\004kind\"\216\001\n\rDropTableExp" +
+      "r\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002" +
+      " \001(\t\022\022\n\ntable_name\030\003 \001(\t\022&\n\010table_id\030\004 \001" +
+      "(\0132\024.greptime.v1.TableId\022\026\n\016drop_if_exis" +
+      "ts\030\005 \001(\010\"\314\001\n\022CreateDatabaseExpr\022\024\n\014catal" +
+      "og_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\034\n\024cr" +
+      "eate_if_not_exists\030\003 \001(\010\022=\n\007options\030\004 \003(" +
+      "\0132,.greptime.v1.CreateDatabaseExpr.Optio" +
+      "nsEntry\032.\n\014OptionsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005" +
+      "value\030\002 \001(\t:\0028\001\"z\n\021TruncateTableExpr\022\024\n\014" +
+      "catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022" +
+      "\022\n\ntable_name\030\003 \001(\t\022&\n\010table_id\030\004 \001(\0132\024." +
+      "greptime.v1.TableId\"U\n\020DropDatabaseExpr\022" +
+      "\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001" +
+      "(\t\022\026\n\016drop_if_exists\030\003 \001(\010\"9\n\nAddColumns" +
+      "\022+\n\013add_columns\030\001 \003(\0132\026.greptime.v1.AddC" +
+      "olumn\"<\n\013DropColumns\022-\n\014drop_columns\030\001 \003" +
+      "(\0132\027.greptime.v1.DropColumn\"O\n\021ChangeCol" +
+      "umnTypes\022:\n\023change_column_types\030\001 \003(\0132\035." +
+      "greptime.v1.ChangeColumnType\"%\n\013RenameTa" +
+      "ble\022\026\n\016new_table_name\030\001 \001(\t\"i\n\tAddColumn" +
+      "\022*\n\ncolumn_def\030\001 \001(\0132\026.greptime.v1.Colum" +
+      "nDef\0220\n\010location\030\003 \001(\0132\036.greptime.v1.Add" +
+      "ColumnLocation\"\236\001\n\020ChangeColumnType\022\023\n\013c" +
+      "olumn_name\030\001 \001(\t\0220\n\013target_type\030\002 \001(\0162\033." +
+      "greptime.v1.ColumnDataType\022C\n\025target_typ" +
+      "e_extension\030\003 \001(\0132$.greptime.v1.ColumnDa" +
+      "taTypeExtension\"\032\n\nDropColumn\022\014\n\004name\030\001 " +
+      "\001(\t\"\025\n\007TableId\022\n\n\002id\030\001 \001(\r\"\024\n\006FlowId\022\n\n\002" +
+      "id\030\001 \001(\r\"\254\002\n\tColumnDef\022\014\n\004name\030\001 \001(\t\022.\n\t" +
+      "data_type\030\002 \001(\0162\033.greptime.v1.ColumnData" +
+      "Type\022\023\n\013is_nullable\030\003 \001(\010\022\032\n\022default_con" +
+      "straint\030\004 \001(\014\0220\n\rsemantic_type\030\005 \001(\0162\031.g" +
+      "reptime.v1.SemanticType\022\017\n\007comment\030\006 \001(\t" +
+      "\022@\n\022datatype_extension\030\007 \001(\0132$.greptime." +
+      "v1.ColumnDataTypeExtension\022+\n\007options\030\010 " +
+      "\001(\0132\032.greptime.v1.ColumnOptions\"\230\001\n\021AddC" +
+      "olumnLocation\022B\n\rlocation_type\030\001 \001(\0162+.g" +
+      "reptime.v1.AddColumnLocation.LocationTyp" +
+      "e\022\031\n\021after_column_name\030\002 \001(\t\"$\n\014Location" +
+      "Type\022\t\n\005FIRST\020\000\022\t\n\005AFTER\020\001BL\n\016io.greptim" +
+      "e.v1B\003DdlZ5github.com/GreptimeTeam/grept" +
+      "ime-proto/go/greptime/v1b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -26054,7 +26271,7 @@ public io.greptime.v1.Ddl.AddColumnLocation getDefaultInstanceForType() {
     internal_static_greptime_v1_CreateViewExpr_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_greptime_v1_CreateViewExpr_descriptor,
-        new java.lang.String[] { "CatalogName", "SchemaName", "ViewName", "LogicalPlan", "CreateIfNotExists", "OrReplace", "TableNames", "Definition", });
+        new java.lang.String[] { "CatalogName", "SchemaName", "ViewName", "LogicalPlan", "CreateIfNotExists", "OrReplace", "TableNames", "Columns", "Definition", });
     internal_static_greptime_v1_DropViewExpr_descriptor =
       getDescriptor().getMessageTypes().get(4);
     internal_static_greptime_v1_DropViewExpr_fieldAccessorTable = new
diff --git a/proto/greptime/v1/ddl.proto b/proto/greptime/v1/ddl.proto
index d7e02fde..6f178816 100644
--- a/proto/greptime/v1/ddl.proto
+++ b/proto/greptime/v1/ddl.proto
@@ -72,7 +72,8 @@ message CreateViewExpr {
   bool create_if_not_exists = 5;
   bool or_replace = 6;
   repeated TableName table_names = 7;
-  string definition = 8;
+  repeated string columns = 8;
+  string definition = 9;
 }
 
 // Drop a view

From d190dcd97e95db010c3c28f09f10690bb9cbe288 Mon Sep 17 00:00:00 2001
From: Dennis Zhuang 
Date: Fri, 21 Jun 2024 19:26:12 -0700
Subject: [PATCH 3/4] feat: save plan columns as well

---
 c++/greptime/v1/ddl.pb.cc                  | 144 +++++++++-
 c++/greptime/v1/ddl.pb.h                   | 107 ++++++-
 go/greptime/v1/ddl.pb.go                   | 291 ++++++++++++++-----
 java/src/main/java/io/greptime/v1/Ddl.java | 312 ++++++++++++++++++++-
 proto/greptime/v1/ddl.proto                |   3 +-
 5 files changed, 759 insertions(+), 98 deletions(-)

diff --git a/c++/greptime/v1/ddl.pb.cc b/c++/greptime/v1/ddl.pb.cc
index 84fa94aa..f344bc6f 100644
--- a/c++/greptime/v1/ddl.pb.cc
+++ b/c++/greptime/v1/ddl.pb.cc
@@ -89,6 +89,7 @@ PROTOBUF_CONSTEXPR CreateViewExpr::CreateViewExpr(
     ::_pbi::ConstantInitialized): _impl_{
     /*decltype(_impl_.table_names_)*/{}
   , /*decltype(_impl_.columns_)*/{}
+  , /*decltype(_impl_.plan_columns_)*/{}
   , /*decltype(_impl_.catalog_name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
   , /*decltype(_impl_.schema_name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
   , /*decltype(_impl_.view_name_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
@@ -476,6 +477,7 @@ const uint32_t TableStruct_greptime_2fv1_2fddl_2eproto::offsets[] PROTOBUF_SECTI
   PROTOBUF_FIELD_OFFSET(::greptime::v1::CreateViewExpr, _impl_.or_replace_),
   PROTOBUF_FIELD_OFFSET(::greptime::v1::CreateViewExpr, _impl_.table_names_),
   PROTOBUF_FIELD_OFFSET(::greptime::v1::CreateViewExpr, _impl_.columns_),
+  PROTOBUF_FIELD_OFFSET(::greptime::v1::CreateViewExpr, _impl_.plan_columns_),
   PROTOBUF_FIELD_OFFSET(::greptime::v1::CreateViewExpr, _impl_.definition_),
   ~0u,  // no _has_bits_
   PROTOBUF_FIELD_OFFSET(::greptime::v1::DropViewExpr, _internal_metadata_),
@@ -674,6 +676,7 @@ static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protode
   { 26, -1, -1, sizeof(::greptime::v1::CreateFlowExpr)},
   { 42, -1, -1, sizeof(::greptime::v1::DropFlowExpr)},
   { 52, -1, -1, sizeof(::greptime::v1::CreateViewExpr)},
+<<<<<<< HEAD
   { 67, -1, -1, sizeof(::greptime::v1::DropViewExpr)},
   { 78, 86, -1, sizeof(::greptime::v1::CreateTableExpr_TableOptionsEntry_DoNotUse)},
   { 88, -1, -1, sizeof(::greptime::v1::CreateTableExpr)},
@@ -693,6 +696,27 @@ static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protode
   { 221, -1, -1, sizeof(::greptime::v1::TableId)},
   { 228, -1, -1, sizeof(::greptime::v1::FlowId)},
   { 235, -1, -1, sizeof(::greptime::v1::ColumnDef)},
+=======
+  { 68, -1, -1, sizeof(::greptime::v1::DropViewExpr)},
+  { 79, 87, -1, sizeof(::greptime::v1::CreateTableExpr_TableOptionsEntry_DoNotUse)},
+  { 89, -1, -1, sizeof(::greptime::v1::CreateTableExpr)},
+  { 106, -1, -1, sizeof(::greptime::v1::AlterExpr)},
+  { 120, -1, -1, sizeof(::greptime::v1::DropTableExpr)},
+  { 131, 139, -1, sizeof(::greptime::v1::CreateDatabaseExpr_OptionsEntry_DoNotUse)},
+  { 141, -1, -1, sizeof(::greptime::v1::CreateDatabaseExpr)},
+  { 151, -1, -1, sizeof(::greptime::v1::TruncateTableExpr)},
+  { 161, -1, -1, sizeof(::greptime::v1::DropDatabaseExpr)},
+  { 170, -1, -1, sizeof(::greptime::v1::AddColumns)},
+  { 177, -1, -1, sizeof(::greptime::v1::DropColumns)},
+  { 184, -1, -1, sizeof(::greptime::v1::ChangeColumnTypes)},
+  { 191, -1, -1, sizeof(::greptime::v1::RenameTable)},
+  { 198, -1, -1, sizeof(::greptime::v1::AddColumn)},
+  { 206, -1, -1, sizeof(::greptime::v1::ChangeColumnType)},
+  { 215, -1, -1, sizeof(::greptime::v1::DropColumn)},
+  { 222, -1, -1, sizeof(::greptime::v1::TableId)},
+  { 229, -1, -1, sizeof(::greptime::v1::FlowId)},
+  { 236, -1, -1, sizeof(::greptime::v1::ColumnDef)},
+>>>>>>> 8e75b5e (feat: save plan columns as well)
   { 249, -1, -1, sizeof(::greptime::v1::AddColumnLocation)},
 };
 
@@ -751,12 +775,13 @@ const char descriptor_table_protodef_greptime_2fv1_2fddl_2eproto[] PROTOBUF_SECT
   "Entry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"u\n"
   "\014DropFlowExpr\022\024\n\014catalog_name\030\001 \001(\t\022\021\n\tf"
   "low_name\030\002 \001(\t\022$\n\007flow_id\030\003 \001(\0132\023.grepti"
-  "me.v1.FlowId\022\026\n\016drop_if_exists\030\005 \001(\010\"\350\001\n"
+  "me.v1.FlowId\022\026\n\016drop_if_exists\030\005 \001(\010\"\376\001\n"
   "\016CreateViewExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n"
   "\013schema_name\030\002 \001(\t\022\021\n\tview_name\030\003 \001(\t\022\024\n"
   "\014logical_plan\030\004 \001(\014\022\034\n\024create_if_not_exi"
   "sts\030\005 \001(\010\022\022\n\nor_replace\030\006 \001(\010\022+\n\013table_n"
   "ames\030\007 \003(\0132\026.greptime.v1.TableName\022\017\n\007co"
+<<<<<<< HEAD
   "lumns\030\010 \003(\t\022\022\n\ndefinition\030\t \001(\t\"\213\001\n\014Drop"
   "ViewExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema"
   "_name\030\002 \001(\t\022\021\n\tview_name\030\003 \001(\t\022%\n\007view_i"
@@ -821,13 +846,83 @@ const char descriptor_table_protodef_greptime_2fv1_2fddl_2eproto[] PROTOBUF_SECT
   "Type\022\t\n\005FIRST\020\000\022\t\n\005AFTER\020\001BL\n\016io.greptim"
   "e.v1B\003DdlZ5github.com/GreptimeTeam/grept"
   "ime-proto/go/greptime/v1b\006proto3"
+=======
+  "lumns\030\010 \003(\t\022\024\n\014plan_columns\030\t \003(\t\022\022\n\ndef"
+  "inition\030\n \001(\t\"\213\001\n\014DropViewExpr\022\024\n\014catalo"
+  "g_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\021\n\tvie"
+  "w_name\030\003 \001(\t\022%\n\007view_id\030\004 \001(\0132\024.greptime"
+  ".v1.TableId\022\026\n\016drop_if_exists\030\005 \001(\010\"\207\003\n\017"
+  "CreateTableExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n"
+  "\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003 \001(\t\022\014"
+  "\n\004desc\030\004 \001(\t\022+\n\013column_defs\030\005 \003(\0132\026.grep"
+  "time.v1.ColumnDef\022\022\n\ntime_index\030\006 \001(\t\022\024\n"
+  "\014primary_keys\030\007 \003(\t\022\034\n\024create_if_not_exi"
+  "sts\030\010 \001(\010\022E\n\rtable_options\030\t \003(\0132..grept"
+  "ime.v1.CreateTableExpr.TableOptionsEntry"
+  "\022&\n\010table_id\030\n \001(\0132\024.greptime.v1.TableId"
+  "\022\016\n\006engine\030\014 \001(\t\0323\n\021TableOptionsEntry\022\013\n"
+  "\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\245\002\n\tAlterE"
+  "xpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_name"
+  "\030\002 \001(\t\022\022\n\ntable_name\030\003 \001(\t\022.\n\013add_column"
+  "s\030\004 \001(\0132\027.greptime.v1.AddColumnsH\000\0220\n\014dr"
+  "op_columns\030\005 \001(\0132\030.greptime.v1.DropColum"
+  "nsH\000\0220\n\014rename_table\030\006 \001(\0132\030.greptime.v1"
+  ".RenameTableH\000\022=\n\023change_column_types\030\007 "
+  "\001(\0132\036.greptime.v1.ChangeColumnTypesH\000B\006\n"
+  "\004kind\"\216\001\n\rDropTableExpr\022\024\n\014catalog_name\030"
+  "\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name"
+  "\030\003 \001(\t\022&\n\010table_id\030\004 \001(\0132\024.greptime.v1.T"
+  "ableId\022\026\n\016drop_if_exists\030\005 \001(\010\"\314\001\n\022Creat"
+  "eDatabaseExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013s"
+  "chema_name\030\002 \001(\t\022\034\n\024create_if_not_exists"
+  "\030\003 \001(\010\022=\n\007options\030\004 \003(\0132,.greptime.v1.Cr"
+  "eateDatabaseExpr.OptionsEntry\032.\n\014Options"
+  "Entry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"z\n"
+  "\021TruncateTableExpr\022\024\n\014catalog_name\030\001 \001(\t"
+  "\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003 \001("
+  "\t\022&\n\010table_id\030\004 \001(\0132\024.greptime.v1.TableI"
+  "d\"U\n\020DropDatabaseExpr\022\024\n\014catalog_name\030\001 "
+  "\001(\t\022\023\n\013schema_name\030\002 \001(\t\022\026\n\016drop_if_exis"
+  "ts\030\003 \001(\010\"9\n\nAddColumns\022+\n\013add_columns\030\001 "
+  "\003(\0132\026.greptime.v1.AddColumn\"<\n\013DropColum"
+  "ns\022-\n\014drop_columns\030\001 \003(\0132\027.greptime.v1.D"
+  "ropColumn\"O\n\021ChangeColumnTypes\022:\n\023change"
+  "_column_types\030\001 \003(\0132\035.greptime.v1.Change"
+  "ColumnType\"%\n\013RenameTable\022\026\n\016new_table_n"
+  "ame\030\001 \001(\t\"i\n\tAddColumn\022*\n\ncolumn_def\030\001 \001"
+  "(\0132\026.greptime.v1.ColumnDef\0220\n\010location\030\003"
+  " \001(\0132\036.greptime.v1.AddColumnLocation\"\236\001\n"
+  "\020ChangeColumnType\022\023\n\013column_name\030\001 \001(\t\0220"
+  "\n\013target_type\030\002 \001(\0162\033.greptime.v1.Column"
+  "DataType\022C\n\025target_type_extension\030\003 \001(\0132"
+  "$.greptime.v1.ColumnDataTypeExtension\"\032\n"
+  "\nDropColumn\022\014\n\004name\030\001 \001(\t\"\025\n\007TableId\022\n\n\002"
+  "id\030\001 \001(\r\"\024\n\006FlowId\022\n\n\002id\030\001 \001(\r\"\377\001\n\tColum"
+  "nDef\022\014\n\004name\030\001 \001(\t\022.\n\tdata_type\030\002 \001(\0162\033."
+  "greptime.v1.ColumnDataType\022\023\n\013is_nullabl"
+  "e\030\003 \001(\010\022\032\n\022default_constraint\030\004 \001(\014\0220\n\rs"
+  "emantic_type\030\005 \001(\0162\031.greptime.v1.Semanti"
+  "cType\022\017\n\007comment\030\006 \001(\t\022@\n\022datatype_exten"
+  "sion\030\007 \001(\0132$.greptime.v1.ColumnDataTypeE"
+  "xtension\"\230\001\n\021AddColumnLocation\022B\n\rlocati"
+  "on_type\030\001 \001(\0162+.greptime.v1.AddColumnLoc"
+  "ation.LocationType\022\031\n\021after_column_name\030"
+  "\002 \001(\t\"$\n\014LocationType\022\t\n\005FIRST\020\000\022\t\n\005AFTE"
+  "R\020\001BL\n\016io.greptime.v1B\003DdlZ5github.com/G"
+  "reptimeTeam/greptime-proto/go/greptime/v"
+  "1b\006proto3"
+>>>>>>> 8e75b5e (feat: save plan columns as well)
   ;
 static const ::_pbi::DescriptorTable* const descriptor_table_greptime_2fv1_2fddl_2eproto_deps[1] = {
   &::descriptor_table_greptime_2fv1_2fcommon_2eproto,
 };
 static ::_pbi::once_flag descriptor_table_greptime_2fv1_2fddl_2eproto_once;
 const ::_pbi::DescriptorTable descriptor_table_greptime_2fv1_2fddl_2eproto = {
+<<<<<<< HEAD
     false, false, 3832, descriptor_table_protodef_greptime_2fv1_2fddl_2eproto,
+=======
+    false, false, 3809, descriptor_table_protodef_greptime_2fv1_2fddl_2eproto,
+>>>>>>> 8e75b5e (feat: save plan columns as well)
     "greptime/v1/ddl.proto",
     &descriptor_table_greptime_2fv1_2fddl_2eproto_once, descriptor_table_greptime_2fv1_2fddl_2eproto_deps, 1, 25,
     schemas, file_default_instances, TableStruct_greptime_2fv1_2fddl_2eproto::offsets,
@@ -2548,6 +2643,7 @@ CreateViewExpr::CreateViewExpr(const CreateViewExpr& from)
   new (&_impl_) Impl_{
       decltype(_impl_.table_names_){from._impl_.table_names_}
     , decltype(_impl_.columns_){from._impl_.columns_}
+    , decltype(_impl_.plan_columns_){from._impl_.plan_columns_}
     , decltype(_impl_.catalog_name_){}
     , decltype(_impl_.schema_name_){}
     , decltype(_impl_.view_name_){}
@@ -2611,6 +2707,7 @@ inline void CreateViewExpr::SharedCtor(
   new (&_impl_) Impl_{
       decltype(_impl_.table_names_){arena}
     , decltype(_impl_.columns_){arena}
+    , decltype(_impl_.plan_columns_){arena}
     , decltype(_impl_.catalog_name_){}
     , decltype(_impl_.schema_name_){}
     , decltype(_impl_.view_name_){}
@@ -2655,6 +2752,7 @@ inline void CreateViewExpr::SharedDtor() {
   GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
   _impl_.table_names_.~RepeatedPtrField();
   _impl_.columns_.~RepeatedPtrField();
+  _impl_.plan_columns_.~RepeatedPtrField();
   _impl_.catalog_name_.Destroy();
   _impl_.schema_name_.Destroy();
   _impl_.view_name_.Destroy();
@@ -2674,6 +2772,7 @@ void CreateViewExpr::Clear() {
 
   _impl_.table_names_.Clear();
   _impl_.columns_.Clear();
+  _impl_.plan_columns_.Clear();
   _impl_.catalog_name_.ClearToEmpty();
   _impl_.schema_name_.ClearToEmpty();
   _impl_.view_name_.ClearToEmpty();
@@ -2774,9 +2873,24 @@ const char* CreateViewExpr::_InternalParse(const char* ptr, ::_pbi::ParseContext
         } else
           goto handle_unusual;
         continue;
-      // string definition = 9;
+      // repeated string plan_columns = 9;
       case 9:
         if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 74)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            auto str = _internal_add_plan_columns();
+            ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
+            CHK_(ptr);
+            CHK_(::_pbi::VerifyUTF8(str, "greptime.v1.CreateViewExpr.plan_columns"));
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<74>(ptr));
+        } else
+          goto handle_unusual;
+        continue;
+      // string definition = 10;
+      case 10:
+        if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 82)) {
           auto str = _internal_mutable_definition();
           ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
           CHK_(ptr);
@@ -2879,14 +2993,24 @@ uint8_t* CreateViewExpr::_InternalSerialize(
     target = stream->WriteString(8, s, target);
   }
 
-  // string definition = 9;
+  // repeated string plan_columns = 9;
+  for (int i = 0, n = this->_internal_plan_columns_size(); i < n; i++) {
+    const auto& s = this->_internal_plan_columns(i);
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      s.data(), static_cast(s.length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "greptime.v1.CreateViewExpr.plan_columns");
+    target = stream->WriteString(9, s, target);
+  }
+
+  // string definition = 10;
   if (!this->_internal_definition().empty()) {
     ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
       this->_internal_definition().data(), static_cast(this->_internal_definition().length()),
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
       "greptime.v1.CreateViewExpr.definition");
     target = stream->WriteStringMaybeAliased(
-        9, this->_internal_definition(), target);
+        10, this->_internal_definition(), target);
   }
 
   if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
@@ -2920,6 +3044,14 @@ size_t CreateViewExpr::ByteSizeLong() const {
       _impl_.columns_.Get(i));
   }
 
+  // repeated string plan_columns = 9;
+  total_size += 1 *
+      ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(_impl_.plan_columns_.size());
+  for (int i = 0, n = _impl_.plan_columns_.size(); i < n; i++) {
+    total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+      _impl_.plan_columns_.Get(i));
+  }
+
   // string catalog_name = 1;
   if (!this->_internal_catalog_name().empty()) {
     total_size += 1 +
@@ -2948,7 +3080,7 @@ size_t CreateViewExpr::ByteSizeLong() const {
         this->_internal_logical_plan());
   }
 
-  // string definition = 9;
+  // string definition = 10;
   if (!this->_internal_definition().empty()) {
     total_size += 1 +
       ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
@@ -2985,6 +3117,7 @@ void CreateViewExpr::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const :
 
   _this->_impl_.table_names_.MergeFrom(from._impl_.table_names_);
   _this->_impl_.columns_.MergeFrom(from._impl_.columns_);
+  _this->_impl_.plan_columns_.MergeFrom(from._impl_.plan_columns_);
   if (!from._internal_catalog_name().empty()) {
     _this->_internal_set_catalog_name(from._internal_catalog_name());
   }
@@ -3027,6 +3160,7 @@ void CreateViewExpr::InternalSwap(CreateViewExpr* other) {
   _internal_metadata_.InternalSwap(&other->_internal_metadata_);
   _impl_.table_names_.InternalSwap(&other->_impl_.table_names_);
   _impl_.columns_.InternalSwap(&other->_impl_.columns_);
+  _impl_.plan_columns_.InternalSwap(&other->_impl_.plan_columns_);
   ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
       &_impl_.catalog_name_, lhs_arena,
       &other->_impl_.catalog_name_, rhs_arena
diff --git a/c++/greptime/v1/ddl.pb.h b/c++/greptime/v1/ddl.pb.h
index 76b025a6..875e85d4 100644
--- a/c++/greptime/v1/ddl.pb.h
+++ b/c++/greptime/v1/ddl.pb.h
@@ -1195,11 +1195,12 @@ class CreateViewExpr final :
   enum : int {
     kTableNamesFieldNumber = 7,
     kColumnsFieldNumber = 8,
+    kPlanColumnsFieldNumber = 9,
     kCatalogNameFieldNumber = 1,
     kSchemaNameFieldNumber = 2,
     kViewNameFieldNumber = 3,
     kLogicalPlanFieldNumber = 4,
-    kDefinitionFieldNumber = 9,
+    kDefinitionFieldNumber = 10,
     kCreateIfNotExistsFieldNumber = 5,
     kOrReplaceFieldNumber = 6,
   };
@@ -1245,6 +1246,30 @@ class CreateViewExpr final :
   std::string* _internal_add_columns();
   public:
 
+  // repeated string plan_columns = 9;
+  int plan_columns_size() const;
+  private:
+  int _internal_plan_columns_size() const;
+  public:
+  void clear_plan_columns();
+  const std::string& plan_columns(int index) const;
+  std::string* mutable_plan_columns(int index);
+  void set_plan_columns(int index, const std::string& value);
+  void set_plan_columns(int index, std::string&& value);
+  void set_plan_columns(int index, const char* value);
+  void set_plan_columns(int index, const char* value, size_t size);
+  std::string* add_plan_columns();
+  void add_plan_columns(const std::string& value);
+  void add_plan_columns(std::string&& value);
+  void add_plan_columns(const char* value);
+  void add_plan_columns(const char* value, size_t size);
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& plan_columns() const;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* mutable_plan_columns();
+  private:
+  const std::string& _internal_plan_columns(int index) const;
+  std::string* _internal_add_plan_columns();
+  public:
+
   // string catalog_name = 1;
   void clear_catalog_name();
   const std::string& catalog_name() const;
@@ -1301,7 +1326,7 @@ class CreateViewExpr final :
   std::string* _internal_mutable_logical_plan();
   public:
 
-  // string definition = 9;
+  // string definition = 10;
   void clear_definition();
   const std::string& definition() const;
   template 
@@ -1343,6 +1368,7 @@ class CreateViewExpr final :
   struct Impl_ {
     ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::greptime::v1::TableName > table_names_;
     ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField columns_;
+    ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField plan_columns_;
     ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr catalog_name_;
     ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr schema_name_;
     ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr view_name_;
@@ -6682,7 +6708,82 @@ CreateViewExpr::mutable_columns() {
   return &_impl_.columns_;
 }
 
-// string definition = 9;
+// repeated string plan_columns = 9;
+inline int CreateViewExpr::_internal_plan_columns_size() const {
+  return _impl_.plan_columns_.size();
+}
+inline int CreateViewExpr::plan_columns_size() const {
+  return _internal_plan_columns_size();
+}
+inline void CreateViewExpr::clear_plan_columns() {
+  _impl_.plan_columns_.Clear();
+}
+inline std::string* CreateViewExpr::add_plan_columns() {
+  std::string* _s = _internal_add_plan_columns();
+  // @@protoc_insertion_point(field_add_mutable:greptime.v1.CreateViewExpr.plan_columns)
+  return _s;
+}
+inline const std::string& CreateViewExpr::_internal_plan_columns(int index) const {
+  return _impl_.plan_columns_.Get(index);
+}
+inline const std::string& CreateViewExpr::plan_columns(int index) const {
+  // @@protoc_insertion_point(field_get:greptime.v1.CreateViewExpr.plan_columns)
+  return _internal_plan_columns(index);
+}
+inline std::string* CreateViewExpr::mutable_plan_columns(int index) {
+  // @@protoc_insertion_point(field_mutable:greptime.v1.CreateViewExpr.plan_columns)
+  return _impl_.plan_columns_.Mutable(index);
+}
+inline void CreateViewExpr::set_plan_columns(int index, const std::string& value) {
+  _impl_.plan_columns_.Mutable(index)->assign(value);
+  // @@protoc_insertion_point(field_set:greptime.v1.CreateViewExpr.plan_columns)
+}
+inline void CreateViewExpr::set_plan_columns(int index, std::string&& value) {
+  _impl_.plan_columns_.Mutable(index)->assign(std::move(value));
+  // @@protoc_insertion_point(field_set:greptime.v1.CreateViewExpr.plan_columns)
+}
+inline void CreateViewExpr::set_plan_columns(int index, const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  _impl_.plan_columns_.Mutable(index)->assign(value);
+  // @@protoc_insertion_point(field_set_char:greptime.v1.CreateViewExpr.plan_columns)
+}
+inline void CreateViewExpr::set_plan_columns(int index, const char* value, size_t size) {
+  _impl_.plan_columns_.Mutable(index)->assign(
+    reinterpret_cast(value), size);
+  // @@protoc_insertion_point(field_set_pointer:greptime.v1.CreateViewExpr.plan_columns)
+}
+inline std::string* CreateViewExpr::_internal_add_plan_columns() {
+  return _impl_.plan_columns_.Add();
+}
+inline void CreateViewExpr::add_plan_columns(const std::string& value) {
+  _impl_.plan_columns_.Add()->assign(value);
+  // @@protoc_insertion_point(field_add:greptime.v1.CreateViewExpr.plan_columns)
+}
+inline void CreateViewExpr::add_plan_columns(std::string&& value) {
+  _impl_.plan_columns_.Add(std::move(value));
+  // @@protoc_insertion_point(field_add:greptime.v1.CreateViewExpr.plan_columns)
+}
+inline void CreateViewExpr::add_plan_columns(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  _impl_.plan_columns_.Add()->assign(value);
+  // @@protoc_insertion_point(field_add_char:greptime.v1.CreateViewExpr.plan_columns)
+}
+inline void CreateViewExpr::add_plan_columns(const char* value, size_t size) {
+  _impl_.plan_columns_.Add()->assign(reinterpret_cast(value), size);
+  // @@protoc_insertion_point(field_add_pointer:greptime.v1.CreateViewExpr.plan_columns)
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField&
+CreateViewExpr::plan_columns() const {
+  // @@protoc_insertion_point(field_list:greptime.v1.CreateViewExpr.plan_columns)
+  return _impl_.plan_columns_;
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField*
+CreateViewExpr::mutable_plan_columns() {
+  // @@protoc_insertion_point(field_mutable_list:greptime.v1.CreateViewExpr.plan_columns)
+  return &_impl_.plan_columns_;
+}
+
+// string definition = 10;
 inline void CreateViewExpr::clear_definition() {
   _impl_.definition_.ClearToEmpty();
 }
diff --git a/go/greptime/v1/ddl.pb.go b/go/greptime/v1/ddl.pb.go
index 5a1e3f78..5c61c5c2 100644
--- a/go/greptime/v1/ddl.pb.go
+++ b/go/greptime/v1/ddl.pb.go
@@ -470,7 +470,8 @@ type CreateViewExpr struct {
 	OrReplace         bool         `protobuf:"varint,6,opt,name=or_replace,json=orReplace,proto3" json:"or_replace,omitempty"`
 	TableNames        []*TableName `protobuf:"bytes,7,rep,name=table_names,json=tableNames,proto3" json:"table_names,omitempty"`
 	Columns           []string     `protobuf:"bytes,8,rep,name=columns,proto3" json:"columns,omitempty"`
-	Definition        string       `protobuf:"bytes,9,opt,name=definition,proto3" json:"definition,omitempty"`
+	PlanColumns       []string     `protobuf:"bytes,9,rep,name=plan_columns,json=planColumns,proto3" json:"plan_columns,omitempty"`
+	Definition        string       `protobuf:"bytes,10,opt,name=definition,proto3" json:"definition,omitempty"`
 }
 
 func (x *CreateViewExpr) Reset() {
@@ -561,6 +562,13 @@ func (x *CreateViewExpr) GetColumns() []string {
 	return nil
 }
 
+func (x *CreateViewExpr) GetPlanColumns() []string {
+	if x != nil {
+		return x.PlanColumns
+	}
+	return nil
+}
+
 func (x *CreateViewExpr) GetDefinition() string {
 	if x != nil {
 		return x.Definition
@@ -1887,7 +1895,7 @@ var file_greptime_v1_ddl_proto_rawDesc = []byte{
 	0x31, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x49, 0x64, 0x52, 0x06, 0x66, 0x6c, 0x6f, 0x77, 0x49, 0x64,
 	0x12, 0x24, 0x0a, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x69, 0x66, 0x5f, 0x65, 0x78, 0x69, 0x73,
 	0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x49, 0x66,
-	0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0xd7, 0x02, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74,
+	0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0xfa, 0x02, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74,
 	0x65, 0x56, 0x69, 0x65, 0x77, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74,
 	0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
 	0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b,
@@ -1907,83 +1915,16 @@ var file_greptime_v1_ddl_proto_rawDesc = []byte{
 	0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x62, 0x6c,
 	0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
 	0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73,
-	0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e,
-	0x22, 0xc4, 0x01, 0x0a, 0x0c, 0x44, 0x72, 0x6f, 0x70, 0x56, 0x69, 0x65, 0x77, 0x45, 0x78, 0x70,
-	0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d,
-	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67,
-	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e,
-	0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d,
-	0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61,
-	0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, 0x65, 0x77, 0x4e, 0x61,
-	0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76,
-	0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49,
-	0x64, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x69, 0x66, 0x5f, 0x65, 0x78, 0x69,
-	0x73, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x49,
-	0x66, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x93, 0x04, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61,
-	0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63,
-	0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f,
-	0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12,
-	0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12,
-	0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65,
-	0x73, 0x63, 0x12, 0x37, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x64, 0x65, 0x66,
-	0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69,
-	0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66, 0x52,
-	0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74,
-	0x69, 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x09, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72,
-	0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09,
-	0x52, 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x2f, 0x0a,
-	0x14, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65,
-	0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x63, 0x72, 0x65,
-	0x61, 0x74, 0x65, 0x49, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x53,
-	0x0a, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
-	0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65,
-	0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45,
-	0x78, 0x70, 0x72, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
-	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69,
-	0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18,
-	0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65,
-	0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x07, 0x74, 0x61, 0x62,
-	0x6c, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x18, 0x0c,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x1a, 0x3f, 0x0a, 0x11,
-	0x54, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72,
-	0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
-	0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x82, 0x03,
-	0x0a, 0x09, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63,
-	0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f,
-	0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12,
-	0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a,
-	0x0a, 0x0b, 0x61, 0x64, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76,
-	0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0a,
-	0x61, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x64, 0x72,
-	0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x18, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44,
-	0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x72,
-	0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x72, 0x65, 0x6e,
-	0x61, 0x6d, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x18, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65,
-	0x6e, 0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x6e,
-	0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x6e,
-	0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18,
-	0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65,
-	0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
-	0x54, 0x79, 0x70, 0x65, 0x73, 0x48, 0x00, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43,
-	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69,
-	0x6e, 0x64, 0x22, 0xc9, 0x01, 0x0a, 0x0d, 0x44, 0x72, 0x6f, 0x70, 0x54, 0x61, 0x62, 0x6c, 0x65,
+	0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73,
+	0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x6c, 0x61, 0x6e, 0x43, 0x6f, 0x6c, 0x75,
+	0x6d, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f,
+	0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74,
+	0x69, 0x6f, 0x6e, 0x22, 0xc4, 0x01, 0x0a, 0x0c, 0x44, 0x72, 0x6f, 0x70, 0x56, 0x69, 0x65, 0x77,
 	0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f,
 	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61,
 	0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d,
 	0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63,
+<<<<<<< HEAD
 	0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c,
 	0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61,
 	0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65,
@@ -2115,6 +2056,206 @@ var file_greptime_v1_ddl_proto_rawDesc = []byte{
 	0x6d, 0x2f, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f,
 	0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x76, 0x31, 0x62,
 	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+=======
+	0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x65, 0x77,
+	0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, 0x65,
+	0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x69, 0x64,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d,
+	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x06, 0x76, 0x69,
+	0x65, 0x77, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x69, 0x66, 0x5f,
+	0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x72,
+	0x6f, 0x70, 0x49, 0x66, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x93, 0x04, 0x0a, 0x0f, 0x43,
+	0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21,
+	0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d,
+	0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61,
+	0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d,
+	0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x37, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f,
+	0x64, 0x65, 0x66, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x65,
+	0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44,
+	0x65, 0x66, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66, 0x73, 0x12, 0x1d,
+	0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x21, 0x0a,
+	0x0c, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x07, 0x20,
+	0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x4b, 0x65, 0x79, 0x73,
+	0x12, 0x2f, 0x0a, 0x14, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x6f,
+	0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11,
+	0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74,
+	0x73, 0x12, 0x53, 0x0a, 0x0d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74,
+	0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62,
+	0x6c, 0x65, 0x45, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f,
+	0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74,
+	0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x52, 0x07,
+	0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x67, 0x69, 0x6e,
+	0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x1a,
+	0x3f, 0x0a, 0x11, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45,
+	0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
+	0x22, 0x82, 0x03, 0x0a, 0x09, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21,
+	0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d,
+	0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61,
+	0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d,
+	0x65, 0x12, 0x3a, 0x0a, 0x0b, 0x61, 0x64, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d,
+	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x48,
+	0x00, 0x52, 0x0a, 0x61, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x3d, 0x0a,
+	0x0c, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76,
+	0x31, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x48, 0x00, 0x52,
+	0x0b, 0x64, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x0c,
+	0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31,
+	0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x0b,
+	0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x13, 0x63,
+	0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74, 0x79, 0x70,
+	0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74,
+	0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6c,
+	0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x48, 0x00, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e,
+	0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x42, 0x06, 0x0a,
+	0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xc9, 0x01, 0x0a, 0x0d, 0x44, 0x72, 0x6f, 0x70, 0x54, 0x61,
+	0x62, 0x6c, 0x65, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c,
+	0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63,
+	0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63,
+	0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74,
+	0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x74, 0x61,
+	0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67,
+	0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65,
+	0x49, 0x64, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x64,
+	0x72, 0x6f, 0x70, 0x5f, 0x69, 0x66, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x49, 0x66, 0x45, 0x78, 0x69, 0x73, 0x74,
+	0x73, 0x22, 0x8d, 0x02, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61,
+	0x62, 0x61, 0x73, 0x65, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61,
+	0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
+	0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73,
+	0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x14,
+	0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78,
+	0x69, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x63, 0x72, 0x65, 0x61,
+	0x74, 0x65, 0x49, 0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x46, 0x0a,
+	0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c,
+	0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x45, 0x78, 0x70, 0x72, 0x2e,
+	0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6f, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+	0x01, 0x22, 0xa7, 0x01, 0x0a, 0x11, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x54, 0x61,
+	0x62, 0x6c, 0x65, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c,
+	0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63,
+	0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63,
+	0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74,
+	0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x74, 0x61,
+	0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67,
+	0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65,
+	0x49, 0x64, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x7c, 0x0a, 0x10, 0x44,
+	0x72, 0x6f, 0x70, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x45, 0x78, 0x70, 0x72, 0x12,
+	0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61,
+	0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e,
+	0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x69, 0x66, 0x5f, 0x65,
+	0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x72, 0x6f,
+	0x70, 0x49, 0x66, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x45, 0x0a, 0x0a, 0x41, 0x64, 0x64,
+	0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x61, 0x64, 0x64, 0x5f, 0x63,
+	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67,
+	0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6f,
+	0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x0a, 0x61, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73,
+	0x22, 0x49, 0x0a, 0x0b, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12,
+	0x3a, 0x0a, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18,
+	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65,
+	0x2e, 0x76, 0x31, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x0b,
+	0x64, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0x62, 0x0a, 0x11, 0x43,
+	0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73,
+	0x12, 0x4d, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d,
+	0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e,
+	0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e,
+	0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x11, 0x63, 0x68,
+	0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22,
+	0x33, 0x0a, 0x0b, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x24,
+	0x0a, 0x0e, 0x6e, 0x65, 0x77, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65,
+	0x4e, 0x61, 0x6d, 0x65, 0x22, 0x7e, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
+	0x6e, 0x12, 0x35, 0x0a, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65,
+	0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66, 0x52, 0x09, 0x63,
+	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66, 0x12, 0x3a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x65,
+	0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75,
+	0x6d, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x22, 0xcb, 0x01, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43,
+	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c,
+	0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
+	0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x74, 0x61,
+	0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32,
+	0x1b, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f,
+	0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x74, 0x61,
+	0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x58, 0x0a, 0x15, 0x74, 0x61, 0x72, 0x67,
+	0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69,
+	0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x61, 0x74, 0x61,
+	0x54, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x74,
+	0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+	0x6f, 0x6e, 0x22, 0x20, 0x0a, 0x0a, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
+	0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x22, 0x19, 0x0a, 0x07, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12,
+	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22,
+	0x18, 0x0a, 0x06, 0x46, 0x6c, 0x6f, 0x77, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0xd8, 0x02, 0x0a, 0x09, 0x43, 0x6f,
+	0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x64,
+	0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b,
+	0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c,
+	0x75, 0x6d, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x64, 0x61, 0x74,
+	0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x6e, 0x75, 0x6c, 0x6c,
+	0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x4e, 0x75,
+	0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+	0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x0c, 0x52, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x74,
+	0x72, 0x61, 0x69, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x0d, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69,
+	0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67,
+	0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6d, 0x61, 0x6e,
+	0x74, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69,
+	0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74,
+	0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12,
+	0x53, 0x0a, 0x12, 0x64, 0x61, 0x74, 0x61, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65,
+	0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x72,
+	0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
+	0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+	0x6e, 0x52, 0x11, 0x64, 0x61, 0x74, 0x61, 0x74, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e,
+	0x73, 0x69, 0x6f, 0x6e, 0x22, 0xb7, 0x01, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75,
+	0x6d, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x0d, 0x6c, 0x6f,
+	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e,
+	0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c,
+	0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x11,
+	0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x43, 0x6f,
+	0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x0c, 0x4c, 0x6f, 0x63, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x49, 0x52, 0x53,
+	0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x46, 0x54, 0x45, 0x52, 0x10, 0x01, 0x42, 0x4c,
+	0x0a, 0x0e, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31,
+	0x42, 0x03, 0x44, 0x64, 0x6c, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
+	0x6d, 0x2f, 0x47, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x2f, 0x67,
+	0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f,
+	0x2f, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x33,
+>>>>>>> 8e75b5e (feat: save plan columns as well)
 }
 
 var (
diff --git a/java/src/main/java/io/greptime/v1/Ddl.java b/java/src/main/java/io/greptime/v1/Ddl.java
index 4ba679e7..fe8d35ce 100644
--- a/java/src/main/java/io/greptime/v1/Ddl.java
+++ b/java/src/main/java/io/greptime/v1/Ddl.java
@@ -6032,12 +6032,37 @@ io.greptime.v1.Common.TableNameOrBuilder getTableNamesOrBuilder(
         getColumnsBytes(int index);
 
     /**
-     * string definition = 9;
+     * repeated string plan_columns = 9;
+     * @return A list containing the planColumns.
+     */
+    java.util.List
+        getPlanColumnsList();
+    /**
+     * repeated string plan_columns = 9;
+     * @return The count of planColumns.
+     */
+    int getPlanColumnsCount();
+    /**
+     * repeated string plan_columns = 9;
+     * @param index The index of the element to return.
+     * @return The planColumns at the given index.
+     */
+    java.lang.String getPlanColumns(int index);
+    /**
+     * repeated string plan_columns = 9;
+     * @param index The index of the value to return.
+     * @return The bytes of the planColumns at the given index.
+     */
+    com.google.protobuf.ByteString
+        getPlanColumnsBytes(int index);
+
+    /**
+     * string definition = 10;
      * @return The definition.
      */
     java.lang.String getDefinition();
     /**
-     * string definition = 9;
+     * string definition = 10;
      * @return The bytes for definition.
      */
     com.google.protobuf.ByteString
@@ -6066,6 +6091,7 @@ private CreateViewExpr() {
       logicalPlan_ = com.google.protobuf.ByteString.EMPTY;
       tableNames_ = java.util.Collections.emptyList();
       columns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      planColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
       definition_ = "";
     }
 
@@ -6153,6 +6179,15 @@ private CreateViewExpr(
             }
             case 74: {
               java.lang.String s = input.readStringRequireUtf8();
+              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
+                planColumns_ = new com.google.protobuf.LazyStringArrayList();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              planColumns_.add(s);
+              break;
+            }
+            case 82: {
+              java.lang.String s = input.readStringRequireUtf8();
 
               definition_ = s;
               break;
@@ -6180,6 +6215,9 @@ private CreateViewExpr(
         if (((mutable_bitField0_ & 0x00000002) != 0)) {
           columns_ = columns_.getUnmodifiableView();
         }
+        if (((mutable_bitField0_ & 0x00000004) != 0)) {
+          planColumns_ = planColumns_.getUnmodifiableView();
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
@@ -6419,10 +6457,45 @@ public java.lang.String getColumns(int index) {
       return columns_.getByteString(index);
     }
 
-    public static final int DEFINITION_FIELD_NUMBER = 9;
+    public static final int PLAN_COLUMNS_FIELD_NUMBER = 9;
+    private com.google.protobuf.LazyStringList planColumns_;
+    /**
+     * repeated string plan_columns = 9;
+     * @return A list containing the planColumns.
+     */
+    public com.google.protobuf.ProtocolStringList
+        getPlanColumnsList() {
+      return planColumns_;
+    }
+    /**
+     * repeated string plan_columns = 9;
+     * @return The count of planColumns.
+     */
+    public int getPlanColumnsCount() {
+      return planColumns_.size();
+    }
+    /**
+     * repeated string plan_columns = 9;
+     * @param index The index of the element to return.
+     * @return The planColumns at the given index.
+     */
+    public java.lang.String getPlanColumns(int index) {
+      return planColumns_.get(index);
+    }
+    /**
+     * repeated string plan_columns = 9;
+     * @param index The index of the value to return.
+     * @return The bytes of the planColumns at the given index.
+     */
+    public com.google.protobuf.ByteString
+        getPlanColumnsBytes(int index) {
+      return planColumns_.getByteString(index);
+    }
+
+    public static final int DEFINITION_FIELD_NUMBER = 10;
     private volatile java.lang.Object definition_;
     /**
-     * string definition = 9;
+     * string definition = 10;
      * @return The definition.
      */
     @java.lang.Override
@@ -6439,7 +6512,7 @@ public java.lang.String getDefinition() {
       }
     }
     /**
-     * string definition = 9;
+     * string definition = 10;
      * @return The bytes for definition.
      */
     @java.lang.Override
@@ -6495,8 +6568,11 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       for (int i = 0; i < columns_.size(); i++) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 8, columns_.getRaw(i));
       }
+      for (int i = 0; i < planColumns_.size(); i++) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 9, planColumns_.getRaw(i));
+      }
       if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(definition_)) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 9, definition_);
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 10, definition_);
       }
       unknownFields.writeTo(output);
     }
@@ -6540,8 +6616,16 @@ public int getSerializedSize() {
         size += dataSize;
         size += 1 * getColumnsList().size();
       }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < planColumns_.size(); i++) {
+          dataSize += computeStringSizeNoTag(planColumns_.getRaw(i));
+        }
+        size += dataSize;
+        size += 1 * getPlanColumnsList().size();
+      }
       if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(definition_)) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, definition_);
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, definition_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -6574,6 +6658,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getTableNamesList())) return false;
       if (!getColumnsList()
           .equals(other.getColumnsList())) return false;
+      if (!getPlanColumnsList()
+          .equals(other.getPlanColumnsList())) return false;
       if (!getDefinition()
           .equals(other.getDefinition())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
@@ -6609,6 +6695,10 @@ public int hashCode() {
         hash = (37 * hash) + COLUMNS_FIELD_NUMBER;
         hash = (53 * hash) + getColumnsList().hashCode();
       }
+      if (getPlanColumnsCount() > 0) {
+        hash = (37 * hash) + PLAN_COLUMNS_FIELD_NUMBER;
+        hash = (53 * hash) + getPlanColumnsList().hashCode();
+      }
       hash = (37 * hash) + DEFINITION_FIELD_NUMBER;
       hash = (53 * hash) + getDefinition().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
@@ -6769,6 +6859,8 @@ public Builder clear() {
         }
         columns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
         bitField0_ = (bitField0_ & ~0x00000002);
+        planColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000004);
         definition_ = "";
 
         return this;
@@ -6818,6 +6910,11 @@ public io.greptime.v1.Ddl.CreateViewExpr buildPartial() {
           bitField0_ = (bitField0_ & ~0x00000002);
         }
         result.columns_ = columns_;
+        if (((bitField0_ & 0x00000004) != 0)) {
+          planColumns_ = planColumns_.getUnmodifiableView();
+          bitField0_ = (bitField0_ & ~0x00000004);
+        }
+        result.planColumns_ = planColumns_;
         result.definition_ = definition_;
         onBuilt();
         return result;
@@ -6924,6 +7021,16 @@ public Builder mergeFrom(io.greptime.v1.Ddl.CreateViewExpr other) {
           }
           onChanged();
         }
+        if (!other.planColumns_.isEmpty()) {
+          if (planColumns_.isEmpty()) {
+            planColumns_ = other.planColumns_;
+            bitField0_ = (bitField0_ & ~0x00000004);
+          } else {
+            ensurePlanColumnsIsMutable();
+            planColumns_.addAll(other.planColumns_);
+          }
+          onChanged();
+        }
         if (!other.getDefinition().isEmpty()) {
           definition_ = other.definition_;
           onChanged();
@@ -7632,9 +7739,119 @@ public Builder addColumnsBytes(
         return this;
       }
 
+      private com.google.protobuf.LazyStringList planColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensurePlanColumnsIsMutable() {
+        if (!((bitField0_ & 0x00000004) != 0)) {
+          planColumns_ = new com.google.protobuf.LazyStringArrayList(planColumns_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      /**
+       * repeated string plan_columns = 9;
+       * @return A list containing the planColumns.
+       */
+      public com.google.protobuf.ProtocolStringList
+          getPlanColumnsList() {
+        return planColumns_.getUnmodifiableView();
+      }
+      /**
+       * repeated string plan_columns = 9;
+       * @return The count of planColumns.
+       */
+      public int getPlanColumnsCount() {
+        return planColumns_.size();
+      }
+      /**
+       * repeated string plan_columns = 9;
+       * @param index The index of the element to return.
+       * @return The planColumns at the given index.
+       */
+      public java.lang.String getPlanColumns(int index) {
+        return planColumns_.get(index);
+      }
+      /**
+       * repeated string plan_columns = 9;
+       * @param index The index of the value to return.
+       * @return The bytes of the planColumns at the given index.
+       */
+      public com.google.protobuf.ByteString
+          getPlanColumnsBytes(int index) {
+        return planColumns_.getByteString(index);
+      }
+      /**
+       * repeated string plan_columns = 9;
+       * @param index The index to set the value at.
+       * @param value The planColumns to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPlanColumns(
+          int index, java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensurePlanColumnsIsMutable();
+        planColumns_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * repeated string plan_columns = 9;
+       * @param value The planColumns to add.
+       * @return This builder for chaining.
+       */
+      public Builder addPlanColumns(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensurePlanColumnsIsMutable();
+        planColumns_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * repeated string plan_columns = 9;
+       * @param values The planColumns to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllPlanColumns(
+          java.lang.Iterable values) {
+        ensurePlanColumnsIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, planColumns_);
+        onChanged();
+        return this;
+      }
+      /**
+       * repeated string plan_columns = 9;
+       * @return This builder for chaining.
+       */
+      public Builder clearPlanColumns() {
+        planColumns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        onChanged();
+        return this;
+      }
+      /**
+       * repeated string plan_columns = 9;
+       * @param value The bytes of the planColumns to add.
+       * @return This builder for chaining.
+       */
+      public Builder addPlanColumnsBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        ensurePlanColumnsIsMutable();
+        planColumns_.add(value);
+        onChanged();
+        return this;
+      }
+
       private java.lang.Object definition_ = "";
       /**
-       * string definition = 9;
+       * string definition = 10;
        * @return The definition.
        */
       public java.lang.String getDefinition() {
@@ -7650,7 +7867,7 @@ public java.lang.String getDefinition() {
         }
       }
       /**
-       * string definition = 9;
+       * string definition = 10;
        * @return The bytes for definition.
        */
       public com.google.protobuf.ByteString
@@ -7667,7 +7884,7 @@ public java.lang.String getDefinition() {
         }
       }
       /**
-       * string definition = 9;
+       * string definition = 10;
        * @param value The definition to set.
        * @return This builder for chaining.
        */
@@ -7682,7 +7899,7 @@ public Builder setDefinition(
         return this;
       }
       /**
-       * string definition = 9;
+       * string definition = 10;
        * @return This builder for chaining.
        */
       public Builder clearDefinition() {
@@ -7692,7 +7909,7 @@ public Builder clearDefinition() {
         return this;
       }
       /**
-       * string definition = 9;
+       * string definition = 10;
        * @param value The bytes for definition to set.
        * @return This builder for chaining.
        */
@@ -26166,12 +26383,13 @@ public io.greptime.v1.Ddl.AddColumnLocation getDefaultInstanceForType() {
       "Entry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"u\n" +
       "\014DropFlowExpr\022\024\n\014catalog_name\030\001 \001(\t\022\021\n\tf" +
       "low_name\030\002 \001(\t\022$\n\007flow_id\030\003 \001(\0132\023.grepti" +
-      "me.v1.FlowId\022\026\n\016drop_if_exists\030\005 \001(\010\"\350\001\n" +
+      "me.v1.FlowId\022\026\n\016drop_if_exists\030\005 \001(\010\"\376\001\n" +
       "\016CreateViewExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n" +
       "\013schema_name\030\002 \001(\t\022\021\n\tview_name\030\003 \001(\t\022\024\n" +
       "\014logical_plan\030\004 \001(\014\022\034\n\024create_if_not_exi" +
       "sts\030\005 \001(\010\022\022\n\nor_replace\030\006 \001(\010\022+\n\013table_n" +
       "ames\030\007 \003(\0132\026.greptime.v1.TableName\022\017\n\007co" +
+<<<<<<< HEAD
       "lumns\030\010 \003(\t\022\022\n\ndefinition\030\t \001(\t\"\213\001\n\014Drop" +
       "ViewExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema" +
       "_name\030\002 \001(\t\022\021\n\tview_name\030\003 \001(\t\022%\n\007view_i" +
@@ -26236,6 +26454,72 @@ public io.greptime.v1.Ddl.AddColumnLocation getDefaultInstanceForType() {
       "Type\022\t\n\005FIRST\020\000\022\t\n\005AFTER\020\001BL\n\016io.greptim" +
       "e.v1B\003DdlZ5github.com/GreptimeTeam/grept" +
       "ime-proto/go/greptime/v1b\006proto3"
+=======
+      "lumns\030\010 \003(\t\022\024\n\014plan_columns\030\t \003(\t\022\022\n\ndef" +
+      "inition\030\n \001(\t\"\213\001\n\014DropViewExpr\022\024\n\014catalo" +
+      "g_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\021\n\tvie" +
+      "w_name\030\003 \001(\t\022%\n\007view_id\030\004 \001(\0132\024.greptime" +
+      ".v1.TableId\022\026\n\016drop_if_exists\030\005 \001(\010\"\207\003\n\017" +
+      "CreateTableExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n" +
+      "\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003 \001(\t\022\014" +
+      "\n\004desc\030\004 \001(\t\022+\n\013column_defs\030\005 \003(\0132\026.grep" +
+      "time.v1.ColumnDef\022\022\n\ntime_index\030\006 \001(\t\022\024\n" +
+      "\014primary_keys\030\007 \003(\t\022\034\n\024create_if_not_exi" +
+      "sts\030\010 \001(\010\022E\n\rtable_options\030\t \003(\0132..grept" +
+      "ime.v1.CreateTableExpr.TableOptionsEntry" +
+      "\022&\n\010table_id\030\n \001(\0132\024.greptime.v1.TableId" +
+      "\022\016\n\006engine\030\014 \001(\t\0323\n\021TableOptionsEntry\022\013\n" +
+      "\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\245\002\n\tAlterE" +
+      "xpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_name" +
+      "\030\002 \001(\t\022\022\n\ntable_name\030\003 \001(\t\022.\n\013add_column" +
+      "s\030\004 \001(\0132\027.greptime.v1.AddColumnsH\000\0220\n\014dr" +
+      "op_columns\030\005 \001(\0132\030.greptime.v1.DropColum" +
+      "nsH\000\0220\n\014rename_table\030\006 \001(\0132\030.greptime.v1" +
+      ".RenameTableH\000\022=\n\023change_column_types\030\007 " +
+      "\001(\0132\036.greptime.v1.ChangeColumnTypesH\000B\006\n" +
+      "\004kind\"\216\001\n\rDropTableExpr\022\024\n\014catalog_name\030" +
+      "\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name" +
+      "\030\003 \001(\t\022&\n\010table_id\030\004 \001(\0132\024.greptime.v1.T" +
+      "ableId\022\026\n\016drop_if_exists\030\005 \001(\010\"\314\001\n\022Creat" +
+      "eDatabaseExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013s" +
+      "chema_name\030\002 \001(\t\022\034\n\024create_if_not_exists" +
+      "\030\003 \001(\010\022=\n\007options\030\004 \003(\0132,.greptime.v1.Cr" +
+      "eateDatabaseExpr.OptionsEntry\032.\n\014Options" +
+      "Entry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"z\n" +
+      "\021TruncateTableExpr\022\024\n\014catalog_name\030\001 \001(\t" +
+      "\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003 \001(" +
+      "\t\022&\n\010table_id\030\004 \001(\0132\024.greptime.v1.TableI" +
+      "d\"U\n\020DropDatabaseExpr\022\024\n\014catalog_name\030\001 " +
+      "\001(\t\022\023\n\013schema_name\030\002 \001(\t\022\026\n\016drop_if_exis" +
+      "ts\030\003 \001(\010\"9\n\nAddColumns\022+\n\013add_columns\030\001 " +
+      "\003(\0132\026.greptime.v1.AddColumn\"<\n\013DropColum" +
+      "ns\022-\n\014drop_columns\030\001 \003(\0132\027.greptime.v1.D" +
+      "ropColumn\"O\n\021ChangeColumnTypes\022:\n\023change" +
+      "_column_types\030\001 \003(\0132\035.greptime.v1.Change" +
+      "ColumnType\"%\n\013RenameTable\022\026\n\016new_table_n" +
+      "ame\030\001 \001(\t\"i\n\tAddColumn\022*\n\ncolumn_def\030\001 \001" +
+      "(\0132\026.greptime.v1.ColumnDef\0220\n\010location\030\003" +
+      " \001(\0132\036.greptime.v1.AddColumnLocation\"\236\001\n" +
+      "\020ChangeColumnType\022\023\n\013column_name\030\001 \001(\t\0220" +
+      "\n\013target_type\030\002 \001(\0162\033.greptime.v1.Column" +
+      "DataType\022C\n\025target_type_extension\030\003 \001(\0132" +
+      "$.greptime.v1.ColumnDataTypeExtension\"\032\n" +
+      "\nDropColumn\022\014\n\004name\030\001 \001(\t\"\025\n\007TableId\022\n\n\002" +
+      "id\030\001 \001(\r\"\024\n\006FlowId\022\n\n\002id\030\001 \001(\r\"\377\001\n\tColum" +
+      "nDef\022\014\n\004name\030\001 \001(\t\022.\n\tdata_type\030\002 \001(\0162\033." +
+      "greptime.v1.ColumnDataType\022\023\n\013is_nullabl" +
+      "e\030\003 \001(\010\022\032\n\022default_constraint\030\004 \001(\014\0220\n\rs" +
+      "emantic_type\030\005 \001(\0162\031.greptime.v1.Semanti" +
+      "cType\022\017\n\007comment\030\006 \001(\t\022@\n\022datatype_exten" +
+      "sion\030\007 \001(\0132$.greptime.v1.ColumnDataTypeE" +
+      "xtension\"\230\001\n\021AddColumnLocation\022B\n\rlocati" +
+      "on_type\030\001 \001(\0162+.greptime.v1.AddColumnLoc" +
+      "ation.LocationType\022\031\n\021after_column_name\030" +
+      "\002 \001(\t\"$\n\014LocationType\022\t\n\005FIRST\020\000\022\t\n\005AFTE" +
+      "R\020\001BL\n\016io.greptime.v1B\003DdlZ5github.com/G" +
+      "reptimeTeam/greptime-proto/go/greptime/v" +
+      "1b\006proto3"
+>>>>>>> 8e75b5e (feat: save plan columns as well)
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -26271,7 +26555,7 @@ public io.greptime.v1.Ddl.AddColumnLocation getDefaultInstanceForType() {
     internal_static_greptime_v1_CreateViewExpr_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_greptime_v1_CreateViewExpr_descriptor,
-        new java.lang.String[] { "CatalogName", "SchemaName", "ViewName", "LogicalPlan", "CreateIfNotExists", "OrReplace", "TableNames", "Columns", "Definition", });
+        new java.lang.String[] { "CatalogName", "SchemaName", "ViewName", "LogicalPlan", "CreateIfNotExists", "OrReplace", "TableNames", "Columns", "PlanColumns", "Definition", });
     internal_static_greptime_v1_DropViewExpr_descriptor =
       getDescriptor().getMessageTypes().get(4);
     internal_static_greptime_v1_DropViewExpr_fieldAccessorTable = new
diff --git a/proto/greptime/v1/ddl.proto b/proto/greptime/v1/ddl.proto
index 6f178816..989bf668 100644
--- a/proto/greptime/v1/ddl.proto
+++ b/proto/greptime/v1/ddl.proto
@@ -73,7 +73,8 @@ message CreateViewExpr {
   bool or_replace = 6;
   repeated TableName table_names = 7;
   repeated string columns = 8;
-  string definition = 9;
+  repeated string plan_columns = 9;
+  string definition = 10;
 }
 
 // Drop a view

From 04578d7a71d7a3b5f044264adcee65498c1606be Mon Sep 17 00:00:00 2001
From: Dennis Zhuang 
Date: Tue, 9 Jul 2024 10:52:29 -0700
Subject: [PATCH 4/4] chore: update proto

---
 c++/greptime/v1/ddl.pb.cc                  | 114 ++------------
 go/greptime/v1/ddl.pb.go                   | 175 +++------------------
 java/src/main/java/io/greptime/v1/Ddl.java |  84 ++--------
 3 files changed, 42 insertions(+), 331 deletions(-)

diff --git a/c++/greptime/v1/ddl.pb.cc b/c++/greptime/v1/ddl.pb.cc
index f344bc6f..e7672ccd 100644
--- a/c++/greptime/v1/ddl.pb.cc
+++ b/c++/greptime/v1/ddl.pb.cc
@@ -676,27 +676,6 @@ static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protode
   { 26, -1, -1, sizeof(::greptime::v1::CreateFlowExpr)},
   { 42, -1, -1, sizeof(::greptime::v1::DropFlowExpr)},
   { 52, -1, -1, sizeof(::greptime::v1::CreateViewExpr)},
-<<<<<<< HEAD
-  { 67, -1, -1, sizeof(::greptime::v1::DropViewExpr)},
-  { 78, 86, -1, sizeof(::greptime::v1::CreateTableExpr_TableOptionsEntry_DoNotUse)},
-  { 88, -1, -1, sizeof(::greptime::v1::CreateTableExpr)},
-  { 105, -1, -1, sizeof(::greptime::v1::AlterExpr)},
-  { 119, -1, -1, sizeof(::greptime::v1::DropTableExpr)},
-  { 130, 138, -1, sizeof(::greptime::v1::CreateDatabaseExpr_OptionsEntry_DoNotUse)},
-  { 140, -1, -1, sizeof(::greptime::v1::CreateDatabaseExpr)},
-  { 150, -1, -1, sizeof(::greptime::v1::TruncateTableExpr)},
-  { 160, -1, -1, sizeof(::greptime::v1::DropDatabaseExpr)},
-  { 169, -1, -1, sizeof(::greptime::v1::AddColumns)},
-  { 176, -1, -1, sizeof(::greptime::v1::DropColumns)},
-  { 183, -1, -1, sizeof(::greptime::v1::ChangeColumnTypes)},
-  { 190, -1, -1, sizeof(::greptime::v1::RenameTable)},
-  { 197, -1, -1, sizeof(::greptime::v1::AddColumn)},
-  { 205, -1, -1, sizeof(::greptime::v1::ChangeColumnType)},
-  { 214, -1, -1, sizeof(::greptime::v1::DropColumn)},
-  { 221, -1, -1, sizeof(::greptime::v1::TableId)},
-  { 228, -1, -1, sizeof(::greptime::v1::FlowId)},
-  { 235, -1, -1, sizeof(::greptime::v1::ColumnDef)},
-=======
   { 68, -1, -1, sizeof(::greptime::v1::DropViewExpr)},
   { 79, 87, -1, sizeof(::greptime::v1::CreateTableExpr_TableOptionsEntry_DoNotUse)},
   { 89, -1, -1, sizeof(::greptime::v1::CreateTableExpr)},
@@ -716,8 +695,7 @@ static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protode
   { 222, -1, -1, sizeof(::greptime::v1::TableId)},
   { 229, -1, -1, sizeof(::greptime::v1::FlowId)},
   { 236, -1, -1, sizeof(::greptime::v1::ColumnDef)},
->>>>>>> 8e75b5e (feat: save plan columns as well)
-  { 249, -1, -1, sizeof(::greptime::v1::AddColumnLocation)},
+  { 250, -1, -1, sizeof(::greptime::v1::AddColumnLocation)},
 };
 
 static const ::_pb::Message* const file_default_instances[] = {
@@ -781,72 +759,6 @@ const char descriptor_table_protodef_greptime_2fv1_2fddl_2eproto[] PROTOBUF_SECT
   "\014logical_plan\030\004 \001(\014\022\034\n\024create_if_not_exi"
   "sts\030\005 \001(\010\022\022\n\nor_replace\030\006 \001(\010\022+\n\013table_n"
   "ames\030\007 \003(\0132\026.greptime.v1.TableName\022\017\n\007co"
-<<<<<<< HEAD
-  "lumns\030\010 \003(\t\022\022\n\ndefinition\030\t \001(\t\"\213\001\n\014Drop"
-  "ViewExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema"
-  "_name\030\002 \001(\t\022\021\n\tview_name\030\003 \001(\t\022%\n\007view_i"
-  "d\030\004 \001(\0132\024.greptime.v1.TableId\022\026\n\016drop_if"
-  "_exists\030\005 \001(\010\"\207\003\n\017CreateTableExpr\022\024\n\014cat"
-  "alog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\n"
-  "table_name\030\003 \001(\t\022\014\n\004desc\030\004 \001(\t\022+\n\013column"
-  "_defs\030\005 \003(\0132\026.greptime.v1.ColumnDef\022\022\n\nt"
-  "ime_index\030\006 \001(\t\022\024\n\014primary_keys\030\007 \003(\t\022\034\n"
-  "\024create_if_not_exists\030\010 \001(\010\022E\n\rtable_opt"
-  "ions\030\t \003(\0132..greptime.v1.CreateTableExpr"
-  ".TableOptionsEntry\022&\n\010table_id\030\n \001(\0132\024.g"
-  "reptime.v1.TableId\022\016\n\006engine\030\014 \001(\t\0323\n\021Ta"
-  "bleOptionsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 "
-  "\001(\t:\0028\001\"\245\002\n\tAlterExpr\022\024\n\014catalog_name\030\001 "
-  "\001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003"
-  " \001(\t\022.\n\013add_columns\030\004 \001(\0132\027.greptime.v1."
-  "AddColumnsH\000\0220\n\014drop_columns\030\005 \001(\0132\030.gre"
-  "ptime.v1.DropColumnsH\000\0220\n\014rename_table\030\006"
-  " \001(\0132\030.greptime.v1.RenameTableH\000\022=\n\023chan"
-  "ge_column_types\030\007 \001(\0132\036.greptime.v1.Chan"
-  "geColumnTypesH\000B\006\n\004kind\"\216\001\n\rDropTableExp"
-  "r\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002"
-  " \001(\t\022\022\n\ntable_name\030\003 \001(\t\022&\n\010table_id\030\004 \001"
-  "(\0132\024.greptime.v1.TableId\022\026\n\016drop_if_exis"
-  "ts\030\005 \001(\010\"\314\001\n\022CreateDatabaseExpr\022\024\n\014catal"
-  "og_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\034\n\024cr"
-  "eate_if_not_exists\030\003 \001(\010\022=\n\007options\030\004 \003("
-  "\0132,.greptime.v1.CreateDatabaseExpr.Optio"
-  "nsEntry\032.\n\014OptionsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005"
-  "value\030\002 \001(\t:\0028\001\"z\n\021TruncateTableExpr\022\024\n\014"
-  "catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022"
-  "\022\n\ntable_name\030\003 \001(\t\022&\n\010table_id\030\004 \001(\0132\024."
-  "greptime.v1.TableId\"U\n\020DropDatabaseExpr\022"
-  "\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001"
-  "(\t\022\026\n\016drop_if_exists\030\003 \001(\010\"9\n\nAddColumns"
-  "\022+\n\013add_columns\030\001 \003(\0132\026.greptime.v1.AddC"
-  "olumn\"<\n\013DropColumns\022-\n\014drop_columns\030\001 \003"
-  "(\0132\027.greptime.v1.DropColumn\"O\n\021ChangeCol"
-  "umnTypes\022:\n\023change_column_types\030\001 \003(\0132\035."
-  "greptime.v1.ChangeColumnType\"%\n\013RenameTa"
-  "ble\022\026\n\016new_table_name\030\001 \001(\t\"i\n\tAddColumn"
-  "\022*\n\ncolumn_def\030\001 \001(\0132\026.greptime.v1.Colum"
-  "nDef\0220\n\010location\030\003 \001(\0132\036.greptime.v1.Add"
-  "ColumnLocation\"\236\001\n\020ChangeColumnType\022\023\n\013c"
-  "olumn_name\030\001 \001(\t\0220\n\013target_type\030\002 \001(\0162\033."
-  "greptime.v1.ColumnDataType\022C\n\025target_typ"
-  "e_extension\030\003 \001(\0132$.greptime.v1.ColumnDa"
-  "taTypeExtension\"\032\n\nDropColumn\022\014\n\004name\030\001 "
-  "\001(\t\"\025\n\007TableId\022\n\n\002id\030\001 \001(\r\"\024\n\006FlowId\022\n\n\002"
-  "id\030\001 \001(\r\"\254\002\n\tColumnDef\022\014\n\004name\030\001 \001(\t\022.\n\t"
-  "data_type\030\002 \001(\0162\033.greptime.v1.ColumnData"
-  "Type\022\023\n\013is_nullable\030\003 \001(\010\022\032\n\022default_con"
-  "straint\030\004 \001(\014\0220\n\rsemantic_type\030\005 \001(\0162\031.g"
-  "reptime.v1.SemanticType\022\017\n\007comment\030\006 \001(\t"
-  "\022@\n\022datatype_extension\030\007 \001(\0132$.greptime."
-  "v1.ColumnDataTypeExtension\022+\n\007options\030\010 "
-  "\001(\0132\032.greptime.v1.ColumnOptions\"\230\001\n\021AddC"
-  "olumnLocation\022B\n\rlocation_type\030\001 \001(\0162+.g"
-  "reptime.v1.AddColumnLocation.LocationTyp"
-  "e\022\031\n\021after_column_name\030\002 \001(\t\"$\n\014Location"
-  "Type\022\t\n\005FIRST\020\000\022\t\n\005AFTER\020\001BL\n\016io.greptim"
-  "e.v1B\003DdlZ5github.com/GreptimeTeam/grept"
-  "ime-proto/go/greptime/v1b\006proto3"
-=======
   "lumns\030\010 \003(\t\022\024\n\014plan_columns\030\t \003(\t\022\022\n\ndef"
   "inition\030\n \001(\t\"\213\001\n\014DropViewExpr\022\024\n\014catalo"
   "g_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\021\n\tvie"
@@ -897,32 +809,28 @@ const char descriptor_table_protodef_greptime_2fv1_2fddl_2eproto[] PROTOBUF_SECT
   "DataType\022C\n\025target_type_extension\030\003 \001(\0132"
   "$.greptime.v1.ColumnDataTypeExtension\"\032\n"
   "\nDropColumn\022\014\n\004name\030\001 \001(\t\"\025\n\007TableId\022\n\n\002"
-  "id\030\001 \001(\r\"\024\n\006FlowId\022\n\n\002id\030\001 \001(\r\"\377\001\n\tColum"
+  "id\030\001 \001(\r\"\024\n\006FlowId\022\n\n\002id\030\001 \001(\r\"\254\002\n\tColum"
   "nDef\022\014\n\004name\030\001 \001(\t\022.\n\tdata_type\030\002 \001(\0162\033."
   "greptime.v1.ColumnDataType\022\023\n\013is_nullabl"
   "e\030\003 \001(\010\022\032\n\022default_constraint\030\004 \001(\014\0220\n\rs"
   "emantic_type\030\005 \001(\0162\031.greptime.v1.Semanti"
   "cType\022\017\n\007comment\030\006 \001(\t\022@\n\022datatype_exten"
   "sion\030\007 \001(\0132$.greptime.v1.ColumnDataTypeE"
-  "xtension\"\230\001\n\021AddColumnLocation\022B\n\rlocati"
-  "on_type\030\001 \001(\0162+.greptime.v1.AddColumnLoc"
-  "ation.LocationType\022\031\n\021after_column_name\030"
-  "\002 \001(\t\"$\n\014LocationType\022\t\n\005FIRST\020\000\022\t\n\005AFTE"
-  "R\020\001BL\n\016io.greptime.v1B\003DdlZ5github.com/G"
-  "reptimeTeam/greptime-proto/go/greptime/v"
-  "1b\006proto3"
->>>>>>> 8e75b5e (feat: save plan columns as well)
+  "xtension\022+\n\007options\030\010 \001(\0132\032.greptime.v1."
+  "ColumnOptions\"\230\001\n\021AddColumnLocation\022B\n\rl"
+  "ocation_type\030\001 \001(\0162+.greptime.v1.AddColu"
+  "mnLocation.LocationType\022\031\n\021after_column_"
+  "name\030\002 \001(\t\"$\n\014LocationType\022\t\n\005FIRST\020\000\022\t\n"
+  "\005AFTER\020\001BL\n\016io.greptime.v1B\003DdlZ5github."
+  "com/GreptimeTeam/greptime-proto/go/grept"
+  "ime/v1b\006proto3"
   ;
 static const ::_pbi::DescriptorTable* const descriptor_table_greptime_2fv1_2fddl_2eproto_deps[1] = {
   &::descriptor_table_greptime_2fv1_2fcommon_2eproto,
 };
 static ::_pbi::once_flag descriptor_table_greptime_2fv1_2fddl_2eproto_once;
 const ::_pbi::DescriptorTable descriptor_table_greptime_2fv1_2fddl_2eproto = {
-<<<<<<< HEAD
-    false, false, 3832, descriptor_table_protodef_greptime_2fv1_2fddl_2eproto,
-=======
-    false, false, 3809, descriptor_table_protodef_greptime_2fv1_2fddl_2eproto,
->>>>>>> 8e75b5e (feat: save plan columns as well)
+    false, false, 3854, descriptor_table_protodef_greptime_2fv1_2fddl_2eproto,
     "greptime/v1/ddl.proto",
     &descriptor_table_greptime_2fv1_2fddl_2eproto_once, descriptor_table_greptime_2fv1_2fddl_2eproto_deps, 1, 25,
     schemas, file_default_instances, TableStruct_greptime_2fv1_2fddl_2eproto::offsets,
diff --git a/go/greptime/v1/ddl.pb.go b/go/greptime/v1/ddl.pb.go
index 5c61c5c2..6e9b5f3a 100644
--- a/go/greptime/v1/ddl.pb.go
+++ b/go/greptime/v1/ddl.pb.go
@@ -1924,139 +1924,6 @@ var file_greptime_v1_ddl_proto_rawDesc = []byte{
 	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61,
 	0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d,
 	0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63,
-<<<<<<< HEAD
-	0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c,
-	0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61,
-	0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65,
-	0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x65, 0x70,
-	0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x52,
-	0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x72, 0x6f, 0x70,
-	0x5f, 0x69, 0x66, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08,
-	0x52, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x49, 0x66, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x8d,
-	0x02, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
-	0x65, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67,
-	0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74,
-	0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65,
-	0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73,
-	0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x14, 0x63, 0x72, 0x65,
-	0x61, 0x74, 0x65, 0x5f, 0x69, 0x66, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74,
-	0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49,
-	0x66, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x46, 0x0a, 0x07, 0x6f, 0x70,
-	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x72,
-	0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
-	0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x45, 0x78, 0x70, 0x72, 0x2e, 0x4f, 0x70, 0x74,
-	0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f,
-	0x6e, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74,
-	0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa7,
-	0x01, 0x0a, 0x11, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65,
-	0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f,
-	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61,
-	0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d,
-	0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63,
-	0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c,
-	0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61,
-	0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65,
-	0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, 0x65, 0x70,
-	0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x52,
-	0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x7c, 0x0a, 0x10, 0x44, 0x72, 0x6f, 0x70,
-	0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x45, 0x78, 0x70, 0x72, 0x12, 0x21, 0x0a, 0x0c,
-	0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12,
-	0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65,
-	0x12, 0x24, 0x0a, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x69, 0x66, 0x5f, 0x65, 0x78, 0x69, 0x73,
-	0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x72, 0x6f, 0x70, 0x49, 0x66,
-	0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x45, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c,
-	0x75, 0x6d, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x61, 0x64, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x75,
-	0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x65, 0x70,
-	0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
-	0x6e, 0x52, 0x0a, 0x61, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0x49, 0x0a,
-	0x0b, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x0c,
-	0x64, 0x72, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31,
-	0x2e, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x0b, 0x64, 0x72, 0x6f,
-	0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x22, 0x62, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e,
-	0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4d, 0x0a,
-	0x13, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x74,
-	0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x65,
-	0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43,
-	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67,
-	0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x33, 0x0a, 0x0b,
-	0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6e,
-	0x65, 0x77, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d,
-	0x65, 0x22, 0x7e, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x35,
-	0x0a, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31,
-	0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66, 0x52, 0x09, 0x63, 0x6f, 0x6c, 0x75,
-	0x6d, 0x6e, 0x44, 0x65, 0x66, 0x12, 0x3a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69,
-	0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4c,
-	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x22, 0xcb, 0x01, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x43, 0x6f, 0x6c, 0x75,
-	0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
-	0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c,
-	0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65,
-	0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67,
-	0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
-	0x6e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65,
-	0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x58, 0x0a, 0x15, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f,
-	0x74, 0x79, 0x70, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e,
-	0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70,
-	0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x74, 0x61, 0x72, 0x67,
-	0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22,
-	0x20, 0x0a, 0x0a, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x12, 0x0a,
-	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
-	0x65, 0x22, 0x19, 0x0a, 0x07, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02,
-	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x18, 0x0a, 0x06,
-	0x46, 0x6c, 0x6f, 0x77, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x8e, 0x03, 0x0a, 0x09, 0x43, 0x6f, 0x6c, 0x75, 0x6d,
-	0x6e, 0x44, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61,
-	0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x72,
-	0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
-	0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79,
-	0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c,
-	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x61,
-	0x62, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x63,
-	0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52,
-	0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69,
-	0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x0d, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x5f, 0x74,
-	0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x65, 0x70,
-	0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63,
-	0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x54, 0x79,
-	0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x12,
-	0x64, 0x61, 0x74, 0x61, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
-	0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74,
-	0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x61, 0x74,
-	0x61, 0x54, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11,
-	0x64, 0x61, 0x74, 0x61, 0x74, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
-	0x6e, 0x12, 0x34, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31,
-	0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07,
-	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x43,
-	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a,
-	0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e,
-	0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4c, 0x6f, 0x63, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70,
-	0x65, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12,
-	0x2a, 0x0a, 0x11, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f,
-	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x66, 0x74, 0x65,
-	0x72, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x0c, 0x4c,
-	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x46,
-	0x49, 0x52, 0x53, 0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x46, 0x54, 0x45, 0x52, 0x10,
-	0x01, 0x42, 0x4c, 0x0a, 0x0e, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65,
-	0x2e, 0x76, 0x31, 0x42, 0x03, 0x44, 0x64, 0x6c, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
-	0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x65, 0x61,
-	0x6d, 0x2f, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x76, 0x31, 0x62,
-	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-=======
 	0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x69, 0x65, 0x77,
 	0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x69, 0x65,
 	0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x69, 0x64,
@@ -2215,7 +2082,7 @@ var file_greptime_v1_ddl_proto_rawDesc = []byte{
 	0x6e, 0x61, 0x6d, 0x65, 0x22, 0x19, 0x0a, 0x07, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12,
 	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22,
 	0x18, 0x0a, 0x06, 0x46, 0x6c, 0x6f, 0x77, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0xd8, 0x02, 0x0a, 0x09, 0x43, 0x6f,
+	0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x8e, 0x03, 0x0a, 0x09, 0x43, 0x6f,
 	0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
 	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x64,
 	0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b,
@@ -2237,25 +2104,27 @@ var file_greptime_v1_ddl_proto_rawDesc = []byte{
 	0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
 	0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
 	0x6e, 0x52, 0x11, 0x64, 0x61, 0x74, 0x61, 0x74, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e,
-	0x73, 0x69, 0x6f, 0x6e, 0x22, 0xb7, 0x01, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75,
-	0x6d, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x50, 0x0a, 0x0d, 0x6c, 0x6f,
-	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e,
-	0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c,
-	0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x11,
-	0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d,
-	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x43, 0x6f,
-	0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x0c, 0x4c, 0x6f, 0x63, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x49, 0x52, 0x53,
-	0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x46, 0x54, 0x45, 0x52, 0x10, 0x01, 0x42, 0x4c,
-	0x0a, 0x0e, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31,
-	0x42, 0x03, 0x44, 0x64, 0x6c, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
-	0x6d, 0x2f, 0x47, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x2f, 0x67,
-	0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f,
-	0x2f, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x33,
->>>>>>> 8e75b5e (feat: save plan columns as well)
+	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
+	0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65,
+	0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x11, 0x41,
+	0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x12, 0x50, 0x0a, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69,
+	0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4c,
+	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79,
+	0x70, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x75,
+	0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61,
+	0x66, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x24,
+	0x0a, 0x0c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09,
+	0x0a, 0x05, 0x46, 0x49, 0x52, 0x53, 0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x46, 0x54,
+	0x45, 0x52, 0x10, 0x01, 0x42, 0x4c, 0x0a, 0x0e, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x65, 0x70, 0x74,
+	0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x03, 0x44, 0x64, 0x6c, 0x5a, 0x35, 0x67, 0x69, 0x74,
+	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x47, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65,
+	0x54, 0x65, 0x61, 0x6d, 0x2f, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x72, 0x65, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x2f,
+	0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/java/src/main/java/io/greptime/v1/Ddl.java b/java/src/main/java/io/greptime/v1/Ddl.java
index fe8d35ce..f42b65de 100644
--- a/java/src/main/java/io/greptime/v1/Ddl.java
+++ b/java/src/main/java/io/greptime/v1/Ddl.java
@@ -26389,72 +26389,6 @@ public io.greptime.v1.Ddl.AddColumnLocation getDefaultInstanceForType() {
       "\014logical_plan\030\004 \001(\014\022\034\n\024create_if_not_exi" +
       "sts\030\005 \001(\010\022\022\n\nor_replace\030\006 \001(\010\022+\n\013table_n" +
       "ames\030\007 \003(\0132\026.greptime.v1.TableName\022\017\n\007co" +
-<<<<<<< HEAD
-      "lumns\030\010 \003(\t\022\022\n\ndefinition\030\t \001(\t\"\213\001\n\014Drop" +
-      "ViewExpr\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema" +
-      "_name\030\002 \001(\t\022\021\n\tview_name\030\003 \001(\t\022%\n\007view_i" +
-      "d\030\004 \001(\0132\024.greptime.v1.TableId\022\026\n\016drop_if" +
-      "_exists\030\005 \001(\010\"\207\003\n\017CreateTableExpr\022\024\n\014cat" +
-      "alog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\n" +
-      "table_name\030\003 \001(\t\022\014\n\004desc\030\004 \001(\t\022+\n\013column" +
-      "_defs\030\005 \003(\0132\026.greptime.v1.ColumnDef\022\022\n\nt" +
-      "ime_index\030\006 \001(\t\022\024\n\014primary_keys\030\007 \003(\t\022\034\n" +
-      "\024create_if_not_exists\030\010 \001(\010\022E\n\rtable_opt" +
-      "ions\030\t \003(\0132..greptime.v1.CreateTableExpr" +
-      ".TableOptionsEntry\022&\n\010table_id\030\n \001(\0132\024.g" +
-      "reptime.v1.TableId\022\016\n\006engine\030\014 \001(\t\0323\n\021Ta" +
-      "bleOptionsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 " +
-      "\001(\t:\0028\001\"\245\002\n\tAlterExpr\022\024\n\014catalog_name\030\001 " +
-      "\001(\t\022\023\n\013schema_name\030\002 \001(\t\022\022\n\ntable_name\030\003" +
-      " \001(\t\022.\n\013add_columns\030\004 \001(\0132\027.greptime.v1." +
-      "AddColumnsH\000\0220\n\014drop_columns\030\005 \001(\0132\030.gre" +
-      "ptime.v1.DropColumnsH\000\0220\n\014rename_table\030\006" +
-      " \001(\0132\030.greptime.v1.RenameTableH\000\022=\n\023chan" +
-      "ge_column_types\030\007 \001(\0132\036.greptime.v1.Chan" +
-      "geColumnTypesH\000B\006\n\004kind\"\216\001\n\rDropTableExp" +
-      "r\022\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002" +
-      " \001(\t\022\022\n\ntable_name\030\003 \001(\t\022&\n\010table_id\030\004 \001" +
-      "(\0132\024.greptime.v1.TableId\022\026\n\016drop_if_exis" +
-      "ts\030\005 \001(\010\"\314\001\n\022CreateDatabaseExpr\022\024\n\014catal" +
-      "og_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\034\n\024cr" +
-      "eate_if_not_exists\030\003 \001(\010\022=\n\007options\030\004 \003(" +
-      "\0132,.greptime.v1.CreateDatabaseExpr.Optio" +
-      "nsEntry\032.\n\014OptionsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005" +
-      "value\030\002 \001(\t:\0028\001\"z\n\021TruncateTableExpr\022\024\n\014" +
-      "catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022" +
-      "\022\n\ntable_name\030\003 \001(\t\022&\n\010table_id\030\004 \001(\0132\024." +
-      "greptime.v1.TableId\"U\n\020DropDatabaseExpr\022" +
-      "\024\n\014catalog_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001" +
-      "(\t\022\026\n\016drop_if_exists\030\003 \001(\010\"9\n\nAddColumns" +
-      "\022+\n\013add_columns\030\001 \003(\0132\026.greptime.v1.AddC" +
-      "olumn\"<\n\013DropColumns\022-\n\014drop_columns\030\001 \003" +
-      "(\0132\027.greptime.v1.DropColumn\"O\n\021ChangeCol" +
-      "umnTypes\022:\n\023change_column_types\030\001 \003(\0132\035." +
-      "greptime.v1.ChangeColumnType\"%\n\013RenameTa" +
-      "ble\022\026\n\016new_table_name\030\001 \001(\t\"i\n\tAddColumn" +
-      "\022*\n\ncolumn_def\030\001 \001(\0132\026.greptime.v1.Colum" +
-      "nDef\0220\n\010location\030\003 \001(\0132\036.greptime.v1.Add" +
-      "ColumnLocation\"\236\001\n\020ChangeColumnType\022\023\n\013c" +
-      "olumn_name\030\001 \001(\t\0220\n\013target_type\030\002 \001(\0162\033." +
-      "greptime.v1.ColumnDataType\022C\n\025target_typ" +
-      "e_extension\030\003 \001(\0132$.greptime.v1.ColumnDa" +
-      "taTypeExtension\"\032\n\nDropColumn\022\014\n\004name\030\001 " +
-      "\001(\t\"\025\n\007TableId\022\n\n\002id\030\001 \001(\r\"\024\n\006FlowId\022\n\n\002" +
-      "id\030\001 \001(\r\"\254\002\n\tColumnDef\022\014\n\004name\030\001 \001(\t\022.\n\t" +
-      "data_type\030\002 \001(\0162\033.greptime.v1.ColumnData" +
-      "Type\022\023\n\013is_nullable\030\003 \001(\010\022\032\n\022default_con" +
-      "straint\030\004 \001(\014\0220\n\rsemantic_type\030\005 \001(\0162\031.g" +
-      "reptime.v1.SemanticType\022\017\n\007comment\030\006 \001(\t" +
-      "\022@\n\022datatype_extension\030\007 \001(\0132$.greptime." +
-      "v1.ColumnDataTypeExtension\022+\n\007options\030\010 " +
-      "\001(\0132\032.greptime.v1.ColumnOptions\"\230\001\n\021AddC" +
-      "olumnLocation\022B\n\rlocation_type\030\001 \001(\0162+.g" +
-      "reptime.v1.AddColumnLocation.LocationTyp" +
-      "e\022\031\n\021after_column_name\030\002 \001(\t\"$\n\014Location" +
-      "Type\022\t\n\005FIRST\020\000\022\t\n\005AFTER\020\001BL\n\016io.greptim" +
-      "e.v1B\003DdlZ5github.com/GreptimeTeam/grept" +
-      "ime-proto/go/greptime/v1b\006proto3"
-=======
       "lumns\030\010 \003(\t\022\024\n\014plan_columns\030\t \003(\t\022\022\n\ndef" +
       "inition\030\n \001(\t\"\213\001\n\014DropViewExpr\022\024\n\014catalo" +
       "g_name\030\001 \001(\t\022\023\n\013schema_name\030\002 \001(\t\022\021\n\tvie" +
@@ -26505,21 +26439,21 @@ public io.greptime.v1.Ddl.AddColumnLocation getDefaultInstanceForType() {
       "DataType\022C\n\025target_type_extension\030\003 \001(\0132" +
       "$.greptime.v1.ColumnDataTypeExtension\"\032\n" +
       "\nDropColumn\022\014\n\004name\030\001 \001(\t\"\025\n\007TableId\022\n\n\002" +
-      "id\030\001 \001(\r\"\024\n\006FlowId\022\n\n\002id\030\001 \001(\r\"\377\001\n\tColum" +
+      "id\030\001 \001(\r\"\024\n\006FlowId\022\n\n\002id\030\001 \001(\r\"\254\002\n\tColum" +
       "nDef\022\014\n\004name\030\001 \001(\t\022.\n\tdata_type\030\002 \001(\0162\033." +
       "greptime.v1.ColumnDataType\022\023\n\013is_nullabl" +
       "e\030\003 \001(\010\022\032\n\022default_constraint\030\004 \001(\014\0220\n\rs" +
       "emantic_type\030\005 \001(\0162\031.greptime.v1.Semanti" +
       "cType\022\017\n\007comment\030\006 \001(\t\022@\n\022datatype_exten" +
       "sion\030\007 \001(\0132$.greptime.v1.ColumnDataTypeE" +
-      "xtension\"\230\001\n\021AddColumnLocation\022B\n\rlocati" +
-      "on_type\030\001 \001(\0162+.greptime.v1.AddColumnLoc" +
-      "ation.LocationType\022\031\n\021after_column_name\030" +
-      "\002 \001(\t\"$\n\014LocationType\022\t\n\005FIRST\020\000\022\t\n\005AFTE" +
-      "R\020\001BL\n\016io.greptime.v1B\003DdlZ5github.com/G" +
-      "reptimeTeam/greptime-proto/go/greptime/v" +
-      "1b\006proto3"
->>>>>>> 8e75b5e (feat: save plan columns as well)
+      "xtension\022+\n\007options\030\010 \001(\0132\032.greptime.v1." +
+      "ColumnOptions\"\230\001\n\021AddColumnLocation\022B\n\rl" +
+      "ocation_type\030\001 \001(\0162+.greptime.v1.AddColu" +
+      "mnLocation.LocationType\022\031\n\021after_column_" +
+      "name\030\002 \001(\t\"$\n\014LocationType\022\t\n\005FIRST\020\000\022\t\n" +
+      "\005AFTER\020\001BL\n\016io.greptime.v1B\003DdlZ5github." +
+      "com/GreptimeTeam/greptime-proto/go/grept" +
+      "ime/v1b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,