summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <cmiller@zippy.cornsilk.net>2006-11-06 17:45:47 -0500
committerunknown <cmiller@zippy.cornsilk.net>2006-11-06 17:45:47 -0500
commitc055a9c44fffcccd893988df3387b1fa2dfe6b5e (patch)
tree127b0d7799600812e018834954dd045f5a5fa68c
parentbab65b05e240a91653e9a3ba4bd0146496d91803 (diff)
parent97610dedaf26218a58bc99f36995539ebb8e4623 (diff)
downloadmariadb-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/collapsed2
-rw-r--r--mysql-test/r/func_test.result74
-rw-r--r--mysql-test/t/func_test.test34
-rw-r--r--sql/item_func.cc9
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();