Merge bk-internal.mysql.com:/home/bk/mysql-5.1-engines
into stella.local:/home2/mydev/mysql-5.1-bug31210 sql/sql_acl.cc: Auto merged sql/sql_base.cc: Auto merged sql/sql_connect.cc: Auto merged sql/sql_insert.cc: Auto merged sql/sql_lex.cc: Auto merged sql/sql_lex.h: Auto merged sql/sql_servers.cc: Auto merged sql/sql_udf.cc: Auto merged sql/table.cc: Auto merged
This commit is contained in:
commit
4b1e7b75b1
@ -183,3 +183,7 @@ c1 c2 c3
|
||||
182 abc 2002-11-09
|
||||
184 abc 2002-11-22
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (c1 INT) ENGINE=MyISAM PARTITION BY HASH(c1) PARTITIONS 1;
|
||||
INSERT DELAYED INTO t1 VALUES (1);
|
||||
ERROR HY000: Table storage engine for 't1' doesn't have this option
|
||||
DROP TABLE t1;
|
||||
|
@ -144,3 +144,11 @@ select * from t1 where c3 between '2002-01-01' and '2002-12-31';
|
||||
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#31210 - INSERT DELAYED crashes server when used on partitioned table
|
||||
#
|
||||
CREATE TABLE t1 (c1 INT) ENGINE=MyISAM PARTITION BY HASH(c1) PARTITIONS 1;
|
||||
--error ER_ILLEGAL_HA
|
||||
INSERT DELAYED INTO t1 VALUES (1);
|
||||
DROP TABLE t1;
|
||||
|
||||
|
@ -127,6 +127,7 @@ post_init_event_thread(THD *thd)
|
||||
thd->cleanup();
|
||||
return TRUE;
|
||||
}
|
||||
lex_start(thd);
|
||||
|
||||
pthread_mutex_lock(&LOCK_thread_count);
|
||||
threads.append(thd);
|
||||
|
@ -884,6 +884,7 @@ Events::init(my_bool opt_noacl)
|
||||
*/
|
||||
thd->thread_stack= (char*) &thd;
|
||||
thd->store_globals();
|
||||
lex_start(thd);
|
||||
|
||||
/*
|
||||
We will need Event_db_repository anyway, even if the scheduler is
|
||||
|
@ -3621,6 +3621,7 @@ pthread_handler_t ndb_binlog_thread_func(void *arg)
|
||||
pthread_exit(0);
|
||||
DBUG_RETURN(NULL);
|
||||
}
|
||||
lex_start(thd);
|
||||
|
||||
thd->init_for_queries();
|
||||
thd->command= COM_DAEMON;
|
||||
|
@ -1510,6 +1510,7 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type)
|
||||
delete thd;
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
lex_start(thd);
|
||||
|
||||
if (thd_type == SLAVE_THD_SQL)
|
||||
thd->proc_info= "Waiting for the next event in relay log";
|
||||
|
@ -277,6 +277,7 @@ my_bool acl_init(bool dont_read_acl_tables)
|
||||
DBUG_RETURN(1); /* purecov: inspected */
|
||||
thd->thread_stack= (char*) &thd;
|
||||
thd->store_globals();
|
||||
lex_start(thd);
|
||||
/*
|
||||
It is safe to call acl_reload() since acl_* arrays and hashes which
|
||||
will be freed there are global static objects and thus are initialized
|
||||
@ -3493,6 +3494,7 @@ my_bool grant_init()
|
||||
DBUG_RETURN(1); /* purecov: deadcode */
|
||||
thd->thread_stack= (char*) &thd;
|
||||
thd->store_globals();
|
||||
lex_start(thd);
|
||||
return_val= grant_reload(thd);
|
||||
delete thd;
|
||||
/* Remember that we don't have a THD */
|
||||
|
@ -2248,6 +2248,9 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root,
|
||||
HASH_SEARCH_STATE state;
|
||||
DBUG_ENTER("open_table");
|
||||
|
||||
/* Parsing of partitioning information from .frm needs thd->lex set up. */
|
||||
DBUG_ASSERT(thd->lex->is_lex_started);
|
||||
|
||||
/* find a unused table in the open table cache */
|
||||
if (refresh)
|
||||
*refresh=0;
|
||||
|
@ -1095,6 +1095,7 @@ pthread_handler_t handle_one_connection(void *arg)
|
||||
{
|
||||
NET *net= &thd->net;
|
||||
|
||||
lex_start(thd);
|
||||
if (login_connection(thd))
|
||||
goto end_thread;
|
||||
|
||||
|
@ -2267,7 +2267,12 @@ pthread_handler_t handle_delayed_insert(void *arg)
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* open table */
|
||||
/*
|
||||
Open table requires an initialized lex in case the table is
|
||||
partitioned. The .frm file contains a partial SQL string which is
|
||||
parsed using a lex, that depends on initialized thd->lex.
|
||||
*/
|
||||
lex_start(thd);
|
||||
if (!(di->table=open_ltable(thd, &di->table_list, TL_WRITE_DELAYED, 0)))
|
||||
{
|
||||
thd->fatal_error(); // Abort waiting inserts
|
||||
|
@ -363,6 +363,7 @@ void lex_start(THD *thd)
|
||||
lex->server_options.owner= 0;
|
||||
lex->server_options.port= -1;
|
||||
|
||||
lex->is_lex_started= TRUE;
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
@ -2139,7 +2140,7 @@ void Query_tables_list::destroy_query_tables_list()
|
||||
|
||||
st_lex::st_lex()
|
||||
:result(0), yacc_yyss(0), yacc_yyvs(0),
|
||||
sql_command(SQLCOM_END), option_type(OPT_DEFAULT)
|
||||
sql_command(SQLCOM_END), option_type(OPT_DEFAULT), is_lex_started(0)
|
||||
{
|
||||
|
||||
my_init_dynamic_array2(&plugins, sizeof(plugin_ref),
|
||||
|
@ -1712,6 +1712,7 @@ typedef struct st_lex : public Query_tables_list
|
||||
st_alter_tablespace *alter_tablespace_info;
|
||||
|
||||
bool escape_used;
|
||||
bool is_lex_started; /* If lex_start() did run. For debugging. */
|
||||
|
||||
st_lex();
|
||||
|
||||
|
@ -1329,6 +1329,7 @@ static void plugin_load(MEM_ROOT *tmp_root, int *argc, char **argv)
|
||||
}
|
||||
new_thd->thread_stack= (char*) &tables;
|
||||
new_thd->store_globals();
|
||||
lex_start(new_thd);
|
||||
new_thd->db= my_strdup("mysql", MYF(0));
|
||||
new_thd->db_length= 5;
|
||||
bzero((uchar*)&tables, sizeof(tables));
|
||||
|
@ -140,6 +140,7 @@ bool servers_init(bool dont_read_servers_table)
|
||||
DBUG_RETURN(TRUE);
|
||||
thd->thread_stack= (char*) &thd;
|
||||
thd->store_globals();
|
||||
lex_start(thd);
|
||||
/*
|
||||
It is safe to call servers_reload() since servers_* arrays and hashes which
|
||||
will be freed there are global static objects and thus are initialized
|
||||
|
@ -135,6 +135,7 @@ void udf_init()
|
||||
initialized = 1;
|
||||
new_thd->thread_stack= (char*) &new_thd;
|
||||
new_thd->store_globals();
|
||||
lex_start(new_thd);
|
||||
new_thd->set_db(db, sizeof(db)-1);
|
||||
|
||||
bzero((uchar*) &tables,sizeof(tables));
|
||||
|
@ -1610,6 +1610,9 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias,
|
||||
DBUG_PRINT("enter",("name: '%s.%s' form: 0x%lx", share->db.str,
|
||||
share->table_name.str, (long) outparam));
|
||||
|
||||
/* Parsing of partitioning information from .frm needs thd->lex set up. */
|
||||
DBUG_ASSERT(thd->lex->is_lex_started);
|
||||
|
||||
error= 1;
|
||||
bzero((char*) outparam, sizeof(*outparam));
|
||||
outparam->in_use= thd;
|
||||
|
@ -1575,6 +1575,7 @@ my_tz_init(THD *org_thd, const char *default_tzname, my_bool bootstrap)
|
||||
DBUG_RETURN(1);
|
||||
thd->thread_stack= (char*) &thd;
|
||||
thd->store_globals();
|
||||
lex_start(thd);
|
||||
|
||||
/* Init all memory structures that require explicit destruction */
|
||||
if (hash_init(&tz_names, &my_charset_latin1, 20,
|
||||
|
Loading…
x
Reference in New Issue
Block a user