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 ('joce','test');
|
||||||
INSERT INTO inscrit (pseudo,email) VALUES ('joce1','test1');
|
INSERT INTO inscrit (pseudo,email) VALUES ('joce1','test1');
|
||||||
INSERT INTO inscrit (pseudo,email) VALUES ('2joce1','2test1');
|
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%');
|
SELECT pseudo FROM inscrit WHERE pseudo=(SELECT pseudo FROM inscrit WHERE pseudo LIKE '%joce%');
|
||||||
Subselect returns more than 1 record
|
Subselect returns more than 1 record
|
||||||
drop table if exists t1,t2,t3,t4,t5,attend,clinic,inscrit;
|
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 ('joce','test');
|
||||||
INSERT INTO inscrit (pseudo,email) VALUES ('joce1','test1');
|
INSERT INTO inscrit (pseudo,email) VALUES ('joce1','test1');
|
||||||
INSERT INTO inscrit (pseudo,email) VALUES ('2joce1','2test1');
|
INSERT INTO inscrit (pseudo,email) VALUES ('2joce1','2test1');
|
||||||
|
SELECT pseudo FROM inscrit WHERE pseudo=(SELECT pseudo FROM inscrit WHERE pseudo='joce');
|
||||||
-- error 1240
|
-- error 1240
|
||||||
SELECT pseudo FROM inscrit WHERE pseudo=(SELECT pseudo FROM inscrit WHERE pseudo LIKE '%joce%');
|
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();
|
assign_null();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
// Assign temporary buffer with stored value
|
||||||
|
str_value.set(string_value, 0, string_value.length());
|
||||||
return &str_value;
|
return &str_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,8 +80,14 @@ public:
|
|||||||
class Item_singleval_subselect :public Item_subselect
|
class Item_singleval_subselect :public Item_subselect
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
longlong int_value; /* here stored integer value of this item */
|
longlong int_value; /* Here stored integer value of this item */
|
||||||
double real_value; /* here stored real 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 */
|
enum Item_result res_type; /* type of results */
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -91,6 +97,7 @@ public:
|
|||||||
{
|
{
|
||||||
int_value= item->int_value;
|
int_value= item->int_value;
|
||||||
real_value= item->real_value;
|
real_value= item->real_value;
|
||||||
|
string_value.set(item->string_value, 0, item->string_value.length());
|
||||||
max_length= item->max_length;
|
max_length= item->max_length;
|
||||||
decimals= item->decimals;
|
decimals= item->decimals;
|
||||||
res_type= item->res_type;
|
res_type= item->res_type;
|
||||||
|
@ -884,9 +884,14 @@ bool select_singleval_subselect::send_data(List<Item> &items)
|
|||||||
it->decimals= val_item->decimals;
|
it->decimals= val_item->decimals;
|
||||||
it->binary= val_item->binary;
|
it->binary= val_item->binary;
|
||||||
it->int_value= val_item->val_int();
|
it->int_value= val_item->val_int();
|
||||||
String *s= val_item->val_str(&it->str_value);
|
String *s= val_item->val_str(&it->string_value);
|
||||||
if (s != &it->str_value)
|
if (s != &it->string_value)
|
||||||
it->str_value.set(*s, 0, s->length());
|
{
|
||||||
|
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->res_type= val_item->result_type();
|
||||||
}
|
}
|
||||||
it->assigned(1);
|
it->assigned(1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user