mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
In the handlerton, cursor creation function don't have an argument
and so the engine calls current_thd to derive transaction information; instead we now pass THD to those functions, it looks more logical (it makes the implicit current_thd parameter more visible). Approved by Brian and Monty. sql/handler.h: cursor's creation functions in the handlerton need a THD, it's better than have the engine call current_thd sql/sql_cursor.cc: pass the THD instead of letting the engine call current_thd storage/innobase/handler/ha_innodb.cc: use the passed THD instead of current_thd storage/innobase/handler/ha_innodb.h: use the passed THD instead of current_thd
This commit is contained in:
parent
80fc43c1fe
commit
5e2c06a1c7
4 changed files with 23 additions and 14 deletions
|
@ -630,9 +630,9 @@ struct handlerton
|
||||||
int (*recover)(XID *xid_list, uint len);
|
int (*recover)(XID *xid_list, uint len);
|
||||||
int (*commit_by_xid)(XID *xid);
|
int (*commit_by_xid)(XID *xid);
|
||||||
int (*rollback_by_xid)(XID *xid);
|
int (*rollback_by_xid)(XID *xid);
|
||||||
void *(*create_cursor_read_view)();
|
void *(*create_cursor_read_view)(THD *thd);
|
||||||
void (*set_cursor_read_view)(void *);
|
void (*set_cursor_read_view)(THD *thd, void *read_view);
|
||||||
void (*close_cursor_read_view)(void *);
|
void (*close_cursor_read_view)(THD *thd, void *read_view);
|
||||||
handler *(*create)(TABLE_SHARE *table, MEM_ROOT *mem_root);
|
handler *(*create)(TABLE_SHARE *table, MEM_ROOT *mem_root);
|
||||||
void (*drop_database)(char* path);
|
void (*drop_database)(char* path);
|
||||||
int (*panic)(enum ha_panic_function flag);
|
int (*panic)(enum ha_panic_function flag);
|
||||||
|
|
|
@ -323,7 +323,7 @@ Sensitive_cursor::post_open(THD *thd)
|
||||||
if (ht->create_cursor_read_view)
|
if (ht->create_cursor_read_view)
|
||||||
{
|
{
|
||||||
info->ht= ht;
|
info->ht= ht;
|
||||||
info->read_view= (ht->create_cursor_read_view)();
|
info->read_view= (ht->create_cursor_read_view)(thd);
|
||||||
++info;
|
++info;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -433,7 +433,7 @@ Sensitive_cursor::fetch(ulong num_rows)
|
||||||
thd->set_n_backup_active_arena(this, &backup_arena);
|
thd->set_n_backup_active_arena(this, &backup_arena);
|
||||||
|
|
||||||
for (info= ht_info; info->read_view ; info++)
|
for (info= ht_info; info->read_view ; info++)
|
||||||
(info->ht->set_cursor_read_view)(info->read_view);
|
(info->ht->set_cursor_read_view)(thd, info->read_view);
|
||||||
|
|
||||||
join->fetch_limit+= num_rows;
|
join->fetch_limit+= num_rows;
|
||||||
|
|
||||||
|
@ -454,7 +454,7 @@ Sensitive_cursor::fetch(ulong num_rows)
|
||||||
reset_thd(thd);
|
reset_thd(thd);
|
||||||
|
|
||||||
for (info= ht_info; info->read_view; info++)
|
for (info= ht_info; info->read_view; info++)
|
||||||
(info->ht->set_cursor_read_view)(0);
|
(info->ht->set_cursor_read_view)(thd, 0);
|
||||||
|
|
||||||
if (error == NESTED_LOOP_CURSOR_LIMIT)
|
if (error == NESTED_LOOP_CURSOR_LIMIT)
|
||||||
{
|
{
|
||||||
|
@ -487,7 +487,7 @@ Sensitive_cursor::close()
|
||||||
|
|
||||||
for (Engine_info *info= ht_info; info->read_view; info++)
|
for (Engine_info *info= ht_info; info->read_view; info++)
|
||||||
{
|
{
|
||||||
(info->ht->close_cursor_read_view)(info->read_view);
|
(info->ht->close_cursor_read_view)(thd, info->read_view);
|
||||||
info->read_view= 0;
|
info->read_view= 0;
|
||||||
info->ht= 0;
|
info->ht= 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7529,12 +7529,14 @@ This consistent view is then used inside of MySQL when accessing records
|
||||||
using a cursor. */
|
using a cursor. */
|
||||||
|
|
||||||
void*
|
void*
|
||||||
innobase_create_cursor_view(void)
|
innobase_create_cursor_view(
|
||||||
/*=============================*/
|
/*========================*/
|
||||||
/* out: Pointer to cursor view or NULL */
|
/* out: pointer to cursor
|
||||||
|
view or NULL */
|
||||||
|
THD* thd) /* in: user thread handle */
|
||||||
{
|
{
|
||||||
return(read_cursor_view_create_for_mysql(
|
return(read_cursor_view_create_for_mysql(
|
||||||
check_trx_exists(current_thd)));
|
check_trx_exists(thd)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -7545,6 +7547,7 @@ corresponding MySQL thread still lacks one. */
|
||||||
void
|
void
|
||||||
innobase_close_cursor_view(
|
innobase_close_cursor_view(
|
||||||
/*=======================*/
|
/*=======================*/
|
||||||
|
THD* thd, /* in: user thread handle */
|
||||||
void* curview)/* in: Consistent read view to be closed */
|
void* curview)/* in: Consistent read view to be closed */
|
||||||
{
|
{
|
||||||
read_cursor_view_close_for_mysql(check_trx_exists(current_thd),
|
read_cursor_view_close_for_mysql(check_trx_exists(current_thd),
|
||||||
|
@ -7560,6 +7563,7 @@ restored to a transaction read view. */
|
||||||
void
|
void
|
||||||
innobase_set_cursor_view(
|
innobase_set_cursor_view(
|
||||||
/*=====================*/
|
/*=====================*/
|
||||||
|
THD* thd, /* in: user thread handle */
|
||||||
void* curview)/* in: Consistent cursor view to be set */
|
void* curview)/* in: Consistent cursor view to be set */
|
||||||
{
|
{
|
||||||
read_cursor_set_for_mysql(check_trx_exists(current_thd),
|
read_cursor_set_for_mysql(check_trx_exists(current_thd),
|
||||||
|
|
|
@ -313,9 +313,11 @@ This consistent view is then used inside of MySQL when accessing records
|
||||||
using a cursor. */
|
using a cursor. */
|
||||||
|
|
||||||
void*
|
void*
|
||||||
innobase_create_cursor_view(void);
|
innobase_create_cursor_view(
|
||||||
/*=============================*/
|
/*========================*/
|
||||||
/* out: Pointer to cursor view or NULL */
|
/* out: pointer to cursor
|
||||||
|
view or NULL */
|
||||||
|
THD* thd); /* in: user thread handle */
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
Close the given consistent cursor view of a transaction and restore
|
Close the given consistent cursor view of a transaction and restore
|
||||||
|
@ -325,8 +327,10 @@ corresponding MySQL thread still lacks one. */
|
||||||
void
|
void
|
||||||
innobase_close_cursor_view(
|
innobase_close_cursor_view(
|
||||||
/*=======================*/
|
/*=======================*/
|
||||||
|
THD* thd, /* in: user thread handle */
|
||||||
void* curview); /* in: Consistent read view to be closed */
|
void* curview); /* in: Consistent read view to be closed */
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
Set the given consistent cursor view to a transaction which is created
|
Set the given consistent cursor view to a transaction which is created
|
||||||
if the corresponding MySQL thread still lacks one. If the given
|
if the corresponding MySQL thread still lacks one. If the given
|
||||||
|
@ -336,4 +340,5 @@ restored to a transaction read view. */
|
||||||
void
|
void
|
||||||
innobase_set_cursor_view(
|
innobase_set_cursor_view(
|
||||||
/*=====================*/
|
/*=====================*/
|
||||||
|
THD* thd, /* in: user thread handle */
|
||||||
void* curview); /* in: Consistent read view to be set */
|
void* curview); /* in: Consistent read view to be set */
|
||||||
|
|
Loading…
Reference in a new issue