diff options
author | unknown <holyfoot/hf@mysql.com/hfmain.(none)> | 2007-05-10 00:17:21 +0500 |
---|---|---|
committer | unknown <holyfoot/hf@mysql.com/hfmain.(none)> | 2007-05-10 00:17:21 +0500 |
commit | f2a52dd0f021b02177c10443cb1ee6b7ad20281a (patch) | |
tree | 5a715b5abe3283afbc2d322486f1f725316b9932 /sql/item_create.cc | |
parent | 187ccf4bca5bf865fec86581d894fb8e6df0792a (diff) | |
download | mariadb-git-f2a52dd0f021b02177c10443cb1ee6b7ad20281a.tar.gz |
Bug #27921 View ignores precision for CAST()
Item_decimal_typecast::print properly implemented
mysql-test/r/view.result:
Bug #27921 View ignores precision for CAST()
test result
mysql-test/t/view.test:
Bug #27921 View ignores precision for CAST()
test case
sql/field.cc:
zero decimals handling unified
sql/item_create.cc:
Bug #27921 View ignores precision for CAST()
create_func_cast parameters changed, zero precision handling unified
sql/item_create.h:
Bug #27921 View ignores precision for CAST()
create_func_cast parameters changed
sql/item_func.cc:
Bug #27921 View ignores precision for CAST()
Item_decimal_typecast::print properly implemented
sql/item_func.h:
Bug #27921 View ignores precision for CAST()
max_length counting fixed
sql/my_decimal.h:
Bug #27921 View ignores precision for CAST()
my_decimal_trim() implemented to unify zero precision handling
sql/sql_yacc.yy:
Bug #27921 View ignores precision for CAST()
create_func_cast calls simplified
Diffstat (limited to 'sql/item_create.cc')
-rw-r--r-- | sql/item_create.cc | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/sql/item_create.cc b/sql/item_create.cc index c1a81da0285..c4008d36aae 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -445,11 +445,13 @@ Item *create_load_file(Item* a) } -Item *create_func_cast(Item *a, Cast_target cast_type, int len, int dec, +Item *create_func_cast(Item *a, Cast_target cast_type, + const char *c_len, const char *c_dec, CHARSET_INFO *cs) { Item *res; - int tmp_len; + ulong len; + uint dec; LINT_INIT(res); switch (cast_type) { @@ -460,15 +462,18 @@ Item *create_func_cast(Item *a, Cast_target cast_type, int len, int dec, case ITEM_CAST_TIME: res= new Item_time_typecast(a); break; case ITEM_CAST_DATETIME: res= new Item_datetime_typecast(a); break; case ITEM_CAST_DECIMAL: - tmp_len= (len>0) ? len : 10; - if (tmp_len < dec) + len= c_len ? atoi(c_len) : 0; + dec= c_dec ? atoi(c_dec) : 0; + my_decimal_trim(&len, &dec); + if (len < dec) { my_error(ER_M_BIGGER_THAN_D, MYF(0), ""); return 0; } - res= new Item_decimal_typecast(a, tmp_len, dec ? dec : 2); + res= new Item_decimal_typecast(a, len, dec); break; case ITEM_CAST_CHAR: + len= c_len ? atoi(c_len) : -1; res= new Item_char_typecast(a, len, cs ? cs : current_thd->variables.collation_connection); break; @@ -476,6 +481,7 @@ Item *create_func_cast(Item *a, Cast_target cast_type, int len, int dec, return res; } + Item *create_func_is_free_lock(Item* a) { current_thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT); |