Commit 279b8721 authored by unknown's avatar unknown

BUG#18198: Too much expressiveness in partition functions allowed

First step


sql/item.h:
  Add function to check for partition function whether allowed or not.
  In this first step allow only a field on its own.
  Further steps will add a lot more possibilities.
sql/partition_info.cc:
  Add a check whether the partition function is allowed by walking the
  partition function expression.
sql/share/errmsg.txt:
  Add a new error code for partition function not allowed
parent d15b31bf
......@@ -744,6 +744,11 @@ class Item {
virtual bool find_item_in_field_list_processor(byte *arg) { return 0; }
virtual bool change_context_processor(byte *context) { return 0; }
virtual bool reset_query_id_processor(byte *query_id) { return 0; }
virtual bool check_partition_func_processor(byte *bool_arg)
{
*(bool *)bool_arg= FALSE;
return 0;
}
virtual Item *equal_fields_propagator(byte * arg) { return this; }
virtual Item *set_no_const_sub(byte *arg) { return this; }
......@@ -1202,6 +1207,7 @@ class Item_field :public Item_ident
result_field->query_id= field->query_id;
return 0;
}
bool check_partition_func_processor(byte *bool_arg) { return 0; }
void cleanup();
Item_equal *find_item_equal(COND_EQUAL *cond_equal);
Item *equal_fields_propagator(byte *arg);
......
......@@ -655,8 +655,15 @@ bool partition_info::check_partition_info(handlerton **eng_type,
uint i, tot_partitions;
bool result= TRUE;
char *same_name;
bool part_expression_ok= TRUE;
DBUG_ENTER("partition_info::check_partition_info");
if (part_expr->walk(Item::check_partition_func_processor,
(byte*)&part_expression_ok))
{
my_error(ER_PARTITION_FUNC_NOT_ALLOWED, MYF(0));
goto end;
}
if (unlikely(!is_sub_partitioned() &&
!(use_default_subpartitions && use_default_no_subpartitions)))
{
......
......@@ -5826,3 +5826,6 @@ ER_NDB_CANT_SWITCH_BINLOG_FORMAT
eng "The NDB cluster engine does not support changing the binlog format on the fly yet"
ER_PARTITION_NO_TEMPORARY
eng "Cannot create temporary table with partitions"
ER_PARTITION_FUNCTION_NOT_ALLOWED
eng "This partition function is not allowed"
swe "Denna partitioneringsfunktion r inte tillten"
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment