automerge
This commit is contained in:
commit
be7d4dc8ee
@ -131,3 +131,49 @@ drop table t1;
|
|||||||
select if(0, 18446744073709551610, 18446744073709551610);
|
select if(0, 18446744073709551610, 18446744073709551610);
|
||||||
if(0, 18446744073709551610, 18446744073709551610)
|
if(0, 18446744073709551610, 18446744073709551610)
|
||||||
18446744073709551610
|
18446744073709551610
|
||||||
|
CREATE TABLE t1(a DECIMAL(10,3));
|
||||||
|
SELECT t1.a,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,0)))))))))))))))))))))))))))))) + 1
|
||||||
|
FROM t1;
|
||||||
|
a IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((R
|
||||||
|
DROP TABLE t1;
|
||||||
|
End of 5.0 tests
|
||||||
|
@ -4396,4 +4396,15 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select 1 AS `1` from `test`.`t1` where <in_optimizer>(1,<exists>(select 1 AS `1` from `test`.`t1` where (`test`.`t1`.`a` > 3) group by `test`.`t1`.`a` having (<cache>(1) = <ref_null_helper>(1))))
|
Note 1003 select 1 AS `1` from `test`.`t1` where <in_optimizer>(1,<exists>(select 1 AS `1` from `test`.`t1` where (`test`.`t1`.`a` > 3) group by `test`.`t1`.`a` having (<cache>(1) = <ref_null_helper>(1))))
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(pk int PRIMARY KEY, a int, INDEX idx(a));
|
||||||
|
INSERT INTO t1 VALUES (1, 10), (3, 30), (2, 20);
|
||||||
|
CREATE TABLE t2(pk int PRIMARY KEY, a int, b int, INDEX idxa(a));
|
||||||
|
INSERT INTO t2 VALUES (2, 20, 700), (1, 10, 200), (4, 10, 100);
|
||||||
|
SELECT * FROM t1
|
||||||
|
WHERE EXISTS (SELECT DISTINCT a FROM t2 WHERE t1.a < t2.a ORDER BY b);
|
||||||
|
pk a
|
||||||
|
1 10
|
||||||
|
3 30
|
||||||
|
2 20
|
||||||
|
DROP TABLE t1,t2;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
|
@ -108,3 +108,46 @@ drop table t1;
|
|||||||
select if(0, 18446744073709551610, 18446744073709551610);
|
select if(0, 18446744073709551610, 18446744073709551610);
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #37662: nested if() inside sum() is parsed in exponential time
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1(a DECIMAL(10,3));
|
||||||
|
|
||||||
|
# check : should be fast. more than few secs means failure.
|
||||||
|
SELECT t1.a,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,
|
||||||
|
IF((ROUND(t1.a,2)=1), 2,0)))))))))))))))))))))))))))))) + 1
|
||||||
|
FROM t1;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo End of 5.0 tests
|
||||||
|
@ -3295,5 +3295,17 @@ EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1 IN (SELECT 1 FROM t1 GROUP BY a);
|
|||||||
EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1 IN (SELECT 1 FROM t1 WHERE a > 3 GROUP BY a);
|
EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1 IN (SELECT 1 FROM t1 WHERE a > 3 GROUP BY a);
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #38191: Server crash with subquery containing DISTINCT and ORDER BY
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1(pk int PRIMARY KEY, a int, INDEX idx(a));
|
||||||
|
INSERT INTO t1 VALUES (1, 10), (3, 30), (2, 20);
|
||||||
|
CREATE TABLE t2(pk int PRIMARY KEY, a int, b int, INDEX idxa(a));
|
||||||
|
INSERT INTO t2 VALUES (2, 20, 700), (1, 10, 200), (4, 10, 100);
|
||||||
|
SELECT * FROM t1
|
||||||
|
WHERE EXISTS (SELECT DISTINCT a FROM t2 WHERE t1.a < t2.a ORDER BY b);
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
--echo End of 5.0 tests.
|
--echo End of 5.0 tests.
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
-- The system tables of MySQL Server
|
-- The system tables of MySQL Server
|
||||||
--
|
--
|
||||||
|
|
||||||
|
set sql_mode='';
|
||||||
set storage_engine=myisam;
|
set storage_engine=myisam;
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS db ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, PRIMARY KEY Host (Host,Db,User), KEY User (User) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Database privileges';
|
CREATE TABLE IF NOT EXISTS db ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, PRIMARY KEY Host (Host,Db,User), KEY User (User) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Database privileges';
|
||||||
|
12
sql/item.cc
12
sql/item.cc
@ -429,8 +429,11 @@ uint Item::decimal_precision() const
|
|||||||
Item_result restype= result_type();
|
Item_result restype= result_type();
|
||||||
|
|
||||||
if ((restype == DECIMAL_RESULT) || (restype == INT_RESULT))
|
if ((restype == DECIMAL_RESULT) || (restype == INT_RESULT))
|
||||||
return min(my_decimal_length_to_precision(max_length, decimals, unsigned_flag),
|
{
|
||||||
DECIMAL_MAX_PRECISION);
|
uint prec=
|
||||||
|
my_decimal_length_to_precision(max_length, decimals, unsigned_flag);
|
||||||
|
return min(prec, DECIMAL_MAX_PRECISION);
|
||||||
|
}
|
||||||
return min(max_length, DECIMAL_MAX_PRECISION);
|
return min(max_length, DECIMAL_MAX_PRECISION);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6838,8 +6841,9 @@ bool Item_type_holder::join_types(THD *thd, Item *item)
|
|||||||
if (Field::result_merge_type(fld_type) == DECIMAL_RESULT)
|
if (Field::result_merge_type(fld_type) == DECIMAL_RESULT)
|
||||||
{
|
{
|
||||||
decimals= min(max(decimals, item->decimals), DECIMAL_MAX_SCALE);
|
decimals= min(max(decimals, item->decimals), DECIMAL_MAX_SCALE);
|
||||||
int precision= min(max(prev_decimal_int_part, item->decimal_int_part())
|
int item_int_part= item->decimal_int_part();
|
||||||
+ decimals, DECIMAL_MAX_PRECISION);
|
int item_prec = max(prev_decimal_int_part, item_int_part) + decimals;
|
||||||
|
int precision= min(item_prec, DECIMAL_MAX_PRECISION);
|
||||||
unsigned_flag&= item->unsigned_flag;
|
unsigned_flag&= item->unsigned_flag;
|
||||||
max_length= my_decimal_precision_to_length(precision, decimals,
|
max_length= my_decimal_precision_to_length(precision, decimals,
|
||||||
unsigned_flag);
|
unsigned_flag);
|
||||||
|
@ -2098,8 +2098,11 @@ Item_func_ifnull::fix_length_and_dec()
|
|||||||
|
|
||||||
uint Item_func_ifnull::decimal_precision() const
|
uint Item_func_ifnull::decimal_precision() const
|
||||||
{
|
{
|
||||||
int max_int_part=max(args[0]->decimal_int_part(),args[1]->decimal_int_part());
|
int arg0_int_part= args[0]->decimal_int_part();
|
||||||
return min(max_int_part + decimals, DECIMAL_MAX_PRECISION);
|
int arg1_int_part= args[1]->decimal_int_part();
|
||||||
|
int max_int_part= max(arg0_int_part, arg1_int_part);
|
||||||
|
int precision= max_int_part + decimals;
|
||||||
|
return min(precision, DECIMAL_MAX_PRECISION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2281,8 +2284,9 @@ Item_func_if::fix_length_and_dec()
|
|||||||
|
|
||||||
uint Item_func_if::decimal_precision() const
|
uint Item_func_if::decimal_precision() const
|
||||||
{
|
{
|
||||||
int precision=(max(args[1]->decimal_int_part(),args[2]->decimal_int_part())+
|
int arg1_prec= args[1]->decimal_int_part();
|
||||||
decimals);
|
int arg2_prec= args[2]->decimal_int_part();
|
||||||
|
int precision=max(arg1_prec,arg2_prec) + decimals;
|
||||||
return min(precision, DECIMAL_MAX_PRECISION);
|
return min(precision, DECIMAL_MAX_PRECISION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1156,9 +1156,10 @@ my_decimal *Item_func_plus::decimal_op(my_decimal *decimal_value)
|
|||||||
void Item_func_additive_op::result_precision()
|
void Item_func_additive_op::result_precision()
|
||||||
{
|
{
|
||||||
decimals= max(args[0]->decimals, args[1]->decimals);
|
decimals= max(args[0]->decimals, args[1]->decimals);
|
||||||
int max_int_part= max(args[0]->decimal_precision() - args[0]->decimals,
|
int arg1_int= args[0]->decimal_precision() - args[0]->decimals;
|
||||||
args[1]->decimal_precision() - args[1]->decimals);
|
int arg2_int= args[1]->decimal_precision() - args[1]->decimals;
|
||||||
int precision= min(max_int_part + 1 + decimals, DECIMAL_MAX_PRECISION);
|
int est_prec= max(arg1_int, arg2_int) + 1 + decimals;
|
||||||
|
int precision= min(est_prec, DECIMAL_MAX_PRECISION);
|
||||||
|
|
||||||
/* Integer operations keep unsigned_flag if one of arguments is unsigned */
|
/* Integer operations keep unsigned_flag if one of arguments is unsigned */
|
||||||
if (result_type() == INT_RESULT)
|
if (result_type() == INT_RESULT)
|
||||||
@ -1267,8 +1268,8 @@ void Item_func_mul::result_precision()
|
|||||||
else
|
else
|
||||||
unsigned_flag= args[0]->unsigned_flag & args[1]->unsigned_flag;
|
unsigned_flag= args[0]->unsigned_flag & args[1]->unsigned_flag;
|
||||||
decimals= min(args[0]->decimals + args[1]->decimals, DECIMAL_MAX_SCALE);
|
decimals= min(args[0]->decimals + args[1]->decimals, DECIMAL_MAX_SCALE);
|
||||||
int precision= min(args[0]->decimal_precision() + args[1]->decimal_precision(),
|
uint est_prec = args[0]->decimal_precision() + args[1]->decimal_precision();
|
||||||
DECIMAL_MAX_PRECISION);
|
uint precision= min(est_prec, DECIMAL_MAX_PRECISION);
|
||||||
max_length= my_decimal_precision_to_length(precision, decimals,unsigned_flag);
|
max_length= my_decimal_precision_to_length(precision, decimals,unsigned_flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1315,8 +1316,8 @@ my_decimal *Item_func_div::decimal_op(my_decimal *decimal_value)
|
|||||||
|
|
||||||
void Item_func_div::result_precision()
|
void Item_func_div::result_precision()
|
||||||
{
|
{
|
||||||
uint precision=min(args[0]->decimal_precision() + prec_increment,
|
uint arg_prec= args[0]->decimal_precision() + prec_increment;
|
||||||
DECIMAL_MAX_PRECISION);
|
uint precision=min(arg_prec, DECIMAL_MAX_PRECISION);
|
||||||
/* Integer operations keep unsigned_flag if one of arguments is unsigned */
|
/* Integer operations keep unsigned_flag if one of arguments is unsigned */
|
||||||
if (result_type() == INT_RESULT)
|
if (result_type() == INT_RESULT)
|
||||||
unsigned_flag= args[0]->unsigned_flag | args[1]->unsigned_flag;
|
unsigned_flag= args[0]->unsigned_flag | args[1]->unsigned_flag;
|
||||||
|
@ -6469,6 +6469,12 @@ void JOIN::cleanup(bool full)
|
|||||||
if (tmp_join)
|
if (tmp_join)
|
||||||
tmp_table_param.copy_field= 0;
|
tmp_table_param.copy_field= 0;
|
||||||
group_fields.delete_elements();
|
group_fields.delete_elements();
|
||||||
|
/*
|
||||||
|
Ensure that the above delete_elements() would not be called
|
||||||
|
twice for the same list.
|
||||||
|
*/
|
||||||
|
if (tmp_join && tmp_join != this)
|
||||||
|
tmp_join->group_fields= group_fields;
|
||||||
/*
|
/*
|
||||||
We can't call delete_elements() on copy_funcs as this will cause
|
We can't call delete_elements() on copy_funcs as this will cause
|
||||||
problems in free_elements() as some of the elements are then deleted.
|
problems in free_elements() as some of the elements are then deleted.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user