diff options
-rw-r--r-- | mysql-test/r/user_var.result | 6 | ||||
-rw-r--r-- | mysql-test/t/user_var.test | 12 | ||||
-rw-r--r-- | sql/item_func.cc | 2 |
3 files changed, 19 insertions, 1 deletions
diff --git a/mysql-test/r/user_var.result b/mysql-test/r/user_var.result index e41a9bc7637..589186184c3 100644 --- a/mysql-test/r/user_var.result +++ b/mysql-test/r/user_var.result @@ -448,6 +448,12 @@ DROP TABLE t1; select @v:=@v:=sum(1) from dual; @v:=@v:=sum(1) 1 +CREATE TABLE t1(a DECIMAL(31,21)); +INSERT INTO t1 VALUES (0); +SELECT (@v:=a) <> (@v:=1) FROM t1; +(@v:=a) <> (@v:=1) +1 +DROP TABLE t1; End of 5.1 tests DROP TABLE IF EXISTS t1; CREATE TABLE t1(f1 INT AUTO_INCREMENT, PRIMARY KEY(f1)); diff --git a/mysql-test/t/user_var.test b/mysql-test/t/user_var.test index b1a54495330..6a64343b609 100644 --- a/mysql-test/t/user_var.test +++ b/mysql-test/t/user_var.test @@ -351,6 +351,18 @@ DROP TABLE t1; select @v:=@v:=sum(1) from dual; +# +# Bug #57187: more user variable fun with multiple assignments and +# comparison in query +# + +CREATE TABLE t1(a DECIMAL(31,21)); +INSERT INTO t1 VALUES (0); + +SELECT (@v:=a) <> (@v:=1) FROM t1; + +DROP TABLE t1; + --echo End of 5.1 tests # diff --git a/sql/item_func.cc b/sql/item_func.cc index 92b80e274f4..94f4f83108b 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -4470,7 +4470,7 @@ my_decimal *user_var_entry::val_decimal(my_bool *null_value, my_decimal *val) int2my_decimal(E_DEC_FATAL_ERROR, *(longlong*) value, 0, val); break; case DECIMAL_RESULT: - val= (my_decimal *)value; + my_decimal2decimal((my_decimal *) value, val); break; case STRING_RESULT: str2my_decimal(E_DEC_FATAL_ERROR, value, length, collation.collation, val); |