BUG#18198: Too flexible partition functions
This commit is contained in:
parent
c0850425e5
commit
d35c7f2f50
@ -1,5 +1,22 @@
|
|||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
create table t1 (a int)
|
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
|
engine = x
|
||||||
partition by key (a);
|
partition by key (a);
|
||||||
Warnings:
|
Warnings:
|
||||||
|
@ -8,6 +8,28 @@
|
|||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
--enable_warnings
|
--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
|
# Bug 20397: Partitions: Crash when using non-existing engine
|
||||||
#
|
#
|
||||||
|
@ -3616,6 +3616,7 @@ part_bit_expr:
|
|||||||
{
|
{
|
||||||
Item *part_expr= $1;
|
Item *part_expr= $1;
|
||||||
bool not_corr_func;
|
bool not_corr_func;
|
||||||
|
bool part_expression_ok= TRUE;
|
||||||
LEX *lex= Lex;
|
LEX *lex= Lex;
|
||||||
THD *thd= YYTHD;
|
THD *thd= YYTHD;
|
||||||
longlong item_value;
|
longlong item_value;
|
||||||
@ -3633,13 +3634,19 @@ part_bit_expr:
|
|||||||
mem_alloc_error(sizeof(part_elem_value));
|
mem_alloc_error(sizeof(part_elem_value));
|
||||||
YYABORT;
|
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) ||
|
if (part_expr->fix_fields(YYTHD, (Item**)0) ||
|
||||||
((context->table_list= save_list), FALSE) ||
|
((context->table_list= save_list), FALSE) ||
|
||||||
(!part_expr->const_item()) ||
|
(!part_expr->const_item()) ||
|
||||||
(!lex->safe_to_cache_query))
|
(!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;
|
YYABORT;
|
||||||
}
|
}
|
||||||
thd->where= save_where;
|
thd->where= save_where;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user