From e65aed9cbd61f5fc3c7cd396d60a9d6cb1d9b218 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 3 Apr 2004 17:23:41 +0300 Subject: [PATCH] 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 --- sql/item.cc | 8 ++++---- sql/sql_base.cc | 3 +++ tests/client_test.c | 40 +++++++++++++++++++++++++++------------- 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/sql/item.cc b/sql/item.cc index 8da4990942c..1efed78799a 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -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: diff --git a/sql/sql_base.cc b/sql/sql_base.cc index bea77c72bc0..48ba810c1a3 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -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); diff --git a/tests/client_test.c b/tests/client_test.c index 49856d6d60d..0d4d84b02c7 100644 --- a/tests/client_test.c +++ b/tests/client_test.c @@ -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 */