Commit 9ae7dd9e authored by cmiller@zippy.(none)'s avatar cmiller@zippy.(none)

Merge zippy.(none):/home/cmiller/work/mysql/merge/jimw_merge

into  zippy.(none):/home/cmiller/work/mysql/merge/mysql-5.1-new
parents 69369585 b57eb9e1
...@@ -2241,8 +2241,10 @@ print_table_data(MYSQL_RES *result) ...@@ -2241,8 +2241,10 @@ print_table_data(MYSQL_RES *result)
MYSQL_ROW cur; MYSQL_ROW cur;
MYSQL_FIELD *field; MYSQL_FIELD *field;
bool *num_flag; bool *num_flag;
bool *not_null_flag;
num_flag=(bool*) my_alloca(sizeof(bool)*mysql_num_fields(result)); num_flag=(bool*) my_alloca(sizeof(bool)*mysql_num_fields(result));
not_null_flag=(bool*) my_alloca(sizeof(bool)*mysql_num_fields(result));
if (info_flag) if (info_flag)
{ {
print_field_types(result); print_field_types(result);
...@@ -2260,7 +2262,7 @@ print_table_data(MYSQL_RES *result) ...@@ -2260,7 +2262,7 @@ print_table_data(MYSQL_RES *result)
length=max(length,field->max_length); length=max(length,field->max_length);
if (length < 4 && !IS_NOT_NULL(field->flags)) if (length < 4 && !IS_NOT_NULL(field->flags))
length=4; // Room for "NULL" length=4; // Room for "NULL"
field->max_length=length+1; field->max_length=length;
separator.fill(separator.length()+length+2,'-'); separator.fill(separator.length()+length+2,'-');
separator.append('+'); separator.append('+');
} }
...@@ -2272,10 +2274,11 @@ print_table_data(MYSQL_RES *result) ...@@ -2272,10 +2274,11 @@ print_table_data(MYSQL_RES *result)
(void) tee_fputs("|", PAGER); (void) tee_fputs("|", PAGER);
for (uint off=0; (field = mysql_fetch_field(result)) ; off++) for (uint off=0; (field = mysql_fetch_field(result)) ; off++)
{ {
tee_fprintf(PAGER, " %-*s|",(int) min(field->max_length, tee_fprintf(PAGER, " %-*s |",(int) min(field->max_length,
MAX_COLUMN_LENGTH), MAX_COLUMN_LENGTH),
field->name); field->name);
num_flag[off]= IS_NUM(field->type); num_flag[off]= IS_NUM(field->type);
not_null_flag[off]= IS_NOT_NULL(field->flags);
} }
(void) tee_fputs("\n", PAGER); (void) tee_fputs("\n", PAGER);
tee_puts((char*) separator.ptr(), PAGER); tee_puts((char*) separator.ptr(), PAGER);
...@@ -2295,7 +2298,8 @@ print_table_data(MYSQL_RES *result) ...@@ -2295,7 +2298,8 @@ print_table_data(MYSQL_RES *result)
uint visible_length; uint visible_length;
uint extra_padding; uint extra_padding;
if (lengths[off] == 0) /* If this column may have a null value, use "NULL" for empty. */
if (! not_null_flag[off] && (lengths[off] == 0))
{ {
buffer= "NULL"; buffer= "NULL";
data_length= 4; data_length= 4;
...@@ -2335,6 +2339,7 @@ print_table_data(MYSQL_RES *result) ...@@ -2335,6 +2339,7 @@ print_table_data(MYSQL_RES *result)
} }
tee_puts((char*) separator.ptr(), PAGER); tee_puts((char*) separator.ptr(), PAGER);
my_afree((gptr) num_flag); my_afree((gptr) num_flag);
my_afree((gptr) not_null_flag);
} }
...@@ -2349,11 +2354,8 @@ tee_print_sized_data(const char *data, unsigned int data_length, unsigned int to ...@@ -2349,11 +2354,8 @@ tee_print_sized_data(const char *data, unsigned int data_length, unsigned int to
unsigned int i; unsigned int i;
const char *p; const char *p;
total_bytes_to_send -= 1;
/* Off by one, perhaps mistakenly accounting for a terminating NUL. */
if (right_justified) if (right_justified)
for (i= 0; i < (total_bytes_to_send - data_length); i++) for (i= data_length; i < total_bytes_to_send; i++)
tee_putc((int)' ', PAGER); tee_putc((int)' ', PAGER);
for (i= 0, p= data; i < data_length; i+= 1, p+= 1) for (i= 0, p= data; i < data_length; i+= 1, p+= 1)
...@@ -2365,7 +2367,7 @@ tee_print_sized_data(const char *data, unsigned int data_length, unsigned int to ...@@ -2365,7 +2367,7 @@ tee_print_sized_data(const char *data, unsigned int data_length, unsigned int to
} }
if (! right_justified) if (! right_justified)
for (i= 0; i < (total_bytes_to_send - data_length); i++) for (i= data_length; i < total_bytes_to_send; i++)
tee_putc((int)' ', PAGER); tee_putc((int)' ', PAGER);
} }
......
...@@ -1030,3 +1030,13 @@ c res ...@@ -1030,3 +1030,13 @@ c res
y,abc abc y,abc abc
y,abc abc y,abc abc
drop table t1; drop table t1;
select cast(rtrim(' 20.06 ') as decimal(19,2));
cast(rtrim(' 20.06 ') as decimal(19,2))
20.06
select cast(ltrim(' 20.06 ') as decimal(19,2));
cast(ltrim(' 20.06 ') as decimal(19,2))
20.06
select cast(rtrim(ltrim(' 20.06 ')) as decimal(19,2));
cast(rtrim(ltrim(' 20.06 ')) as decimal(19,2))
20.06
End of 5.0 tests
...@@ -85,3 +85,15 @@ c_cp932 ...@@ -85,3 +85,15 @@ c_cp932
| NULL | NULL | Τη γλώσσα | | NULL | NULL | Τη γλώσσα |
| NULL | NULL | ᛖᚴ ᚷᛖᛏ | | NULL | NULL | ᛖᚴ ᚷᛖᛏ |
+------+------+---------------------------+ +------+------+---------------------------+
+------+---+------+
| i | j | k |
+------+---+------+
| NULL | 1 | NULL |
+------+---+------+
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i | int(11) | YES | | NULL | |
| j | int(11) | NO | | NULL | |
| k | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
...@@ -684,4 +684,11 @@ insert into t1 values ('y,abc'),('y,abc'); ...@@ -684,4 +684,11 @@ insert into t1 values ('y,abc'),('y,abc');
select c, substring_index(lcase(c), @q:=',', -1) as res from t1; select c, substring_index(lcase(c), @q:=',', -1) as res from t1;
drop table t1; drop table t1;
# End of 5.0 tests #
# Bug #17043: Casting trimmed string to decimal loses precision
#
select cast(rtrim(' 20.06 ') as decimal(19,2));
select cast(ltrim(' 20.06 ') as decimal(19,2));
select cast(rtrim(ltrim(' 20.06 ')) as decimal(19,2));
--echo End of 5.0 tests
...@@ -67,3 +67,8 @@ drop table t1; ...@@ -67,3 +67,8 @@ drop table t1;
# #
--exec $MYSQL -t --default-character-set utf8 test -e "create table t1 (i int, j int, k char(25) charset utf8); insert into t1 (i) values (1); insert into t1 (k) values ('<----------------------->'); insert into t1 (k) values ('<-----'); insert into t1 (k) values ('Τη γλώσσα'); insert into t1 (k) values ('ᛖᚴ ᚷᛖᛏ'); select * from t1; DROP TABLE t1;" --exec $MYSQL -t --default-character-set utf8 test -e "create table t1 (i int, j int, k char(25) charset utf8); insert into t1 (i) values (1); insert into t1 (k) values ('<----------------------->'); insert into t1 (k) values ('<-----'); insert into t1 (k) values ('Τη γλώσσα'); insert into t1 (k) values ('ᛖᚴ ᚷᛖᛏ'); select * from t1; DROP TABLE t1;"
#
# "DESCRIBE" commands may return strange NULLness flags.
#
--exec $MYSQL -t --default-character-set utf8 test -e "create table t1 (i int, j int not null, k int); insert into t1 values (null, 1, null); select * from t1; describe t1; drop table t1;"
...@@ -80,6 +80,20 @@ String *Item_str_func::check_well_formed_result(String *str) ...@@ -80,6 +80,20 @@ String *Item_str_func::check_well_formed_result(String *str)
} }
my_decimal *Item_str_func::val_decimal(my_decimal *decimal_value)
{
DBUG_ASSERT(fixed == 1);
char buff[64];
String *res, tmp(buff,sizeof(buff), &my_charset_bin);
res= val_str(&tmp);
if (!res)
return 0;
(void)str2my_decimal(E_DEC_FATAL_ERROR, (char*) res->ptr(),
res->length(), res->charset(), decimal_value);
return decimal_value;
}
double Item_str_func::val_real() double Item_str_func::val_real()
{ {
DBUG_ASSERT(fixed == 1); DBUG_ASSERT(fixed == 1);
......
...@@ -33,6 +33,7 @@ class Item_str_func :public Item_func ...@@ -33,6 +33,7 @@ class Item_str_func :public Item_func
Item_str_func(List<Item> &list) :Item_func(list) {decimals=NOT_FIXED_DEC; } Item_str_func(List<Item> &list) :Item_func(list) {decimals=NOT_FIXED_DEC; }
longlong val_int(); longlong val_int();
double val_real(); double val_real();
my_decimal *val_decimal(my_decimal *);
enum Item_result result_type () const { return STRING_RESULT; } enum Item_result result_type () const { return STRING_RESULT; }
void left_right_max_length(); void left_right_max_length();
String *check_well_formed_result(String *str); String *check_well_formed_result(String *str);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment