Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into rakia.gmz:/home/kgeorge/mysql/autopush/B11927-5.0-opt mysql-test/r/func_gconcat.result: Auto merged sql/field.cc: Auto merged sql/item.cc: Auto merged sql/item.h: Auto merged sql/item_func.h: Auto merged sql/item_subselect.h: Auto merged sql/item_sum.cc: Auto merged sql/item_sum.h: Auto merged sql/sql_string.h: Auto merged
This commit is contained in:
commit
bce65bf41b
@ -46,6 +46,10 @@ create table t1 (a tinyint(1),b binary(1));
|
|||||||
insert into t1 values (0x01,0x01);
|
insert into t1 values (0x01,0x01);
|
||||||
select * from t1 where a=b;
|
select * from t1 where a=b;
|
||||||
a b
|
a b
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: ''
|
||||||
select * from t1 where a=b and b=0x01;
|
select * from t1 where a=b and b=0x01;
|
||||||
a b
|
a b
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: ''
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
|
@ -64,11 +64,49 @@ grp group_concat(a order by a,d+c-ascii(c)-a)
|
|||||||
1 1
|
1 1
|
||||||
2 2,3
|
2 2,3
|
||||||
3 4,5,6,7,8,9
|
3 4,5,6,7,8,9
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'a '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'a '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'a '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'b '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'b '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'c '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'a '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'E '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'b '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'C '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'b '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'D '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'd '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'd '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'd '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'd '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'c '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'D '
|
||||||
select grp,group_concat(a order by d+c-ascii(c),a) from t1 group by grp;
|
select grp,group_concat(a order by d+c-ascii(c),a) from t1 group by grp;
|
||||||
grp group_concat(a order by d+c-ascii(c),a)
|
grp group_concat(a order by d+c-ascii(c),a)
|
||||||
1 1
|
1 1
|
||||||
2 3,2
|
2 3,2
|
||||||
3 7,8,4,6,9,5
|
3 7,8,4,6,9,5
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'a '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'a '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'a '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'b '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'b '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'c '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'a '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'E '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'b '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'C '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'b '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'D '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'd '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'd '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'd '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'd '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'c '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'D '
|
||||||
select grp,group_concat(c order by 1) from t1 group by grp;
|
select grp,group_concat(c order by 1) from t1 group by grp;
|
||||||
grp group_concat(c order by 1)
|
grp group_concat(c order by 1)
|
||||||
1 a
|
1 a
|
||||||
|
@ -62,6 +62,13 @@ NULL NULL
|
|||||||
1 7
|
1 7
|
||||||
2 20.25
|
2 20.25
|
||||||
3 45.483163247594
|
3 45.483163247594
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'a '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'a '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'b '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'c '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'C '
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 'E '
|
||||||
create table t2 (grp int, a bigint unsigned, c char(10));
|
create table t2 (grp int, a bigint unsigned, c char(10));
|
||||||
insert into t2 select grp,max(a)+max(grp),max(c) from t1 group by grp;
|
insert into t2 select grp,max(a)+max(grp),max(c) from t1 group by grp;
|
||||||
replace into t2 select grp, a, c from t1 limit 2,1;
|
replace into t2 select grp, a, c from t1 limit 2,1;
|
||||||
|
@ -453,3 +453,38 @@ id name_id id en cz
|
|||||||
2 3 2 en string 2 cz string 2
|
2 3 2 en string 2 cz string 2
|
||||||
3 3 3 en string 3 cz string 3
|
3 3 3 en string 3 cz string 3
|
||||||
drop table t1, t2, t3;
|
drop table t1, t2, t3;
|
||||||
|
CREATE TABLE t1 (a CHAR(2));
|
||||||
|
INSERT INTO t1 VALUES (10), (50), (30), ('1a'), (60), ('t');
|
||||||
|
SELECT a,(a + 0) FROM t1 ORDER BY a;
|
||||||
|
a (a + 0)
|
||||||
|
10 10
|
||||||
|
1a 1
|
||||||
|
30 30
|
||||||
|
50 50
|
||||||
|
60 60
|
||||||
|
t 0
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: '1a'
|
||||||
|
Warning 1292 Truncated incorrect DOUBLE value: 't '
|
||||||
|
SELECT a,(a DIV 2) FROM t1 ORDER BY a;
|
||||||
|
a (a DIV 2)
|
||||||
|
10 5
|
||||||
|
1a 0
|
||||||
|
30 15
|
||||||
|
50 25
|
||||||
|
60 30
|
||||||
|
t 0
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: '1a'
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: 't '
|
||||||
|
SELECT a,CAST(a AS SIGNED) FROM t1 ORDER BY a;
|
||||||
|
a CAST(a AS SIGNED)
|
||||||
|
10 10
|
||||||
|
1a 1
|
||||||
|
30 30
|
||||||
|
50 50
|
||||||
|
60 60
|
||||||
|
t 0
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: '1a'
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: 't'
|
||||||
|
@ -187,3 +187,12 @@ left join t3 on t1.id=t3.id order by t3.id;
|
|||||||
--disable_metadata
|
--disable_metadata
|
||||||
--enable_ps_protocol
|
--enable_ps_protocol
|
||||||
drop table t1, t2, t3;
|
drop table t1, t2, t3;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a CHAR(2));
|
||||||
|
INSERT INTO t1 VALUES (10), (50), (30), ('1a'), (60), ('t');
|
||||||
|
SELECT a,(a + 0) FROM t1 ORDER BY a;
|
||||||
|
SELECT a,(a DIV 2) FROM t1 ORDER BY a;
|
||||||
|
SELECT a,CAST(a AS SIGNED) FROM t1 ORDER BY a;
|
||||||
|
60
sql/field.cc
60
sql/field.cc
@ -47,6 +47,8 @@ uchar Field_null::null[1]={1};
|
|||||||
const char field_separator=',';
|
const char field_separator=',';
|
||||||
|
|
||||||
#define DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE 320
|
#define DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE 320
|
||||||
|
#define LONGLONG_TO_STRING_CONVERSION_BUFFER_SIZE 128
|
||||||
|
#define DECIMAL_TO_STRING_CONVERSION_BUFFER_SIZE 128
|
||||||
#define BLOB_PACK_LENGTH_TO_MAX_LENGH(arg) \
|
#define BLOB_PACK_LENGTH_TO_MAX_LENGH(arg) \
|
||||||
((ulong) ((LL(1) << min(arg, 4) * 8) - LL(1)))
|
((ulong) ((LL(1) << min(arg, 4) * 8) - LL(1)))
|
||||||
|
|
||||||
@ -6056,19 +6058,49 @@ int Field_longstr::store_decimal(const my_decimal *d)
|
|||||||
|
|
||||||
double Field_string::val_real(void)
|
double Field_string::val_real(void)
|
||||||
{
|
{
|
||||||
int not_used;
|
int error;
|
||||||
char *end_not_used;
|
char *end;
|
||||||
CHARSET_INFO *cs= charset();
|
CHARSET_INFO *cs= charset();
|
||||||
return my_strntod(cs,ptr,field_length,&end_not_used,¬_used);
|
double result;
|
||||||
|
|
||||||
|
result= my_strntod(cs,ptr,field_length,&end,&error);
|
||||||
|
if (!table->in_use->no_errors &&
|
||||||
|
(error || (field_length != (uint32)(end - ptr) &&
|
||||||
|
!check_if_only_end_space(cs, end, ptr + field_length))))
|
||||||
|
{
|
||||||
|
char buf[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE];
|
||||||
|
String tmp(buf, sizeof(buf), cs);
|
||||||
|
tmp.copy(ptr, field_length, cs);
|
||||||
|
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||||
|
ER_TRUNCATED_WRONG_VALUE,
|
||||||
|
ER(ER_TRUNCATED_WRONG_VALUE),
|
||||||
|
"DOUBLE", tmp.c_ptr());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
longlong Field_string::val_int(void)
|
longlong Field_string::val_int(void)
|
||||||
{
|
{
|
||||||
int not_used;
|
int error;
|
||||||
char *end_not_used;
|
char *end;
|
||||||
CHARSET_INFO *cs=charset();
|
CHARSET_INFO *cs= charset();
|
||||||
return my_strntoll(cs,ptr,field_length,10,&end_not_used,¬_used);
|
longlong result;
|
||||||
|
|
||||||
|
result= my_strntoll(cs,ptr,field_length,10,&end,&error);
|
||||||
|
if (!table->in_use->no_errors &&
|
||||||
|
(error || (field_length != (uint32)(end - ptr) &&
|
||||||
|
!check_if_only_end_space(cs, end, ptr + field_length))))
|
||||||
|
{
|
||||||
|
char buf[LONGLONG_TO_STRING_CONVERSION_BUFFER_SIZE];
|
||||||
|
String tmp(buf, sizeof(buf), cs);
|
||||||
|
tmp.copy(ptr, field_length, cs);
|
||||||
|
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||||
|
ER_TRUNCATED_WRONG_VALUE,
|
||||||
|
ER(ER_TRUNCATED_WRONG_VALUE),
|
||||||
|
"INTEGER", tmp.c_ptr());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -6085,8 +6117,20 @@ String *Field_string::val_str(String *val_buffer __attribute__((unused)),
|
|||||||
|
|
||||||
my_decimal *Field_string::val_decimal(my_decimal *decimal_value)
|
my_decimal *Field_string::val_decimal(my_decimal *decimal_value)
|
||||||
{
|
{
|
||||||
str2my_decimal(E_DEC_FATAL_ERROR, ptr, field_length, charset(),
|
int err= str2my_decimal(E_DEC_FATAL_ERROR, ptr, field_length, charset(),
|
||||||
decimal_value);
|
decimal_value);
|
||||||
|
if (!table->in_use->no_errors && err)
|
||||||
|
{
|
||||||
|
char buf[DECIMAL_TO_STRING_CONVERSION_BUFFER_SIZE];
|
||||||
|
CHARSET_INFO *cs= charset();
|
||||||
|
String tmp(buf, sizeof(buf), cs);
|
||||||
|
tmp.copy(ptr, field_length, cs);
|
||||||
|
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||||
|
ER_TRUNCATED_WRONG_VALUE,
|
||||||
|
ER(ER_TRUNCATED_WRONG_VALUE),
|
||||||
|
"DECIMAL", tmp.c_ptr());
|
||||||
|
}
|
||||||
|
|
||||||
return decimal_value;
|
return decimal_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
24
sql/item.cc
24
sql/item.cc
@ -2175,12 +2175,6 @@ void Item_string::print(String *str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline bool check_if_only_end_space(CHARSET_INFO *cs, char *str, char *end)
|
|
||||||
{
|
|
||||||
return str+ cs->cset->scan(cs, str, end, MY_SEQ_SPACES) == end;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
double Item_string::val_real()
|
double Item_string::val_real()
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(fixed == 1);
|
DBUG_ASSERT(fixed == 1);
|
||||||
@ -4764,6 +4758,22 @@ bool Item_field::send(Protocol *protocol, String *buffer)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Item_field::update_null_value()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
need to set no_errors to prevent warnings about type conversion
|
||||||
|
popping up.
|
||||||
|
*/
|
||||||
|
THD *thd= field->table->in_use;
|
||||||
|
int no_errors;
|
||||||
|
|
||||||
|
no_errors= thd->no_errors;
|
||||||
|
thd->no_errors= 1;
|
||||||
|
Item::update_null_value();
|
||||||
|
thd->no_errors= no_errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Item_ref::Item_ref(Name_resolution_context *context_arg,
|
Item_ref::Item_ref(Name_resolution_context *context_arg,
|
||||||
Item **item, const char *table_name_arg,
|
Item **item, const char *table_name_arg,
|
||||||
const char *field_name_arg)
|
const char *field_name_arg)
|
||||||
@ -6120,7 +6130,7 @@ bool Item_cache_row::null_inside()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
values[i]->val_int();
|
values[i]->update_null_value();
|
||||||
if (values[i]->null_value)
|
if (values[i]->null_value)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -703,6 +703,11 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual bool is_null() { return 0; }
|
virtual bool is_null() { return 0; }
|
||||||
|
|
||||||
|
/*
|
||||||
|
Make sure the null_value member has a correct value.
|
||||||
|
*/
|
||||||
|
virtual void update_null_value () { (void) val_int(); }
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Inform the item that there will be no distinction between its result
|
Inform the item that there will be no distinction between its result
|
||||||
being FALSE or NULL.
|
being FALSE or NULL.
|
||||||
@ -1270,6 +1275,7 @@ public:
|
|||||||
bool get_date_result(TIME *ltime,uint fuzzydate);
|
bool get_date_result(TIME *ltime,uint fuzzydate);
|
||||||
bool get_time(TIME *ltime);
|
bool get_time(TIME *ltime);
|
||||||
bool is_null() { return field->is_null(); }
|
bool is_null() { return field->is_null(); }
|
||||||
|
void update_null_value();
|
||||||
Item *get_tmp_table_item(THD *thd);
|
Item *get_tmp_table_item(THD *thd);
|
||||||
bool collect_item_field_processor(byte * arg);
|
bool collect_item_field_processor(byte * arg);
|
||||||
bool find_item_in_field_list_processor(byte *arg);
|
bool find_item_in_field_list_processor(byte *arg);
|
||||||
|
@ -157,7 +157,7 @@ public:
|
|||||||
return (null_value=args[0]->get_time(ltime));
|
return (null_value=args[0]->get_time(ltime));
|
||||||
}
|
}
|
||||||
bool is_null() {
|
bool is_null() {
|
||||||
(void) val_int(); /* Discard result. It sets null_value as side-effect. */
|
update_null_value();
|
||||||
return null_value;
|
return null_value;
|
||||||
}
|
}
|
||||||
void signal_divide_by_null();
|
void signal_divide_by_null();
|
||||||
@ -241,7 +241,7 @@ public:
|
|||||||
virtual double real_op()= 0;
|
virtual double real_op()= 0;
|
||||||
virtual my_decimal *decimal_op(my_decimal *)= 0;
|
virtual my_decimal *decimal_op(my_decimal *)= 0;
|
||||||
virtual String *str_op(String *)= 0;
|
virtual String *str_op(String *)= 0;
|
||||||
bool is_null() { (void) val_real(); return null_value; }
|
bool is_null() { update_null_value(); return null_value; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/* function where type of result detected by first argument */
|
/* function where type of result detected by first argument */
|
||||||
|
@ -91,7 +91,7 @@ public:
|
|||||||
enum Type type() const;
|
enum Type type() const;
|
||||||
bool is_null()
|
bool is_null()
|
||||||
{
|
{
|
||||||
val_int();
|
update_null_value();
|
||||||
return null_value;
|
return null_value;
|
||||||
}
|
}
|
||||||
bool fix_fields(THD *thd, Item **ref);
|
bool fix_fields(THD *thd, Item **ref);
|
||||||
|
@ -1050,7 +1050,7 @@ bool Item_sum_count::add()
|
|||||||
count++;
|
count++;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
(void) args[0]->val_int();
|
args[0]->update_null_value();
|
||||||
if (!args[0]->null_value)
|
if (!args[0]->null_value)
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
@ -1957,7 +1957,7 @@ void Item_sum_count::reset_field()
|
|||||||
nr=1;
|
nr=1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
(void) args[0]->val_int();
|
args[0]->update_null_value();
|
||||||
if (!args[0]->null_value)
|
if (!args[0]->null_value)
|
||||||
nr=1;
|
nr=1;
|
||||||
}
|
}
|
||||||
@ -2067,7 +2067,7 @@ void Item_sum_count::update_field()
|
|||||||
nr++;
|
nr++;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
(void) args[0]->val_int();
|
args[0]->update_null_value();
|
||||||
if (!args[0]->null_value)
|
if (!args[0]->null_value)
|
||||||
nr++;
|
nr++;
|
||||||
}
|
}
|
||||||
@ -2547,7 +2547,7 @@ bool Item_sum_count_distinct::setup(THD *thd)
|
|||||||
return TRUE; // End of memory
|
return TRUE; // End of memory
|
||||||
if (item->const_item())
|
if (item->const_item())
|
||||||
{
|
{
|
||||||
(void) item->val_int();
|
item->update_null_value();
|
||||||
if (item->null_value)
|
if (item->null_value)
|
||||||
always_null=1;
|
always_null=1;
|
||||||
}
|
}
|
||||||
|
@ -618,7 +618,7 @@ public:
|
|||||||
double val_real();
|
double val_real();
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
bool is_null() { (void) val_int(); return null_value; }
|
bool is_null() { update_null_value(); return null_value; }
|
||||||
String *val_str(String*);
|
String *val_str(String*);
|
||||||
enum_field_types field_type() const
|
enum_field_types field_type() const
|
||||||
{
|
{
|
||||||
@ -685,7 +685,7 @@ public:
|
|||||||
{ /* can't be fix_fields()ed */ return (longlong) rint(val_real()); }
|
{ /* can't be fix_fields()ed */ return (longlong) rint(val_real()); }
|
||||||
String *val_str(String*);
|
String *val_str(String*);
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
bool is_null() { (void) val_int(); return null_value; }
|
bool is_null() { update_null_value(); return null_value; }
|
||||||
enum_field_types field_type() const
|
enum_field_types field_type() const
|
||||||
{
|
{
|
||||||
return hybrid_type == DECIMAL_RESULT ?
|
return hybrid_type == DECIMAL_RESULT ?
|
||||||
|
@ -363,3 +363,9 @@ public:
|
|||||||
return (s->alloced && Ptr >= s->Ptr && Ptr < s->Ptr + s->str_length);
|
return (s->alloced && Ptr >= s->Ptr && Ptr < s->Ptr + s->str_length);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline bool check_if_only_end_space(CHARSET_INFO *cs, char *str,
|
||||||
|
char *end)
|
||||||
|
{
|
||||||
|
return str+ cs->cset->scan(cs, str, end, MY_SEQ_SPACES) == end;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user