Commit 24dd50e4 authored by walrus@mysql.com's avatar walrus@mysql.com
Browse files

Merge akishkin@work.mysql.com:/home/bk/mysql

into mysql.com:/home/walrus/bk/323
parents b5a740d0 5d2f8e96
Loading
Loading
Loading
Loading
+19 −4
Original line number Diff line number Diff line
@@ -1012,10 +1012,25 @@ row_update_cascade_for_mysql(

	err = trx->error_state;

	/* Note that the cascade node is a subnode of another InnoDB
	query graph node. We do a normal lock wait in this node, but
	all errors are handled by the parent node. */

	if (err == DB_LOCK_WAIT) {
		/* Handle lock wait here */
	
		que_thr_stop_for_mysql(thr);

		row_mysql_handle_errors(&err, trx, thr, NULL);
		srv_suspend_mysql_thread(thr);

		/* Note that a lock wait may also end in a lock wait timeout */

		if (trx->error_state != DB_SUCCESS) {

			return(trx->error_state);
		}

		/* Retry operation after a normal lock wait */
		
		goto run_again;
	}
+6 −0
Original line number Diff line number Diff line
@@ -130,3 +130,9 @@ a
a	b
1	1
1	2
a
1
2
a
1
2
+19 −0
Original line number Diff line number Diff line
@@ -114,3 +114,22 @@ insert into t2 values (1,1),(2,2),(0,0),(4,4),(5,5),(6,6);
flush tables;
select * from t3 where a=1 order by b limit 2;
drop table t3,t1,t2;

#
# temporary merge tables
#
drop table if exists t1, t2, t3, t4, t5, t6;
create table t1 (a int not null);
create table t2 (a int not null);
insert into t1 values (1);
insert into t2 values (2);
create temporary table t3 (a int not null) TYPE=MERGE UNION=(t1,t2);
select * from t3;
create temporary table t4 (a int not null);
create temporary table t5 (a int not null);
insert into t4 values (1);
insert into t5 values (2);
create temporary table t6 (a int not null) TYPE=MERGE UNION=(t4,t5);
select * from t6;
drop table if exists t1, t2, t3, t4, t5, t6;
+22 −1
Original line number Diff line number Diff line
@@ -264,7 +264,28 @@ int ha_myisammrg::create(const char *name, register TABLE *form,
					sizeof(char*))))
    DBUG_RETURN(1);
  for (pos=table_names ; tables ; tables=tables->next)
    *pos++= tables->real_name;
  {
    char *table_name;
    if (create_info->options & HA_LEX_CREATE_TMP_TABLE)
    {
      TABLE **tbl=find_temporary_table(current_thd,
          tables->db, tables->real_name);
      if (!tbl)
      {
        table_name=sql_alloc(1+
            my_snprintf(buff,FN_REFLEN,"%s/%s/%s",mysql_real_data_home,
                        tables->db, tables->real_name));
        if (!table_name)
          DBUG_RETURN(1);
        strcpy(table_name, buff);
      }
      else
        table_name=(*tbl)->path;
    }
    else
      table_name=tables->real_name;
    *pos++= table_name;
  }
  *pos=0;
  DBUG_RETURN(myrg_create(fn_format(buff,name,"","",2+4+16),
			  (const char **) table_names, (my_bool) 0));
+5 −3
Original line number Diff line number Diff line
@@ -1373,13 +1373,13 @@ add_ft_keys(DYNAMIC_ARRAY *keyuse_array,
           functype == Item_func::GT_FUNC)  &&
	   arg0->type() == Item::FUNC_ITEM          &&
           arg0->functype() == Item_func::FT_FUNC   &&
           arg1->const_item() && arg1->val()>=0)
           arg1->const_item() && arg1->val()>0)
        cond_func=(Item_func_match *) arg0;
      else if ((functype == Item_func::LE_FUNC ||
                functype == Item_func::LT_FUNC)  &&
                arg1->type() == Item::FUNC_ITEM          &&
                arg1->functype() == Item_func::FT_FUNC   &&
                arg0->const_item() && arg0->val()>=0)
                arg0->const_item() && arg0->val()>0)
        cond_func=(Item_func_match *) arg1;
    }
  }
@@ -4970,6 +4970,8 @@ end_write_group(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
    }
    else
    {
      if (end_of_records)
	DBUG_RETURN(0);
      join->first_record=1;
      VOID(test_if_group_changed(join->group_fields));
    }