diff --git a/deps/oblib/src/lib/ob_define.h b/deps/oblib/src/lib/ob_define.h index f1dacca69a..493c88bbaa 100644 --- a/deps/oblib/src/lib/ob_define.h +++ b/deps/oblib/src/lib/ob_define.h @@ -224,7 +224,6 @@ const int64_t OB_MAX_VIEW_COLUMN_NAME_LENGTH_MYSQL = 64; const int64_t OB_MAX_COLUMN_NAME_LENGTH = 128; // Compatible with oracle, OB code logic is greater than Times TODO:xiyu const int64_t OB_MAX_COLUMN_NAME_BUF_LENGTH = OB_MAX_COLUMN_NAME_LENGTH + 1; const int64_t OB_MAX_COLUMN_NAMES_LENGTH = 2 * 1024; -const int64_t OB_MAX_COLUMN_GROUP_NAME_LENGTH = 256; // need to larger than max_column_name_length const int64_t OB_MAX_APP_NAME_LENGTH = 128; const int64_t OB_MAX_OPERATOR_PROPERTY_LENGTH = 4 * 1024; const int64_t OB_MAX_DATA_SOURCE_NAME_LENGTH = 128; @@ -831,7 +830,8 @@ const uint64_t INVALID_COLUMN_GROUP_ID = 0; const uint64_t DEFAULT_TYPE_COLUMN_GROUP_ID = 1; // reserve 2~999 const uint64_t COLUMN_GROUP_START_ID = 1000; const uint64_t DEFAULT_CUSTOMIZED_CG_NUM = 2; - +const int64_t OB_CG_NAME_PREFIX_LENGTH = 5; // length of cg prefix like "__cg_" +const int64_t OB_MAX_COLUMN_GROUP_NAME_LENGTH = OB_MAX_COLUMN_NAME_LENGTH * OB_MAX_CHAR_LEN + OB_CG_NAME_PREFIX_LENGTH; //(max_column_name_length(128) * ob_max_char_len(3)) + prefix //Oracle const int64_t MAX_ORACLE_COMMENT_LENGTH = 4000; diff --git a/src/share/schema/ob_column_schema.cpp b/src/share/schema/ob_column_schema.cpp index 19f82b12e7..4a87026653 100644 --- a/src/share/schema/ob_column_schema.cpp +++ b/src/share/schema/ob_column_schema.cpp @@ -807,9 +807,13 @@ int ObColumnSchemaV2::get_each_column_group_name(ObString &cg_name) const { int32_t write_len = snprintf(tmp_cg_name, OB_MAX_COLUMN_GROUP_NAME_LENGTH, "%.*s_%.*s", static_cast(sizeof(OB_COLUMN_GROUP_NAME_PREFIX)), OB_COLUMN_GROUP_NAME_PREFIX, column_name_.length(), column_name_.ptr()); - if (write_len < 0 || write_len >= OB_MAX_COLUMN_GROUP_NAME_LENGTH) { + if (write_len < 0) { ret = OB_ERR_UNEXPECTED; LOG_WARN("fail to format column group_name", K(ret), K(write_len)); + } else if (write_len > OB_MAX_COLUMN_GROUP_NAME_LENGTH) { + ret = OB_ERR_TOO_LONG_IDENT; + LOG_WARN("too long column name to format column group name", K(ret), KPC(this), K(write_len)); + LOG_USER_ERROR(OB_ERR_TOO_LONG_IDENT, column_name_.length(), column_name_.ptr()); } if (OB_SUCC(ret)) { diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_mysql.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_mysql.result index cdfeca4d59..19f7b69791 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_mysql.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_mysql.result @@ -4519,7 +4519,7 @@ schema_version bigint(20) NO PRI NULL gmt_create timestamp(6) NO NULL gmt_modified timestamp(6) NO NULL is_deleted bigint(20) NO NULL -column_group_name varchar(256) YES +column_group_name varchar(389) YES column_group_type bigint(20) YES NULL block_size bigint(20) YES NULL compressor_type bigint(20) YES NULL 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 d0ab7c96a7..66687f4892 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 @@ -8224,7 +8224,7 @@ table_id bigint(20) NO PRI NULL column_group_id bigint(20) NO PRI NULL gmt_create timestamp(6) NO NULL gmt_modified timestamp(6) NO NULL -column_group_name varchar(256) NO +column_group_name varchar(389) NO column_group_type bigint(20) NO NULL block_size bigint(20) NO NULL compressor_type bigint(20) NO NULL @@ -8882,7 +8882,7 @@ schema_version bigint(20) NO PRI NULL gmt_create timestamp(6) NO NULL gmt_modified timestamp(6) NO NULL is_deleted bigint(20) NO NULL -column_group_name varchar(256) YES +column_group_name varchar(389) YES column_group_type bigint(20) YES NULL block_size bigint(20) YES NULL compressor_type bigint(20) YES NULL