diff options
Diffstat (limited to 'storage/federatedx/federatedx_pushdown.h')
-rw-r--r-- | storage/federatedx/federatedx_pushdown.h | 57 |
1 files changed, 36 insertions, 21 deletions
diff --git a/storage/federatedx/federatedx_pushdown.h b/storage/federatedx/federatedx_pushdown.h index 673abcfc..1d5bdab1 100644 --- a/storage/federatedx/federatedx_pushdown.h +++ b/storage/federatedx/federatedx_pushdown.h @@ -14,29 +14,43 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "sql_string.h" #include "derived_handler.h" #include "select_handler.h" +class federatedx_handler_base +{ +protected: + FEDERATEDX_SHARE *share; + federatedx_txn *txn; + federatedx_io **iop; + FEDERATEDX_IO_RESULT *stored_result; + StringBuffer<512> query; + + TABLE *query_table; + + int next_row_(TABLE *tmp_tbl); + int init_scan_(); + int end_scan_(); +public: + federatedx_handler_base(THD *thd_arg, TABLE *tbl_arg); +}; + /* Implementation class of the derived_handler interface for FEDERATEDX: class declaration */ -class ha_federatedx_derived_handler: public derived_handler +class ha_federatedx_derived_handler: public derived_handler, public federatedx_handler_base { private: - FEDERATEDX_SHARE *share; - federatedx_txn *txn; - federatedx_io **iop; - FEDERATEDX_IO_RESULT *stored_result; public: - ha_federatedx_derived_handler(THD* thd_arg, TABLE_LIST *tbl); + ha_federatedx_derived_handler(THD* thd_arg, TABLE_LIST *tbl, TABLE *tbl_arg); ~ha_federatedx_derived_handler(); - int init_scan(); - int next_row(); - int end_scan(); - void print_error(int, unsigned long); + int init_scan() { return federatedx_handler_base::init_scan_(); } + int next_row() { return federatedx_handler_base::next_row_(table); } + int end_scan() { return federatedx_handler_base::end_scan_(); } }; @@ -45,19 +59,20 @@ public: class declaration */ -class ha_federatedx_select_handler: public select_handler +class ha_federatedx_select_handler: public select_handler, public federatedx_handler_base { -private: - FEDERATEDX_SHARE *share; - federatedx_txn *txn; - federatedx_io **iop; - FEDERATEDX_IO_RESULT *stored_result; - public: - ha_federatedx_select_handler(THD* thd_arg, SELECT_LEX *sel); + ha_federatedx_select_handler(THD *thd_arg, SELECT_LEX_UNIT *sel_unit, + TABLE *tbl); + ha_federatedx_select_handler(THD *thd_arg, SELECT_LEX *sel_lex, + SELECT_LEX_UNIT *sel_unit, TABLE *tbl); ~ha_federatedx_select_handler(); - int init_scan(); - int next_row(); + int init_scan() { return federatedx_handler_base::init_scan_(); } + int next_row() { return federatedx_handler_base::next_row_(table); } int end_scan(); - void print_error(int, unsigned long); + +private: + static constexpr auto PRINT_QUERY_TYPE= + enum_query_type(QT_VIEW_INTERNAL | QT_SELECT_ONLY | + QT_ITEM_ORIGINAL_FUNC_NULLIF | QT_PARSABLE); }; |