summaryrefslogtreecommitdiffstats
path: root/storage/federatedx/ha_federatedx.cc
diff options
context:
space:
mode:
Diffstat (limited to 'storage/federatedx/ha_federatedx.cc')
-rw-r--r--storage/federatedx/ha_federatedx.cc32
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,