mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
merge from latest 5.5
This commit is contained in:
271
sql/sql_class.cc
271
sql/sql_class.cc
@ -217,6 +217,252 @@ bool foreign_key_prefix(Key *a, Key *b)
|
||||
** Thread specific functions
|
||||
****************************************************************************/
|
||||
|
||||
/**
|
||||
Get reference to scheduler data object
|
||||
|
||||
@param thd THD object
|
||||
|
||||
@retval Scheduler data object on THD
|
||||
*/
|
||||
void *thd_get_scheduler_data(THD *thd)
|
||||
{
|
||||
return thd->scheduler.data;
|
||||
}
|
||||
|
||||
/**
|
||||
Set reference to Scheduler data object for THD object
|
||||
|
||||
@param thd THD object
|
||||
@param psi Scheduler data object to set on THD
|
||||
*/
|
||||
void thd_set_scheduler_data(THD *thd, void *data)
|
||||
{
|
||||
thd->scheduler.data= data;
|
||||
}
|
||||
|
||||
/**
|
||||
Get reference to Performance Schema object for THD object
|
||||
|
||||
@param thd THD object
|
||||
|
||||
@retval Performance schema object for thread on THD
|
||||
*/
|
||||
PSI_thread *thd_get_psi(THD *thd)
|
||||
{
|
||||
return thd->scheduler.m_psi;
|
||||
}
|
||||
|
||||
/**
|
||||
Set reference to Performance Schema object for THD object
|
||||
|
||||
@param thd THD object
|
||||
@param psi Performance schema object for thread
|
||||
*/
|
||||
void thd_set_psi(THD *thd, PSI_thread *psi)
|
||||
{
|
||||
thd->scheduler.m_psi= psi;
|
||||
}
|
||||
|
||||
/**
|
||||
Set the state on connection to killed
|
||||
|
||||
@param thd THD object
|
||||
*/
|
||||
void thd_set_killed(THD *thd)
|
||||
{
|
||||
thd->killed= THD::KILL_CONNECTION;
|
||||
}
|
||||
|
||||
/**
|
||||
Clear errors from the previous THD
|
||||
|
||||
@param thd THD object
|
||||
*/
|
||||
void thd_clear_errors(THD *thd)
|
||||
{
|
||||
my_errno= 0;
|
||||
thd->mysys_var->abort= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
Set thread stack in THD object
|
||||
|
||||
@param thd Thread object
|
||||
@param stack_start Start of stack to set in THD object
|
||||
*/
|
||||
void thd_set_thread_stack(THD *thd, char *stack_start)
|
||||
{
|
||||
thd->thread_stack= stack_start;
|
||||
}
|
||||
|
||||
/**
|
||||
Lock connection data for the set of connections this connection
|
||||
belongs to
|
||||
|
||||
@param thd THD object
|
||||
*/
|
||||
void thd_lock_thread_count(THD *)
|
||||
{
|
||||
mysql_mutex_lock(&LOCK_thread_count);
|
||||
}
|
||||
|
||||
/**
|
||||
Lock connection data for the set of connections this connection
|
||||
belongs to
|
||||
|
||||
@param thd THD object
|
||||
*/
|
||||
void thd_unlock_thread_count(THD *)
|
||||
{
|
||||
mysql_cond_broadcast(&COND_thread_count);
|
||||
mysql_mutex_unlock(&LOCK_thread_count);
|
||||
}
|
||||
|
||||
/**
|
||||
Close the socket used by this connection
|
||||
|
||||
@param thd THD object
|
||||
*/
|
||||
void thd_close_connection(THD *thd)
|
||||
{
|
||||
if (thd->net.vio)
|
||||
vio_close(thd->net.vio);
|
||||
}
|
||||
|
||||
/**
|
||||
Get current THD object from thread local data
|
||||
|
||||
@retval The THD object for the thread, NULL if not connection thread
|
||||
*/
|
||||
THD *thd_get_current_thd()
|
||||
{
|
||||
return current_thd;
|
||||
}
|
||||
|
||||
/**
|
||||
Set up various THD data for a new connection
|
||||
|
||||
thd_new_connection_setup
|
||||
|
||||
@param thd THD object
|
||||
@param stack_start Start of stack for connection
|
||||
*/
|
||||
void thd_new_connection_setup(THD *thd, char *stack_start)
|
||||
{
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
if (PSI_server)
|
||||
thd_set_psi(thd,
|
||||
PSI_server->new_thread(key_thread_one_connection,
|
||||
thd,
|
||||
thd_get_thread_id((MYSQL_THD)thd)));
|
||||
#endif
|
||||
thd->set_time();
|
||||
thd->prior_thr_create_utime= thd->thr_create_utime= thd->start_utime=
|
||||
my_micro_time();
|
||||
threads.append(thd);
|
||||
thd_unlock_thread_count(thd);
|
||||
DBUG_PRINT("info", ("init new connection. thd: 0x%lx fd: %d",
|
||||
(ulong)thd, thd->net.vio->sd));
|
||||
thd_set_thread_stack(thd, stack_start);
|
||||
}
|
||||
|
||||
/**
|
||||
Lock data that needs protection in THD object
|
||||
|
||||
@param thd THD object
|
||||
*/
|
||||
void thd_lock_data(THD *thd)
|
||||
{
|
||||
mysql_mutex_lock(&thd->LOCK_thd_data);
|
||||
}
|
||||
|
||||
/**
|
||||
Unlock data that needs protection in THD object
|
||||
|
||||
@param thd THD object
|
||||
*/
|
||||
void thd_unlock_data(THD *thd)
|
||||
{
|
||||
mysql_mutex_unlock(&thd->LOCK_thd_data);
|
||||
}
|
||||
|
||||
/**
|
||||
Support method to check if connection has already started transcaction
|
||||
|
||||
@param client_cntx Low level client context
|
||||
|
||||
@retval TRUE if connection already started transaction
|
||||
*/
|
||||
bool thd_is_transaction_active(THD *thd)
|
||||
{
|
||||
return thd->transaction.is_active();
|
||||
}
|
||||
|
||||
/**
|
||||
Check if there is buffered data on the socket representing the connection
|
||||
|
||||
@param thd THD object
|
||||
*/
|
||||
int thd_connection_has_data(THD *thd)
|
||||
{
|
||||
Vio *vio= thd->net.vio;
|
||||
return vio->has_data(vio);
|
||||
}
|
||||
|
||||
/**
|
||||
Set reading/writing on socket, used by SHOW PROCESSLIST
|
||||
|
||||
@param thd THD object
|
||||
@param val Value to set it to (0 or 1)
|
||||
*/
|
||||
void thd_set_net_read_write(THD *thd, uint val)
|
||||
{
|
||||
thd->net.reading_or_writing= val;
|
||||
}
|
||||
|
||||
/**
|
||||
Set reference to mysys variable in THD object
|
||||
|
||||
@param thd THD object
|
||||
@param mysys_var Reference to set
|
||||
*/
|
||||
void thd_set_mysys_var(THD *thd, st_my_thread_var *mysys_var)
|
||||
{
|
||||
thd->set_mysys_var(mysys_var);
|
||||
}
|
||||
|
||||
/**
|
||||
Get socket file descriptor for this connection
|
||||
|
||||
@param thd THD object
|
||||
|
||||
@retval Socket of the connection
|
||||
*/
|
||||
my_socket thd_get_fd(THD *thd)
|
||||
{
|
||||
return thd->net.vio->sd;
|
||||
}
|
||||
|
||||
/**
|
||||
Get thread attributes for connection threads
|
||||
|
||||
@retval Reference to thread attribute for connection threads
|
||||
*/
|
||||
pthread_attr_t *get_connection_attrib(void)
|
||||
{
|
||||
return &connection_attrib;
|
||||
}
|
||||
|
||||
/**
|
||||
Get max number of connections
|
||||
|
||||
@retval Max number of connections for MySQL Server
|
||||
*/
|
||||
ulong get_max_connections(void)
|
||||
{
|
||||
return max_connections;
|
||||
}
|
||||
|
||||
/*
|
||||
The following functions form part of the C plugin API
|
||||
*/
|
||||
@ -494,7 +740,7 @@ bool Drop_table_error_handler::handle_condition(THD *thd,
|
||||
|
||||
|
||||
THD::THD()
|
||||
:Statement(&main_lex, &main_mem_root, CONVENTIONAL_EXECUTION,
|
||||
:Statement(&main_lex, &main_mem_root, STMT_CONVENTIONAL_EXECUTION,
|
||||
/* statement id */ 0),
|
||||
rli_fake(0),
|
||||
user_time(0), in_sub_stmt(0),
|
||||
@ -1355,6 +1601,25 @@ bool THD::store_globals()
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Remove the thread specific info (THD and mem_root pointer) stored during
|
||||
store_global call for this thread.
|
||||
*/
|
||||
bool THD::restore_globals()
|
||||
{
|
||||
/*
|
||||
Assert that thread_stack is initialized: it's necessary to be able
|
||||
to track stack overrun.
|
||||
*/
|
||||
DBUG_ASSERT(thread_stack);
|
||||
|
||||
/* Undocking the thread specific data. */
|
||||
my_pthread_setspecific_ptr(THR_THD, NULL);
|
||||
my_pthread_setspecific_ptr(THR_MALLOC, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Cleanup after query.
|
||||
@ -3298,7 +3563,7 @@ extern "C" void thd_pool_wait_end(MYSQL_THD thd);
|
||||
|
||||
thd_wait_end MUST be called immediately after waking up again.
|
||||
*/
|
||||
extern "C" void thd_wait_begin(MYSQL_THD thd, thd_wait_type wait_type)
|
||||
extern "C" void thd_wait_begin(MYSQL_THD thd, int wait_type)
|
||||
{
|
||||
MYSQL_CALLBACK(thread_scheduler, thd_wait_begin, (thd, wait_type));
|
||||
}
|
||||
@ -3314,7 +3579,7 @@ extern "C" void thd_wait_end(MYSQL_THD thd)
|
||||
MYSQL_CALLBACK(thread_scheduler, thd_wait_end, (thd));
|
||||
}
|
||||
#else
|
||||
extern "C" void thd_wait_begin(MYSQL_THD thd, thd_wait_type wait_type)
|
||||
extern "C" void thd_wait_begin(MYSQL_THD thd, int wait_type)
|
||||
{
|
||||
/* do NOTHING for the embedded library */
|
||||
return;
|
||||
|
Reference in New Issue
Block a user