diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2022-11-10 09:49:18 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2022-11-10 09:49:18 +0200 |
commit | 038cd5195612084542704f181695358e3b8959a8 (patch) | |
tree | baf64530b9ca66b4b9d356403b550aa58d6588d9 /sql/sql_partition.cc | |
parent | fe9412dbc9ce4cb1764a3669ee89dcf687d68fb5 (diff) | |
parent | 08e2c98ec81d6fb23b0a8079107d4c74d3a8ec02 (diff) | |
download | mariadb-git-038cd5195612084542704f181695358e3b8959a8.tar.gz |
Merge 10.7 into 10.8
Diffstat (limited to 'sql/sql_partition.cc')
-rw-r--r-- | sql/sql_partition.cc | 108 |
1 files changed, 30 insertions, 78 deletions
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 9c7f25e8808..66af56d2337 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -2470,7 +2470,7 @@ end: @retval != 0 Failure */ -static int add_key_with_algorithm(String *str, const partition_info *part_info) +static int add_key_with_algorithm(String *str, partition_info *part_info) { int err= 0; err+= str->append(STRING_WITH_LEN("KEY ")); @@ -2499,78 +2499,6 @@ char *generate_partition_syntax_for_frm(THD *thd, partition_info *part_info, return res; } - -/* - Generate the partition type syntax from the partition data structure. - - @return Operation status. - @retval 0 Success - @retval > 0 Failure - @retval -1 Fatal error -*/ - -int partition_info::gen_part_type(THD *thd, String *str) const -{ - int err= 0; - switch (part_type) - { - case RANGE_PARTITION: - err+= str->append(STRING_WITH_LEN("RANGE ")); - break; - case LIST_PARTITION: - err+= str->append(STRING_WITH_LEN("LIST ")); - break; - case HASH_PARTITION: - if (linear_hash_ind) - err+= str->append(STRING_WITH_LEN("LINEAR ")); - if (list_of_part_fields) - { - err+= add_key_with_algorithm(str, this); - err+= add_part_field_list(thd, str, part_field_list); - } - else - err+= str->append(STRING_WITH_LEN("HASH ")); - break; - case VERSIONING_PARTITION: - err+= str->append(STRING_WITH_LEN("SYSTEM_TIME ")); - break; - default: - DBUG_ASSERT(0); - /* We really shouldn't get here, no use in continuing from here */ - my_error(ER_OUT_OF_RESOURCES, MYF(ME_FATAL)); - return -1; - } - return err; -} - - -void part_type_error(THD *thd, partition_info *work_part_info, - const char *part_type, - partition_info *tab_part_info) -{ - StringBuffer<256> tab_part_type; - if (tab_part_info->gen_part_type(thd, &tab_part_type) < 0) - return; - tab_part_type.length(tab_part_type.length() - 1); - if (work_part_info) - { - DBUG_ASSERT(!part_type); - StringBuffer<256> work_part_type; - if (work_part_info->gen_part_type(thd, &work_part_type) < 0) - return; - work_part_type.length(work_part_type.length() - 1); - my_error(ER_PARTITION_WRONG_TYPE, MYF(0), work_part_type.c_ptr(), - tab_part_type.c_ptr()); - } - else - { - DBUG_ASSERT(part_type); - my_error(ER_PARTITION_WRONG_TYPE, MYF(0), part_type, - tab_part_type.c_ptr()); - } -} - - /* Generate the partition syntax from the partition data structure. Useful for support of generating defaults, SHOW CREATE TABLES @@ -2614,10 +2542,34 @@ char *generate_partition_syntax(THD *thd, partition_info *part_info, DBUG_ENTER("generate_partition_syntax"); err+= str.append(STRING_WITH_LEN(" PARTITION BY ")); - int err2= part_info->gen_part_type(thd, &str); - if (err2 < 0) - DBUG_RETURN(NULL); - err+= err2; + switch (part_info->part_type) + { + case RANGE_PARTITION: + err+= str.append(STRING_WITH_LEN("RANGE ")); + break; + case LIST_PARTITION: + err+= str.append(STRING_WITH_LEN("LIST ")); + break; + case HASH_PARTITION: + if (part_info->linear_hash_ind) + err+= str.append(STRING_WITH_LEN("LINEAR ")); + if (part_info->list_of_part_fields) + { + err+= add_key_with_algorithm(&str, part_info); + err+= add_part_field_list(thd, &str, part_info->part_field_list); + } + else + err+= str.append(STRING_WITH_LEN("HASH ")); + break; + case VERSIONING_PARTITION: + err+= str.append(STRING_WITH_LEN("SYSTEM_TIME ")); + break; + default: + DBUG_ASSERT(0); + /* We really shouldn't get here, no use in continuing from here */ + my_error(ER_OUT_OF_RESOURCES, MYF(ME_FATAL)); + DBUG_RETURN(NULL); + } if (part_info->part_type == VERSIONING_PARTITION) { Vers_part_info *vers_info= part_info->vers_info; @@ -5117,7 +5069,7 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info, else if (thd->work_part_info->part_type == VERSIONING_PARTITION || tab_part_info->part_type == VERSIONING_PARTITION) { - part_type_error(thd, thd->work_part_info, NULL, tab_part_info); + my_error(ER_PARTITION_WRONG_TYPE, MYF(0), "SYSTEM_TIME"); } else { |