1 /* Copyright (C) 2012-2018 Kentoku Shiba 2 3 This program is free software; you can redistribute it and/or modify 4 it under the terms of the GNU General Public License as published by 5 the Free Software Foundation; version 2 of the License. 6 7 This program is distributed in the hope that it will be useful, 8 but WITHOUT ANY WARRANTY; without even the implied warranty of 9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 GNU General Public License for more details. 11 12 You should have received a copy of the GNU General Public License 13 along with this program; if not, write to the Free Software 14 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ 15 16 class spider_db_mbase_util: public spider_db_util 17 { 18 public: 19 spider_db_mbase_util(); 20 virtual ~spider_db_mbase_util(); 21 int append_name( 22 spider_string *str, 23 const char *name, 24 uint name_length 25 ); 26 int append_name_with_charset( 27 spider_string *str, 28 const char *name, 29 uint name_length, 30 CHARSET_INFO *name_charset 31 ); 32 int append_escaped_name( 33 spider_string *str, 34 const char *name, 35 uint name_length 36 ); 37 int append_escaped_name_with_charset( 38 spider_string *str, 39 const char *name, 40 uint name_length, 41 CHARSET_INFO *name_charset 42 ); 43 bool is_name_quote( 44 const char head_code 45 ); 46 int append_escaped_name_quote( 47 spider_string *str 48 ); 49 int append_column_value( 50 ha_spider *spider, 51 spider_string *str, 52 Field *field, 53 const uchar *new_ptr, 54 CHARSET_INFO *access_charset 55 ); 56 int append_from_with_alias( 57 spider_string *str, 58 const char **table_names, 59 uint *table_name_lengths, 60 const char **table_aliases, 61 uint *table_alias_lengths, 62 uint table_count, 63 int *table_name_pos, 64 bool over_write 65 ); 66 int append_trx_isolation( 67 spider_string *str, 68 int trx_isolation 69 ); 70 int append_autocommit( 71 spider_string *str, 72 bool autocommit 73 ); 74 int append_sql_log_off( 75 spider_string *str, 76 bool sql_log_off 77 ); 78 int append_wait_timeout( 79 spider_string *str, 80 int wait_timeout 81 ); 82 virtual int append_sql_mode_internal( 83 spider_string *str, 84 sql_mode_t sql_mode 85 ); 86 int append_sql_mode( 87 spider_string *str, 88 sql_mode_t sql_mode 89 ); 90 int append_time_zone( 91 spider_string *str, 92 Time_zone *time_zone 93 ); 94 int append_loop_check( 95 spider_string *str, 96 SPIDER_CONN *conn 97 ); 98 int append_start_transaction( 99 spider_string *str 100 ); 101 int append_xa_start( 102 spider_string *str, 103 XID *xid 104 ); 105 int append_lock_table_head( 106 spider_string *str 107 ); 108 int append_lock_table_body( 109 spider_string *str, 110 const char *db_name, 111 uint db_name_length, 112 CHARSET_INFO *db_name_charset, 113 const char *table_name, 114 uint table_name_length, 115 CHARSET_INFO *table_name_charset, 116 int lock_type 117 ); 118 int append_lock_table_tail( 119 spider_string *str 120 ); 121 int append_unlock_table( 122 spider_string *str 123 ); 124 int open_item_func( 125 Item_func *item_func, 126 ha_spider *spider, 127 spider_string *str, 128 const char *alias, 129 uint alias_length, 130 bool use_fields, 131 spider_fields *fields 132 ); 133 #ifdef HANDLER_HAS_DIRECT_AGGREGATE 134 int open_item_sum_func( 135 Item_sum *item_sum, 136 ha_spider *spider, 137 spider_string *str, 138 const char *alias, 139 uint alias_length, 140 bool use_fields, 141 spider_fields *fields 142 ); 143 #endif 144 int append_escaped_util( 145 spider_string *to, 146 String *from 147 ); 148 #ifdef SPIDER_HAS_GROUP_BY_HANDLER 149 int append_table( 150 ha_spider *spider, 151 spider_fields *fields, 152 spider_string *str, 153 TABLE_LIST *table_list, 154 TABLE_LIST **used_table_list, 155 uint *current_pos, 156 TABLE_LIST **cond_table_list_ptr, 157 bool top_down, 158 bool first 159 ); 160 int append_tables_top_down( 161 ha_spider *spider, 162 spider_fields *fields, 163 spider_string *str, 164 TABLE_LIST *table_list, 165 TABLE_LIST **used_table_list, 166 uint *current_pos, 167 TABLE_LIST **cond_table_list_ptr 168 ); 169 int append_tables_top_down_check( 170 TABLE_LIST *table_list, 171 TABLE_LIST **used_table_list, 172 uint *current_pos 173 ); 174 int append_embedding_tables( 175 ha_spider *spider, 176 spider_fields *fields, 177 spider_string *str, 178 TABLE_LIST *table_list, 179 TABLE_LIST **used_table_list, 180 uint *current_pos, 181 TABLE_LIST **cond_table_list_ptr 182 ); 183 int append_from_and_tables( 184 ha_spider *spider, 185 spider_fields *fields, 186 spider_string *str, 187 TABLE_LIST *table_list, 188 uint table_count 189 ); 190 int reappend_tables( 191 spider_fields *fields, 192 SPIDER_LINK_IDX_CHAIN *link_idx_chain, 193 spider_string *str 194 ); 195 int append_where( 196 spider_string *str 197 ); 198 int append_having( 199 spider_string *str 200 ); 201 #endif 202 bool append_charset_name_before_string(); 203 }; 204 205 class spider_db_mysql_util: public spider_db_mbase_util 206 { 207 public: 208 spider_db_mysql_util(); 209 ~spider_db_mysql_util(); 210 int append_column_value( 211 ha_spider *spider, 212 spider_string *str, 213 Field *field, 214 const uchar *new_ptr, 215 CHARSET_INFO *access_charset 216 ); 217 }; 218 219 class spider_db_mariadb_util: public spider_db_mbase_util 220 { 221 public: 222 spider_db_mariadb_util(); 223 ~spider_db_mariadb_util(); 224 int append_sql_mode_internal( 225 spider_string *str, 226 sql_mode_t sql_mode 227 ); 228 int append_column_value( 229 ha_spider *spider, 230 spider_string *str, 231 Field *field, 232 const uchar *new_ptr, 233 CHARSET_INFO *access_charset 234 ); 235 }; 236 237 class spider_db_mbase_row: public spider_db_row 238 { 239 public: 240 MYSQL_ROW row; 241 MYSQL_ROW row_first; 242 ulong *lengths; 243 ulong *lengths_first; 244 uint field_count; 245 uint record_size; 246 bool cloned; 247 spider_db_mbase_row( 248 uint dbton_id 249 ); 250 virtual ~spider_db_mbase_row(); 251 int store_to_field( 252 Field *field, 253 CHARSET_INFO *access_charset 254 ); 255 int append_to_str( 256 spider_string *str 257 ); 258 int append_escaped_to_str( 259 spider_string *str, 260 uint dbton_id 261 ); 262 void first(); 263 void next(); 264 bool is_null(); 265 int val_int(); 266 double val_real(); 267 my_decimal *val_decimal( 268 my_decimal *decimal_value, 269 CHARSET_INFO *access_charset 270 ); 271 SPIDER_DB_ROW *clone(); 272 int store_to_tmp_table( 273 TABLE *tmp_table, 274 spider_string *str 275 ); 276 uint get_byte_size(); 277 }; 278 279 class spider_db_mysql_row: public spider_db_mbase_row 280 { 281 public: 282 spider_db_mysql_row(); 283 ~spider_db_mysql_row(); 284 }; 285 286 class spider_db_mariadb_row: public spider_db_mbase_row 287 { 288 public: 289 spider_db_mariadb_row(); 290 ~spider_db_mariadb_row(); 291 }; 292 293 class spider_db_mbase_result: public spider_db_result 294 { 295 public: 296 MYSQL_RES *db_result; 297 spider_db_mbase_row row; 298 MYSQL_ROW_OFFSET first_row; 299 int store_error_num; 300 spider_db_mbase_result( 301 SPIDER_DB_CONN *in_db_conn 302 ); 303 virtual ~spider_db_mbase_result(); 304 bool has_result(); 305 void free_result(); 306 SPIDER_DB_ROW *current_row(); 307 SPIDER_DB_ROW *fetch_row(); 308 SPIDER_DB_ROW *fetch_row_from_result_buffer( 309 spider_db_result_buffer *spider_res_buf 310 ); 311 SPIDER_DB_ROW *fetch_row_from_tmp_table( 312 TABLE *tmp_table 313 ); 314 int fetch_table_status( 315 int mode, 316 ha_statistics &stat 317 ); 318 int fetch_simple_action( 319 uint simple_action, 320 uint position, 321 void *param 322 ); 323 int fetch_table_records( 324 int mode, 325 ha_rows &records 326 ); 327 #ifdef HA_HAS_CHECKSUM_EXTENDED 328 int fetch_table_checksum( 329 ha_spider *spider 330 ); 331 #endif 332 int fetch_table_cardinality( 333 int mode, 334 TABLE *table, 335 longlong *cardinality, 336 uchar *cardinality_upd, 337 int bitmap_size 338 ); 339 int fetch_table_mon_status( 340 int &status 341 ); 342 int fetch_show_master_status( 343 const char **binlog_file_name, 344 const char **binlog_pos 345 ); 346 int fetch_select_binlog_gtid_pos( 347 const char **gtid_pos 348 ); 349 longlong num_rows(); 350 uint num_fields(); 351 void move_to_pos( 352 longlong pos 353 ); 354 int get_errno(); 355 #ifdef SPIDER_HAS_DISCOVER_TABLE_STRUCTURE 356 int fetch_columns_for_discover_table_structure( 357 spider_string *str, 358 CHARSET_INFO *access_charset 359 ); 360 int fetch_index_for_discover_table_structure( 361 spider_string *str, 362 CHARSET_INFO *access_charset 363 ); 364 int fetch_table_for_discover_table_structure( 365 spider_string *str, 366 SPIDER_SHARE *spider_share, 367 CHARSET_INFO *access_charset 368 ); 369 #endif 370 }; 371 372 class spider_db_mysql_result: public spider_db_mbase_result 373 { 374 public: 375 spider_db_mysql_result( 376 SPIDER_DB_CONN *in_db_conn 377 ); 378 ~spider_db_mysql_result(); 379 }; 380 381 class spider_db_mariadb_result: public spider_db_mbase_result 382 { 383 public: 384 spider_db_mariadb_result( 385 SPIDER_DB_CONN *in_db_conn 386 ); 387 ~spider_db_mariadb_result(); 388 }; 389 390 class spider_db_mbase: public spider_db_conn 391 { 392 protected: 393 int stored_error; 394 spider_db_mbase_util *spider_db_mbase_utility; 395 public: 396 MYSQL *db_conn; 397 HASH lock_table_hash; 398 bool lock_table_hash_inited; 399 uint lock_table_hash_id; 400 const char *lock_table_hash_func_name; 401 const char *lock_table_hash_file_name; 402 ulong lock_table_hash_line_no; 403 DYNAMIC_ARRAY handler_open_array; 404 bool handler_open_array_inited; 405 uint handler_open_array_id; 406 const char *handler_open_array_func_name; 407 const char *handler_open_array_file_name; 408 ulong handler_open_array_line_no; 409 spider_db_mbase( 410 SPIDER_CONN *conn, 411 spider_db_mbase_util *spider_db_mbase_utility 412 ); 413 virtual ~spider_db_mbase(); 414 int init(); 415 bool is_connected(); 416 void bg_connect(); 417 int connect( 418 char *tgt_host, 419 char *tgt_username, 420 char *tgt_password, 421 long tgt_port, 422 char *tgt_socket, 423 char *server_name, 424 int connect_retry_count, 425 longlong connect_retry_interval 426 ); 427 int ping(); 428 void bg_disconnect(); 429 void disconnect(); 430 int set_net_timeout(); 431 int exec_query( 432 const char *query, 433 uint length, 434 int quick_mode 435 ); 436 int get_errno(); 437 const char *get_error(); 438 bool is_server_gone_error( 439 int error_num 440 ); 441 bool is_dup_entry_error( 442 int error_num 443 ); 444 bool is_xa_nota_error( 445 int error_num 446 ); 447 int print_warnings( 448 struct tm *l_time 449 ); 450 spider_db_result *store_result( 451 spider_db_result_buffer **spider_res_buf, 452 st_spider_db_request_key *request_key, 453 int *error_num 454 ); 455 spider_db_result *use_result( 456 ha_spider *spider, 457 st_spider_db_request_key *request_key, 458 int *error_num 459 ); 460 int next_result(); 461 uint affected_rows(); 462 uint matched_rows(); 463 bool inserted_info( 464 spider_db_handler *handler, 465 ha_copy_info *copy_info 466 ); 467 ulonglong last_insert_id(); 468 int set_character_set( 469 const char *csname 470 ); 471 int select_db( 472 const char *dbname 473 ); 474 int consistent_snapshot( 475 int *need_mon 476 ); 477 bool trx_start_in_bulk_sql(); 478 int start_transaction( 479 int *need_mon 480 ); 481 int commit( 482 int *need_mon 483 ); 484 int rollback( 485 int *need_mon 486 ); 487 bool xa_start_in_bulk_sql(); 488 int xa_start( 489 XID *xid, 490 int *need_mon 491 ); 492 int xa_end( 493 XID *xid, 494 int *need_mon 495 ); 496 int xa_prepare( 497 XID *xid, 498 int *need_mon 499 ); 500 int xa_commit( 501 XID *xid, 502 int *need_mon 503 ); 504 int xa_rollback( 505 XID *xid, 506 int *need_mon 507 ); 508 bool set_trx_isolation_in_bulk_sql(); 509 int set_trx_isolation( 510 int trx_isolation, 511 int *need_mon 512 ); 513 bool set_autocommit_in_bulk_sql(); 514 int set_autocommit( 515 bool autocommit, 516 int *need_mon 517 ); 518 bool set_sql_log_off_in_bulk_sql(); 519 int set_sql_log_off( 520 bool sql_log_off, 521 int *need_mon 522 ); 523 bool set_wait_timeout_in_bulk_sql(); 524 int set_wait_timeout( 525 int wait_timeout, 526 int *need_mon 527 ); 528 bool set_sql_mode_in_bulk_sql(); 529 int set_sql_mode( 530 sql_mode_t sql_mode, 531 int *need_mon 532 ); 533 bool set_time_zone_in_bulk_sql(); 534 int set_time_zone( 535 Time_zone *time_zone, 536 int *need_mon 537 ); 538 bool set_loop_check_in_bulk_sql(); 539 int set_loop_check( 540 int *need_mon 541 ); 542 int fin_loop_check(); 543 int exec_simple_sql_with_result( 544 SPIDER_TRX *trx, 545 SPIDER_SHARE *share, 546 const char *sql, 547 uint sql_length, 548 int all_link_idx, 549 int *need_mon, 550 SPIDER_DB_RESULT **res 551 ); 552 int show_master_status( 553 SPIDER_TRX *trx, 554 SPIDER_SHARE *share, 555 int all_link_idx, 556 int *need_mon, 557 TABLE *table, 558 spider_string *str, 559 int mode, 560 SPIDER_DB_RESULT **res1, 561 SPIDER_DB_RESULT **res2 562 ); 563 int select_binlog_gtid_pos( 564 SPIDER_TRX *trx, 565 SPIDER_SHARE *share, 566 int all_link_idx, 567 int *need_mon, 568 TABLE *table, 569 spider_string *str, 570 const char *binlog_file_name, 571 uint binlog_file_name_length, 572 const char *binlog_pos, 573 uint binlog_pos_length, 574 SPIDER_DB_RESULT **res 575 ); 576 #if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET) 577 int append_sql( 578 char *sql, 579 ulong sql_length, 580 st_spider_db_request_key *request_key 581 ); 582 int append_open_handler( 583 uint handler_id, 584 const char *db_name, 585 const char *table_name, 586 const char *index_name, 587 const char *sql, 588 st_spider_db_request_key *request_key 589 ); 590 int append_select( 591 uint handler_id, 592 spider_string *sql, 593 SPIDER_DB_HS_STRING_REF_BUFFER *keys, 594 int limit, 595 int skip, 596 st_spider_db_request_key *request_key 597 ); 598 int append_insert( 599 uint handler_id, 600 SPIDER_DB_HS_STRING_REF_BUFFER *upds, 601 st_spider_db_request_key *request_key 602 ); 603 int append_update( 604 uint handler_id, 605 spider_string *sql, 606 SPIDER_DB_HS_STRING_REF_BUFFER *keys, 607 SPIDER_DB_HS_STRING_REF_BUFFER *upds, 608 int limit, 609 int skip, 610 bool increment, 611 bool decrement, 612 st_spider_db_request_key *request_key 613 ); 614 int append_delete( 615 uint handler_id, 616 spider_string *sql, 617 SPIDER_DB_HS_STRING_REF_BUFFER *keys, 618 int limit, 619 int skip, 620 st_spider_db_request_key *request_key 621 ); 622 void reset_request_queue(); 623 #endif 624 size_t escape_string( 625 char *to, 626 const char *from, 627 size_t from_length 628 ); 629 bool have_lock_table_list(); 630 int append_lock_tables( 631 spider_string *str 632 ); 633 int append_unlock_tables( 634 spider_string *str 635 ); 636 uint get_lock_table_hash_count(); 637 void reset_lock_table_hash(); 638 uint get_opened_handler_count(); 639 void reset_opened_handler(); 640 void set_dup_key_idx( 641 ha_spider *spider, 642 int link_idx 643 ); 644 bool cmp_request_key_to_snd( 645 st_spider_db_request_key *request_key 646 ); 647 }; 648 649 class spider_db_mysql: public spider_db_mbase 650 { 651 public: 652 spider_db_mysql( 653 SPIDER_CONN *conn 654 ); 655 ~spider_db_mysql(); 656 }; 657 658 class spider_db_mariadb: public spider_db_mbase 659 { 660 public: 661 spider_db_mariadb( 662 SPIDER_CONN *conn 663 ); 664 ~spider_db_mariadb(); 665 }; 666 667 class spider_mbase_share: public spider_db_share 668 { 669 protected: 670 spider_db_mbase_util *spider_db_mbase_utility; 671 public: 672 spider_string *table_select; 673 int table_select_pos; 674 spider_string *key_select; 675 int *key_select_pos; 676 spider_string *key_hint; 677 spider_string *show_table_status; 678 spider_string *show_records; 679 spider_string *show_index; 680 spider_string *table_names_str; 681 spider_string *db_names_str; 682 spider_string *db_table_str; 683 #ifdef SPIDER_HAS_HASH_VALUE_TYPE 684 my_hash_value_type *db_table_str_hash_value; 685 #endif 686 uint table_nm_max_length; 687 uint db_nm_max_length; 688 spider_string *column_name_str; 689 bool same_db_table_name; 690 int first_all_link_idx; 691 692 spider_mbase_share( 693 st_spider_share *share, 694 uint dbton_id, 695 spider_db_mbase_util *spider_db_mbase_utility 696 ); 697 virtual ~spider_mbase_share(); 698 int init(); 699 uint get_column_name_length( 700 uint field_index 701 ); 702 int append_column_name( 703 spider_string *str, 704 uint field_index 705 ); 706 int append_column_name_with_alias( 707 spider_string *str, 708 uint field_index, 709 const char *alias, 710 uint alias_length 711 ); 712 int append_table_name( 713 spider_string *str, 714 int all_link_idx 715 ); 716 int append_table_name_with_adjusting( 717 spider_string *str, 718 int all_link_idx 719 ); 720 int append_from_with_adjusted_table_name( 721 spider_string *str, 722 int *table_name_pos 723 ); 724 bool need_change_db_table_name(); 725 #ifdef SPIDER_HAS_DISCOVER_TABLE_STRUCTURE 726 int discover_table_structure( 727 SPIDER_TRX *trx, 728 SPIDER_SHARE *spider_share, 729 spider_string *str 730 ); 731 #endif 732 #ifdef HA_HAS_CHECKSUM_EXTENDED 733 bool checksum_support(); 734 #endif 735 protected: 736 int create_table_names_str(); 737 void free_table_names_str(); 738 int create_column_name_str(); 739 void free_column_name_str(); 740 int convert_key_hint_str(); 741 int append_show_table_status(); 742 void free_show_table_status(); 743 int append_show_records(); 744 void free_show_records(); 745 int append_show_index(); 746 void free_show_index(); 747 int append_table_select(); 748 int append_key_select( 749 uint idx 750 ); 751 }; 752 753 class spider_mysql_share: public spider_mbase_share 754 { 755 public: 756 spider_mysql_share( 757 st_spider_share *share 758 ); 759 ~spider_mysql_share(); 760 }; 761 762 class spider_mariadb_share: public spider_mbase_share 763 { 764 public: 765 spider_mariadb_share( 766 st_spider_share *share 767 ); 768 ~spider_mariadb_share(); 769 }; 770 771 class spider_mbase_handler: public spider_db_handler 772 { 773 protected: 774 spider_db_mbase_util *spider_db_mbase_utility; 775 spider_string sql; 776 spider_string sql_part; 777 spider_string sql_part2; 778 spider_string ha_sql; 779 int where_pos; 780 int order_pos; 781 int limit_pos; 782 public: 783 int table_name_pos; 784 protected: 785 int ha_read_pos; 786 int ha_next_pos; 787 int ha_where_pos; 788 int ha_limit_pos; 789 int ha_table_name_pos; 790 uint ha_sql_handler_id; 791 spider_string insert_sql; 792 int insert_pos; 793 int insert_table_name_pos; 794 spider_string update_sql; 795 TABLE *upd_tmp_tbl; 796 TMP_TABLE_PARAM upd_tmp_tbl_prm; 797 spider_string tmp_sql; 798 int tmp_sql_pos1; /* drop db nm pos at tmp_table_join */ 799 int tmp_sql_pos2; /* create db nm pos at tmp_table_join */ 800 int tmp_sql_pos3; /* insert db nm pos at tmp_table_join */ 801 int tmp_sql_pos4; /* insert val pos at tmp_table_join */ 802 int tmp_sql_pos5; /* end of drop tbl at tmp_table_join */ 803 spider_string dup_update_sql; 804 spider_string *exec_sql; 805 spider_string *exec_insert_sql; 806 spider_string *exec_update_sql; 807 spider_string *exec_tmp_sql; 808 spider_string *exec_ha_sql; 809 bool reading_from_bulk_tmp_table; 810 bool filled_up; 811 #if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET) 812 SPIDER_DB_HS_STRING_REF_BUFFER hs_upds; 813 #endif 814 SPIDER_INT_HLD *union_table_name_pos_first; 815 SPIDER_INT_HLD *union_table_name_pos_current; 816 public: 817 spider_mbase_share *mysql_share; 818 SPIDER_LINK_FOR_HASH *link_for_hash; 819 uchar *minimum_select_bitmap; 820 uchar direct_insert_kind; 821 spider_mbase_handler( 822 ha_spider *spider, 823 spider_mbase_share *share, 824 spider_db_mbase_util *spider_db_mbase_utility 825 ); 826 virtual ~spider_mbase_handler(); 827 int init(); 828 int append_index_hint( 829 spider_string *str, 830 int link_idx, 831 ulong sql_type 832 ); 833 int append_table_name_with_adjusting( 834 spider_string *str, 835 int link_idx, 836 ulong sql_type 837 ); 838 int append_key_column_types( 839 const key_range *start_key, 840 spider_string *str 841 ); 842 int append_key_join_columns_for_bka( 843 const key_range *start_key, 844 spider_string *str, 845 const char **table_aliases, 846 uint *table_alias_lengths 847 ); 848 int append_tmp_table_and_sql_for_bka( 849 const key_range *start_key 850 ); 851 int reuse_tmp_table_and_sql_for_bka(); 852 void create_tmp_bka_table_name( 853 char *tmp_table_name, 854 int *tmp_table_name_length, 855 int link_idx 856 ); 857 int append_create_tmp_bka_table( 858 const key_range *start_key, 859 spider_string *str, 860 char *tmp_table_name, 861 int tmp_table_name_length, 862 int *db_name_pos, 863 CHARSET_INFO *table_charset 864 ); 865 int append_drop_tmp_bka_table( 866 spider_string *str, 867 char *tmp_table_name, 868 int tmp_table_name_length, 869 int *db_name_pos, 870 int *drop_table_end_pos, 871 bool with_semicolon 872 ); 873 int append_insert_tmp_bka_table( 874 const key_range *start_key, 875 spider_string *str, 876 char *tmp_table_name, 877 int tmp_table_name_length, 878 int *db_name_pos 879 ); 880 int append_union_table_and_sql_for_bka( 881 const key_range *start_key 882 ); 883 int reuse_union_table_and_sql_for_bka(); 884 int append_insert_for_recovery( 885 ulong sql_type, 886 int link_idx 887 ); 888 int append_update( 889 const TABLE *table, 890 my_ptrdiff_t ptr_diff 891 ); 892 int append_update( 893 const TABLE *table, 894 my_ptrdiff_t ptr_diff, 895 int link_idx 896 ); 897 int append_delete( 898 const TABLE *table, 899 my_ptrdiff_t ptr_diff 900 ); 901 int append_delete( 902 const TABLE *table, 903 my_ptrdiff_t ptr_diff, 904 int link_idx 905 ); 906 int append_insert_part(); 907 int append_insert( 908 spider_string *str, 909 int link_idx 910 ); 911 int append_update_part(); 912 int append_update( 913 spider_string *str, 914 int link_idx 915 ); 916 int append_delete_part(); 917 int append_delete( 918 spider_string *str 919 ); 920 #if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET) 921 #ifdef HANDLER_HAS_DIRECT_UPDATE_ROWS 922 int append_increment_update_set_part(); 923 int append_increment_update_set( 924 spider_string *str 925 ); 926 #endif 927 #endif 928 int append_update_set_part(); 929 int append_update_set( 930 spider_string *str 931 ); 932 #ifdef HANDLER_HAS_DIRECT_UPDATE_ROWS 933 int append_direct_update_set_part(); 934 int append_direct_update_set( 935 spider_string *str 936 ); 937 int append_dup_update_pushdown_part( 938 const char *alias, 939 uint alias_length 940 ); 941 int append_update_columns_part( 942 const char *alias, 943 uint alias_length 944 ); 945 int check_update_columns_part(); 946 int append_update_columns( 947 spider_string *str, 948 const char *alias, 949 uint alias_length 950 ); 951 #endif 952 int append_select_part( 953 ulong sql_type 954 ); 955 int append_select( 956 spider_string *str, 957 ulong sql_type 958 ); 959 int append_table_select_part( 960 ulong sql_type 961 ); 962 int append_table_select( 963 spider_string *str 964 ); 965 int append_key_select_part( 966 ulong sql_type, 967 uint idx 968 ); 969 int append_key_select( 970 spider_string *str, 971 uint idx 972 ); 973 int append_minimum_select_part( 974 ulong sql_type 975 ); 976 int append_minimum_select( 977 spider_string *str, 978 ulong sql_type 979 ); 980 int append_table_select_with_alias( 981 spider_string *str, 982 const char *alias, 983 uint alias_length 984 ); 985 int append_key_select_with_alias( 986 spider_string *str, 987 const KEY *key_info, 988 const char *alias, 989 uint alias_length 990 ); 991 int append_minimum_select_with_alias( 992 spider_string *str, 993 const char *alias, 994 uint alias_length 995 ); 996 int append_select_columns_with_alias( 997 spider_string *str, 998 const char *alias, 999 uint alias_length 1000 ); 1001 int append_hint_after_table_part( 1002 ulong sql_type 1003 ); 1004 int append_hint_after_table( 1005 spider_string *str 1006 ); 1007 void set_where_pos( 1008 ulong sql_type 1009 ); 1010 void set_where_to_pos( 1011 ulong sql_type 1012 ); 1013 int check_item_type( 1014 Item *item 1015 ); 1016 int append_values_connector_part( 1017 ulong sql_type 1018 ); 1019 int append_values_connector( 1020 spider_string *str 1021 ); 1022 int append_values_terminator_part( 1023 ulong sql_type 1024 ); 1025 int append_values_terminator( 1026 spider_string *str 1027 ); 1028 int append_union_table_connector_part( 1029 ulong sql_type 1030 ); 1031 int append_union_table_connector( 1032 spider_string *str 1033 ); 1034 int append_union_table_terminator_part( 1035 ulong sql_type 1036 ); 1037 int append_union_table_terminator( 1038 spider_string *str 1039 ); 1040 int append_key_column_values_part( 1041 const key_range *start_key, 1042 ulong sql_type 1043 ); 1044 int append_key_column_values( 1045 spider_string *str, 1046 const key_range *start_key 1047 ); 1048 int append_key_column_values_with_name_part( 1049 const key_range *start_key, 1050 ulong sql_type 1051 ); 1052 int append_key_column_values_with_name( 1053 spider_string *str, 1054 const key_range *start_key 1055 ); 1056 int append_key_where_part( 1057 const key_range *start_key, 1058 const key_range *end_key, 1059 ulong sql_type 1060 ); 1061 int append_key_where( 1062 spider_string *str, 1063 spider_string *str_part, 1064 spider_string *str_part2, 1065 const key_range *start_key, 1066 const key_range *end_key, 1067 ulong sql_type, 1068 bool set_order 1069 ); 1070 int append_is_null_part( 1071 ulong sql_type, 1072 KEY_PART_INFO *key_part, 1073 const key_range *key, 1074 const uchar **ptr, 1075 bool key_eq, 1076 bool tgt_final 1077 ); 1078 int append_is_null( 1079 ulong sql_type, 1080 spider_string *str, 1081 spider_string *str_part, 1082 spider_string *str_part2, 1083 KEY_PART_INFO *key_part, 1084 const key_range *key, 1085 const uchar **ptr, 1086 bool key_eq, 1087 bool tgt_final 1088 ); 1089 int append_where_terminator_part( 1090 ulong sql_type, 1091 bool set_order, 1092 int key_count 1093 ); 1094 int append_where_terminator( 1095 ulong sql_type, 1096 spider_string *str, 1097 spider_string *str_part, 1098 spider_string *str_part2, 1099 bool set_order, 1100 int key_count 1101 ); 1102 int append_match_where_part( 1103 ulong sql_type 1104 ); 1105 int append_match_where( 1106 spider_string *str 1107 ); 1108 int append_update_where( 1109 spider_string *str, 1110 const TABLE *table, 1111 my_ptrdiff_t ptr_diff 1112 ); 1113 int append_condition_part( 1114 const char *alias, 1115 uint alias_length, 1116 ulong sql_type, 1117 bool test_flg 1118 ); 1119 int append_condition( 1120 spider_string *str, 1121 const char *alias, 1122 uint alias_length, 1123 bool start_where, 1124 ulong sql_type 1125 ); 1126 int append_match_against_part( 1127 ulong sql_type, 1128 st_spider_ft_info *ft_info, 1129 const char *alias, 1130 uint alias_length 1131 ); 1132 int append_match_against( 1133 spider_string *str, 1134 st_spider_ft_info *ft_info, 1135 const char *alias, 1136 uint alias_length 1137 ); 1138 int append_match_select_part( 1139 ulong sql_type, 1140 const char *alias, 1141 uint alias_length 1142 ); 1143 int append_match_select( 1144 spider_string *str, 1145 const char *alias, 1146 uint alias_length 1147 ); 1148 #ifdef HANDLER_HAS_DIRECT_AGGREGATE 1149 int append_sum_select_part( 1150 ulong sql_type, 1151 const char *alias, 1152 uint alias_length 1153 ); 1154 int append_sum_select( 1155 spider_string *str, 1156 const char *alias, 1157 uint alias_length 1158 ); 1159 #endif 1160 void set_order_pos( 1161 ulong sql_type 1162 ); 1163 void set_order_to_pos( 1164 ulong sql_type 1165 ); 1166 #ifdef HANDLER_HAS_DIRECT_AGGREGATE 1167 int append_group_by_part( 1168 const char *alias, 1169 uint alias_length, 1170 ulong sql_type 1171 ); 1172 int append_group_by( 1173 spider_string *str, 1174 const char *alias, 1175 uint alias_length 1176 ); 1177 #endif 1178 int append_key_order_for_merge_with_alias_part( 1179 const char *alias, 1180 uint alias_length, 1181 ulong sql_type 1182 ); 1183 int append_key_order_for_merge_with_alias( 1184 spider_string *str, 1185 const char *alias, 1186 uint alias_length 1187 ); 1188 int append_key_order_for_direct_order_limit_with_alias_part( 1189 const char *alias, 1190 uint alias_length, 1191 ulong sql_type 1192 ); 1193 int append_key_order_for_direct_order_limit_with_alias( 1194 spider_string *str, 1195 const char *alias, 1196 uint alias_length 1197 ); 1198 int append_key_order_with_alias_part( 1199 const char *alias, 1200 uint alias_length, 1201 ulong sql_type 1202 ); 1203 int append_key_order_for_handler( 1204 spider_string *str, 1205 const char *alias, 1206 uint alias_length 1207 ); 1208 int append_key_order_with_alias( 1209 spider_string *str, 1210 const char *alias, 1211 uint alias_length 1212 ); 1213 int append_limit_part( 1214 longlong offset, 1215 longlong limit, 1216 ulong sql_type 1217 ); 1218 int reappend_limit_part( 1219 longlong offset, 1220 longlong limit, 1221 ulong sql_type 1222 ); 1223 int append_limit( 1224 spider_string *str, 1225 longlong offset, 1226 longlong limit 1227 ); 1228 int append_select_lock_part( 1229 ulong sql_type 1230 ); 1231 int append_select_lock( 1232 spider_string *str 1233 ); 1234 int append_union_all_start_part( 1235 ulong sql_type 1236 ); 1237 int append_union_all_start( 1238 spider_string *str 1239 ); 1240 int append_union_all_part( 1241 ulong sql_type 1242 ); 1243 int append_union_all( 1244 spider_string *str 1245 ); 1246 int append_union_all_end_part( 1247 ulong sql_type 1248 ); 1249 int append_union_all_end( 1250 spider_string *str 1251 ); 1252 int append_multi_range_cnt_part( 1253 ulong sql_type, 1254 uint multi_range_cnt, 1255 bool with_comma 1256 ); 1257 int append_multi_range_cnt( 1258 spider_string *str, 1259 uint multi_range_cnt, 1260 bool with_comma 1261 ); 1262 int append_multi_range_cnt_with_name_part( 1263 ulong sql_type, 1264 uint multi_range_cnt 1265 ); 1266 int append_multi_range_cnt_with_name( 1267 spider_string *str, 1268 uint multi_range_cnt 1269 ); 1270 int append_open_handler_part( 1271 ulong sql_type, 1272 uint handler_id, 1273 SPIDER_CONN *conn, 1274 int link_idx 1275 ); 1276 int append_open_handler( 1277 spider_string *str, 1278 uint handler_id, 1279 SPIDER_CONN *conn, 1280 int link_idx 1281 ); 1282 int append_close_handler_part( 1283 ulong sql_type, 1284 int link_idx 1285 ); 1286 int append_close_handler( 1287 spider_string *str, 1288 int link_idx 1289 ); 1290 int append_insert_terminator_part( 1291 ulong sql_type 1292 ); 1293 int append_insert_terminator( 1294 spider_string *str 1295 ); 1296 int append_insert_values_part( 1297 ulong sql_type 1298 ); 1299 int append_insert_values( 1300 spider_string *str 1301 ); 1302 int append_into_part( 1303 ulong sql_type 1304 ); 1305 int append_into( 1306 spider_string *str 1307 ); 1308 void set_insert_to_pos( 1309 ulong sql_type 1310 ); 1311 int append_from_part( 1312 ulong sql_type, 1313 int link_idx 1314 ); 1315 int append_from( 1316 spider_string *str, 1317 ulong sql_type, 1318 int link_idx 1319 ); 1320 int append_flush_tables_part( 1321 ulong sql_type, 1322 int link_idx, 1323 bool lock 1324 ); 1325 int append_flush_tables( 1326 spider_string *str, 1327 int link_idx, 1328 bool lock 1329 ); 1330 int append_optimize_table_part( 1331 ulong sql_type, 1332 int link_idx 1333 ); 1334 int append_optimize_table( 1335 spider_string *str, 1336 int link_idx 1337 ); 1338 int append_analyze_table_part( 1339 ulong sql_type, 1340 int link_idx 1341 ); 1342 int append_analyze_table( 1343 spider_string *str, 1344 int link_idx 1345 ); 1346 int append_repair_table_part( 1347 ulong sql_type, 1348 int link_idx, 1349 HA_CHECK_OPT* check_opt 1350 ); 1351 int append_repair_table( 1352 spider_string *str, 1353 int link_idx, 1354 HA_CHECK_OPT* check_opt 1355 ); 1356 int append_check_table_part( 1357 ulong sql_type, 1358 int link_idx, 1359 HA_CHECK_OPT* check_opt 1360 ); 1361 int append_check_table( 1362 spider_string *str, 1363 int link_idx, 1364 HA_CHECK_OPT* check_opt 1365 ); 1366 int append_enable_keys_part( 1367 ulong sql_type, 1368 int link_idx 1369 ); 1370 int append_enable_keys( 1371 spider_string *str, 1372 int link_idx 1373 ); 1374 int append_disable_keys_part( 1375 ulong sql_type, 1376 int link_idx 1377 ); 1378 int append_disable_keys( 1379 spider_string *str, 1380 int link_idx 1381 ); 1382 int append_delete_all_rows_part( 1383 ulong sql_type 1384 ); 1385 int append_delete_all_rows( 1386 spider_string *str, 1387 ulong sql_type 1388 ); 1389 int append_truncate( 1390 spider_string *str, 1391 ulong sql_type, 1392 int link_idx 1393 ); 1394 int append_explain_select_part( 1395 const key_range *start_key, 1396 const key_range *end_key, 1397 ulong sql_type, 1398 int link_idx 1399 ); 1400 int append_explain_select( 1401 spider_string *str, 1402 const key_range *start_key, 1403 const key_range *end_key, 1404 ulong sql_type, 1405 int link_idx 1406 ); 1407 bool is_sole_projection_field( 1408 uint16 field_index 1409 ); 1410 bool is_bulk_insert_exec_period( 1411 bool bulk_end 1412 ); 1413 bool sql_is_filled_up( 1414 ulong sql_type 1415 ); 1416 bool sql_is_empty( 1417 ulong sql_type 1418 ); 1419 bool support_multi_split_read(); 1420 bool support_bulk_update(); 1421 int bulk_tmp_table_insert(); 1422 int bulk_tmp_table_insert( 1423 int link_idx 1424 ); 1425 int bulk_tmp_table_end_bulk_insert(); 1426 int bulk_tmp_table_rnd_init(); 1427 int bulk_tmp_table_rnd_next(); 1428 int bulk_tmp_table_rnd_end(); 1429 bool need_copy_for_update( 1430 int link_idx 1431 ); 1432 bool bulk_tmp_table_created(); 1433 int mk_bulk_tmp_table_and_bulk_start(); 1434 void rm_bulk_tmp_table(); 1435 int store_sql_to_bulk_tmp_table( 1436 spider_string *str, 1437 TABLE *tmp_table 1438 ); 1439 int restore_sql_from_bulk_tmp_table( 1440 spider_string *str, 1441 TABLE *tmp_table 1442 ); 1443 int insert_lock_tables_list( 1444 SPIDER_CONN *conn, 1445 int link_idx 1446 ); 1447 int append_lock_tables_list( 1448 SPIDER_CONN *conn, 1449 int link_idx, 1450 int *appended 1451 ); 1452 int realloc_sql( 1453 ulong *realloced 1454 ); 1455 int reset_sql( 1456 ulong sql_type 1457 ); 1458 #if defined(HS_HAS_SQLCOM) && defined(HAVE_HANDLERSOCKET) 1459 int reset_keys( 1460 ulong sql_type 1461 ); 1462 int reset_upds( 1463 ulong sql_type 1464 ); 1465 int reset_strs( 1466 ulong sql_type 1467 ); 1468 int reset_strs_pos( 1469 ulong sql_type 1470 ); 1471 int push_back_upds( 1472 SPIDER_HS_STRING_REF &info 1473 ); 1474 #endif 1475 bool need_lock_before_set_sql_for_exec( 1476 ulong sql_type 1477 ); 1478 #ifdef SPIDER_HAS_GROUP_BY_HANDLER 1479 int set_sql_for_exec( 1480 ulong sql_type, 1481 int link_idx, 1482 SPIDER_LINK_IDX_CHAIN *link_idx_chain 1483 ); 1484 #endif 1485 int set_sql_for_exec( 1486 ulong sql_type, 1487 int link_idx 1488 ); 1489 int set_sql_for_exec( 1490 spider_db_copy_table *tgt_ct, 1491 ulong sql_type 1492 ); 1493 int execute_sql( 1494 ulong sql_type, 1495 SPIDER_CONN *conn, 1496 int quick_mode, 1497 int *need_mon 1498 ); 1499 int reset(); 1500 int sts_mode_exchange( 1501 int sts_mode 1502 ); 1503 int show_table_status( 1504 int link_idx, 1505 int sts_mode, 1506 uint flag 1507 ); 1508 int crd_mode_exchange( 1509 int crd_mode 1510 ); 1511 int show_index( 1512 int link_idx, 1513 int crd_mode 1514 ); 1515 int simple_action( 1516 uint simple_action, 1517 int link_idx 1518 ); 1519 int show_records( 1520 int link_idx 1521 ); 1522 #ifdef HA_HAS_CHECKSUM_EXTENDED 1523 int checksum_table( 1524 int link_idx 1525 ); 1526 #endif 1527 int show_last_insert_id( 1528 int link_idx, 1529 ulonglong &last_insert_id 1530 ); 1531 ha_rows explain_select( 1532 const key_range *start_key, 1533 const key_range *end_key, 1534 int link_idx 1535 ); 1536 int lock_tables( 1537 int link_idx 1538 ); 1539 int unlock_tables( 1540 int link_idx 1541 ); 1542 int disable_keys( 1543 SPIDER_CONN *conn, 1544 int link_idx 1545 ); 1546 int enable_keys( 1547 SPIDER_CONN *conn, 1548 int link_idx 1549 ); 1550 int check_table( 1551 SPIDER_CONN *conn, 1552 int link_idx, 1553 HA_CHECK_OPT* check_opt 1554 ); 1555 int repair_table( 1556 SPIDER_CONN *conn, 1557 int link_idx, 1558 HA_CHECK_OPT* check_opt 1559 ); 1560 int analyze_table( 1561 SPIDER_CONN *conn, 1562 int link_idx 1563 ); 1564 int optimize_table( 1565 SPIDER_CONN *conn, 1566 int link_idx 1567 ); 1568 int flush_tables( 1569 SPIDER_CONN *conn, 1570 int link_idx, 1571 bool lock 1572 ); 1573 int flush_logs( 1574 SPIDER_CONN *conn, 1575 int link_idx 1576 ); 1577 int insert_opened_handler( 1578 SPIDER_CONN *conn, 1579 int link_idx 1580 ); 1581 int delete_opened_handler( 1582 SPIDER_CONN *conn, 1583 int link_idx 1584 ); 1585 int sync_from_clone_source( 1586 spider_db_handler *dbton_hdl 1587 ); 1588 bool support_use_handler( 1589 int use_handler 1590 ); 1591 void minimum_select_bitmap_create(); 1592 bool minimum_select_bit_is_set( 1593 uint field_index 1594 ); 1595 void copy_minimum_select_bitmap( 1596 uchar *bitmap 1597 ); 1598 int init_union_table_name_pos(); 1599 int set_union_table_name_pos(); 1600 int reset_union_table_name( 1601 spider_string *str, 1602 int link_idx, 1603 ulong sql_type 1604 ); 1605 #ifdef SPIDER_HAS_GROUP_BY_HANDLER 1606 int append_from_and_tables_part( 1607 spider_fields *fields, 1608 ulong sql_type 1609 ); 1610 int reappend_tables_part( 1611 spider_fields *fields, 1612 ulong sql_type 1613 ); 1614 int append_where_part( 1615 ulong sql_type 1616 ); 1617 int append_having_part( 1618 ulong sql_type 1619 ); 1620 int append_item_type_part( 1621 Item *item, 1622 const char *alias, 1623 uint alias_length, 1624 bool use_fields, 1625 spider_fields *fields, 1626 ulong sql_type 1627 ); 1628 int append_list_item_select_part( 1629 List<Item> *select, 1630 const char *alias, 1631 uint alias_length, 1632 bool use_fields, 1633 spider_fields *fields, 1634 ulong sql_type 1635 ); 1636 int append_list_item_select( 1637 List<Item> *select, 1638 spider_string *str, 1639 const char *alias, 1640 uint alias_length, 1641 bool use_fields, 1642 spider_fields *fields 1643 ); 1644 int append_group_by_part( 1645 ORDER *order, 1646 const char *alias, 1647 uint alias_length, 1648 bool use_fields, 1649 spider_fields *fields, 1650 ulong sql_type 1651 ); 1652 int append_group_by( 1653 ORDER *order, 1654 spider_string *str, 1655 const char *alias, 1656 uint alias_length, 1657 bool use_fields, 1658 spider_fields *fields 1659 ); 1660 int append_order_by_part( 1661 ORDER *order, 1662 const char *alias, 1663 uint alias_length, 1664 bool use_fields, 1665 spider_fields *fields, 1666 ulong sql_type 1667 ); 1668 int append_order_by( 1669 ORDER *order, 1670 spider_string *str, 1671 const char *alias, 1672 uint alias_length, 1673 bool use_fields, 1674 spider_fields *fields 1675 ); 1676 #endif 1677 #ifdef HANDLER_HAS_DIRECT_UPDATE_ROWS 1678 bool check_direct_update( 1679 st_select_lex *select_lex, 1680 longlong select_limit, 1681 longlong offset_limit 1682 ); 1683 bool check_direct_delete( 1684 st_select_lex *select_lex, 1685 longlong select_limit, 1686 longlong offset_limit 1687 ); 1688 #endif 1689 }; 1690 1691 class spider_mysql_handler: public spider_mbase_handler 1692 { 1693 public: 1694 spider_mysql_handler( 1695 ha_spider *spider, 1696 spider_mbase_share *share 1697 ); 1698 ~spider_mysql_handler(); 1699 }; 1700 1701 class spider_mariadb_handler: public spider_mbase_handler 1702 { 1703 public: 1704 spider_mariadb_handler( 1705 ha_spider *spider, 1706 spider_mbase_share *share 1707 ); 1708 ~spider_mariadb_handler(); 1709 }; 1710 1711 class spider_mbase_copy_table: public spider_db_copy_table 1712 { 1713 public: 1714 spider_mbase_share *mysql_share; 1715 spider_string sql; 1716 uint pos; 1717 spider_mbase_copy_table( 1718 spider_mbase_share *db_share 1719 ); 1720 virtual ~spider_mbase_copy_table(); 1721 int init(); 1722 void set_sql_charset( 1723 CHARSET_INFO *cs 1724 ); 1725 int append_select_str(); 1726 int append_insert_str( 1727 int insert_flg 1728 ); 1729 int append_table_columns( 1730 TABLE_SHARE *table_share 1731 ); 1732 int append_from_str(); 1733 int append_table_name( 1734 int link_idx 1735 ); 1736 void set_sql_pos(); 1737 void set_sql_to_pos(); 1738 int append_copy_where( 1739 spider_db_copy_table *source_ct, 1740 KEY *key_info, 1741 ulong *last_row_pos, 1742 ulong *last_lengths 1743 ); 1744 int append_key_order_str( 1745 KEY *key_info, 1746 int start_pos, 1747 bool desc_flg 1748 ); 1749 int append_limit( 1750 longlong offset, 1751 longlong limit 1752 ); 1753 int append_into_str(); 1754 int append_open_paren_str(); 1755 int append_values_str(); 1756 int append_select_lock_str( 1757 int lock_mode 1758 ); 1759 int exec_query( 1760 SPIDER_CONN *conn, 1761 int quick_mode, 1762 int *need_mon 1763 ); 1764 int copy_key_row( 1765 spider_db_copy_table *source_ct, 1766 Field *field, 1767 ulong *row_pos, 1768 ulong *length, 1769 const char *joint_str, 1770 const int joint_length 1771 ); 1772 int copy_row( 1773 Field *field, 1774 SPIDER_DB_ROW *row 1775 ); 1776 int copy_rows( 1777 TABLE *table, 1778 SPIDER_DB_ROW *row, 1779 ulong **last_row_pos, 1780 ulong **last_lengths 1781 ); 1782 int copy_rows( 1783 TABLE *table, 1784 SPIDER_DB_ROW *row 1785 ); 1786 int append_insert_terminator(); 1787 int copy_insert_values( 1788 spider_db_copy_table *source_ct 1789 ); 1790 }; 1791 1792 class spider_mysql_copy_table: public spider_mbase_copy_table 1793 { 1794 public: 1795 spider_mysql_copy_table( 1796 spider_mbase_share *db_share 1797 ); 1798 ~spider_mysql_copy_table(); 1799 }; 1800 1801 class spider_mariadb_copy_table: public spider_mbase_copy_table 1802 { 1803 public: 1804 spider_mariadb_copy_table( 1805 spider_mbase_share *db_share 1806 ); 1807 ~spider_mariadb_copy_table(); 1808 }; 1809