1
0
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:
unknown
2006-04-05 12:39:06 +02:00
parent 07302c6007
commit d868d032aa
3 changed files with 16 additions and 0 deletions

View File

@ -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);

View File

@ -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)))
{ {

View File

@ -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"