diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test index a599f948c1e..51c862f692d 100644 --- a/mysql-test/t/view.test +++ b/mysql-test/t/view.test @@ -3213,6 +3213,18 @@ EXPLAIN SELECT * FROM t1 UNION SELECT * FROM v1 ORDER BY a; DROP VIEW v1; DROP TABLE t1; +# +# Bug #27921 View ignores precision for CAST() +# +CREATE VIEW v1 AS SELECT CAST( 1.23456789 AS DECIMAL( 7,5 ) ) AS col; +SELECT * FROM v1; +DESCRIBE v1; +DROP VIEW v1; + +CREATE VIEW v1 AS SELECT CAST(1.23456789 AS DECIMAL(8,0)) AS col; +SHOW CREATE VIEW v1; +DROP VIEW v1; + --echo End of 5.0 tests. # diff --git a/sql/item_create.cc b/sql/item_create.cc index c40c7a4de6c..29d2b8fe3b3 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -3947,6 +3947,7 @@ Create_func_master_pos_wait::create_native(THD *thd, LEX_STRING name, my_error(ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT, MYF(0), name.str); break; } + } return func; } @@ -4972,7 +4973,7 @@ find_qualified_function_builder(THD *thd) Item * -create_func_cast(Item *a, Cast_target cast_type, +create_func_cast(THD *thd, Item *a, Cast_target cast_type, const char *c_len, const char *c_dec, CHARSET_INFO *cs) { diff --git a/sql/my_decimal.cc b/sql/my_decimal.cc index 7b2d271639f..8823fac3393 100644 --- a/sql/my_decimal.cc +++ b/sql/my_decimal.cc @@ -208,6 +208,17 @@ my_decimal *date2my_decimal(MYSQL_TIME *ltime, my_decimal *dec) } +void my_decimal_trim(ulong *precision, uint *scale) +{ + if (!(*precision) && !(*scale)) + { + *precision= 10; + *scale= 0; + return; + } +} + + #ifndef DBUG_OFF /* routines for debugging print */ diff --git a/sql/my_decimal.h b/sql/my_decimal.h index b349fc3f62e..17eb75cfdc5 100644 --- a/sql/my_decimal.h +++ b/sql/my_decimal.h @@ -395,15 +395,7 @@ int my_decimal_intg(const my_decimal *a) } -void my_decimal_trim(ulong *precision, uint *scale) -{ - if (!(*precision) && !(*scale)) - { - *precision= 10; - *scale= 0; - return; - } -} +void my_decimal_trim(ulong *precision, uint *scale); #endif /*my_decimal_h*/