fixed bug in subselect value storing
mysql-test/r/subselect.result: test for bug in subselect value storing mysql-test/t/subselect.test: test for bug in subselect value storing
This commit is contained in:
parent
16f5d95308
commit
261c22a87a
@ -159,6 +159,9 @@ UNIQUE KEY `email` (`email`)
|
||||
INSERT INTO inscrit (pseudo,email) VALUES ('joce','test');
|
||||
INSERT INTO inscrit (pseudo,email) VALUES ('joce1','test1');
|
||||
INSERT INTO inscrit (pseudo,email) VALUES ('2joce1','2test1');
|
||||
SELECT pseudo FROM inscrit WHERE pseudo=(SELECT pseudo FROM inscrit WHERE pseudo='joce');
|
||||
pseudo
|
||||
joce
|
||||
SELECT pseudo FROM inscrit WHERE pseudo=(SELECT pseudo FROM inscrit WHERE pseudo LIKE '%joce%');
|
||||
Subselect returns more than 1 record
|
||||
drop table if exists t1,t2,t3,t4,t5,attend,clinic,inscrit;
|
||||
|
@ -82,6 +82,7 @@ CREATE TABLE `inscrit` (
|
||||
INSERT INTO inscrit (pseudo,email) VALUES ('joce','test');
|
||||
INSERT INTO inscrit (pseudo,email) VALUES ('joce1','test1');
|
||||
INSERT INTO inscrit (pseudo,email) VALUES ('2joce1','2test1');
|
||||
SELECT pseudo FROM inscrit WHERE pseudo=(SELECT pseudo FROM inscrit WHERE pseudo='joce');
|
||||
-- error 1240
|
||||
SELECT pseudo FROM inscrit WHERE pseudo=(SELECT pseudo FROM inscrit WHERE pseudo LIKE '%joce%');
|
||||
|
||||
|
@ -150,6 +150,8 @@ String *Item_singleval_subselect::val_str (String *str)
|
||||
assign_null();
|
||||
return 0;
|
||||
}
|
||||
// Assign temporary buffer with stored value
|
||||
str_value.set(string_value, 0, string_value.length());
|
||||
return &str_value;
|
||||
}
|
||||
|
||||
|
@ -80,10 +80,16 @@ public:
|
||||
class Item_singleval_subselect :public Item_subselect
|
||||
{
|
||||
protected:
|
||||
longlong int_value; /* here stored integer value of this item */
|
||||
double real_value; /* here stored real value of this item */
|
||||
longlong int_value; /* Here stored integer value of this item */
|
||||
double real_value; /* Here stored real value of this item */
|
||||
/*
|
||||
Here stored string value of this item.
|
||||
(str_value used only as temporary buffer, because it can be changed
|
||||
by Item::save_field)
|
||||
*/
|
||||
String string_value;
|
||||
enum Item_result res_type; /* type of results */
|
||||
|
||||
|
||||
public:
|
||||
Item_singleval_subselect(THD *thd, st_select_lex *select_lex);
|
||||
Item_singleval_subselect(Item_singleval_subselect *item):
|
||||
@ -91,6 +97,7 @@ public:
|
||||
{
|
||||
int_value= item->int_value;
|
||||
real_value= item->real_value;
|
||||
string_value.set(item->string_value, 0, item->string_value.length());
|
||||
max_length= item->max_length;
|
||||
decimals= item->decimals;
|
||||
res_type= item->res_type;
|
||||
|
@ -884,9 +884,14 @@ bool select_singleval_subselect::send_data(List<Item> &items)
|
||||
it->decimals= val_item->decimals;
|
||||
it->binary= val_item->binary;
|
||||
it->int_value= val_item->val_int();
|
||||
String *s= val_item->val_str(&it->str_value);
|
||||
if (s != &it->str_value)
|
||||
it->str_value.set(*s, 0, s->length());
|
||||
String *s= val_item->val_str(&it->string_value);
|
||||
if (s != &it->string_value)
|
||||
{
|
||||
it->string_value.set(*s, 0, s->length());
|
||||
}
|
||||
// TODO: remove when correct charset handling appeared for Item
|
||||
it->str_value.set(*s, 0, s->length()); // store charset
|
||||
|
||||
it->res_type= val_item->result_type();
|
||||
}
|
||||
it->assigned(1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user