BUG#18198: Too flexible partition functions
This commit is contained in:
parent
c0850425e5
commit
d35c7f2f50
@ -1,5 +1,22 @@
|
||||
drop table if exists t1;
|
||||
create table t1 (a int)
|
||||
partition by range (a)
|
||||
(partition p0 values less than ((select count(*) from t1)));
|
||||
ERROR HY000: This partition function is not allowed
|
||||
create table t1 (a int)
|
||||
partition by range (a)
|
||||
(partition p0 values less than (a);
|
||||
ERROR 42S22: Unknown column 'a' in 'partition function'
|
||||
create table t1 (a int)
|
||||
partition by range (a)
|
||||
(partition p0 values less than (1));
|
||||
alter table t1 add partition (partition p1 values less than (a));
|
||||
ERROR 42S22: Unknown column 'a' in 'partition function'
|
||||
alter table t1 add partition
|
||||
(partition p1 values less than ((select count(*) from t1)));
|
||||
ERROR HY000: This partition function is not allowed
|
||||
drop table t1;
|
||||
create table t1 (a int)
|
||||
engine = x
|
||||
partition by key (a);
|
||||
Warnings:
|
||||
|
@ -8,6 +8,28 @@
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
# Bug 18198: Partitions: Too flexible functions
|
||||
#
|
||||
-- error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED
|
||||
create table t1 (a int)
|
||||
partition by range (a)
|
||||
(partition p0 values less than ((select count(*) from t1)));
|
||||
-- error 1054
|
||||
create table t1 (a int)
|
||||
partition by range (a)
|
||||
(partition p0 values less than (a);
|
||||
|
||||
create table t1 (a int)
|
||||
partition by range (a)
|
||||
(partition p0 values less than (1));
|
||||
-- error 1054
|
||||
alter table t1 add partition (partition p1 values less than (a));
|
||||
-- error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED
|
||||
alter table t1 add partition
|
||||
(partition p1 values less than ((select count(*) from t1)));
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug 20397: Partitions: Crash when using non-existing engine
|
||||
#
|
||||
|
@ -3616,6 +3616,7 @@ part_bit_expr:
|
||||
{
|
||||
Item *part_expr= $1;
|
||||
bool not_corr_func;
|
||||
bool part_expression_ok= TRUE;
|
||||
LEX *lex= Lex;
|
||||
THD *thd= YYTHD;
|
||||
longlong item_value;
|
||||
@ -3633,13 +3634,19 @@ part_bit_expr:
|
||||
mem_alloc_error(sizeof(part_elem_value));
|
||||
YYABORT;
|
||||
}
|
||||
|
||||
part_expr->walk(&Item::check_partition_func_processor, 0,
|
||||
(byte*)(&part_expression_ok));
|
||||
if (!part_expression_ok)
|
||||
{
|
||||
my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0));
|
||||
YYABORT;
|
||||
}
|
||||
if (part_expr->fix_fields(YYTHD, (Item**)0) ||
|
||||
((context->table_list= save_list), FALSE) ||
|
||||
(!part_expr->const_item()) ||
|
||||
(!lex->safe_to_cache_query))
|
||||
{
|
||||
yyerror(ER(ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR));
|
||||
my_error(ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR, MYF(0));
|
||||
YYABORT;
|
||||
}
|
||||
thd->where= save_where;
|
||||
|
Loading…
x
Reference in New Issue
Block a user