Commit b6ca0c98 authored by Rich Prohaska's avatar Rich Prohaska Committed by Yoni Fogel

port to mysql 5.1.24-rc. addresses #776

git-svn-id: file:///svn/mysql/tokudb-engine/src@3766 c7de825b-a66e-492c-adef-691d508d4ae1
parent a3474c1b
...@@ -19,6 +19,22 @@ unsigned int my_tid() { ...@@ -19,6 +19,22 @@ unsigned int my_tid() {
return syscall(__NR_gettid); return syscall(__NR_gettid);
} }
static inline void *thd_data_get(THD *thd, int slot) {
#if MYSQL_VERSION_ID <= 50123
return thd->ha_data[slot];
#else
return thd->ha_data[slot].ha_ptr;
#endif
}
static inline void thd_data_set(THD *thd, int slot, void *data) {
#if MYSQL_VERSION_ID <= 50123
thd->ha_data[slot] = data;
#else
thd->ha_data[slot].ha_ptr = data;
#endif
}
#undef PACKAGE #undef PACKAGE
#undef VERSION #undef VERSION
#undef HAVE_DTRACE #undef HAVE_DTRACE
...@@ -444,7 +460,7 @@ int tokudb_end(handlerton * hton, ha_panic_function type) { ...@@ -444,7 +460,7 @@ int tokudb_end(handlerton * hton, ha_panic_function type) {
} }
static int tokudb_close_connection(handlerton * hton, THD * thd) { static int tokudb_close_connection(handlerton * hton, THD * thd) {
my_free((void *) thd->ha_data[hton->slot], MYF(0)); my_free(thd_data_get(thd, hton->slot), MYF(0));
return 0; return 0;
} }
...@@ -469,7 +485,7 @@ static int tokudb_commit(handlerton * hton, THD * thd, bool all) { ...@@ -469,7 +485,7 @@ static int tokudb_commit(handlerton * hton, THD * thd, bool all) {
TOKUDB_DBUG_ENTER("tokudb_commit"); TOKUDB_DBUG_ENTER("tokudb_commit");
DBUG_PRINT("trans", ("ending transaction %s", all ? "all" : "stmt")); DBUG_PRINT("trans", ("ending transaction %s", all ? "all" : "stmt"));
u_int32_t syncflag = THDVAR(thd, commit_sync) ? 0 : DB_TXN_NOSYNC; u_int32_t syncflag = THDVAR(thd, commit_sync) ? 0 : DB_TXN_NOSYNC;
tokudb_trx_data *trx = (tokudb_trx_data *) thd->ha_data[hton->slot]; tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(thd, hton->slot);
DB_TXN **txn = all ? &trx->all : &trx->stmt; DB_TXN **txn = all ? &trx->all : &trx->stmt;
int error = 0; int error = 0;
if (*txn) { if (*txn) {
...@@ -488,7 +504,7 @@ static int tokudb_commit(handlerton * hton, THD * thd, bool all) { ...@@ -488,7 +504,7 @@ static int tokudb_commit(handlerton * hton, THD * thd, bool all) {
static int tokudb_rollback(handlerton * hton, THD * thd, bool all) { static int tokudb_rollback(handlerton * hton, THD * thd, bool all) {
TOKUDB_DBUG_ENTER("tokudb_rollback"); TOKUDB_DBUG_ENTER("tokudb_rollback");
DBUG_PRINT("trans", ("aborting transaction %s", all ? "all" : "stmt")); DBUG_PRINT("trans", ("aborting transaction %s", all ? "all" : "stmt"));
tokudb_trx_data *trx = (tokudb_trx_data *) thd->ha_data[hton->slot]; tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(thd, hton->slot);
DB_TXN **txn = all ? &trx->all : &trx->stmt; DB_TXN **txn = all ? &trx->all : &trx->stmt;
int error = 0; int error = 0;
if (*txn) { if (*txn) {
...@@ -2550,12 +2566,13 @@ int ha_tokudb::external_lock(THD * thd, int lock_type) { ...@@ -2550,12 +2566,13 @@ int ha_tokudb::external_lock(THD * thd, int lock_type) {
if ((tokudb_init_flags & DB_INIT_TXN) == 0) if ((tokudb_init_flags & DB_INIT_TXN) == 0)
TOKUDB_DBUG_RETURN(0); TOKUDB_DBUG_RETURN(0);
int error = 0; int error = 0;
tokudb_trx_data *trx = (tokudb_trx_data *) thd->ha_data[tokudb_hton->slot]; tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
if (!trx) { if (!trx) {
thd->ha_data[tokudb_hton->slot] = trx = (tokudb_trx_data *) trx = (tokudb_trx_data *)
my_malloc(sizeof(*trx), MYF(MY_ZEROFILL)); my_malloc(sizeof(*trx), MYF(MY_ZEROFILL));
if (!trx) if (!trx)
TOKUDB_DBUG_RETURN(1); TOKUDB_DBUG_RETURN(1);
thd_data_set(thd, tokudb_hton->slot, trx);
} }
if (trx->all == 0) if (trx->all == 0)
trx->sp_level = 0; trx->sp_level = 0;
...@@ -2626,7 +2643,7 @@ int ha_tokudb::start_stmt(THD * thd, thr_lock_type lock_type) { ...@@ -2626,7 +2643,7 @@ int ha_tokudb::start_stmt(THD * thd, thr_lock_type lock_type) {
if (!(tokudb_init_flags & DB_INIT_TXN)) if (!(tokudb_init_flags & DB_INIT_TXN))
TOKUDB_DBUG_RETURN(0); TOKUDB_DBUG_RETURN(0);
int error = 0; int error = 0;
tokudb_trx_data *trx = (tokudb_trx_data *) thd->ha_data[tokudb_hton->slot]; tokudb_trx_data *trx = (tokudb_trx_data *) thd_data_get(thd, tokudb_hton->slot);
DBUG_ASSERT(trx); DBUG_ASSERT(trx);
/* /*
note that trx->stmt may have been already initialized as start_stmt() note that trx->stmt may have been already initialized as start_stmt()
......
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