diff --git a/mysql-test/r/type_decimal.result b/mysql-test/r/type_decimal.result index 5623482aa7f963ff449a0d3b440b763e6cc4033f..a66809b139bb89fe797672c011eb7e7e42e2b306 100644 --- a/mysql-test/r/type_decimal.result +++ b/mysql-test/r/type_decimal.result @@ -199,15 +199,15 @@ select * from t1; a 0.00 0.00 -0.00 -01.00 ++0.00 01.00 ++01.00 0.00 0.00 ++0.10 0.10 -0.10 -00000001.00 00000001.00 ++0000001.00 0.00 99999999.99 99999999.99 @@ -316,9 +316,9 @@ select * from t1; a 0 0 -1 ++1 01 -0000000001 ++000000001 1234567890 9999999999 drop table t1; diff --git a/sql/field.cc b/sql/field.cc index eb3dc7948d41f305f41227d2e669394fe551bb33..42ddcc3b9d2c7b102c95367b58e3ea82df00b1eb 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -431,8 +431,9 @@ void Field_decimal::store(const char *from,uint len) { sign_char= *from++; /* - Unsigned can't have any flag. So we'll just drop "+" - and will overflow on "-" + We allow "+" for unsigned decimal unless defined different + Both options allowed as one may wish not to have "+" for unsigned numbers + because of data processing issues */ if (unsigned_flag) { @@ -441,8 +442,14 @@ void Field_decimal::store(const char *from,uint len) Field_decimal::overflow(1); return; } + /* + Defining this will not store "+" for unsigned decimal type even if + it is passed in numeric string. This will make some tests to fail + */ +#ifdef DONT_ALLOW_UNSIGNED_PLUS else sign_char=0; +#endif } } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 69abe813eedaca8bd8a6b2352ef128ff5ef45137..3aff3255706bf1a027c4a09e7ebdba68892093b8 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -708,6 +708,8 @@ pthread_handler_decl(handle_bootstrap,arg) sigset_t set; VOID(sigemptyset(&set)); // Get mask in use VOID(pthread_sigmask(SIG_UNBLOCK,&set,&thd->block_signals)); + + #endif if ((ulong) thd->variables.max_join_size == (ulong) HA_POS_ERROR)