diff --git a/sql/select_handler.cc b/sql/select_handler.cc
index 9a2f6398a86..fb2979ffb2f 100644
--- a/sql/select_handler.cc
+++ b/sql/select_handler.cc
@@ -54,6 +54,15 @@ Pushdown_select::~Pushdown_select()
 
 bool Pushdown_select::init()
 {
+  if (select->master_unit()->first_select()->item_list.elements == 1)
+  {
+    Item_int* item= new (handler->thd->mem_root) Item_int(handler->thd, "hack",
+                                                          123, 64);
+    item->maybe_null= true;
+    result_columns.push_back(item);
+    return false;
+  }
+
   List<Item> types;
   TMP_TABLE_PARAM tmp_table_param;
   THD *thd= handler->thd;
diff --git a/sql/sql_select.h b/sql/sql_select.h
index 7c8908302cd..c315a832730 100644
--- a/sql/sql_select.h
+++ b/sql/sql_select.h
@@ -2521,7 +2521,9 @@ class Pushdown_select: public Sql_alloc
 {
 private:
   bool is_analyze;
+public:
   List<Item> result_columns;
+private:
   bool send_result_set_metadata();
   bool send_data();
   bool send_eof();
diff --git a/storage/federatedx/federatedx_pushdown.cc b/storage/federatedx/federatedx_pushdown.cc
index 664f0570238..a558f1ec339 100644
--- a/storage/federatedx/federatedx_pushdown.cc
+++ b/storage/federatedx/federatedx_pushdown.cc
@@ -253,19 +253,36 @@ int ha_federatedx_select_handler::next_row()
   ulong *lengths;
   Field **field;
   int column= 0;
-  Time_zone *saved_time_zone= table->in_use->variables.time_zone;
+  Time_zone *saved_time_zone= thd->variables.time_zone;
   DBUG_ENTER("ha_federatedx_select_handler::next_row");
 
-  if ((rc= txn->acquire(share, table->in_use, TRUE, iop)))
+  if ((rc= txn->acquire(share, thd, TRUE, iop)))
     DBUG_RETURN(rc);
 
   if (!(row= (*iop)->fetch_row(stored_result)))
     DBUG_RETURN(HA_ERR_END_OF_FILE);
 
   /* Convert row to internal format */
-  table->in_use->variables.time_zone= UTC;
+  thd->variables.time_zone= UTC;
   lengths= (*iop)->fetch_lengths(stored_result);
 
+  Item_int *item;
+  if (!table &&
+      select->pushdown_select->result_columns.elements == 1 &&
+      (item= dynamic_cast<Item_int*>(select->pushdown_select->result_columns.head())))
+  {
+    if ((*iop)->is_column_null(row, column))
+    {
+      item->value= 0;
+      item->null_value= true;
+    }
+    else
+    {
+      item->value= atoi((*iop)->get_column_data(row, 0));
+      item->null_value= false;
+    }
+  }
+  else
   for (field= table->field; *field; field++, column++)
   {
     if ((*iop)->is_column_null(row, column))
@@ -277,7 +294,7 @@ int ha_federatedx_select_handler::next_row()
                       lengths[column], &my_charset_bin);
     }
   }
-  table->in_use->variables.time_zone= saved_time_zone;
+  thd->variables.time_zone= saved_time_zone;
 
   DBUG_RETURN(rc);
 }
@@ -286,8 +303,11 @@ int ha_federatedx_select_handler::end_scan()
 {
   DBUG_ENTER("ha_federatedx_derived_handler::end_scan");
 
-  free_tmp_table(thd, table);
-  table= 0;
+  if (table)
+  {
+    free_tmp_table(thd, table);
+    table= 0;
+  }
 
   (*iop)->free_result(stored_result);
 
