[Commits] bzr commit into Mariadb 5.2, with Maria 2.0:maria/5.2 branch (igor:2827) Bug#607177

Igor Babaev igor at askmonty.org
Wed Jul 21 08:00:00 EEST 2010


#At lp:maria/5.2 based on revid:igor at askmonty.org-20100717195808-mvh782jvt6c32u2d

 2827 Igor Babaev	2010-07-20
      Fixed bug #607177.
      Due to an invalid check for NULL of the second argument of the 
      Item_func_round items performed in the code of Item_func_round::real_op
      the function ROUND  sometimes could return wrong results.
      modified:
        mysql-test/suite/vcol/r/vcol_misc.result
        mysql-test/suite/vcol/t/vcol_misc.test
        sql/item_func.cc

=== modified file 'mysql-test/suite/vcol/r/vcol_misc.result'
--- a/mysql-test/suite/vcol/r/vcol_misc.result	2010-07-17 19:58:08 +0000
+++ b/mysql-test/suite/vcol/r/vcol_misc.result	2010-07-21 04:59:47 +0000
@@ -87,3 +87,23 @@ a	v
 2002-02-15 00:00:00	0
 2000-10-15 00:00:00	1
 DROP TABLE t1, t2;
+CREATE TABLE t1 (p int, a double NOT NULL, v double AS (ROUND(a,p)) VIRTUAL);
+INSERT INTO t1 VALUES (0,1,0);
+Warnings:
+Warning	1645	The value specified for computed column 'v' in table 't1' ignored
+INSERT INTO t1 VALUES (NULL,0,0);
+Warnings:
+Warning	1645	The value specified for computed column 'v' in table 't1' ignored
+SELECT a, p, v, ROUND(a,p), ROUND(a,p+NULL) FROM t1;
+a	p	v	ROUND(a,p)	ROUND(a,p+NULL)
+1	0	1	1	NULL
+0	NULL	NULL	NULL	NULL
+DROP TABLE t1;
+CREATE TABLE t1 (p int, a double NOT NULL);
+INSERT INTO t1(p,a) VALUES (0,1);
+INSERT INTO t1(p,a) VALUES (NULL,0);
+SELECT a, p, ROUND(a,p), ROUND(a,p+NULL) FROM t1;
+a	p	ROUND(a,p)	ROUND(a,p+NULL)
+1	0	1	NULL
+0	NULL	NULL	NULL
+DROP TABLE t1;

=== modified file 'mysql-test/suite/vcol/t/vcol_misc.test'
--- a/mysql-test/suite/vcol/t/vcol_misc.test	2010-07-17 19:58:08 +0000
+++ b/mysql-test/suite/vcol/t/vcol_misc.test	2010-07-21 04:59:47 +0000
@@ -87,3 +87,19 @@ INSERT INTO t2(a) VALUES ('2000-10-15');
 SELECT * FROM t2;
 
 DROP TABLE t1, t2;
+
+#
+# Bug#607177: ROUND function in the expression for a virtual function
+#
+
+CREATE TABLE t1 (p int, a double NOT NULL, v double AS (ROUND(a,p)) VIRTUAL);
+INSERT INTO t1 VALUES (0,1,0);
+INSERT INTO t1 VALUES (NULL,0,0);
+SELECT a, p, v, ROUND(a,p), ROUND(a,p+NULL) FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (p int, a double NOT NULL);
+INSERT INTO t1(p,a) VALUES (0,1);
+INSERT INTO t1(p,a) VALUES (NULL,0);
+SELECT a, p, ROUND(a,p), ROUND(a,p+NULL) FROM t1;
+DROP TABLE t1;

=== modified file 'sql/item_func.cc'
--- a/sql/item_func.cc	2010-06-01 19:52:20 +0000
+++ b/sql/item_func.cc	2010-07-21 04:59:47 +0000
@@ -2040,10 +2040,12 @@ double Item_func_round::real_op()
 {
   double value= args[0]->val_real();
 
-  if (!(null_value= args[0]->null_value || args[1]->null_value))
-    return my_double_round(value, args[1]->val_int(), args[1]->unsigned_flag,
-                           truncate);
-
+  if (!(null_value= args[0]->null_value))
+  {
+    longlong dec= args[1]->val_int();
+    if (!(null_value= args[1]->null_value))
+      return my_double_round(value, dec, args[1]->unsigned_flag, truncate);
+  }
   return 0.0;
 }
 



More information about the commits mailing list