Loading mysql-test/r/create.result +1 −1 Original line number Diff line number Diff line Loading @@ -434,7 +434,7 @@ d date YES NULL e varchar(1) NO f datetime YES NULL g time YES NULL h varbinary(23) NO h longblob NO dd time YES NULL select * from t2; a b c d e f g h dd Loading mysql-test/r/distinct.result +8 −0 Original line number Diff line number Diff line Loading @@ -464,3 +464,11 @@ SELECT DISTINCT html,SUM(rout)/(SUM(rin)+1) as 'prod' FROM t1 GROUP BY rin; html prod 1 0.0000 drop table t1; create table t1 (id int, dsc varchar(50)); insert into t1 values (1, "line number one"), (2, "line number two"), (3, "line number three"); select distinct id, IFNULL(dsc, '-') from t1; id IFNULL(dsc, '-') 1 line number one 2 line number two 3 line number three drop table t1; mysql-test/t/distinct.test +8 −0 Original line number Diff line number Diff line Loading @@ -332,3 +332,11 @@ CREATE TABLE t1 ( INSERT INTO t1 VALUES ('1',1,0); SELECT DISTINCT html,SUM(rout)/(SUM(rin)+1) as 'prod' FROM t1 GROUP BY rin; drop table t1; # # Bug 9784 DISTINCT IFNULL truncates data # create table t1 (id int, dsc varchar(50)); insert into t1 values (1, "line number one"), (2, "line number two"), (3, "line number three"); select distinct id, IFNULL(dsc, '-') from t1; drop table t1; sql/item_cmpfunc.cc +12 −14 Original line number Diff line number Diff line Loading @@ -1109,12 +1109,14 @@ void Item_func_between::print(String *str) void Item_func_ifnull::fix_length_and_dec() { agg_result_type(&hybrid_type, args, 2); maybe_null=args[1]->maybe_null; decimals= max(args[0]->decimals, args[1]->decimals); max_length= (max(args[0]->max_length - args[0]->decimals, args[1]->max_length - args[1]->decimals) + decimals); agg_result_type(&hybrid_type, args, 2); max_length= (hybrid_type == DECIMAL_RESULT || hybrid_type == INT_RESULT) ? (max(args[0]->max_length - args[0]->decimals, args[1]->max_length - args[1]->decimals) + decimals) : max(args[0]->max_length, args[1]->max_length); switch (hybrid_type) { case STRING_RESULT: agg_arg_charsets(collation, args, arg_count, MY_COLL_CMP_CONV); Loading Loading @@ -1225,16 +1227,7 @@ Item_func_if::fix_length_and_dec() { maybe_null=args[1]->maybe_null || args[2]->maybe_null; decimals= max(args[1]->decimals, args[2]->decimals); if (decimals == NOT_FIXED_DEC) { max_length= max(args[1]->max_length, args[2]->max_length); } else { max_length= (max(args[1]->max_length - args[1]->decimals, args[2]->max_length - args[2]->decimals) + decimals); } enum Item_result arg1_type=args[1]->result_type(); enum Item_result arg2_type=args[2]->result_type(); bool null1=args[1]->const_item() && args[1]->null_value; Loading Loading @@ -1263,6 +1256,11 @@ Item_func_if::fix_length_and_dec() collation.set(&my_charset_bin); // Number } } max_length= (cached_result_type == DECIMAL_RESULT || cached_result_type == INT_RESULT) ? (max(args[1]->max_length - args[1]->decimals, args[2]->max_length - args[2]->decimals) + decimals) : max(args[1]->max_length, args[2]->max_length); } Loading Loading
mysql-test/r/create.result +1 −1 Original line number Diff line number Diff line Loading @@ -434,7 +434,7 @@ d date YES NULL e varchar(1) NO f datetime YES NULL g time YES NULL h varbinary(23) NO h longblob NO dd time YES NULL select * from t2; a b c d e f g h dd Loading
mysql-test/r/distinct.result +8 −0 Original line number Diff line number Diff line Loading @@ -464,3 +464,11 @@ SELECT DISTINCT html,SUM(rout)/(SUM(rin)+1) as 'prod' FROM t1 GROUP BY rin; html prod 1 0.0000 drop table t1; create table t1 (id int, dsc varchar(50)); insert into t1 values (1, "line number one"), (2, "line number two"), (3, "line number three"); select distinct id, IFNULL(dsc, '-') from t1; id IFNULL(dsc, '-') 1 line number one 2 line number two 3 line number three drop table t1;
mysql-test/t/distinct.test +8 −0 Original line number Diff line number Diff line Loading @@ -332,3 +332,11 @@ CREATE TABLE t1 ( INSERT INTO t1 VALUES ('1',1,0); SELECT DISTINCT html,SUM(rout)/(SUM(rin)+1) as 'prod' FROM t1 GROUP BY rin; drop table t1; # # Bug 9784 DISTINCT IFNULL truncates data # create table t1 (id int, dsc varchar(50)); insert into t1 values (1, "line number one"), (2, "line number two"), (3, "line number three"); select distinct id, IFNULL(dsc, '-') from t1; drop table t1;
sql/item_cmpfunc.cc +12 −14 Original line number Diff line number Diff line Loading @@ -1109,12 +1109,14 @@ void Item_func_between::print(String *str) void Item_func_ifnull::fix_length_and_dec() { agg_result_type(&hybrid_type, args, 2); maybe_null=args[1]->maybe_null; decimals= max(args[0]->decimals, args[1]->decimals); max_length= (max(args[0]->max_length - args[0]->decimals, args[1]->max_length - args[1]->decimals) + decimals); agg_result_type(&hybrid_type, args, 2); max_length= (hybrid_type == DECIMAL_RESULT || hybrid_type == INT_RESULT) ? (max(args[0]->max_length - args[0]->decimals, args[1]->max_length - args[1]->decimals) + decimals) : max(args[0]->max_length, args[1]->max_length); switch (hybrid_type) { case STRING_RESULT: agg_arg_charsets(collation, args, arg_count, MY_COLL_CMP_CONV); Loading Loading @@ -1225,16 +1227,7 @@ Item_func_if::fix_length_and_dec() { maybe_null=args[1]->maybe_null || args[2]->maybe_null; decimals= max(args[1]->decimals, args[2]->decimals); if (decimals == NOT_FIXED_DEC) { max_length= max(args[1]->max_length, args[2]->max_length); } else { max_length= (max(args[1]->max_length - args[1]->decimals, args[2]->max_length - args[2]->decimals) + decimals); } enum Item_result arg1_type=args[1]->result_type(); enum Item_result arg2_type=args[2]->result_type(); bool null1=args[1]->const_item() && args[1]->null_value; Loading Loading @@ -1263,6 +1256,11 @@ Item_func_if::fix_length_and_dec() collation.set(&my_charset_bin); // Number } } max_length= (cached_result_type == DECIMAL_RESULT || cached_result_type == INT_RESULT) ? (max(args[1]->max_length - args[1]->decimals, args[2]->max_length - args[2]->decimals) + decimals) : max(args[1]->max_length, args[2]->max_length); } Loading