mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
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
This commit is contained in:
@ -744,6 +744,11 @@ public:
|
|||||||
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 @@ public:
|
|||||||
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,
|
|||||||
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
|
|||||||
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 <20>r inte till<6C>ten"
|
||||||
|
Reference in New Issue
Block a user