diff --git a/dbcon/mysql/ha_mcs_client_udfs.cpp b/dbcon/mysql/ha_mcs_client_udfs.cpp index bdaec9ed4..16e5290c6 100644 --- a/dbcon/mysql/ha_mcs_client_udfs.cpp +++ b/dbcon/mysql/ha_mcs_client_udfs.cpp @@ -140,8 +140,10 @@ extern "C" std::string pstr(parameter); boost::algorithm::to_lower(pstr); - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); idbassert(ci != 0); @@ -241,8 +243,10 @@ extern "C" const char* mcsgetstats(UDF_INIT* initid, UDF_ARGS* args, char* result, unsigned long* length, char* is_null, char* error) { - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -318,8 +322,10 @@ extern "C" #endif long long mcssettrace(UDF_INIT* initid, UDF_ARGS* args, char* is_null, char* error) { - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -550,8 +556,10 @@ extern "C" { THD* thd = current_thd; - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); execplan::CalpontSystemCatalog::TableName tableName; @@ -657,8 +665,10 @@ extern "C" const char* mcscleartablelock(UDF_INIT* initid, UDF_ARGS* args, char* result, unsigned long* length, char* is_null, char* error) { - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); long long lockID = *reinterpret_cast(args->args[0]); @@ -921,8 +931,10 @@ extern "C" } } - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -1083,8 +1095,10 @@ extern "C" const char* mcsgetsqlcount(UDF_INIT* initid, UDF_ARGS* args, char* result, unsigned long* length, char* is_null, char* error) { - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); idbassert(ci != 0); diff --git a/dbcon/mysql/ha_mcs_ddl.cpp b/dbcon/mysql/ha_mcs_ddl.cpp index 92c9c9ceb..3720d9b53 100644 --- a/dbcon/mysql/ha_mcs_ddl.cpp +++ b/dbcon/mysql/ha_mcs_ddl.cpp @@ -44,6 +44,7 @@ using namespace boost; #include "ha_mcs_sysvars.h" #include "idb_mysql.h" +#include "ha_mcs.h" #include "ha_mcs_impl_if.h" using namespace cal_impl_if; @@ -767,8 +768,10 @@ int ProcessDDLStatement(string& ddlStatement, string& schema, const string& tabl int rc = 0; parser.Parse(ddlStatement.c_str()); - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); diff --git a/dbcon/mysql/ha_mcs_execplan.cpp b/dbcon/mysql/ha_mcs_execplan.cpp index 207086e4c..0a88d3f4c 100644 --- a/dbcon/mysql/ha_mcs_execplan.cpp +++ b/dbcon/mysql/ha_mcs_execplan.cpp @@ -1885,8 +1885,10 @@ bool buildPredicateItem(Item_func* ifp, gp_walk_info* gwip) } } - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } if (ifp->functype() == Item_func::BETWEEN) { @@ -2784,8 +2786,10 @@ void setError(THD* thd, uint32_t errcode, string errmsg) thd->raise_error_printf(errcode, errmsg.c_str()); // reset expressionID - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); ci->expressionId = 0; @@ -3594,8 +3598,10 @@ ReturnedColumn* buildBooleanConstantColumn(Item* item, gp_walk_info& gwi, bool& ArithmeticColumn* buildArithmeticColumn(Item_func* item, gp_walk_info& gwi, bool& nonSupport) { - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -3855,8 +3861,10 @@ ArithmeticColumn* buildArithmeticColumn(Item_func* item, gp_walk_info& gwi, bool ReturnedColumn* buildFunctionColumn(Item_func* ifp, gp_walk_info& gwi, bool& nonSupport, bool selectBetweenIn) { - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -4479,8 +4487,10 @@ ReturnedColumn* buildFunctionColumn(Item_func* ifp, gp_walk_info& gwi, bool& non FunctionColumn* buildCaseFunction(Item_func* item, gp_walk_info& gwi, bool& nonSupport) { - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -4905,8 +4915,10 @@ ReturnedColumn* buildAggregateColumn(Item* item, gp_walk_info& gwi) vector orderCols; ConstArgParam constArgParam; - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); diff --git a/dbcon/mysql/ha_mcs_impl.cpp b/dbcon/mysql/ha_mcs_impl.cpp index 552ab7463..bc38c5975 100644 --- a/dbcon/mysql/ha_mcs_impl.cpp +++ b/dbcon/mysql/ha_mcs_impl.cpp @@ -774,8 +774,10 @@ vector getOnUpdateTimestampColumns(string& schema, string& tableName, in uint32_t doUpdateDelete(THD* thd, gp_walk_info& gwi, const std::vector& condStack) { - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -2070,8 +2072,10 @@ int ha_mcs_impl_analyze(THD* thd, TABLE* table) query.assign(idb_mysql_query_str(thd)); caep->data(query); - if (!get_fe_conn_info_ptr()) + if (!get_fe_conn_info_ptr()) { set_fe_conn_info_ptr(reinterpret_cast(new cal_connection_info(), thd)); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); idbassert(ci != 0); @@ -2268,8 +2272,10 @@ int ha_mcs::impl_rnd_init(TABLE* table, const std::vector& condStack) boost::shared_ptr csc = CalpontSystemCatalog::makeCalpontSystemCatalog(sessionID); csc->identity(CalpontSystemCatalog::FE); - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -2594,8 +2600,10 @@ int ha_mcs_impl_rnd_next(uchar* buf, TABLE* table, long timeZone) // if (MIGR::infinidb_vtable.impossibleWhereOnUnion) // return HA_ERR_END_OF_FILE; - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -2682,6 +2690,7 @@ int ha_mcs_impl_rnd_end(TABLE* table, bool is_pushdown_hand) { set_fe_conn_info_ptr((void*)new cal_connection_info()); ci = reinterpret_cast(get_fe_conn_info_ptr()); + thd_set_ha_data(thd, mcs_hton, ci); } if (thd->lex->analyze_stmt && ci->cal_conn_hndl && ci->cal_conn_hndl->exeMgr) @@ -2799,8 +2808,10 @@ int ha_mcs_impl_create(const char* name, TABLE* table_arg, HA_CREATE_INFO* creat { THD* thd = current_thd; - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -2841,8 +2852,10 @@ int ha_mcs_impl_delete_table(const char* name) if (!memcmp((uchar*)name, tmp_file_prefix, tmp_file_prefix_length)) return 0; - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -2904,8 +2917,10 @@ int ha_mcs_impl_write_row(const uchar* buf, TABLE* table, uint64_t rows_changed, return ER_CHECK_NOT_IMPLEMENTED; } - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -2955,8 +2970,10 @@ int ha_mcs_impl_write_row(const uchar* buf, TABLE* table, uint64_t rows_changed, int ha_mcs_impl_update_row() { - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); int rc = ci->rc; @@ -2969,8 +2986,10 @@ int ha_mcs_impl_update_row() int ha_mcs_impl_delete_row() { - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); int rc = ci->rc; @@ -2988,8 +3007,10 @@ void ha_mcs_impl_start_bulk_insert(ha_rows rows, TABLE* table, bool is_cache_ins if (thd->slave_thread && !get_replication_slave(thd)) return; - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -3542,8 +3563,10 @@ int ha_mcs_impl_end_bulk_insert(bool abort, TABLE* table) std::string aTmpDir(startup::StartUp::tmpDir()); - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -3693,7 +3716,12 @@ int ha_mcs_impl_end_bulk_insert(bool abort, TABLE* table) } else { - ha_mcs_impl::log_this(thd, "End SQL statement with error", logging::LOG_TYPE_DEBUG, + ostringstream oss; + oss << "End SQL statement with error, rc=" << rc + << ", aPid=" << aPid + << ", WIF=" << WIFEXITED(aStatus) + << ", WEXIT=" << WEXITSTATUS(aStatus); + ha_mcs_impl::log_this(thd, oss.str().c_str(), logging::LOG_TYPE_DEBUG, tid2sid(thd->thread_id)); } @@ -3780,8 +3808,10 @@ int ha_mcs_impl_end_bulk_insert(bool abort, TABLE* table) int ha_mcs_impl_commit(handlerton* hton, THD* thd, bool all) { - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -3813,8 +3843,10 @@ int ha_mcs_impl_commit(handlerton* hton, THD* thd, bool all) int ha_mcs_impl_rollback(handlerton* hton, THD* thd, bool all) { - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -3872,6 +3904,10 @@ int ha_mcs_impl_close_connection(handlerton* hton, THD* thd) ci->cal_conn_hndl = 0; } + delete ci; + set_fe_conn_info_ptr(nullptr, thd); + thd_set_ha_data(thd, hton, nullptr); + return rc; } @@ -3879,8 +3915,10 @@ int ha_mcs_impl_rename_table(const char* from, const char* to) { IDEBUG(cout << "ha_mcs_impl_rename_table: " << from << " => " << to << endl); - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -3923,8 +3961,10 @@ COND* ha_mcs_impl_cond_push(COND* cond, TABLE* table, std::vector& condSt alias.assign(table->alias.ptr(), table->alias.length()); IDEBUG(cout << "ha_mcs_impl_cond_push: " << alias << endl); - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -4030,8 +4070,10 @@ int ha_mcs::impl_external_lock(THD* thd, TABLE* table, int lock_type) alias.assign(table->alias.ptr(), table->alias.length()); IDEBUG(cout << "external_lock for " << alias << endl); - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -4193,8 +4235,10 @@ int ha_mcs_impl_group_by_init(mcs_handler_info* handler_info, TABLE* table) boost::shared_ptr csc = CalpontSystemCatalog::makeCalpontSystemCatalog(sessionID); csc->identity(CalpontSystemCatalog::FE); - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -4610,8 +4654,10 @@ int ha_mcs_impl_group_by_next(TABLE* table, long timeZone) if (isMCSTableUpdate(thd) || isMCSTableDelete(thd)) return HA_ERR_END_OF_FILE; - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -4691,6 +4737,7 @@ int ha_mcs_impl_group_by_end(TABLE* table) { set_fe_conn_info_ptr((void*)new cal_connection_info()); ci = reinterpret_cast(get_fe_conn_info_ptr()); + thd_set_ha_data(thd, mcs_hton, ci); } if (((thd->lex)->sql_command == SQLCOM_INSERT) || ((thd->lex)->sql_command == SQLCOM_INSERT_SELECT)) @@ -4894,8 +4941,10 @@ int ha_mcs_impl_pushdown_init(mcs_handler_info* handler_info, TABLE* table) boost::shared_ptr csc = CalpontSystemCatalog::makeCalpontSystemCatalog(sessionID); csc->identity(CalpontSystemCatalog::FE); - if (!get_fe_conn_info_ptr()) + if (!get_fe_conn_info_ptr()) { set_fe_conn_info_ptr(reinterpret_cast(new cal_connection_info(), thd)); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -5295,8 +5344,10 @@ int ha_mcs_impl_select_next(uchar* buf, TABLE* table, long timeZone) int rc = HA_ERR_END_OF_FILE; - if (get_fe_conn_info_ptr() == nullptr) + if (get_fe_conn_info_ptr() == nullptr) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); diff --git a/dbcon/mysql/ha_mcs_sysvars.cpp b/dbcon/mysql/ha_mcs_sysvars.cpp index 415257c5f..ce8726b6b 100644 --- a/dbcon/mysql/ha_mcs_sysvars.cpp +++ b/dbcon/mysql/ha_mcs_sysvars.cpp @@ -256,12 +256,10 @@ void* get_fe_conn_info_ptr(THD* thd) void set_fe_conn_info_ptr(void* ptr, THD* thd) { - if (current_thd == NULL && thd == NULL) - { - return; - } + if (thd == NULL) thd = current_thd; + if (thd == NULL) return; - THDVAR(current_thd, fe_conn_info_ptr) = (uint64_t)(ptr); + THDVAR(thd, fe_conn_info_ptr) = (uint64_t)(ptr); } ulonglong get_original_optimizer_flags(THD* thd) diff --git a/dbcon/mysql/ha_pseudocolumn.cpp b/dbcon/mysql/ha_pseudocolumn.cpp index a9341049a..488113289 100644 --- a/dbcon/mysql/ha_pseudocolumn.cpp +++ b/dbcon/mysql/ha_pseudocolumn.cpp @@ -20,6 +20,7 @@ using namespace execplan; #include "functor.h" #include "functor_str.h" +#include "ha_mcs.h" #include "ha_mcs_impl_if.h" #include "ha_mcs_sysvars.h" using namespace cal_impl_if; @@ -53,8 +54,10 @@ void bailout(char* error, const string& funcName) int64_t idblocalpm() { - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -477,8 +480,10 @@ uint32_t isPseudoColumn(string funcName) execplan::ReturnedColumn* buildPseudoColumn(Item* item, gp_walk_info& gwi, bool& nonSupport, uint32_t pseudoType) { - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); diff --git a/dbcon/mysql/ha_window_function.cpp b/dbcon/mysql/ha_window_function.cpp index e94372cea..a30ba0b71 100644 --- a/dbcon/mysql/ha_window_function.cpp +++ b/dbcon/mysql/ha_window_function.cpp @@ -30,6 +30,7 @@ using namespace std; #include "idb_mysql.h" #include "ha_mcs_impl_if.h" #include "ha_mcs_sysvars.h" +#include "ha_mcs.h" #include "arithmeticcolumn.h" #include "arithmeticoperator.h" @@ -95,8 +96,10 @@ WF_FRAME frame(Window_frame_bound::Bound_precedence_type bound, Item* offset) } ReturnedColumn* buildBoundExp(WF_Boundary& bound, SRCP& order, gp_walk_info& gwi) { - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr()); @@ -302,8 +305,10 @@ ReturnedColumn* buildWindowFunctionColumn(Item* item, gp_walk_info& gwi, bool& n // String str; // item->print(&str, QT_INFINIDB_NO_QUOTE); // cout << str.c_ptr() << endl; - if (get_fe_conn_info_ptr() == NULL) + if (get_fe_conn_info_ptr() == NULL) { set_fe_conn_info_ptr((void*)new cal_connection_info()); + thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr()); + } cal_connection_info* ci = reinterpret_cast(get_fe_conn_info_ptr());