for Item_param we have to have value set instead of fave item fixed (BUG#3353)
fixed outer joins test of different joins included sql/item.cc: for Item_param we have to have value set instead of fave item fixed sql/sql_base.cc: fixed PS with outer joins tests/client_test.c: test of different types of joins
This commit is contained in:
parent
d7c25fe28e
commit
e65aed9cbd
@ -713,7 +713,7 @@ bool Item_param::get_time(TIME *res)
|
||||
|
||||
double Item_param::val()
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
DBUG_ASSERT(value_is_set == 1);
|
||||
int err;
|
||||
switch (item_result_type) {
|
||||
case STRING_RESULT:
|
||||
@ -729,7 +729,7 @@ double Item_param::val()
|
||||
|
||||
longlong Item_param::val_int()
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
DBUG_ASSERT(value_is_set == 1);
|
||||
int err;
|
||||
switch (item_result_type) {
|
||||
case STRING_RESULT:
|
||||
@ -746,7 +746,7 @@ longlong Item_param::val_int()
|
||||
|
||||
String *Item_param::val_str(String* str)
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
DBUG_ASSERT(value_is_set == 1);
|
||||
switch (item_result_type) {
|
||||
case INT_RESULT:
|
||||
str->set(int_value, &my_charset_bin);
|
||||
@ -766,7 +766,7 @@ String *Item_param::val_str(String* str)
|
||||
|
||||
String *Item_param::query_val_str(String* str)
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
DBUG_ASSERT(value_is_set == 1);
|
||||
switch (item_result_type) {
|
||||
case INT_RESULT:
|
||||
case REAL_RESULT:
|
||||
|
@ -2469,6 +2469,9 @@ int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds)
|
||||
}
|
||||
thd->lex->current_select->cond_count+= cond_and->list.elements;
|
||||
|
||||
// to prevent natural join processing during PS re-execution
|
||||
table->natural_join= 0;
|
||||
|
||||
if (!table->outer_join) // Not left join
|
||||
{
|
||||
*conds= and_conds(*conds, cond_and);
|
||||
|
@ -8495,13 +8495,21 @@ static void test_bug3117()
|
||||
}
|
||||
|
||||
|
||||
static void test_on()
|
||||
static void jest_join()
|
||||
{
|
||||
MYSQL_STMT *stmt;
|
||||
int rc, i;
|
||||
const char *query= "SELECT * FROM t2 join t1 on (t1.a=t2.a)";
|
||||
int rc, i, j;
|
||||
const char *query[]={"SELECT * FROM t2 join t1 on (t1.a=t2.a)",
|
||||
"SELECT * FROM t2 natural join t1",
|
||||
"SELECT * FROM t2 join t1 using(a)",
|
||||
"SELECT * FROM t2 left join t1 on(t1.a=t2.a)",
|
||||
"SELECT * FROM t2 natural left join t1",
|
||||
"SELECT * FROM t2 left join t1 using(a)",
|
||||
"SELECT * FROM t2 right join t1 on(t1.a=t2.a)",
|
||||
"SELECT * FROM t2 natural right join t1",
|
||||
"SELECT * FROM t2 right join t1 using(a)"};
|
||||
|
||||
myheader("test_on");
|
||||
myheader("jest_join");
|
||||
|
||||
rc = mysql_query(mysql, "DROP TABLE IF EXISTS t1,t2");
|
||||
myquery(rc);
|
||||
@ -8513,18 +8521,24 @@ static void test_on()
|
||||
"insert into t1 values (1,1), (2, 2), (3,3), (4,4), (5,5);");
|
||||
myquery(rc);
|
||||
|
||||
rc= mysql_query(mysql,"create table t2 select * from t1;");
|
||||
rc= mysql_query(mysql,"CREATE TABLE t2 (a int , c int);");
|
||||
myquery(rc);
|
||||
|
||||
stmt= mysql_prepare(mysql, query, strlen(query));
|
||||
mystmt_init(stmt);
|
||||
for (i= 0; i < 3; i++)
|
||||
rc= mysql_query(mysql,
|
||||
"insert into t2 values (1,1), (2, 2), (3,3), (4,4), (5,5);");
|
||||
|
||||
for (j= 0; j < 9; j++)
|
||||
{
|
||||
rc= mysql_execute(stmt);
|
||||
mystmt(stmt, rc);
|
||||
assert(5 == my_process_stmt_result(stmt));
|
||||
stmt= mysql_prepare(mysql, query[j], strlen(query[j]));
|
||||
mystmt_init(stmt);
|
||||
for (i= 0; i < 3; i++)
|
||||
{
|
||||
rc= mysql_execute(stmt);
|
||||
mystmt(stmt, rc);
|
||||
assert(5 == my_process_stmt_result(stmt));
|
||||
}
|
||||
mysql_stmt_close(stmt);
|
||||
}
|
||||
mysql_stmt_close(stmt);
|
||||
|
||||
rc= mysql_query(mysql, "DROP TABLE t1,t2");
|
||||
myquery(rc);
|
||||
@ -8836,7 +8850,7 @@ int main(int argc, char **argv)
|
||||
Item_field -> Item_ref */
|
||||
test_union(); /* test union with prepared statements */
|
||||
test_bug3117(); /* BUG#3117: LAST_INSERT_ID() */
|
||||
test_on(); /* ... join ... on(), BUG#2794 */
|
||||
jest_join(); /* different kinds of join, BUG#2794 */
|
||||
test_selecttmp(); /* temporary table used in select execution */
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user