mirror of
https://github.com/MariaDB/server.git
synced 2026-05-14 19:07:15 +02:00
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.
This commit is contained in:
parent
4f564a5443
commit
a7bc7ebd8a
3 changed files with 42 additions and 4 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue