diff options
Diffstat (limited to 'storage/federatedx/ha_federatedx.cc')
-rw-r--r-- | storage/federatedx/ha_federatedx.cc | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/storage/federatedx/ha_federatedx.cc b/storage/federatedx/ha_federatedx.cc index 598886b8..e4c5bf8d 100644 --- a/storage/federatedx/ha_federatedx.cc +++ b/storage/federatedx/ha_federatedx.cc @@ -408,8 +408,26 @@ handlerton* federatedx_hton; static derived_handler* create_federatedx_derived_handler(THD* thd, TABLE_LIST *derived); + static select_handler* -create_federatedx_select_handler(THD* thd, SELECT_LEX *sel); +create_federatedx_select_handler(THD *thd, SELECT_LEX *sel_lex, + SELECT_LEX_UNIT *sel_unit); +static select_handler * +create_federatedx_unit_handler(THD *thd, SELECT_LEX_UNIT *sel_unit); + +/* + Federated doesn't need costs.disk_read_ratio as everything is one a remote + server and nothing is cached locally +*/ + +static void federatedx_update_optimizer_costs(OPTIMIZER_COSTS *costs) +{ + /* + Setting disk_read_ratios to 1.0, ensures we are using the costs + from rnd_pos_time() and scan_time() + */ + costs->disk_read_ratio= 0.0; +} /* Initialize the federatedx handler. @@ -443,6 +461,8 @@ int federatedx_db_init(void *p) federatedx_hton->flags= HTON_ALTER_NOT_SUPPORTED; federatedx_hton->create_derived= create_federatedx_derived_handler; federatedx_hton->create_select= create_federatedx_select_handler; + federatedx_hton->update_optimizer_costs= federatedx_update_optimizer_costs; + federatedx_hton->create_unit= create_federatedx_unit_handler; if (mysql_mutex_init(fe_key_mutex_federatedx, &federatedx_mutex, MY_MUTEX_INIT_FAST)) @@ -932,7 +952,7 @@ static bool emit_key_part_element(String *to, KEY_PART_INFO *part, *buf++= '0'; *buf++= 'x'; - buf= octet2hex(buf, (char*) ptr, len); + buf= octet2hex(buf, ptr, len); if (to->append((char*) buff, (uint)(buf - buff))) DBUG_RETURN(1); } @@ -3098,11 +3118,11 @@ int ha_federatedx::info(uint flag) if (flag & (HA_STATUS_VARIABLE | HA_STATUS_CONST)) { /* - size of IO operations (This is based on a good guess, no high science - involved) + Size of IO operations. This is used to calculate time to scan a table. + See handler.cc::keyread_time */ if (flag & HA_STATUS_CONST) - stats.block_size= 4096; + stats.block_size= 1500; // Typical size of an TCP packet if ((*iop)->table_metadata(&stats, share->table_name, (uint)share->table_name_length, flag)) @@ -3635,6 +3655,7 @@ int ha_federatedx::discover_assisted(handlerton *hton, THD* thd, MYSQL_ROW rdata; ulong *rlen; my_bool my_true= 1; + my_bool my_false= 0; if (parse_url(thd->mem_root, &tmp_share, table_s, 1)) return HA_WRONG_CREATE_OPTION; @@ -3642,6 +3663,7 @@ int ha_federatedx::discover_assisted(handlerton *hton, THD* thd, mysql_init(&mysql); mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, cs->cs_name.str); mysql_options(&mysql, MYSQL_OPT_USE_THREAD_SPECIFIC_MEMORY, (char*)&my_true); + mysql_options(&mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, &my_false); if (!mysql_real_connect(&mysql, tmp_share.hostname, tmp_share.username, tmp_share.password, tmp_share.database, |