BUG#18198: Too much expressiveness in partition functions allowed

First step
parent b492d05e
...@@ -744,6 +744,11 @@ class Item { ...@@ -744,6 +744,11 @@ class Item {
virtual bool find_item_in_field_list_processor(byte *arg) { return 0; } virtual bool find_item_in_field_list_processor(byte *arg) { return 0; }
virtual bool change_context_processor(byte *context) { return 0; } virtual bool change_context_processor(byte *context) { return 0; }
virtual bool reset_query_id_processor(byte *query_id) { 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 *equal_fields_propagator(byte * arg) { return this; }
virtual Item *set_no_const_sub(byte *arg) { return this; } virtual Item *set_no_const_sub(byte *arg) { return this; }
...@@ -1202,6 +1207,7 @@ class Item_field :public Item_ident ...@@ -1202,6 +1207,7 @@ class Item_field :public Item_ident
result_field->query_id= field->query_id; result_field->query_id= field->query_id;
return 0; return 0;
} }
bool check_partition_func_processor(byte *bool_arg) { return 0; }
void cleanup(); void cleanup();
Item_equal *find_item_equal(COND_EQUAL *cond_equal); Item_equal *find_item_equal(COND_EQUAL *cond_equal);
Item *equal_fields_propagator(byte *arg); Item *equal_fields_propagator(byte *arg);
......
...@@ -655,8 +655,15 @@ bool partition_info::check_partition_info(handlerton **eng_type, ...@@ -655,8 +655,15 @@ bool partition_info::check_partition_info(handlerton **eng_type,
uint i, tot_partitions; uint i, tot_partitions;
bool result= TRUE; bool result= TRUE;
char *same_name; char *same_name;
bool part_expression_ok= TRUE;
DBUG_ENTER("partition_info::check_partition_info"); 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() && if (unlikely(!is_sub_partitioned() &&
!(use_default_subpartitions && use_default_no_subpartitions))) !(use_default_subpartitions && use_default_no_subpartitions)))
{ {
......
...@@ -5826,3 +5826,6 @@ ER_NDB_CANT_SWITCH_BINLOG_FORMAT ...@@ -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" eng "The NDB cluster engine does not support changing the binlog format on the fly yet"
ER_PARTITION_NO_TEMPORARY ER_PARTITION_NO_TEMPORARY
eng "Cannot create temporary table with partitions" 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