diff --git a/src/objit/include/objit/common/ob_item_type.h b/src/objit/include/objit/common/ob_item_type.h index 2b5a939abd..f1bf34c462 100755 --- a/src/objit/include/objit/common/ob_item_type.h +++ b/src/objit/include/objit/common/ob_item_type.h @@ -2336,6 +2336,10 @@ typedef enum ObItemType T_ROW_ITER_EXPR, T_FULLTEXT_COLUMN_LIST, T_MATCH_COLUMN_LIST, + + T_CREATE_FMT_OUTLINE, + T_ALTER_FMT_OUTLINE, + T_DROP_FMT_OUTLINE, T_MAX //Attention: add a new type before T_MAX } ObItemType; diff --git a/src/share/inner_table/ob_inner_table_schema.101_150.cpp b/src/share/inner_table/ob_inner_table_schema.101_150.cpp index 84fdf45957..7d313926e5 100644 --- a/src/share/inner_table/ob_inner_table_schema.101_150.cpp +++ b/src/share/inner_table/ob_inner_table_schema.101_150.cpp @@ -11209,6 +11209,59 @@ int ObInnerTableSchema::all_outline_schema(ObTableSchema &table_schema) true, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("format_sql_text", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObLongTextType, //column_type + CS_TYPE_INVALID, //column_collation_type + 0, //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ObObj format_sql_id_default; + format_sql_id_default.set_varbinary(ObString::make_string("")); + ADD_COLUMN_SCHEMA_T("format_sql_id", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_BINARY, //column_collation_type + OB_MAX_SQL_ID_LENGTH, //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false, //is_autoincrement + format_sql_id_default, + format_sql_id_default); //default_value + } + + if (OB_SUCC(ret)) { + ObObj format_outline_default; + format_outline_default.set_int(0); + ADD_COLUMN_SCHEMA_T("format_outline", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false, //is_autoincrement + format_outline_default, + format_outline_default); //default_value + } table_schema.set_index_using_type(USING_BTREE); table_schema.set_row_store_type(ENCODING_ROW_STORE); table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); @@ -11626,6 +11679,59 @@ int ObInnerTableSchema::all_outline_history_schema(ObTableSchema &table_schema) true, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("format_sql_text", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObLongTextType, //column_type + CS_TYPE_INVALID, //column_collation_type + 0, //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ObObj format_sql_id_default; + format_sql_id_default.set_varbinary(ObString::make_string("")); + ADD_COLUMN_SCHEMA_T("format_sql_id", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_BINARY, //column_collation_type + OB_MAX_SQL_ID_LENGTH, //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false, //is_autoincrement + format_sql_id_default, + format_sql_id_default); //default_value + } + + if (OB_SUCC(ret)) { + ObObj format_outline_default; + format_outline_default.set_int(0); + ADD_COLUMN_SCHEMA_T("format_outline", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false, //is_autoincrement + format_outline_default, + format_outline_default); //default_value + } table_schema.set_index_using_type(USING_BTREE); table_schema.set_row_store_type(ENCODING_ROW_STORE); table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); diff --git a/src/share/inner_table/ob_inner_table_schema.12051_12100.cpp b/src/share/inner_table/ob_inner_table_schema.12051_12100.cpp index d22d05ec1d..afa5d95c1f 100644 --- a/src/share/inner_table/ob_inner_table_schema.12051_12100.cpp +++ b/src/share/inner_table/ob_inner_table_schema.12051_12100.cpp @@ -1665,6 +1665,59 @@ int ObInnerTableSchema::all_virtual_outline_schema(ObTableSchema &table_schema) true, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("format_sql_text", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObLongTextType, //column_type + CS_TYPE_INVALID, //column_collation_type + 0, //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ObObj format_sql_id_default; + format_sql_id_default.set_varbinary(ObString::make_string("")); + ADD_COLUMN_SCHEMA_T("format_sql_id", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_BINARY, //column_collation_type + OB_MAX_SQL_ID_LENGTH, //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false, //is_autoincrement + format_sql_id_default, + format_sql_id_default); //default_value + } + + if (OB_SUCC(ret)) { + ObObj format_outline_default; + format_outline_default.set_int(0); + ADD_COLUMN_SCHEMA_T("format_outline", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false, //is_autoincrement + format_outline_default, + format_outline_default); //default_value + } table_schema.set_index_using_type(USING_BTREE); table_schema.set_row_store_type(ENCODING_ROW_STORE); table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); @@ -2066,6 +2119,59 @@ int ObInnerTableSchema::all_virtual_outline_history_schema(ObTableSchema &table_ true, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("format_sql_text", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObLongTextType, //column_type + CS_TYPE_INVALID, //column_collation_type + 0, //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ObObj format_sql_id_default; + format_sql_id_default.set_varbinary(ObString::make_string("")); + ADD_COLUMN_SCHEMA_T("format_sql_id", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_BINARY, //column_collation_type + OB_MAX_SQL_ID_LENGTH, //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false, //is_autoincrement + format_sql_id_default, + format_sql_id_default); //default_value + } + + if (OB_SUCC(ret)) { + ObObj format_outline_default; + format_outline_default.set_int(0); + ADD_COLUMN_SCHEMA_T("format_outline", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false, //is_autoincrement + format_outline_default, + format_outline_default); //default_value + } table_schema.set_index_using_type(USING_BTREE); table_schema.set_row_store_type(ENCODING_ROW_STORE); table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); diff --git a/src/share/inner_table/ob_inner_table_schema.15201_15250.cpp b/src/share/inner_table/ob_inner_table_schema.15201_15250.cpp index 7de097ff7d..703e983c08 100644 --- a/src/share/inner_table/ob_inner_table_schema.15201_15250.cpp +++ b/src/share/inner_table/ob_inner_table_schema.15201_15250.cpp @@ -17973,6 +17973,51 @@ int ObInnerTableSchema::all_virtual_outline_real_agent_ora_schema(ObTableSchema false); //is_autoincrement } + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("FORMAT_SQL_TEXT", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObLongTextType, //column_type + CS_TYPE_INVALID, //column_collation_type + 0, //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("FORMAT_SQL_ID", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_BINARY, //column_collation_type + OB_MAX_SQL_ID_LENGTH, //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("FORMAT_OUTLINE", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } + if (OB_SUCC(ret)) { ADD_COLUMN_SCHEMA("GMT_CREATE", //column_name ++column_id, //column_id diff --git a/src/share/inner_table/ob_inner_table_schema.15251_15300.cpp b/src/share/inner_table/ob_inner_table_schema.15251_15300.cpp index 6ee712aa6d..5ec8e3f4b0 100644 --- a/src/share/inner_table/ob_inner_table_schema.15251_15300.cpp +++ b/src/share/inner_table/ob_inner_table_schema.15251_15300.cpp @@ -344,6 +344,51 @@ int ObInnerTableSchema::all_virtual_outline_history_real_agent_ora_schema(ObTabl false); //is_autoincrement } + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("FORMAT_SQL_TEXT", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObLongTextType, //column_type + CS_TYPE_INVALID, //column_collation_type + 0, //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("FORMAT_SQL_ID", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_BINARY, //column_collation_type + OB_MAX_SQL_ID_LENGTH, //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("FORMAT_OUTLINE", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + true, //is_nullable + false); //is_autoincrement + } + if (OB_SUCC(ret)) { ADD_COLUMN_SCHEMA("GMT_CREATE", //column_name ++column_id, //column_id diff --git a/src/share/inner_table/ob_inner_table_schema_def.py b/src/share/inner_table/ob_inner_table_schema_def.py index f128761bec..754efff852 100644 --- a/src/share/inner_table/ob_inner_table_schema_def.py +++ b/src/share/inner_table/ob_inner_table_schema_def.py @@ -999,6 +999,9 @@ all_outline_def = dict( ('outline_target', 'longtext', 'false'), ('sql_id', 'varbinary:OB_MAX_SQL_ID_LENGTH', 'false', ''), ('owner_id', 'int', 'true'), + ('format_sql_text', 'longtext', 'true'), + ('format_sql_id', 'varbinary:OB_MAX_SQL_ID_LENGTH', 'false', ''), + ('format_outline', 'int', 'false', '0') ], ) @@ -7969,8 +7972,8 @@ def_table_schema( ('outline_target', 'longtext', 'false'), ('outline_sql', 'longtext', 'false'), ('sql_id', 'varchar:OB_MAX_SQL_ID_LENGTH', 'false', ''), - ('outline_content', 'longtext', 'false'), - ], + ('outline_content', 'longtext', 'false') + ], ) def_table_schema( diff --git a/src/share/schema/ob_schema_struct.cpp b/src/share/schema/ob_schema_struct.cpp index 7c985b0685..2ac76a01c3 100644 --- a/src/share/schema/ob_schema_struct.cpp +++ b/src/share/schema/ob_schema_struct.cpp @@ -10114,6 +10114,7 @@ ObOutlineInfo &ObOutlineInfo::operator=(const ObOutlineInfo &src_info) compatible_ = src_info.compatible_; enabled_ = src_info.enabled_; format_ = src_info.format_; + format_outline_ = src_info.format_outline_; if (OB_FAIL(deep_copy_str(src_info.name_, name_))) { LOG_WARN("Fail to deep copy name", K(ret)); } else if (OB_FAIL(deep_copy_str(src_info.signature_, signature_))) { @@ -10124,6 +10125,10 @@ ObOutlineInfo &ObOutlineInfo::operator=(const ObOutlineInfo &src_info) LOG_WARN("Fail to deep copy outline_content", K(ret)); } else if (OB_FAIL(deep_copy_str(src_info.sql_text_, sql_text_))) { LOG_WARN("Fail to deep copy sql_text", K(ret)); + } else if (OB_FAIL(deep_copy_str(src_info.format_sql_text_, format_sql_text_))) { + LOG_WARN("Fail to deep copy sql_text", K(ret)); + } else if (OB_FAIL(deep_copy_str(src_info.format_sql_id_, format_sql_id_))) { + LOG_WARN("Fail to deep copy signature", K(ret)); } else if (OB_FAIL(deep_copy_str(src_info.outline_target_, outline_target_))) { LOG_WARN("Fail to deep copy outline target", K(ret)); } else if (OB_FAIL(deep_copy_str(src_info.owner_, owner_))) { @@ -10156,6 +10161,8 @@ void ObOutlineInfo::reset() reset_string(name_); reset_string(signature_); reset_string(sql_id_); + reset_string(format_sql_id_); + reset_string(format_sql_text_); reset_string(outline_content_); reset_string(sql_text_); reset_string(outline_target_); @@ -10165,6 +10172,7 @@ void ObOutlineInfo::reset() compatible_ = true; enabled_ = true; format_ = HINT_NORMAL; + format_outline_ = false; outline_params_wrapper_.destroy(); ObSchema::reset(); } @@ -10344,7 +10352,7 @@ OB_DEF_SERIALIZE(ObOutlineInfo) LST_DO_CODE(OB_UNIS_ENCODE, tenant_id_, database_id_, outline_id_, schema_version_, name_, signature_, outline_content_, sql_text_, outline_target_, owner_, used_, version_, compatible_, enabled_, format_, outline_params_wrapper_, - sql_id_, owner_id_); + sql_id_, owner_id_, format_sql_text_, format_sql_id_, format_outline_); return ret; } @@ -10360,6 +10368,8 @@ OB_DEF_DESERIALIZE(ObOutlineInfo) ObString outline_target; ObString owner; ObString version; + ObString format_sql_id; + ObString format_sql_text; LST_DO_CODE(OB_UNIS_DECODE, tenant_id_, database_id_, outline_id_, schema_version_, name, signature, outline_content, sql_text, outline_target, owner, used_, @@ -10393,7 +10403,14 @@ OB_DEF_DESERIALIZE(ObOutlineInfo) LOG_WARN("Fail to deep copy sql_id", K(ret)); } else { if (pos < data_len) { - LST_DO_CODE(OB_UNIS_DECODE, owner_id_); + LST_DO_CODE(OB_UNIS_DECODE, owner_id_, format_sql_text, format_sql_id, format_outline_); + if (OB_FAIL(ret)){ + // do nothing + }else if (OB_FAIL(deep_copy_str(format_sql_text, format_sql_text_))) { + LOG_WARN("Fail to deep copy sql_text", K(ret)); + } else if (OB_FAIL(deep_copy_str(format_sql_id, format_sql_id_))) { + LOG_WARN("Fail to deep copy sql_id", K(ret)); + } } else { owner_id_ = OB_INVALID_ID; } @@ -10409,7 +10426,8 @@ OB_DEF_SERIALIZE_SIZE(ObOutlineInfo) int64_t len = 0; LST_DO_CODE(OB_UNIS_ADD_LEN, tenant_id_, database_id_, outline_id_, schema_version_, name_, signature_, sql_id_, outline_content_, sql_text_, outline_target_, owner_, - used_, version_, compatible_, enabled_, format_, outline_params_wrapper_, owner_id_); + used_, version_, compatible_, enabled_, format_, outline_params_wrapper_, owner_id_, + format_sql_text_, format_sql_id_, format_outline_); return len; } diff --git a/src/share/schema/ob_schema_struct.h b/src/share/schema/ob_schema_struct.h index 266c1d6270..d2479831a7 100755 --- a/src/share/schema/ob_schema_struct.h +++ b/src/share/schema/ob_schema_struct.h @@ -5109,6 +5109,8 @@ public: int get_hex_str_from_outline_params(common::ObString &hex_str, common::ObIAllocator &allocator) const; const ObOutlineParamsWrapper &get_outline_params_wrapper() const { return outline_params_wrapper_; } ObOutlineParamsWrapper &get_outline_params_wrapper() { return outline_params_wrapper_; } + bool is_format() { return format_outline_; } + bool is_format() const { return format_outline_; } bool has_outline_params() const { return outline_params_wrapper_.get_outline_params().count() > 0; } int has_concurrent_limit_param(bool &has) const; int gen_valid_allocator(); @@ -5121,7 +5123,8 @@ public: VIRTUAL_TO_STRING_KV(K_(tenant_id), K_(database_id), K_(outline_id), K_(schema_version), K_(name), K_(signature), K_(sql_id), K_(outline_content), K_(sql_text), K_(owner_id), K_(owner), K_(used), K_(compatible), - K_(enabled), K_(format), K_(outline_params_wrapper), K_(outline_target)); + K_(enabled), K_(format), K_(outline_params_wrapper), K_(outline_target), + K_(format_sql_text), K_(format_sql_id), K_(format_outline)); static bool is_sql_id_valid(const common::ObString &sql_id); private: static int replace_question_mark(const common::ObString ¬_param_sql, @@ -5155,6 +5158,9 @@ protected: ObHintFormat format_; uint64_t owner_id_; ObOutlineParamsWrapper outline_params_wrapper_; + common::ObString format_sql_text_; + common::ObString format_sql_id_; + bool format_outline_; }; class ObDbLinkBaseInfo : public ObSchema diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_sys.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_sys.result index 57a51a675d..e0953650ee 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_sys.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_sys.result @@ -2333,6 +2333,9 @@ outline_params varbinary(65536) NO outline_target longtext NO NULL sql_id varbinary(32) NO owner_id bigint(20) YES NULL +format_sql_text longtext YES NULL +format_sql_id varbinary(32) NO +format_outline bigint(20) NO 0 select /*+QUERY_TIMEOUT(60000000)*/ IF(count(*) >= 0, 1, 0) from oceanbase.__all_virtual_outline; IF(count(*) >= 0, 1, 0) 1 @@ -2359,6 +2362,9 @@ outline_params varbinary(65536) YES outline_target longtext YES NULL sql_id varbinary(32) YES owner_id bigint(20) YES NULL +format_sql_text longtext YES NULL +format_sql_id varbinary(32) YES +format_outline bigint(20) YES 0 select /*+QUERY_TIMEOUT(60000000)*/ IF(count(*) >= 0, 1, 0) from oceanbase.__all_virtual_outline_history; IF(count(*) >= 0, 1, 0) 1