Loading mysql-test/r/partition_error.result +17 −0 Original line number Diff line number Diff line 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: Loading mysql-test/t/partition_error.test +22 −0 Original line number Diff line number Diff line Loading @@ -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 # Loading sql/sql_yacc.yy +9 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading
mysql-test/r/partition_error.result +17 −0 Original line number Diff line number Diff line 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: Loading
mysql-test/t/partition_error.test +22 −0 Original line number Diff line number Diff line Loading @@ -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 # Loading
sql/sql_yacc.yy +9 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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