diff options
author | unknown <cmiller@zippy.cornsilk.net> | 2006-11-06 17:45:47 -0500 |
---|---|---|
committer | unknown <cmiller@zippy.cornsilk.net> | 2006-11-06 17:45:47 -0500 |
commit | c055a9c44fffcccd893988df3387b1fa2dfe6b5e (patch) | |
tree | 127b0d7799600812e018834954dd045f5a5fa68c | |
parent | bab65b05e240a91653e9a3ba4bd0146496d91803 (diff) | |
parent | 97610dedaf26218a58bc99f36995539ebb8e4623 (diff) | |
download | mariadb-git-c055a9c44fffcccd893988df3387b1fa2dfe6b5e.tar.gz |
Merge zippy.cornsilk.net:/home/cmiller/work/mysql/bug23411/my41-bug23411
into zippy.cornsilk.net:/home/cmiller/work/mysql/bug23411/my50-bug23411
BitKeeper/deleted/.del-collapsed~fbec3523369aae99:
Delete: BitKeeper/etc/collapsed
BitKeeper/etc/collapsed:
'Auto converge'
mysql-test/r/func_test.result:
Manual merge.
mysql-test/t/func_test.test:
Manual merge.
sql/item_func.cc:
Manual merge.
-rw-r--r-- | BitKeeper/etc/collapsed | 2 | ||||
-rw-r--r-- | mysql-test/r/func_test.result | 74 | ||||
-rw-r--r-- | mysql-test/t/func_test.test | 34 | ||||
-rw-r--r-- | sql/item_func.cc | 9 |
4 files changed, 118 insertions, 1 deletions
diff --git a/BitKeeper/etc/collapsed b/BitKeeper/etc/collapsed index 311c3813abf..226f0f1a2e2 100644 --- a/BitKeeper/etc/collapsed +++ b/BitKeeper/etc/collapsed @@ -15,3 +15,5 @@ 45214442pBGT9KuZEGixBH71jTzbOA 45214a07hVsIGwvwa-WrO-jpeaSwVw 452a92d0-31-8wSzSfZi165fcGcXPA +454a7ef8gdvE_ddMlJyghvOAkKPNOQ +454f8960jsVT_kMKJtZ9OCgXoba0xQ diff --git a/mysql-test/r/func_test.result b/mysql-test/r/func_test.result index d9437f6c515..f3e618ffb4b 100644 --- a/mysql-test/r/func_test.result +++ b/mysql-test/r/func_test.result @@ -182,6 +182,80 @@ select 5.1 mod 3, 5.1 mod -3, -5.1 mod 3, -5.1 mod -3; select 5 mod 3, 5 mod -3, -5 mod 3, -5 mod -3; 5 mod 3 5 mod -3 -5 mod 3 -5 mod -3 2 2 -2 -2 +select (12%0) <=> null as '1'; +1 +1 +select (12%0) is null as '1'; +1 +1 +select 12%0 as 'NULL'; +NULL +NULL +select 12%2 as '0'; +0 +0 +select 12%NULL as 'NULL'; +NULL +NULL +select 12 % null as 'NULL'; +NULL +NULL +select null % 12 as 'NULL'; +NULL +NULL +select null % 0 as 'NULL'; +NULL +NULL +select 0 % null as 'NULL'; +NULL +NULL +select null % null as 'NULL'; +NULL +NULL +select (12 mod 0) <=> null as '1'; +1 +1 +select (12 mod 0) is null as '1'; +1 +1 +select 12 mod 0 as 'NULL'; +NULL +NULL +select 12 mod 2 as '0'; +0 +0 +select 12 mod null as 'NULL'; +NULL +NULL +select null mod 12 as 'NULL'; +NULL +NULL +select null mod 0 as 'NULL'; +NULL +NULL +select 0 mod null as 'NULL'; +NULL +NULL +select null mod null as 'NULL'; +NULL +NULL +select mod(12.0, 0) as 'NULL'; +NULL +NULL +select mod(12, 0.0) as 'NULL'; +NULL +NULL +select mod(12, NULL) as 'NULL'; +NULL +NULL +select mod(12.0, NULL) as 'NULL'; +NULL +NULL +select mod(NULL, 2) as 'NULL'; +NULL +NULL +select mod(NULL, 2.0) as 'NULL'; +NULL create table t1 (a int, b int); insert into t1 values (1,2), (2,3), (3,4), (4,5); select * from t1 where a not between 1 and 2; diff --git a/mysql-test/t/func_test.test b/mysql-test/t/func_test.test index 0ea89cd0913..77bf3be5e72 100644 --- a/mysql-test/t/func_test.test +++ b/mysql-test/t/func_test.test @@ -108,6 +108,40 @@ select 5.1 mod 3, 5.1 mod -3, -5.1 mod 3, -5.1 mod -3; select 5 mod 3, 5 mod -3, -5 mod 3, -5 mod -3; +# +# Bug#23411: The "%" (MOD) operator is not documented; MOD-ing zero returns strange result +# Manual: "Division by zero produces a NULL result" +# +select (12%0) <=> null as '1'; +select (12%0) is null as '1'; +select 12%0 as 'NULL'; +select 12%2 as '0'; +select 12%NULL as 'NULL'; +select 12 % null as 'NULL'; +select null % 12 as 'NULL'; +select null % 0 as 'NULL'; +select 0 % null as 'NULL'; +select null % null as 'NULL'; + +select (12 mod 0) <=> null as '1'; +select (12 mod 0) is null as '1'; +select 12 mod 0 as 'NULL'; +select 12 mod 2 as '0'; +select 12 mod null as 'NULL'; +select null mod 12 as 'NULL'; +select null mod 0 as 'NULL'; +select 0 mod null as 'NULL'; +select null mod null as 'NULL'; + +select mod(12.0, 0) as 'NULL'; +select mod(12, 0.0) as 'NULL'; +select mod(12, NULL) as 'NULL'; +select mod(12.0, NULL) as 'NULL'; +select mod(NULL, 2) as 'NULL'; +select mod(NULL, 2.0) as 'NULL'; + + +# # Bug#6726: NOT BETWEEN parse failure # create table t1 (a int, b int); diff --git a/sql/item_func.cc b/sql/item_func.cc index a294bbd7a71..ca71701841b 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -105,7 +105,7 @@ Item_func::Item_func(THD *thd, Item_func *item) /* - Resolve references to table column for a function and it's argument + Resolve references to table column for a function and its argument SYNOPSIS: fix_fields() @@ -1377,6 +1377,13 @@ void Item_func_mod::result_precision() } +void Item_func_mod::fix_length_and_dec() +{ + Item_num_op::fix_length_and_dec(); + maybe_null= 1; +} + + double Item_func_neg::real_op() { double value= args[0]->val_real(); |