summaryrefslogtreecommitdiff
path: root/sql/sql_partition.cc
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2022-11-10 09:49:18 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2022-11-10 09:49:18 +0200
commit038cd5195612084542704f181695358e3b8959a8 (patch)
treebaf64530b9ca66b4b9d356403b550aa58d6588d9 /sql/sql_partition.cc
parentfe9412dbc9ce4cb1764a3669ee89dcf687d68fb5 (diff)
parent08e2c98ec81d6fb23b0a8079107d4c74d3a8ec02 (diff)
downloadmariadb-git-038cd5195612084542704f181695358e3b8959a8.tar.gz
Merge 10.7 into 10.8
Diffstat (limited to 'sql/sql_partition.cc')
-rw-r--r--sql/sql_partition.cc108
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
{