From e60daecc87f939a889e71fdb4306111007bc139f Mon Sep 17 00:00:00 2001 From: "bar@mysql.com" <> Date: Mon, 28 Mar 2005 14:01:57 +0500 Subject: [PATCH] Bug#9425 A user variable doesn't always have implicit coercibility Coercibility fixes for numeric types and not defined values were done. --- mysql-test/r/user_var.result | 7 +++++++ mysql-test/t/user_var.test | 7 +++++++ sql/item_func.cc | 9 ++++++--- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/user_var.result b/mysql-test/r/user_var.result index d82c17b0fe0..d8425899b77 100644 --- a/mysql-test/r/user_var.result +++ b/mysql-test/r/user_var.result @@ -193,3 +193,10 @@ set @var= NULL ; select FIELD( @var,'1it','Hit') as my_column; my_column 0 +select @v, coercibility(@v); +@v coercibility(@v) +NULL 2 +set @v1=null, @v2=1, @v3=1.1, @v4=now(); +select coercibility(@v1),coercibility(@v2),coercibility(@v3),coercibility(@v4); +coercibility(@v1) coercibility(@v2) coercibility(@v3) coercibility(@v4) +2 2 2 2 diff --git a/mysql-test/t/user_var.test b/mysql-test/t/user_var.test index 2f526dc9a46..cfeb5f228a7 100644 --- a/mysql-test/t/user_var.test +++ b/mysql-test/t/user_var.test @@ -122,3 +122,10 @@ drop table t1; # set @var= NULL ; select FIELD( @var,'1it','Hit') as my_column; + +# +# Bug#9425 A user variable doesn't always have implicit coercibility +# +select @v, coercibility(@v); +set @v1=null, @v2=1, @v3=1.1, @v4=now(); +select coercibility(@v1),coercibility(@v2),coercibility(@v3),coercibility(@v4); diff --git a/sql/item_func.cc b/sql/item_func.cc index ade394f90d3..eb6e395c266 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -2634,20 +2634,20 @@ Item_func_set_user_var::update() case REAL_RESULT: { res= update_hash((void*) &save_result.vreal,sizeof(save_result.vreal), - REAL_RESULT, &my_charset_bin, DERIVATION_NONE); + REAL_RESULT, &my_charset_bin, DERIVATION_IMPLICIT); break; } case INT_RESULT: { res= update_hash((void*) &save_result.vint, sizeof(save_result.vint), - INT_RESULT, &my_charset_bin, DERIVATION_NONE); + INT_RESULT, &my_charset_bin, DERIVATION_IMPLICIT); break; } case STRING_RESULT: { if (!save_result.vstr) // Null value res= update_hash((void*) 0, 0, STRING_RESULT, &my_charset_bin, - DERIVATION_NONE); + DERIVATION_IMPLICIT); else res= update_hash((void*) save_result.vstr->ptr(), save_result.vstr->length(), STRING_RESULT, @@ -2870,7 +2870,10 @@ void Item_func_get_user_var::fix_length_and_dec() } } else + { + collation.set(&my_charset_bin, DERIVATION_IMPLICIT); null_value= 1; + } if (error) thd->fatal_error();