Commit 91196dc7 authored by unknown's avatar unknown

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
parent 2b935463
......@@ -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)";
myheader("test_on");
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("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 */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment