diff options
author | unknown <evgen@moonbone.local> | 2006-06-20 23:22:51 +0400 |
---|---|---|
committer | unknown <evgen@moonbone.local> | 2006-06-20 23:22:51 +0400 |
commit | b6a416ff268037122f163f0511c69198b93b31f0 (patch) | |
tree | 9a91b8ff5d19adfb24d11e2835adaa588b3aa68a | |
parent | 4d3803f0ed0122c5693aab6390feed903f2ca4dc (diff) | |
parent | 3e7d68b11cd65dac087e2a634a8f007a295c6528 (diff) | |
download | mariadb-git-b6a416ff268037122f163f0511c69198b93b31f0.tar.gz |
Manually merged
mysql-test/t/select.test:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
-rw-r--r-- | mysql-test/r/select.result | 6 | ||||
-rw-r--r-- | mysql-test/t/select.test | 19 | ||||
-rw-r--r-- | sql/item_cmpfunc.cc | 3 |
3 files changed, 27 insertions, 1 deletions
diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index b385c576f2e..a9381f7c942 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -3389,3 +3389,9 @@ a t1.b + 0 t1.c + 0 a t2.b + 0 c d 1 0 1 1 0 1 NULL 2 0 1 NULL NULL NULL NULL drop table t1,t2; +CREATE TABLE t1 (i BIGINT UNSIGNED NOT NULL); +INSERT INTO t1 VALUES (10); +SELECT i='1e+01',i=1e+01, i in (1e+01), i in ('1e+01') FROM t1; +i='1e+01' i=1e+01 i in (1e+01) i in ('1e+01') +0 1 1 1 +DROP TABLE t1; diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test index ae3981ce47b..707892a5b16 100644 --- a/mysql-test/t/select.test +++ b/mysql-test/t/select.test @@ -2285,6 +2285,25 @@ EXPLAIN SELECT * FROM t1 FORCE INDEX (a); DROP TABLE t1; +# +# Bug #18759 "Incorrect string to numeric conversion" +# +# This test is here so that the behavior will not be changed to 4.1 +# and not to 5.0 either. In 4.1 and 5.0 sending an integer as a string +# will be converted internally to real (double) value and it is not +# as accurate as bigint (longlong) for integers. Thus the results may +# vary. In 5.1 internally it is decimal, which is a string type and +# will be more accurate. Due to rather big changes needed to fix this +# in 4.1 or 5.0 it is not desired to do it in the stable versions. +# +# This test is here only to make sure that behavior is not changed in +# 4.1 and 5.0 +# +CREATE TABLE t1 (i BIGINT UNSIGNED NOT NULL); +INSERT INTO t1 VALUES (10); +SELECT i='1e+01',i=1e+01, i in (1e+01), i in ('1e+01') FROM t1; +DROP TABLE t1; + # End of 4.1 tests # diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 6a27d08611e..80cf756d852 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -138,7 +138,8 @@ static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems) } continue; } - if ((res= items[i]->real_item()->type()) == Item::FIELD_ITEM) + if ((res= items[i]->real_item()->type()) == Item::FIELD_ITEM && + items[i]->result_type() != INT_RESULT) { field= ((Item_field *)items[i]->real_item())->field; break; |