From ab15628bbc052d342c2cffa16c9e6c725f1b3563 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 3 Oct 2024 10:07:17 +0200 Subject: [PATCH 001/121] MDEV-35050 fix for embedded --- .../suite/plugins/r/fulltext_notembedded.result | 8 ++++++++ mysql-test/suite/plugins/r/fulltext_plugin.result | 8 -------- mysql-test/suite/plugins/t/fulltext_notembedded.test | 12 ++++++++++++ mysql-test/suite/plugins/t/fulltext_plugin.test | 11 ----------- 4 files changed, 20 insertions(+), 19 deletions(-) create mode 100644 mysql-test/suite/plugins/r/fulltext_notembedded.result create mode 100644 mysql-test/suite/plugins/t/fulltext_notembedded.test diff --git a/mysql-test/suite/plugins/r/fulltext_notembedded.result b/mysql-test/suite/plugins/r/fulltext_notembedded.result new file mode 100644 index 00000000000..131e3bb3380 --- /dev/null +++ b/mysql-test/suite/plugins/r/fulltext_notembedded.result @@ -0,0 +1,8 @@ +# +# MDEV-35050 Found wrong usage of mutex upon setting plugin session variables +# +install soname 'mypluglib'; +set session_track_system_variables="*"; +set session simple_parser_simple_thdvar_one = 10; +uninstall soname 'mypluglib'; +# End of 10.5 tests diff --git a/mysql-test/suite/plugins/r/fulltext_plugin.result b/mysql-test/suite/plugins/r/fulltext_plugin.result index 6fcba7735c9..c5283e6aece 100644 --- a/mysql-test/suite/plugins/r/fulltext_plugin.result +++ b/mysql-test/suite/plugins/r/fulltext_plugin.result @@ -8,11 +8,3 @@ DROP TABLE t1; UNINSTALL PLUGIN simple_parser; show status like 'a%status'; Variable_name Value -# -# MDEV-35050 Found wrong usage of mutex upon setting plugin session variables -# -install soname 'mypluglib'; -set session_track_system_variables="*"; -set session simple_parser_simple_thdvar_one = 10; -uninstall soname 'mypluglib'; -# End of 10.5 tests diff --git a/mysql-test/suite/plugins/t/fulltext_notembedded.test b/mysql-test/suite/plugins/t/fulltext_notembedded.test new file mode 100644 index 00000000000..49238f3571b --- /dev/null +++ b/mysql-test/suite/plugins/t/fulltext_notembedded.test @@ -0,0 +1,12 @@ +--source include/have_simple_parser.inc +--source include/not_embedded.inc + +--echo # +--echo # MDEV-35050 Found wrong usage of mutex upon setting plugin session variables +--echo # +install soname 'mypluglib'; +set session_track_system_variables="*"; +set session simple_parser_simple_thdvar_one = 10; +uninstall soname 'mypluglib'; + +--echo # End of 10.5 tests diff --git a/mysql-test/suite/plugins/t/fulltext_plugin.test b/mysql-test/suite/plugins/t/fulltext_plugin.test index f6f6e169945..c0e1d8e17bf 100644 --- a/mysql-test/suite/plugins/t/fulltext_plugin.test +++ b/mysql-test/suite/plugins/t/fulltext_plugin.test @@ -1,4 +1,3 @@ ---source include/not_embedded.inc --source include/have_simple_parser.inc --echo # @@ -15,13 +14,3 @@ UNINSTALL PLUGIN simple_parser; # Bug #69682 - mysqld crashes after uninstall of plugin with "first" status var # show status like 'a%status'; - ---echo # ---echo # MDEV-35050 Found wrong usage of mutex upon setting plugin session variables ---echo # -install soname 'mypluglib'; -set session_track_system_variables="*"; -set session simple_parser_simple_thdvar_one = 10; -uninstall soname 'mypluglib'; - ---echo # End of 10.5 tests From 6f6c1911dc0dd8531d1d3baf2a245914395709d9 Mon Sep 17 00:00:00 2001 From: Monty Date: Thu, 3 Oct 2024 12:21:49 +0300 Subject: [PATCH 002/121] MDEV-34251 Conditional jump or move depends on uninitialised value in ha_handler_stats::has_stats Fixed by checking handler_stats if it's active instead of thd->variables.log_slow_verbosity & LOG_SLOW_VERBOSITY_ENGINE. Reviewed-by: Sergei Petrunia --- mysql-test/main/log_slow.result | 11 +++++++++++ mysql-test/main/log_slow.test | 16 ++++++++++++++++ sql/ha_handler_stats.h | 8 ++++++++ sql/handler.h | 3 +-- sql/sql_base.cc | 4 +--- sql/sql_class.cc | 6 ++++-- sql/sql_class.h | 14 +++++++++++--- 7 files changed, 52 insertions(+), 10 deletions(-) diff --git a/mysql-test/main/log_slow.result b/mysql-test/main/log_slow.result index e254be8a316..168cf02d3a5 100644 --- a/mysql-test/main/log_slow.result +++ b/mysql-test/main/log_slow.result @@ -209,3 +209,14 @@ b`; SET timestamp=1234567890; select count(*) from mysql.global_priv where length(priv)>2 # End of 10.5 tests +# +# MDEV-34251 Conditional jump or move depends on uninitialised value in +# ha_handler_stats::has_stats +# +set @@global.log_slow_verbosity=""; +connect con1,localhost,root,,; +connection con1; +set long_query_time=0.0, log_slow_verbosity='engine'; +connection default; +disconnect con1; +# End of 10.6 tests diff --git a/mysql-test/main/log_slow.test b/mysql-test/main/log_slow.test index 887a81913a0..3b6488265c0 100644 --- a/mysql-test/main/log_slow.test +++ b/mysql-test/main/log_slow.test @@ -225,3 +225,19 @@ let SEARCH_OUTPUT=matches; source include/search_pattern_in_file.inc; --echo # End of 10.5 tests + +--echo # +--echo # MDEV-34251 Conditional jump or move depends on uninitialised value in +--echo # ha_handler_stats::has_stats +--echo # + +set @@global.log_slow_verbosity=""; +connect (con1,localhost,root,,); +connection con1; + +# valgrind or asan would notice if engine stats are accessed wrong. +set long_query_time=0.0, log_slow_verbosity='engine'; +connection default; +disconnect con1; + +--echo # End of 10.6 tests diff --git a/sql/ha_handler_stats.h b/sql/ha_handler_stats.h index 362a19dab0b..ddf284b48aa 100644 --- a/sql/ha_handler_stats.h +++ b/sql/ha_handler_stats.h @@ -44,6 +44,12 @@ public: /* Time spent in engine, in timer_tracker_frequency() units */ ulonglong engine_time; uint active; /* <> 0 if status has to be updated */ + + ha_handler_stats() + { + active= 0; + } + #define first_stat pages_accessed #define last_stat engine_time inline void reset() @@ -61,6 +67,8 @@ public: } inline bool has_stats() { + if (!active) + return 0; ulonglong *to= &first_stat; do { diff --git a/sql/handler.h b/sql/handler.h index 4f5065fe006..51b08cc943b 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -3216,7 +3216,7 @@ protected: ha_rows estimation_rows_to_insert; handler *lookup_handler; - /* Statistics for the query. Updated if handler_stats.in_use is set */ + /* Statistics for the query. Updated if handler_stats.active is set */ ha_handler_stats active_handler_stats; void set_handler_stats(); public: @@ -3456,7 +3456,6 @@ public: ("handler created F_UNLCK %d F_RDLCK %d F_WRLCK %d", F_UNLCK, F_RDLCK, F_WRLCK)); reset_statistics(); - active_handler_stats.active= 0; } virtual ~handler(void) { diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 06b43277daa..4c1a5796653 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1002,9 +1002,7 @@ void close_thread_table(THD *thd, TABLE **table_ptr) file->update_global_table_stats(); file->update_global_index_stats(); - if (unlikely(thd->variables.log_slow_verbosity & - LOG_SLOW_VERBOSITY_ENGINE) && - likely(file->handler_stats)) + if (unlikely(file->handler_stats) && file->handler_stats->active) { Exec_time_tracker *tracker; if ((tracker= file->get_time_tracker())) diff --git a/sql/sql_class.cc b/sql/sql_class.cc index d81a39d2354..6e1743e78f8 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -5998,7 +5998,7 @@ void THD::store_slow_query_state(Sub_statement_state *backup) backup->tmp_tables_disk_used= tmp_tables_disk_used; backup->tmp_tables_size= tmp_tables_size; backup->tmp_tables_used= tmp_tables_used; - backup->handler_stats= handler_stats; + backup->handler_stats= handler_stats; } /* Reset variables related to slow query log */ @@ -6016,6 +6016,8 @@ void THD::reset_slow_query_state() tmp_tables_used= 0; if ((variables.log_slow_verbosity & LOG_SLOW_VERBOSITY_ENGINE)) handler_stats.reset(); + else + handler_stats.active= 0; } /* @@ -6034,7 +6036,7 @@ void THD::add_slow_query_state(Sub_statement_state *backup) tmp_tables_disk_used+= backup->tmp_tables_disk_used; tmp_tables_size+= backup->tmp_tables_size; tmp_tables_used+= backup->tmp_tables_used; - if ((variables.log_slow_verbosity & LOG_SLOW_VERBOSITY_ENGINE)) + if (handler_stats.active && backup->handler_stats.active) handler_stats.add(&backup->handler_stats); } diff --git a/sql/sql_class.h b/sql/sql_class.h index 30e98a7406f..8688f1ee35d 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -5783,10 +5783,18 @@ public: lex= backup_lex; } - bool should_collect_handler_stats() const + bool should_collect_handler_stats() { - return (variables.log_slow_verbosity & LOG_SLOW_VERBOSITY_ENGINE) || - lex->analyze_stmt; + /* + We update handler_stats.active to ensure that we have the same + value across the whole statement. + This function is only called from TABLE::init() so the value will + be the same for the whole statement. + */ + handler_stats.active= + ((variables.log_slow_verbosity & LOG_SLOW_VERBOSITY_ENGINE) || + lex->analyze_stmt); + return handler_stats.active; } /* Return true if we should create a note when an unusable key is found */ From 590718cadc8228f102ce6fa0498f2f089cad4f91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Thu, 3 Oct 2024 17:01:29 +0300 Subject: [PATCH 003/121] MDEV-31221 after-merge fix for test The 10.5 test case was accidentally added after 10.11 ones. Fixes up 63913ce5af552b6a1064b6b2061a24d45cb8a3d0 --- mysql-test/main/ctype_utf32.result | 18 +++++++++--------- mysql-test/main/ctype_utf32.test | 21 ++++++++++----------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/mysql-test/main/ctype_utf32.result b/mysql-test/main/ctype_utf32.result index 321d6a98683..17f9391667d 100644 --- a/mysql-test/main/ctype_utf32.result +++ b/mysql-test/main/ctype_utf32.result @@ -3025,6 +3025,15 @@ HEX(DATE_FORMAT(TIME'11:22:33',@format)) # End of 10.4 tests # # +# MDEV-31221 UBSAN runtime error: negation of -9223372036854775808 cannot be represented in type 'long long int' in my_strtoll10_utf32 +# +SELECT CAST(CONVERT('-9223372036854775808' USING utf32) AS SIGNED) AS c1; +c1 +-9223372036854775808 +# +# End of 10.5 tests +# +# # Start of 10.11 tests # # @@ -3109,12 +3118,3 @@ SET NAMES utf8mb4; # # End of 10.11 tests # -# -# MDEV-31221 UBSAN runtime error: negation of -9223372036854775808 cannot be represented in type 'long long int' in my_strtoll10_utf32 -# -SELECT CAST(CONVERT('-9223372036854775808' USING utf32) AS SIGNED) AS c1; -c1 --9223372036854775808 -# -# End of 10.5 tests -# diff --git a/mysql-test/main/ctype_utf32.test b/mysql-test/main/ctype_utf32.test index 75c9e3e84f8..1542cbaee62 100644 --- a/mysql-test/main/ctype_utf32.test +++ b/mysql-test/main/ctype_utf32.test @@ -1161,6 +1161,16 @@ SELECT HEX(DATE_FORMAT(TIME'11:22:33',@format)); --echo # End of 10.4 tests --echo # +--echo # +--echo # MDEV-31221 UBSAN runtime error: negation of -9223372036854775808 cannot be represented in type 'long long int' in my_strtoll10_utf32 +--echo # + +SELECT CAST(CONVERT('-9223372036854775808' USING utf32) AS SIGNED) AS c1; + +--echo # +--echo # End of 10.5 tests +--echo # + --echo # --echo # Start of 10.11 tests --echo # @@ -1238,14 +1248,3 @@ SET NAMES utf8mb4; --echo # --enable_service_connection - - ---echo # ---echo # MDEV-31221 UBSAN runtime error: negation of -9223372036854775808 cannot be represented in type 'long long int' in my_strtoll10_utf32 ---echo # - -SELECT CAST(CONVERT('-9223372036854775808' USING utf32) AS SIGNED) AS c1; - ---echo # ---echo # End of 10.5 tests ---echo # From e9c999caf48626fb565a2f888217d89065acb60b Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Fri, 20 Sep 2024 16:28:55 +1000 Subject: [PATCH 004/121] MDEV-34915 Sort output of session track system variable in mysqltest Updated the output format too. Before: -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES -- autocommit -- ON -- time_zone -- SYSTEM -- character_set_client -- latin1 -- character_set_connection -- latin1 -- redirect_url -- After: -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES -- autocommit: ON -- character_set_client: latin1 -- character_set_connection: latin1 -- redirect_url: -- time_zone: SYSTEM --- client/mysqltest.cc | 66 ++++++++++++++++--- .../main/mysqltest_tracking_info.result | 21 ++---- .../main/session_tracker_last_gtid.result | 15 ++--- 3 files changed, 70 insertions(+), 32 deletions(-) diff --git a/client/mysqltest.cc b/client/mysqltest.cc index b687ea416c3..5934b928455 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -7898,6 +7898,20 @@ static const char *trking_info_desc[SESSION_TRACK_END + 1]= /** @brief Append state change information (received through Ok packet) to the output. + @details The appended string is lines prefixed with "-- ". Only + tracking types with info sent from the server are displayed. For + each tracking type, the first line is the type name e.g. + "-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES". + + The subsequent lines are the actual tracking info. When type is + SESSION_TRACK_SYSTEM_VARIABLES, the actual tracking info is a list + of name-value pairs of lines, sorted by name, e.g. if the info + received from the server is "autocommit=ON;time_zone=SYSTEM", the + corresponding string is + + -- autocommit: ON + -- time_zone: SYSTEM + @param [in,out] ds Dynamic string to hold the content to be printed. @param [in] mysql Connection handle. */ @@ -7905,11 +7919,16 @@ static const char *trking_info_desc[SESSION_TRACK_END + 1]= static void append_session_track_info(DYNAMIC_STRING *ds, MYSQL *mysql) { #ifndef EMBEDDED_LIBRARY + DYNAMIC_STRING ds_sort, *ds_type= NULL; for (unsigned int type= SESSION_TRACK_BEGIN; type <= SESSION_TRACK_END; type++) { const char *data; size_t data_length; + /* + Append the tracking type line, if any corresponding tracking + info is received. + */ if (!mysql_session_track_get_first(mysql, (enum_session_state_type) type, &data, &data_length)) @@ -7925,26 +7944,56 @@ static void append_session_track_info(DYNAMIC_STRING *ds, MYSQL *mysql) DBUG_ASSERT(0); dynstr_append_mem(ds, STRING_WITH_LEN("Tracker???\n")); } - - dynstr_append_mem(ds, STRING_WITH_LEN("-- ")); - dynstr_append_mem(ds, data, data_length); } else continue; + + /* + The remaining of this function: format and append the actual + tracking info. + */ + if (type == SESSION_TRACK_SYSTEM_VARIABLES) + { + /* Prepare a string to be sorted before being appended. */ + if (init_dynamic_string(&ds_sort, "", 1024, 1024)) + die("Out of memory"); + ds_type= &ds_sort; + } + else + ds_type= ds; + /* Append the first piece of info */ + dynstr_append_mem(ds_type, STRING_WITH_LEN("-- ")); + dynstr_append_mem(ds_type, data, data_length); + /* Whether we are appending the value of a variable */ + bool appending_value= type == SESSION_TRACK_SYSTEM_VARIABLES; + /* Append remaining pieces */ while (!mysql_session_track_get_next(mysql, (enum_session_state_type) type, &data, &data_length)) { - dynstr_append_mem(ds, STRING_WITH_LEN("\n-- ")); + if (appending_value) + dynstr_append_mem(ds_type, STRING_WITH_LEN(": ")); + else + dynstr_append_mem(ds_type, STRING_WITH_LEN("\n-- ")); + appending_value= !appending_value && type == SESSION_TRACK_SYSTEM_VARIABLES; if (data == NULL) { DBUG_ASSERT(data_length == 0); - dynstr_append_mem(ds, STRING_WITH_LEN("")); + dynstr_append_mem(ds_type, STRING_WITH_LEN("")); } else - dynstr_append_mem(ds, data, data_length); + dynstr_append_mem(ds_type, data, data_length); } - dynstr_append_mem(ds, STRING_WITH_LEN("\n\n")); + DBUG_ASSERT(!appending_value); + if (type == SESSION_TRACK_SYSTEM_VARIABLES) + { + dynstr_append_mem(ds_type, STRING_WITH_LEN("\n")); + dynstr_append_sorted(ds, ds_type, false); + dynstr_append_mem(ds, STRING_WITH_LEN("\n")); + dynstr_free(&ds_sort); + } + else + dynstr_append_mem(ds, STRING_WITH_LEN("\n\n")); } #endif /* EMBEDDED_LIBRARY */ } @@ -12018,7 +12067,8 @@ void replace_dynstr_append_uint(DYNAMIC_STRING *ds, uint val) /* Build a list of pointer to each line in ds_input, sort the list and use the sorted list to append the strings - sorted to the output ds + sorted to the output ds. The string ds_input needs to + end with a newline. SYNOPSIS dynstr_append_sorted() diff --git a/mysql-test/main/mysqltest_tracking_info.result b/mysql-test/main/mysqltest_tracking_info.result index 7e862fd7c11..f9e2cbb1150 100644 --- a/mysql-test/main/mysqltest_tracking_info.result +++ b/mysql-test/main/mysqltest_tracking_info.result @@ -6,26 +6,22 @@ SET @@session.session_track_system_variables='character_set_connection'; # tracking info on SET NAMES 'utf8'; -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES --- character_set_connection --- utf8 +-- character_set_connection: utf8 SET NAMES 'big5'; -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES --- character_set_connection --- big5 +-- character_set_connection: big5 # tracking info on once SET NAMES 'utf8'; -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES --- character_set_connection --- utf8 +-- character_set_connection: utf8 SET NAMES 'big5'; # tracking info on SET NAMES 'utf8'; -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES --- character_set_connection --- utf8 +-- character_set_connection: utf8 # tracking info off once SET NAMES 'big5'; @@ -37,8 +33,7 @@ set @save_optimizer_switch=@@optimizer_switch; SET @@session.session_track_system_variables='optimizer_switch'; set optimizer_switch='index_merge=off,index_merge_union=off,index_merge_sort_union=off,index_merge_intersection=off,index_merge_sort_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=on,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=on,mrr_cost_based=on,mrr_sort_keys=on,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=on,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off,condition_pushdown_for_derived=off'; -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES --- optimizer_switch --- index_merge=off,index_merge_union=off,index_merge_sort_union=off,index_merge_intersection=off,index_merge_sort_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=on,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=on,mrr_cost_based=on,mrr_sort_keys=on,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=on,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off,condition_pushdown_for_derived=off,split_materialized=on,condition_pushdown_for_subquery=on,rowid_filter=on,condition_pushdown_from_having=on,not_null_range_scan=off +-- optimizer_switch: index_merge=off,index_merge_union=off,index_merge_sort_union=off,index_merge_intersection=off,index_merge_sort_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=off,derived_merge=off,derived_with_keys=off,firstmatch=off,loosescan=off,materialization=on,in_to_exists=off,semijoin=off,partial_match_rowid_merge=off,partial_match_table_scan=off,subquery_cache=off,mrr=on,mrr_cost_based=on,mrr_sort_keys=on,outer_join_with_cache=off,semijoin_with_cache=off,join_cache_incremental=off,join_cache_hashed=off,join_cache_bka=off,optimize_join_buffer_size=on,table_elimination=off,extended_keys=off,exists_to_in=off,orderby_uses_equalities=off,condition_pushdown_for_derived=off,split_materialized=on,condition_pushdown_for_subquery=on,rowid_filter=on,condition_pushdown_from_having=on,not_null_range_scan=off Warnings: Warning 1681 'engine_condition_pushdown=on' is deprecated and will be removed in a future release @@ -71,13 +66,11 @@ ERROR HY000: Unknown system variable 'a' connect con,localhost,root,,test; SET NAMES 'utf8'; -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES --- character_set_connection --- utf8 +-- character_set_connection: utf8 SET NAMES 'big5'; -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES --- character_set_connection --- big5 +-- character_set_connection: big5 select @@session_track_system_variables; @@session_track_system_variables diff --git a/mysql-test/main/session_tracker_last_gtid.result b/mysql-test/main/session_tracker_last_gtid.result index 5a78d5f03ce..da94e64ac14 100644 --- a/mysql-test/main/session_tracker_last_gtid.result +++ b/mysql-test/main/session_tracker_last_gtid.result @@ -5,31 +5,26 @@ SET gtid_seq_no=1000; SET @@session.session_track_system_variables='last_gtid'; create table t1 (a int) engine=innodb; -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES --- last_gtid --- 0-1-1000 +-- last_gtid: 0-1-1000 select @@last_gtid; @@last_gtid 0-1-1000 -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES --- last_gtid --- 0-1-1000 +-- last_gtid: 0-1-1000 insert into t1 values (1); -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES --- last_gtid --- 0-1-1001 +-- last_gtid: 0-1-1001 select @@last_gtid; @@last_gtid 0-1-1001 -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES --- last_gtid --- 0-1-1001 +-- last_gtid: 0-1-1001 drop table t1; -- Tracker : SESSION_TRACK_SYSTEM_VARIABLES --- last_gtid --- 0-1-1002 +-- last_gtid: 0-1-1002 reset master; From 690f8a91f9bf5a76a3be4d84c23ad1026b483e8b Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Fri, 4 Oct 2024 17:14:58 +1000 Subject: [PATCH 005/121] MDEV-35073 Fix -Wmaybe-uninitialized in spider_conn_first_link_idx Default result to "no eligible servers". --- storage/spider/spd_conn.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/spider/spd_conn.cc b/storage/spider/spd_conn.cc index cbee94b6f13..3452d85f79b 100644 --- a/storage/spider/spd_conn.cc +++ b/storage/spider/spd_conn.cc @@ -3629,7 +3629,7 @@ int spider_conn_first_link_idx( int eligible_link_idx, eligible_links = 0; longlong balance_total = 0, balance_threshold; double rand_val; - int *link_idxs, result; + int *link_idxs, result= -1; DBUG_ENTER("spider_conn_first_link_idx"); char *ptr; /* Allocate memory for link_idxs */ From 5673cbe0941e105eb73b5ecf651a529f8e717b52 Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Fri, 4 Oct 2024 12:49:37 +0300 Subject: [PATCH 006/121] MDEV-35074: selectivity_notembedded fails with --view-protocol Make the test view-protocol proof: save the contents of optimizer_trace and then we can do many queries against it. Also removed end-of-line spaces. --- .../selectivity_innodb_notembedded.result | 40 ++++++++++------- .../main/selectivity_notembedded.result | 40 ++++++++++------- mysql-test/main/selectivity_notembedded.test | 45 +++++++++++-------- 3 files changed, 73 insertions(+), 52 deletions(-) diff --git a/mysql-test/main/selectivity_innodb_notembedded.result b/mysql-test/main/selectivity_innodb_notembedded.result index 0ed8908063e..cf47b58b8b3 100644 --- a/mysql-test/main/selectivity_innodb_notembedded.result +++ b/mysql-test/main/selectivity_innodb_notembedded.result @@ -218,26 +218,28 @@ index (key1, pk), primary key (pk) ); insert into t1 -select +select seq, FLOOR(seq/100), 'filler' -from +from seq_1_to_1000; analyze table t1; Table Op Msg_type Msg_text test.t1 analyze status Engine-independent statistics collected test.t1 analyze status OK set optimizer_trace=1; -explain select * from t1 +explain select * from t1 where pk in (1,2,3,4,5) and key1 <= 4; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using where +create temporary table opt_trace as +select * from information_schema.optimizer_trace; # Must have a note that "multiplier is too high": -select +select json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS -from -information_schema.optimizer_trace; +from +opt_trace; JS [ [ @@ -255,10 +257,10 @@ JS ] ] # Must not include 1.79...e308 as cost: -select +select json_detailed(json_extract(trace,'$**.best_access_path')) as JS -from -information_schema.optimizer_trace; +from +opt_trace; JS [ { @@ -280,20 +282,22 @@ JS } } ] +drop table opt_trace; # Disable the fix and try the same: set @@optimizer_adjust_secondary_key_costs=''; -explain select * from t1 +explain select * from t1 where pk in (1,2,3,4,5) and key1 <= 4; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using where -drop table t1; +create temporary table opt_trace as +select * from information_schema.optimizer_trace; # Shows a high multiplier, without a "note": -select +select json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS -from -information_schema.optimizer_trace; +from +opt_trace; JS [ [ @@ -309,10 +313,10 @@ JS ] ] # Includes 1.79...e308 as cost: -select +select json_detailed(json_extract(trace,'$**.best_access_path')) as JS -from -information_schema.optimizer_trace; +from +opt_trace; JS [ { @@ -334,7 +338,9 @@ JS } } ] +drop table opt_trace; set optimizer_adjust_secondary_key_costs=default; +drop table t1; # # Clean up # diff --git a/mysql-test/main/selectivity_notembedded.result b/mysql-test/main/selectivity_notembedded.result index 77ae626f567..02d557ca793 100644 --- a/mysql-test/main/selectivity_notembedded.result +++ b/mysql-test/main/selectivity_notembedded.result @@ -213,26 +213,28 @@ index (key1, pk), primary key (pk) ); insert into t1 -select +select seq, FLOOR(seq/100), 'filler' -from +from seq_1_to_1000; analyze table t1; Table Op Msg_type Msg_text test.t1 analyze status Engine-independent statistics collected test.t1 analyze status Table is already up to date set optimizer_trace=1; -explain select * from t1 +explain select * from t1 where pk in (1,2,3,4,5) and key1 <= 4; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using index condition; Using where +create temporary table opt_trace as +select * from information_schema.optimizer_trace; # Must have a note that "multiplier is too high": -select +select json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS -from -information_schema.optimizer_trace; +from +opt_trace; JS [ [ @@ -250,10 +252,10 @@ JS ] ] # Must not include 1.79...e308 as cost: -select +select json_detailed(json_extract(trace,'$**.best_access_path')) as JS -from -information_schema.optimizer_trace; +from +opt_trace; JS [ { @@ -275,20 +277,22 @@ JS } } ] +drop table opt_trace; # Disable the fix and try the same: set @@optimizer_adjust_secondary_key_costs=''; -explain select * from t1 +explain select * from t1 where pk in (1,2,3,4,5) and key1 <= 4; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using index condition; Using where -drop table t1; +create temporary table opt_trace as +select * from information_schema.optimizer_trace; # Shows a high multiplier, without a "note": -select +select json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS -from -information_schema.optimizer_trace; +from +opt_trace; JS [ [ @@ -304,10 +308,10 @@ JS ] ] # Includes 1.79...e308 as cost: -select +select json_detailed(json_extract(trace,'$**.best_access_path')) as JS -from -information_schema.optimizer_trace; +from +opt_trace; JS [ { @@ -329,7 +333,9 @@ JS } } ] +drop table opt_trace; set optimizer_adjust_secondary_key_costs=default; +drop table t1; # # Clean up # diff --git a/mysql-test/main/selectivity_notembedded.test b/mysql-test/main/selectivity_notembedded.test index 2c4431adb23..d53cb8db7b4 100644 --- a/mysql-test/main/selectivity_notembedded.test +++ b/mysql-test/main/selectivity_notembedded.test @@ -233,50 +233,59 @@ create table t1 ( ); insert into t1 -select +select seq, FLOOR(seq/100), 'filler' -from +from seq_1_to_1000; analyze table t1; set optimizer_trace=1; -explain select * from t1 +explain select * from t1 where pk in (1,2,3,4,5) and key1 <= 4; +create temporary table opt_trace as +select * from information_schema.optimizer_trace; + --echo # Must have a note that "multiplier is too high": -select +select json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS -from - information_schema.optimizer_trace; +from + opt_trace; --echo # Must not include 1.79...e308 as cost: -select +select json_detailed(json_extract(trace,'$**.best_access_path')) as JS -from - information_schema.optimizer_trace; +from + opt_trace; +drop table opt_trace; --echo # Disable the fix and try the same: set @@optimizer_adjust_secondary_key_costs=''; -explain select * from t1 +explain select * from t1 where pk in (1,2,3,4,5) and key1 <= 4; -drop table t1; + +create temporary table opt_trace as +select * from information_schema.optimizer_trace; + --echo # Shows a high multiplier, without a "note": -select +select json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS -from - information_schema.optimizer_trace; +from + opt_trace; --echo # Includes 1.79...e308 as cost: -select +select json_detailed(json_extract(trace,'$**.best_access_path')) as JS -from - information_schema.optimizer_trace; -set optimizer_adjust_secondary_key_costs=default; +from + opt_trace; +drop table opt_trace; +set optimizer_adjust_secondary_key_costs=default; +drop table t1; --echo # --echo # Clean up --echo # From b249a059da2ef03eda35872a763e5453dbc39339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Fri, 4 Oct 2024 13:38:21 +0300 Subject: [PATCH 007/121] MDEV-34850: Busy work while parsing FILE_ records In mariadb-backup --backup, we only have to invoke the undo_space_trunc and log_file_op callbacks as well as validate the mini-transaction checksums. There is absolutely no need to access recv_sys.pages or recv_spaces, or to allocate a decrypt_buf in case of innodb_encrypt_log=ON. This is what the new mode recv_sys_t::store::BACKUP will do. In the skip_the_rest: loop, the main thing is to process all FILE_ records until the end of the log is reached. Additionally, we must process INIT_PAGE and FREE_PAGE records in the same way as they would be during storing == YES. This was measured to reduce the CPU time between the messages "InnoDB: Multi-batch recovery needed at LSN" and "InnoDB: End of log at LSN" by some 20%. recv_sys_t::store: A ternary enumeration that specifies how records should be stored: NO, BACKUP, or YES. recv_sys_t::parse(), recv_sys_t::parse_mtr(), recv_sys_t::parse_pmem(): Replace template with template. store_freed_or_init_rec(): Simplify some logic. We can look up also the system tablespace. Reviewed by: Debarun Banerjee --- extra/mariabackup/xtrabackup.cc | 12 +- storage/innobase/include/log0recv.h | 21 ++-- storage/innobase/log/log0recv.cc | 175 ++++++++++++++++------------ 3 files changed, 118 insertions(+), 90 deletions(-) diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc index e5d05b230fd..411bb2479d1 100644 --- a/extra/mariabackup/xtrabackup.cc +++ b/extra/mariabackup/xtrabackup.cc @@ -3405,7 +3405,8 @@ static bool xtrabackup_copy_mmap_logfile() recv_sys_t::parse_mtr_result r; const byte *start= &log_sys.buf[recv_sys.offset]; - if (recv_sys.parse_mmap(false) == recv_sys_t::OK) + if (recv_sys.parse_mmap(false) == + recv_sys_t::OK) { const byte *end; @@ -3425,7 +3426,8 @@ static bool xtrabackup_copy_mmap_logfile() start = seq + 1; } } - while ((r= recv_sys.parse_mmap(false)) == recv_sys_t::OK); + while ((r= recv_sys.parse_mmap(false)) == + recv_sys_t::OK); end= &log_sys.buf[recv_sys.offset]; @@ -3530,7 +3532,8 @@ static bool xtrabackup_copy_logfile() if (log_sys.buf[recv_sys.offset] <= 1) break; - if (recv_sys.parse_mtr(false) == recv_sys_t::OK) + if (recv_sys.parse_mtr(false) == + recv_sys_t::OK) { do { @@ -3540,7 +3543,8 @@ static bool xtrabackup_copy_logfile() sequence_offset)); *seq= 1; } - while ((r= recv_sys.parse_mtr(false)) == recv_sys_t::OK); + while ((r= recv_sys.parse_mtr(false)) == + recv_sys_t::OK); if (ds_write(dst_log_file, log_sys.buf + start_offset, recv_sys.offset - start_offset)) diff --git a/storage/innobase/include/log0recv.h b/storage/innobase/include/log0recv.h index 6cf79c857e4..731d7e3ff11 100644 --- a/storage/innobase/include/log0recv.h +++ b/storage/innobase/include/log0recv.h @@ -390,12 +390,15 @@ public: GOT_OOM }; + /** Whether to store parsed log records */ + enum store{NO,BACKUP,YES}; + private: /** Parse and register one log_t::FORMAT_10_8 mini-transaction. - @tparam store whether to store the records + @tparam storing whether to store the records @param l log data source @param if_exists if store: whether to check if the tablespace exists */ - template + template inline parse_mtr_result parse(source &l, bool if_exists) noexcept; /** Rewind a mini-transaction when parse() runs out of memory. @@ -409,20 +412,20 @@ private: public: /** Parse and register one log_t::FORMAT_10_8 mini-transaction, without handling any log_sys.is_mmap() buffer wrap-around. - @tparam store whether to store the records - @param if_exists if store: whether to check if the tablespace exists */ - template + @tparam storing whether to store the records + @param if_exists storing=YES: whether to check if the tablespace exists */ + template static parse_mtr_result parse_mtr(bool if_exists) noexcept; /** Parse and register one log_t::FORMAT_10_8 mini-transaction, handling log_sys.is_mmap() buffer wrap-around. - @tparam store whether to store the records - @param if_exists if store: whether to check if the tablespace exists */ - template + @tparam storing whether to store the records + @param if_exists storing=YES: whether to check if the tablespace exists */ + template static parse_mtr_result parse_mmap(bool if_exists) noexcept #ifdef HAVE_INNODB_MMAP ; #else - { return parse_mtr(if_exists); } + { return parse_mtr(if_exists); } #endif /** Erase log records for a page. */ diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc index 1a49df99f51..f33eb427b54 100644 --- a/storage/innobase/log/log0recv.cc +++ b/storage/innobase/log/log0recv.cc @@ -2186,15 +2186,8 @@ static void store_freed_or_init_rec(page_id_t page_id, bool freed) uint32_t page_no= page_id.page_no(); if (is_predefined_tablespace(space_id)) { - if (!srv_immediate_scrub_data_uncompressed) - return; - fil_space_t *space; - if (space_id == TRX_SYS_SPACE) - space= fil_system.sys_space; - else - space= fil_space_get(space_id); - - space->free_page(page_no, freed); + if (srv_immediate_scrub_data_uncompressed) + fil_space_get(space_id)->free_page(page_no, freed); return; } @@ -2505,28 +2498,29 @@ void recv_sys_t::rewind(source &l, source &begin) noexcept } /** Parse and register one log_t::FORMAT_10_8 mini-transaction. -@tparam store whether to store the records +@tparam storing whether to store the records @param l log data source @param if_exists if store: whether to check if the tablespace exists */ -template +template inline recv_sys_t::parse_mtr_result recv_sys_t::parse(source &l, bool if_exists) noexcept { restart: - ut_ad(log_sys.latch_have_wr() || - srv_operation == SRV_OPERATION_BACKUP || - srv_operation == SRV_OPERATION_BACKUP_NO_DEFER); + ut_ad(storing == BACKUP || log_sys.latch_have_wr()); + ut_ad(storing == BACKUP || !undo_space_trunc); + ut_ad(storing == BACKUP || !log_file_op); + ut_ad(storing == YES || !if_exists); + ut_ad((storing == BACKUP) == + (srv_operation == SRV_OPERATION_BACKUP || + srv_operation == SRV_OPERATION_BACKUP_NO_DEFER)); mysql_mutex_assert_owner(&mutex); ut_ad(log_sys.next_checkpoint_lsn); ut_ad(log_sys.is_latest()); - ut_ad(store || !if_exists); - ut_ad(store || - srv_operation != SRV_OPERATION_BACKUP || - srv_operation != SRV_OPERATION_BACKUP_NO_DEFER); alignas(8) byte iv[MY_AES_BLOCK_SIZE]; - byte *decrypt_buf= static_cast(alloca(srv_page_size)); + byte *decrypt_buf= storing == YES + ? static_cast(alloca(srv_page_size)) : nullptr; const lsn_t start_lsn{lsn}; @@ -2582,15 +2576,16 @@ restart: crc= my_crc32c(crc, iv, 8); } - DBUG_EXECUTE_IF("log_intermittent_checksum_mismatch", - { - static int c; - if (!c++) + if (storing == BACKUP) + DBUG_EXECUTE_IF("log_intermittent_checksum_mismatch", { - sql_print_information("Invalid log block checksum"); - return GOT_EOF; - } - }); + static int c; + if (!c++) + { + sql_print_information("Invalid log block checksum"); + return GOT_EOF; + } + }); if (crc != (l + 1).read4()) return GOT_EOF; @@ -2668,7 +2663,8 @@ restart: } sql_print_warning("InnoDB: Ignoring malformed log record at LSN " LSN_PF, lsn); - last_offset= 1; /* the next record must not be same_page */ + /* the next record must not be same_page */ + if (storing == YES) last_offset= 1; continue; } if (srv_operation == SRV_OPERATION_BACKUP) @@ -2678,7 +2674,7 @@ restart: lsn, b, l - recs + rlen, space_id, page_no)); goto same_page; } - last_offset= 0; + if (storing == YES) last_offset= 0; idlen= mlog_decode_varint_length(*l); if (UNIV_UNLIKELY(idlen > 5 || idlen >= rlen)) { @@ -2709,17 +2705,21 @@ restart: goto page_id_corrupted; l+= idlen; rlen-= idlen; - mach_write_to_4(iv + 8, space_id); - mach_write_to_4(iv + 12, page_no); + if (storing == YES) + { + mach_write_to_4(iv + 8, space_id); + mach_write_to_4(iv + 12, page_no); + } got_page_op= !(b & 0x80); if (!got_page_op); - else if (!store && srv_operation == SRV_OPERATION_BACKUP) + else if (storing == BACKUP && srv_operation == SRV_OPERATION_BACKUP) { - if (page_no == 0 && first_page_init && (b & 0x10)) + if (page_no == 0 && (b & 0xf0) == INIT_PAGE && first_page_init) first_page_init(space_id); continue; } - else if (store && file_checkpoint && !is_predefined_tablespace(space_id)) + else if (storing == YES && file_checkpoint && + !is_predefined_tablespace(space_id)) { recv_spaces_t::iterator i= recv_spaces.lower_bound(space_id); if (i != recv_spaces.end() && i->first == space_id); @@ -2748,7 +2748,6 @@ restart: if (got_page_op) { same_page: - const byte *cl= l.ptr; if (!rlen); else if (UNIV_UNLIKELY(l - recs + rlen > srv_page_size)) goto record_corrupted; @@ -2756,30 +2755,59 @@ restart: ut_d(if ((b & 0x70) == INIT_PAGE || (b & 0x70) == OPTION) freed.erase(id)); ut_ad(freed.find(id) == freed.end()); + const byte *cl= storing == NO ? nullptr : l.ptr; switch (b & 0x70) { case FREE_PAGE: ut_ad(freed.emplace(id).second); - last_offset= 1; /* the next record must not be same_page */ + /* the next record must not be same_page */ + if (storing == YES) last_offset= 1; goto free_or_init_page; case INIT_PAGE: - last_offset= FIL_PAGE_TYPE; + if (storing == YES) last_offset= FIL_PAGE_TYPE; free_or_init_page: - store_freed_or_init_rec(id, (b & 0x70) == FREE_PAGE); + if (storing == BACKUP) + continue; if (UNIV_UNLIKELY(rlen != 0)) goto record_corrupted; + store_freed_or_init_rec(id, (b & 0x70) == FREE_PAGE); + + if (storing == NO) + { + /* We must update mlog_init for the correct operation of + multi-batch recovery, for example to avoid occasional + failures of the test innodb.recovery_memory. + + For storing == YES, this will be invoked in recv_sys_t::add(). */ + mlog_init.add(id, start_lsn); + + /* recv_scan_log() may have stored some log for this page + before entering the skip_the_rest: loop. Such records must + be discarded, because reading an INIT_PAGE or FREE_PAGE + record implies that the page can be recovered based on log + records, without reading it from a data file. */ + + if (pages_it == pages.end() || pages_it->first != id) + { + pages_it= pages.find(id); + if (pages_it == pages.end()) + continue; + } + map::iterator r= pages_it++; + ut_ad(!r->second.being_processed); + erase(r); + continue; + } copy_if_needed: cl= l.copy_if_needed(iv, decrypt_buf, recs, rlen); break; case EXTENDED: + if (storing != YES) + continue; if (UNIV_UNLIKELY(!rlen)) goto record_corrupted; cl= l.copy_if_needed(iv, decrypt_buf, recs, rlen); if (rlen == 1 && *cl == TRIM_PAGES) { -#if 0 /* For now, we can only truncate an undo log tablespace */ - if (UNIV_UNLIKELY(!space_id || !page_no)) - goto record_corrupted; -#else if (!srv_is_undo_tablespace(space_id) || page_no != SRV_UNDO_TABLESPACE_SIZE_IN_PAGES) goto record_corrupted; @@ -2790,16 +2818,16 @@ restart: trim({space_id, 0}, start_lsn); truncated_undo_spaces[space_id - srv_undo_space_id_start]= { start_lsn, page_no }; - if (!store && undo_space_trunc) + if (storing == BACKUP && undo_space_trunc) undo_space_trunc(space_id); -#endif - last_offset= 1; /* the next record must not be same_page */ + /* the next record must not be same_page */ + if (storing == YES) last_offset= 1; continue; } - last_offset= FIL_PAGE_TYPE; + if (storing == YES) last_offset= FIL_PAGE_TYPE; break; case OPTION: - if (rlen == 5 && *l == OPT_PAGE_CHECKSUM) + if (storing == YES && rlen == 5 && *l == OPT_PAGE_CHECKSUM) goto copy_if_needed; /* fall through */ case RESERVED: @@ -2807,6 +2835,8 @@ restart: case WRITE: case MEMMOVE: case MEMSET: + if (storing != YES) + continue; if (UNIV_UNLIKELY(rlen == 0 || last_offset == 1)) goto record_corrupted; ut_d(const source payload{l}); @@ -2847,7 +2877,7 @@ restart: last_offset) : file_name_t::initial_flags; if (it == recv_spaces.end()) - ut_ad(!store || space_id == TRX_SYS_SPACE || + ut_ad(space_id == TRX_SYS_SPACE || srv_is_undo_tablespace(space_id)); else if (!it->second.space) { @@ -2907,7 +2937,7 @@ restart: ut_ad(modified.emplace(id).second || (b & 0x70) != INIT_PAGE); } #endif - if (store) + if (storing == YES) { if (if_exists) { @@ -2947,18 +2977,6 @@ restart: } } } - else if ((b & 0x70) <= INIT_PAGE) - { - mlog_init.add(id, start_lsn); - if (pages_it == pages.end() || pages_it->first != id) - { - pages_it= pages.find(id); - if (pages_it == pages.end()) - continue; - } - map::iterator r= pages_it++; - erase(r); - } } else if (rlen) { @@ -2970,7 +2988,7 @@ restart: if (rlen < UNIV_PAGE_SIZE_MAX && !l.is_zero(rlen)) continue; } - else if (store) + else if (storing == YES) { ut_ad(file_checkpoint); continue; @@ -3056,9 +3074,7 @@ restart: if (UNIV_UNLIKELY(!recv_needed_recovery && srv_read_only_mode)) continue; - if (!store && - (srv_operation == SRV_OPERATION_BACKUP || - srv_operation == SRV_OPERATION_BACKUP_NO_DEFER)) + if (storing == BACKUP) { if ((b & 0xf0) < FILE_CHECKPOINT && log_file_op) log_file_op(space_id, b & 0xf0, @@ -3100,22 +3116,23 @@ restart: return OK; } -template +template recv_sys_t::parse_mtr_result recv_sys_t::parse_mtr(bool if_exists) noexcept { recv_buf s{&log_sys.buf[recv_sys.offset]}; - return recv_sys.parse(s, if_exists); + return recv_sys.parse(s, if_exists); } /** for mariadb-backup; @see xtrabackup_copy_logfile() */ template -recv_sys_t::parse_mtr_result recv_sys_t::parse_mtr(bool) noexcept; +recv_sys_t::parse_mtr_result +recv_sys_t::parse_mtr(bool) noexcept; #ifdef HAVE_INNODB_MMAP -template +template recv_sys_t::parse_mtr_result recv_sys_t::parse_mmap(bool if_exists) noexcept { - recv_sys_t::parse_mtr_result r{parse_mtr(if_exists)}; + recv_sys_t::parse_mtr_result r{parse_mtr(if_exists)}; if (UNIV_LIKELY(r != PREMATURE_EOF) || !log_sys.is_mmap()) return r; ut_ad(recv_sys.len == log_sys.file_size); @@ -3125,12 +3142,13 @@ recv_sys_t::parse_mtr_result recv_sys_t::parse_mmap(bool if_exists) noexcept {recv_sys.offset == recv_sys.len ? &log_sys.buf[log_sys.START_OFFSET] : &log_sys.buf[recv_sys.offset]}; - return recv_sys.parse(s, if_exists); + return recv_sys.parse(s, if_exists); } /** for mariadb-backup; @see xtrabackup_copy_mmap_logfile() */ template -recv_sys_t::parse_mtr_result recv_sys_t::parse_mmap(bool) noexcept; +recv_sys_t::parse_mtr_result +recv_sys_t::parse_mmap(bool) noexcept; #endif /** Apply the hashed log records to the page, if the page lsn is less than the @@ -4097,7 +4115,7 @@ static bool recv_scan_log(bool last_phase) for (;;) { const byte& b{log_sys.buf[recv_sys.offset]}; - r= recv_sys.parse_mmap(false); + r= recv_sys.parse_mmap(false); switch (r) { case recv_sys_t::PREMATURE_EOF: goto read_more; @@ -4127,7 +4145,7 @@ static bool recv_scan_log(bool last_phase) else { ut_ad(recv_sys.file_checkpoint != 0); - switch ((r= recv_sys.parse_mmap(false))) { + switch ((r= recv_sys.parse_mmap(false))) { case recv_sys_t::PREMATURE_EOF: goto read_more; case recv_sys_t::GOT_EOF: @@ -4149,11 +4167,13 @@ static bool recv_scan_log(bool last_phase) if (!store) skip_the_rest: - while ((r= recv_sys.parse_mmap(false)) == recv_sys_t::OK); + while ((r= recv_sys.parse_mmap(false)) == + recv_sys_t::OK); else { uint16_t count= 0; - while ((r= recv_sys.parse_mmap(last_phase)) == recv_sys_t::OK) + while ((r= recv_sys.parse_mmap(last_phase)) == + recv_sys_t::OK) if (!++count && recv_sys.report(time(nullptr))) { const size_t n= recv_sys.pages.size(); @@ -4183,7 +4203,8 @@ static bool recv_scan_log(bool last_phase) ut_ad(recv_sys.is_initialised()); if (recv_sys.scanned_lsn > 1) { - ut_ad(recv_sys.scanned_lsn == recv_sys.lsn); + ut_ad(recv_sys.is_corrupt_fs() || + recv_sys.scanned_lsn == recv_sys.lsn); break; } recv_sys.scanned_lsn= recv_sys.lsn; From 8a6a4c947a0ca3d2fdca752d7440bdc5c6c83e37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Fri, 4 Oct 2024 13:41:12 +0300 Subject: [PATCH 008/121] Cleanup: Replace some is_predefined_tablespace() In some places, there were redundant comparisons against TRX_SYS_SPACE or SRV_TMP_SPACE_ID. The temporary tablespace is never the subject of log-based recovery. Also, consistently check for SRV_SPACE_ID_UPPER_BOUND. Reviewed by: Debarun Barerjee --- storage/innobase/buf/buf0flu.cc | 2 +- storage/innobase/fil/fil0fil.cc | 2 +- storage/innobase/log/log0recv.cc | 8 ++++---- storage/innobase/mtr/mtr0mtr.cc | 4 +++- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc index 859ef0fcb4d..0d28e3d710f 100644 --- a/storage/innobase/buf/buf0flu.cc +++ b/storage/innobase/buf/buf0flu.cc @@ -1596,7 +1596,7 @@ static ulint buf_flush_list(ulint max_n= ULINT_UNDEFINED, bool buf_flush_list_space(fil_space_t *space, ulint *n_flushed) { const auto space_id= space->id; - ut_ad(space_id <= SRV_SPACE_ID_UPPER_BOUND); + ut_ad(space_id < SRV_SPACE_ID_UPPER_BOUND); bool may_have_skipped= false; ulint max_n_flush= srv_io_capacity; diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc index b80a71bebeb..b38aef931e3 100644 --- a/storage/innobase/fil/fil0fil.cc +++ b/storage/innobase/fil/fil0fil.cc @@ -82,7 +82,7 @@ bool fil_space_t::try_to_close(fil_space_t *ignore_space, bool print_info) case FIL_TYPE_IMPORT: break; case FIL_TYPE_TABLESPACE: - if (is_predefined_tablespace(space.id)) + if (space.id == TRX_SYS_SPACE || srv_is_undo_tablespace(space.id)) continue; } diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc index f33eb427b54..a8c3af695f0 100644 --- a/storage/innobase/log/log0recv.cc +++ b/storage/innobase/log/log0recv.cc @@ -2184,7 +2184,7 @@ static void store_freed_or_init_rec(page_id_t page_id, bool freed) { uint32_t space_id= page_id.space(); uint32_t page_no= page_id.page_no(); - if (is_predefined_tablespace(space_id)) + if (space_id == TRX_SYS_SPACE || srv_is_undo_tablespace(space_id)) { if (srv_immediate_scrub_data_uncompressed) fil_space_get(space_id)->free_page(page_no, freed); @@ -2719,7 +2719,7 @@ restart: continue; } else if (storing == YES && file_checkpoint && - !is_predefined_tablespace(space_id)) + space_id != TRX_SYS_SPACE && !srv_is_undo_tablespace(space_id)) { recv_spaces_t::iterator i= recv_spaces.lower_bound(space_id); if (i != recv_spaces.end() && i->first == space_id); @@ -3066,7 +3066,7 @@ restart: goto file_rec_error; } - if (is_predefined_tablespace(space_id)) + if (space_id == TRX_SYS_SPACE || srv_is_undo_tablespace(space_id)) goto file_rec_error; if (fnend - fn < 4 || memcmp(fnend - 4, DOT_IBD, 4)) goto file_rec_error; @@ -4321,7 +4321,7 @@ recv_validate_tablespace(bool rescan, bool& missing_tablespace) p != recv_sys.pages.end();) { ut_ad(!p->second.log.empty()); const uint32_t space = p->first.space(); - if (is_predefined_tablespace(space)) { + if (space == TRX_SYS_SPACE || srv_is_undo_tablespace(space)) { next: p++; continue; diff --git a/storage/innobase/mtr/mtr0mtr.cc b/storage/innobase/mtr/mtr0mtr.cc index 15370943a55..1b1877e0a86 100644 --- a/storage/innobase/mtr/mtr0mtr.cc +++ b/storage/innobase/mtr/mtr0mtr.cc @@ -1149,6 +1149,8 @@ std::pair mtr_t::do_write() ut_ad(is_logged()); ut_ad(m_log.size()); ut_ad(!m_latch_ex || log_sys.latch_have_wr()); + ut_ad(!m_user_space || + (m_user_space->id > 0 && m_user_space->id < SRV_SPACE_ID_UPPER_BOUND)); #ifndef DBUG_OFF do @@ -1187,7 +1189,7 @@ std::pair mtr_t::do_write() log_sys.latch.rd_lock(SRW_LOCK_CALL); if (UNIV_UNLIKELY(m_user_space && !m_user_space->max_lsn && - !is_predefined_tablespace(m_user_space->id))) + !srv_is_undo_tablespace((m_user_space->id)))) { if (!m_latch_ex) { From a931da82fac9f856a8e66b17063bc0b3d3ffdf52 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Tue, 14 May 2024 09:19:34 +0400 Subject: [PATCH 009/121] MDEV-34123 CONCAT Function Returns Unexpected Empty Set in Query Search conditions were evaluated using val_int(), which was wrong. Fixing the code to use val_bool() instead. Details: - Adding a new item_base_t::IS_COND flag which marks Items used as in WHERE, HAVING, JOIN ON, CASE WHEN clauses. The flag is at the parse time. These expressions must be evaluated using val_bool() rather than val_int(). Note, the optimizer creates more Items which are used as search conditions. Most of these items are not marked with IS_COND yet. This is OK for now, but eventually these Items can also be fixed to have the flag. - Adding a method Item::is_cond() which tests if the Item has the IS_COND flag. - Implementing Item_cache_bool. It evaluates the cached expression using val_bool() rather than val_int(). Overriding Type_handler_bool::Item_get_cache() to create Item_cache_bool. - Implementing Item::save_bool_in_field(). It uses val_bool() rather than val_int() to evaluate the expression. - Implementing Type_handler_bool::Item_save_in_field() using Item::save_bool_in_field(). - Fixing all Item_bool_func descendants to implement a virtual val_bool() rather than a virtual val_int(). - To find places where val_int() should be fixed to val_bool(), a few DBUG_ASSERT(!is_cond()) where added into val_int() implementations of selected (most frequent) classes: Item_field Item_str_func Item_datefunc Item_timefunc Item_datetimefunc Item_cache_bool Item_bool_func Item_func_hybrid_field_type Item_basic_constant descendants - Fixing all places where DBUG_ASSERT() happened during an "mtr" run to use val_bool() instead of val_int(). --- mysql-test/include/search_condition.inc | 201 ++++++++++++++ mysql-test/main/type_datetime.result | 204 ++++++++++++++ mysql-test/main/type_datetime.test | 15 ++ mysql-test/main/type_decimal.result | 207 +++++++++++++++ mysql-test/main/type_decimal.test | 18 ++ mysql-test/main/type_float.result | 204 ++++++++++++++ mysql-test/main/type_float.test | 14 + mysql-test/main/type_int.result | 204 ++++++++++++++ mysql-test/main/type_int.test | 14 + mysql-test/main/type_temporal_innodb.result | 2 +- mysql-test/main/type_time.result | 207 +++++++++++++++ mysql-test/main/type_time.test | 19 ++ mysql-test/main/type_timestamp.result | 10 +- mysql-test/main/type_varchar.result | 248 ++++++++++++++++++ mysql-test/main/type_varchar.test | 24 ++ plugin/type_inet/item_inetfunc.cc | 8 +- plugin/type_inet/item_inetfunc.h | 8 +- .../type_inet6_search_condition.result | 167 ++++++++++++ .../type_inet6_search_condition.test | 16 ++ plugin/type_inet/sql_type_inet.h | 4 + sql/handler.cc | 2 +- sql/item.cc | 34 ++- sql/item.h | 85 +++++- sql/item_cmpfunc.cc | 58 ++-- sql/item_cmpfunc.h | 63 +++-- sql/item_func.cc | 6 +- sql/item_func.h | 3 +- sql/item_geofunc.cc | 8 +- sql/item_geofunc.h | 8 +- sql/item_jsonfunc.cc | 8 +- sql/item_jsonfunc.h | 8 +- sql/item_strfunc.cc | 1 + sql/item_subselect.cc | 4 +- sql/item_timefunc.h | 16 +- sql/item_vers.cc | 4 +- sql/item_vers.h | 3 +- sql/item_xmlfunc.cc | 4 +- sql/opt_range.cc | 2 +- sql/opt_range.h | 4 +- sql/opt_sum.cc | 4 +- sql/set_var.cc | 2 +- sql/sql_delete.cc | 4 +- sql/sql_handler.cc | 2 +- sql/sql_join_cache.cc | 2 +- sql/sql_parse.cc | 4 + sql/sql_select.cc | 37 +-- sql/sql_show.cc | 6 +- sql/sql_type.cc | 30 ++- sql/sql_type.h | 21 ++ sql/sql_type_fixedbin.h | 4 + sql/sql_yacc.yy | 14 +- sql/table.cc | 4 +- 52 files changed, 2098 insertions(+), 151 deletions(-) create mode 100644 mysql-test/include/search_condition.inc create mode 100644 plugin/type_inet/mysql-test/type_inet/type_inet6_search_condition.result create mode 100644 plugin/type_inet/mysql-test/type_inet/type_inet6_search_condition.test diff --git a/mysql-test/include/search_condition.inc b/mysql-test/include/search_condition.inc new file mode 100644 index 00000000000..2e050e90af7 --- /dev/null +++ b/mysql-test/include/search_condition.inc @@ -0,0 +1,201 @@ +--echo # +--echo # WHERE +--echo # + +let datatype=`SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_NAME='t0' AND COLUMN_NAME='c'`; +let use_string_func=0; +let use_field=1; +let update_source=c+11; + +if ($datatype == 'varchar') +{ + let use_string_func=1; +} + +if ($datatype == 'datetime') +{ + let update_source=c+0.1; +} + +if ($datatype == 'inet6') +{ + let use_field=0; + let update_source=concat(c,'77'); +} + + +CREATE TABLE t1 AS SELECT * FROM t0; +if ($use_field) +{ + SELECT * FROM t1 WHERE c; +} +SELECT * FROM t1 WHERE c IS FALSE; +SELECT * FROM t1 WHERE c IS TRUE; +SELECT * FROM t1 WHERE COALESCE(c); +if ($use_string_func) +{ + SELECT * FROM t1 WHERE CONCAT(c); + SELECT * FROM t1 WHERE LEFT(c,100); +} +DROP TABLE t1; + + +--echo # +--echo # HAVING +--echo # + +CREATE TABLE t1 AS SELECT * FROM t0; +if ($use_field) +{ + SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2; +} +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS FALSE; +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS TRUE; +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING COALESCE(c2); +if ($use_string_func) +{ + SELECT CONCAT(c,'0') AS c2 FROM t1 GROUP BY c2 HAVING LEFT(c2,100); +} +DROP TABLE t1; + + +--echo # +--echo # := ON +--echo # + +CREATE TABLE t1 AS SELECT * FROM t0; +if ($use_field) +{ + SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c); +} +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS FALSE); +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS TRUE); +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (COALESCE(t1.c)); +if ($use_string_func) +{ + SELECT t1.c FROM t1 JOIN t1 AS t2 ON (CONCAT(t1.c)); +} +DROP TABLE t1; + + +--echo # +--echo # +--echo # DELETE FROM [ WHERE ] +--echo # + +if ($use_field) +{ + CREATE TABLE t1 AS SELECT * FROM t0; + DELETE FROM t1 WHERE c; + SELECT * FROM t1; + DROP TABLE t1; +} + +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS FALSE; +SELECT * FROM t1; +DROP TABLE t1; + +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS TRUE; +SELECT * FROM t1; +DROP TABLE t1; + +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE COALESCE(c); +SELECT * FROM t1; +DROP TABLE t1; + +if ($use_string_func) +{ + CREATE TABLE t1 AS SELECT * FROM t0; + DELETE FROM t1 WHERE CONCAT(c); + SELECT * FROM t1; + DROP TABLE t1; +} + + +--echo # +--echo # +--echo # UPDATE SET [ WHERE ] + +if ($use_field) +{ + CREATE TABLE t1 AS SELECT * FROM t0; + eval UPDATE t1 SET c=$update_source WHERE c; + SELECT * FROM t1; + DROP TABLE t1; +} + +CREATE TABLE t1 AS SELECT * FROM t0; +eval UPDATE t1 SET c=$update_source WHERE c IS FALSE; +SELECT * FROM t1; +DROP TABLE t1; + +CREATE TABLE t1 AS SELECT * FROM t0; +eval UPDATE t1 SET c=$update_source WHERE c IS TRUE; +SELECT * FROM t1; +DROP TABLE t1; + +CREATE TABLE t1 AS SELECT * FROM t0; +eval UPDATE t1 SET c=$update_source WHERE COALESCE(c); +SELECT * FROM t1; +DROP TABLE t1; + +if ($use_string_func) +{ + CREATE TABLE t1 AS SELECT * FROM t0; + eval UPDATE t1 SET c=$update_source WHERE COALESCE(c); + SELECT * FROM t1; + DROP TABLE t1; +} + +--echo # +--echo # +--echo # CHECK + +if ($use_field) +{ + CREATE TABLE t1 LIKE t0; + ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c); +--error ER_CONSTRAINT_FAILED + INSERT INTO t1 SELECT * FROM t0 WHERE NOT c; + INSERT INTO t1 SELECT * FROM t0 WHERE c; + SELECT * FROM t1; + DROP TABLE t1; +} + +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS FALSE); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +--error ER_CONSTRAINT_FAILED +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +DROP TABLE t1; + +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS TRUE); +--error ER_CONSTRAINT_FAILED +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +DROP TABLE t1; + +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(COALESCE(c)); +--error ER_CONSTRAINT_FAILED +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +DROP TABLE t1; + + +--echo # +--echo # +--echo # WHEN THEN + +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT c, CASE WHEN c THEN 'true' ELSE 'false' END AS c2 FROM t1; +SELECT c, CASE WHEN COALESCE(c) THEN 'true' ELSE 'false' END AS c2 FROM t1; +DROP TABLE t1; diff --git a/mysql-test/main/type_datetime.result b/mysql-test/main/type_datetime.result index 6ee2d3d0fe9..52c6b2890fe 100644 --- a/mysql-test/main/type_datetime.result +++ b/mysql-test/main/type_datetime.result @@ -1707,3 +1707,207 @@ indexed_col not_indexed_col DROP TABLE t2; DROP TABLE t1; SET note_verbosity=DEFAULT; +# +# MDEV-34123 CONCAT Function Returns Unexpected Empty Set in Query +# +CREATE TABLE t0 (c DATETIME(1)); +INSERT INTO t0 VALUES ('0000-00-00 00:00:00.0'),('0000-00-00 00:00:00.1'),('2014-01-01 10:00:00.1'); +# +# WHERE +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT * FROM t1 WHERE c; +c +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +SELECT * FROM t1 WHERE c IS FALSE; +c +0000-00-00 00:00:00.0 +SELECT * FROM t1 WHERE c IS TRUE; +c +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +SELECT * FROM t1 WHERE COALESCE(c); +c +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +DROP TABLE t1; +# +# HAVING +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2; +c2 +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS FALSE; +c2 +0000-00-00 00:00:00.0 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS TRUE; +c2 +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING COALESCE(c2); +c2 +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +DROP TABLE t1; +# +# := ON +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c); +c +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS FALSE); +c +0000-00-00 00:00:00.0 +0000-00-00 00:00:00.0 +0000-00-00 00:00:00.0 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS TRUE); +c +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (COALESCE(t1.c)); +c +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +DROP TABLE t1; +# +# +# DELETE FROM [ WHERE ] +# +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c; +SELECT * FROM t1; +c +0000-00-00 00:00:00.0 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS FALSE; +SELECT * FROM t1; +c +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS TRUE; +SELECT * FROM t1; +c +0000-00-00 00:00:00.0 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE COALESCE(c); +SELECT * FROM t1; +c +0000-00-00 00:00:00.0 +DROP TABLE t1; +# +# +# UPDATE SET [ WHERE ] +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+0.1 WHERE c; +SELECT * FROM t1; +c +0000-00-00 00:00:00.0 +0000-00-00 00:00:00.2 +2014-01-01 10:00:00.2 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+0.1 WHERE c IS FALSE; +SELECT * FROM t1; +c +0000-00-00 00:00:00.1 +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+0.1 WHERE c IS TRUE; +SELECT * FROM t1; +c +0000-00-00 00:00:00.0 +0000-00-00 00:00:00.2 +2014-01-01 10:00:00.2 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+0.1 WHERE COALESCE(c); +SELECT * FROM t1; +c +0000-00-00 00:00:00.0 +0000-00-00 00:00:00.2 +2014-01-01 10:00:00.2 +DROP TABLE t1; +# +# +# CHECK +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c); +INSERT INTO t1 SELECT * FROM t0 WHERE NOT c; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c; +SELECT * FROM t1; +c +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS FALSE); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +SELECT * FROM t1; +c +0000-00-00 00:00:00.0 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS TRUE); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +c +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(COALESCE(c)); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +c +0000-00-00 00:00:00.1 +2014-01-01 10:00:00.1 +DROP TABLE t1; +# +# +# WHEN THEN +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT c, CASE WHEN c THEN 'true' ELSE 'false' END AS c2 FROM t1; +c c2 +0000-00-00 00:00:00.0 false +0000-00-00 00:00:00.1 true +2014-01-01 10:00:00.1 true +SELECT c, CASE WHEN COALESCE(c) THEN 'true' ELSE 'false' END AS c2 FROM t1; +c c2 +0000-00-00 00:00:00.0 false +0000-00-00 00:00:00.1 true +2014-01-01 10:00:00.1 true +DROP TABLE t1; +DROP TABLE t0; +# +# End of 10.6 tests +# diff --git a/mysql-test/main/type_datetime.test b/mysql-test/main/type_datetime.test index c1d45870221..c5991c01508 100644 --- a/mysql-test/main/type_datetime.test +++ b/mysql-test/main/type_datetime.test @@ -1062,3 +1062,18 @@ DELIMITER ;$$ --source unusable_keys_joins.inc DROP TABLE t1; SET note_verbosity=DEFAULT; + + +--echo # +--echo # MDEV-34123 CONCAT Function Returns Unexpected Empty Set in Query +--echo # + +CREATE TABLE t0 (c DATETIME(1)); +INSERT INTO t0 VALUES ('0000-00-00 00:00:00.0'),('0000-00-00 00:00:00.1'),('2014-01-01 10:00:00.1'); +--source include/search_condition.inc +DROP TABLE t0; + + +--echo # +--echo # End of 10.6 tests +--echo # diff --git a/mysql-test/main/type_decimal.result b/mysql-test/main/type_decimal.result index 29067f8f5a5..ce84660e420 100644 --- a/mysql-test/main/type_decimal.result +++ b/mysql-test/main/type_decimal.result @@ -1323,3 +1323,210 @@ SET sql_mode=DEFAULT; # # End of 10.4 tests # +# +# Start of 10.6 tests +# +# +# MDEV-34123 CONCAT Function Returns Unexpected Empty Set in Query +# +CREATE TABLE t0 (c DECIMAL(10, 1)); +INSERT INTO t0 VALUES (0.0),(0.4),(0.6); +# +# WHERE +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT * FROM t1 WHERE c; +c +0.4 +0.6 +SELECT * FROM t1 WHERE c IS FALSE; +c +0.0 +SELECT * FROM t1 WHERE c IS TRUE; +c +0.4 +0.6 +SELECT * FROM t1 WHERE COALESCE(c); +c +0.4 +0.6 +DROP TABLE t1; +# +# HAVING +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2; +c2 +0.4 +0.6 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS FALSE; +c2 +0.0 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS TRUE; +c2 +0.4 +0.6 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING COALESCE(c2); +c2 +0.4 +0.6 +DROP TABLE t1; +# +# := ON +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c); +c +0.4 +0.6 +0.4 +0.6 +0.4 +0.6 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS FALSE); +c +0.0 +0.0 +0.0 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS TRUE); +c +0.4 +0.6 +0.4 +0.6 +0.4 +0.6 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (COALESCE(t1.c)); +c +0.4 +0.6 +0.4 +0.6 +0.4 +0.6 +DROP TABLE t1; +# +# +# DELETE FROM [ WHERE ] +# +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c; +SELECT * FROM t1; +c +0.0 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS FALSE; +SELECT * FROM t1; +c +0.4 +0.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS TRUE; +SELECT * FROM t1; +c +0.0 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE COALESCE(c); +SELECT * FROM t1; +c +0.0 +DROP TABLE t1; +# +# +# UPDATE SET [ WHERE ] +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE c; +SELECT * FROM t1; +c +0.0 +11.4 +11.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE c IS FALSE; +SELECT * FROM t1; +c +11.0 +0.4 +0.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE c IS TRUE; +SELECT * FROM t1; +c +0.0 +11.4 +11.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE COALESCE(c); +SELECT * FROM t1; +c +0.0 +11.4 +11.6 +DROP TABLE t1; +# +# +# CHECK +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c); +INSERT INTO t1 SELECT * FROM t0 WHERE NOT c; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c; +SELECT * FROM t1; +c +0.4 +0.6 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS FALSE); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +SELECT * FROM t1; +c +0.0 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS TRUE); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +c +0.4 +0.6 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(COALESCE(c)); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +c +0.4 +0.6 +DROP TABLE t1; +# +# +# WHEN THEN +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT c, CASE WHEN c THEN 'true' ELSE 'false' END AS c2 FROM t1; +c c2 +0.0 false +0.4 true +0.6 true +SELECT c, CASE WHEN COALESCE(c) THEN 'true' ELSE 'false' END AS c2 FROM t1; +c c2 +0.0 false +0.4 true +0.6 true +DROP TABLE t1; +DROP TABLE t0; +# +# End of 10.6 tests +# diff --git a/mysql-test/main/type_decimal.test b/mysql-test/main/type_decimal.test index 1076592fe62..b0c88e6244e 100644 --- a/mysql-test/main/type_decimal.test +++ b/mysql-test/main/type_decimal.test @@ -823,3 +823,21 @@ SET sql_mode=DEFAULT; --echo # --echo # End of 10.4 tests --echo # + + +--echo # +--echo # Start of 10.6 tests +--echo # + +--echo # +--echo # MDEV-34123 CONCAT Function Returns Unexpected Empty Set in Query +--echo # + +CREATE TABLE t0 (c DECIMAL(10, 1)); +INSERT INTO t0 VALUES (0.0),(0.4),(0.6); +--source include/search_condition.inc +DROP TABLE t0; + +--echo # +--echo # End of 10.6 tests +--echo # diff --git a/mysql-test/main/type_float.result b/mysql-test/main/type_float.result index 36a227a4bd6..6dc5fec6f44 100644 --- a/mysql-test/main/type_float.result +++ b/mysql-test/main/type_float.result @@ -1547,3 +1547,207 @@ Warning 1292 Truncated incorrect DOUBLE value: '2001-01-02' DROP TABLE t2; DROP TABLE t1; SET note_verbosity=DEFAULT; +# +# MDEV-34123 CONCAT Function Returns Unexpected Empty Set in Query +# +CREATE TABLE t0 (c DOUBLE); +INSERT INTO t0 VALUES (0.0),(0.4),(0.6); +# +# WHERE +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT * FROM t1 WHERE c; +c +0.4 +0.6 +SELECT * FROM t1 WHERE c IS FALSE; +c +0 +SELECT * FROM t1 WHERE c IS TRUE; +c +0.4 +0.6 +SELECT * FROM t1 WHERE COALESCE(c); +c +0.4 +0.6 +DROP TABLE t1; +# +# HAVING +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2; +c2 +0.4 +0.6 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS FALSE; +c2 +0 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS TRUE; +c2 +0.4 +0.6 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING COALESCE(c2); +c2 +0.4 +0.6 +DROP TABLE t1; +# +# := ON +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c); +c +0.4 +0.6 +0.4 +0.6 +0.4 +0.6 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS FALSE); +c +0 +0 +0 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS TRUE); +c +0.4 +0.6 +0.4 +0.6 +0.4 +0.6 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (COALESCE(t1.c)); +c +0.4 +0.6 +0.4 +0.6 +0.4 +0.6 +DROP TABLE t1; +# +# +# DELETE FROM [ WHERE ] +# +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c; +SELECT * FROM t1; +c +0 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS FALSE; +SELECT * FROM t1; +c +0.4 +0.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS TRUE; +SELECT * FROM t1; +c +0 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE COALESCE(c); +SELECT * FROM t1; +c +0 +DROP TABLE t1; +# +# +# UPDATE SET [ WHERE ] +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE c; +SELECT * FROM t1; +c +0 +11.4 +11.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE c IS FALSE; +SELECT * FROM t1; +c +11 +0.4 +0.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE c IS TRUE; +SELECT * FROM t1; +c +0 +11.4 +11.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE COALESCE(c); +SELECT * FROM t1; +c +0 +11.4 +11.6 +DROP TABLE t1; +# +# +# CHECK +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c); +INSERT INTO t1 SELECT * FROM t0 WHERE NOT c; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c; +SELECT * FROM t1; +c +0.4 +0.6 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS FALSE); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +SELECT * FROM t1; +c +0 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS TRUE); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +c +0.4 +0.6 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(COALESCE(c)); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +c +0.4 +0.6 +DROP TABLE t1; +# +# +# WHEN THEN +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT c, CASE WHEN c THEN 'true' ELSE 'false' END AS c2 FROM t1; +c c2 +0 false +0.4 true +0.6 true +SELECT c, CASE WHEN COALESCE(c) THEN 'true' ELSE 'false' END AS c2 FROM t1; +c c2 +0 false +0.4 true +0.6 true +DROP TABLE t1; +DROP TABLE t0; +# +# End of 10.6 tests +# diff --git a/mysql-test/main/type_float.test b/mysql-test/main/type_float.test index 994bf5ad9da..a08ee7fd4b2 100644 --- a/mysql-test/main/type_float.test +++ b/mysql-test/main/type_float.test @@ -834,3 +834,17 @@ DELIMITER ;$$ --source unusable_keys_joins.inc DROP TABLE t1; SET note_verbosity=DEFAULT; + + +--echo # +--echo # MDEV-34123 CONCAT Function Returns Unexpected Empty Set in Query +--echo # + +CREATE TABLE t0 (c DOUBLE); +INSERT INTO t0 VALUES (0.0),(0.4),(0.6); +--source include/search_condition.inc +DROP TABLE t0; + +--echo # +--echo # End of 10.6 tests +--echo # diff --git a/mysql-test/main/type_int.result b/mysql-test/main/type_int.result index efa855da42e..58110bc0762 100644 --- a/mysql-test/main/type_int.result +++ b/mysql-test/main/type_int.result @@ -2102,3 +2102,207 @@ Warning 1292 Truncated incorrect INTEGER value: '2001-01-02' DROP TABLE t2; DROP TABLE t1; SET note_verbosity=DEFAULT; +# +# MDEV-34123 CONCAT Function Returns Unexpected Empty Set in Query +# +CREATE TABLE t0 (c INT); +INSERT INTO t0 VALUES (0),(100),(200); +# +# WHERE +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT * FROM t1 WHERE c; +c +100 +200 +SELECT * FROM t1 WHERE c IS FALSE; +c +0 +SELECT * FROM t1 WHERE c IS TRUE; +c +100 +200 +SELECT * FROM t1 WHERE COALESCE(c); +c +100 +200 +DROP TABLE t1; +# +# HAVING +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2; +c2 +100 +200 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS FALSE; +c2 +0 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS TRUE; +c2 +100 +200 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING COALESCE(c2); +c2 +100 +200 +DROP TABLE t1; +# +# := ON +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c); +c +100 +200 +100 +200 +100 +200 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS FALSE); +c +0 +0 +0 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS TRUE); +c +100 +200 +100 +200 +100 +200 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (COALESCE(t1.c)); +c +100 +200 +100 +200 +100 +200 +DROP TABLE t1; +# +# +# DELETE FROM [ WHERE ] +# +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c; +SELECT * FROM t1; +c +0 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS FALSE; +SELECT * FROM t1; +c +100 +200 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS TRUE; +SELECT * FROM t1; +c +0 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE COALESCE(c); +SELECT * FROM t1; +c +0 +DROP TABLE t1; +# +# +# UPDATE SET [ WHERE ] +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE c; +SELECT * FROM t1; +c +0 +111 +211 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE c IS FALSE; +SELECT * FROM t1; +c +11 +100 +200 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE c IS TRUE; +SELECT * FROM t1; +c +0 +111 +211 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE COALESCE(c); +SELECT * FROM t1; +c +0 +111 +211 +DROP TABLE t1; +# +# +# CHECK +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c); +INSERT INTO t1 SELECT * FROM t0 WHERE NOT c; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c; +SELECT * FROM t1; +c +100 +200 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS FALSE); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +SELECT * FROM t1; +c +0 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS TRUE); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +c +100 +200 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(COALESCE(c)); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +c +100 +200 +DROP TABLE t1; +# +# +# WHEN THEN +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT c, CASE WHEN c THEN 'true' ELSE 'false' END AS c2 FROM t1; +c c2 +0 false +100 true +200 true +SELECT c, CASE WHEN COALESCE(c) THEN 'true' ELSE 'false' END AS c2 FROM t1; +c c2 +0 false +100 true +200 true +DROP TABLE t1; +DROP TABLE t0; +# +# End of 10.6 tests +# diff --git a/mysql-test/main/type_int.test b/mysql-test/main/type_int.test index f15f8688907..4e03987001a 100644 --- a/mysql-test/main/type_int.test +++ b/mysql-test/main/type_int.test @@ -682,3 +682,17 @@ DELIMITER ;$$ --source unusable_keys_joins.inc DROP TABLE t1; SET note_verbosity=DEFAULT; + + +--echo # +--echo # MDEV-34123 CONCAT Function Returns Unexpected Empty Set in Query +--echo # + +CREATE TABLE t0 (c INT); +INSERT INTO t0 VALUES (0),(100),(200); +--source include/search_condition.inc +DROP TABLE t0; + +--echo # +--echo # End of 10.6 tests +--echo # diff --git a/mysql-test/main/type_temporal_innodb.result b/mysql-test/main/type_temporal_innodb.result index b11ea8476bd..f801baceb83 100644 --- a/mysql-test/main/type_temporal_innodb.result +++ b/mysql-test/main/type_temporal_innodb.result @@ -183,7 +183,7 @@ INSERT INTO t1 VALUES ('2024-02-29'); SELECT * FROM t1 WHERE SUBSTR(1 FROM BIT_LENGTH(f) FOR DEFAULT(f)); f Warnings: -Warning 1292 Truncated incorrect INTEGER value: '' +Warning 1292 Truncated incorrect DOUBLE value: '' DROP TABLE t1; # # End of 10.4 tests diff --git a/mysql-test/main/type_time.result b/mysql-test/main/type_time.result index 532672a095b..dc5ebc46c0f 100644 --- a/mysql-test/main/type_time.result +++ b/mysql-test/main/type_time.result @@ -2604,3 +2604,210 @@ Warning 1292 Truncated incorrect time value: '2001-01-02' DROP TABLE t2; DROP TABLE t1; SET note_verbosity=DEFAULT; +# +# Start of 10.6 tests +# +# +# MDEV-34123 CONCAT Function Returns Unexpected Empty Set in Query +# +CREATE TABLE t0 (c TIME(1)); +INSERT INTO t0 VALUES ('00:00:00.0'),('00:00:00.4'),('00:00:00.6'); +# +# WHERE +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT * FROM t1 WHERE c; +c +00:00:00.4 +00:00:00.6 +SELECT * FROM t1 WHERE c IS FALSE; +c +00:00:00.0 +SELECT * FROM t1 WHERE c IS TRUE; +c +00:00:00.4 +00:00:00.6 +SELECT * FROM t1 WHERE COALESCE(c); +c +00:00:00.4 +00:00:00.6 +DROP TABLE t1; +# +# HAVING +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2; +c2 +00:00:00.4 +00:00:00.6 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS FALSE; +c2 +00:00:00.0 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS TRUE; +c2 +00:00:00.4 +00:00:00.6 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING COALESCE(c2); +c2 +00:00:00.4 +00:00:00.6 +DROP TABLE t1; +# +# := ON +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c); +c +00:00:00.4 +00:00:00.6 +00:00:00.4 +00:00:00.6 +00:00:00.4 +00:00:00.6 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS FALSE); +c +00:00:00.0 +00:00:00.0 +00:00:00.0 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS TRUE); +c +00:00:00.4 +00:00:00.6 +00:00:00.4 +00:00:00.6 +00:00:00.4 +00:00:00.6 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (COALESCE(t1.c)); +c +00:00:00.4 +00:00:00.6 +00:00:00.4 +00:00:00.6 +00:00:00.4 +00:00:00.6 +DROP TABLE t1; +# +# +# DELETE FROM [ WHERE ] +# +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c; +SELECT * FROM t1; +c +00:00:00.0 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS FALSE; +SELECT * FROM t1; +c +00:00:00.4 +00:00:00.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS TRUE; +SELECT * FROM t1; +c +00:00:00.0 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE COALESCE(c); +SELECT * FROM t1; +c +00:00:00.0 +DROP TABLE t1; +# +# +# UPDATE SET [ WHERE ] +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE c; +SELECT * FROM t1; +c +00:00:00.0 +00:00:11.4 +00:00:11.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE c IS FALSE; +SELECT * FROM t1; +c +00:00:11.0 +00:00:00.4 +00:00:00.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE c IS TRUE; +SELECT * FROM t1; +c +00:00:00.0 +00:00:11.4 +00:00:11.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE COALESCE(c); +SELECT * FROM t1; +c +00:00:00.0 +00:00:11.4 +00:00:11.6 +DROP TABLE t1; +# +# +# CHECK +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c); +INSERT INTO t1 SELECT * FROM t0 WHERE NOT c; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c; +SELECT * FROM t1; +c +00:00:00.4 +00:00:00.6 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS FALSE); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +SELECT * FROM t1; +c +00:00:00.0 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS TRUE); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +c +00:00:00.4 +00:00:00.6 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(COALESCE(c)); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +c +00:00:00.4 +00:00:00.6 +DROP TABLE t1; +# +# +# WHEN THEN +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT c, CASE WHEN c THEN 'true' ELSE 'false' END AS c2 FROM t1; +c c2 +00:00:00.0 false +00:00:00.4 true +00:00:00.6 true +SELECT c, CASE WHEN COALESCE(c) THEN 'true' ELSE 'false' END AS c2 FROM t1; +c c2 +00:00:00.0 false +00:00:00.4 true +00:00:00.6 true +DROP TABLE t1; +DROP TABLE t0; +# +# End of 10.6 tests +# diff --git a/mysql-test/main/type_time.test b/mysql-test/main/type_time.test index ae44427b370..3c78b913435 100644 --- a/mysql-test/main/type_time.test +++ b/mysql-test/main/type_time.test @@ -1635,3 +1635,22 @@ DELIMITER ;$$ --source unusable_keys_joins.inc DROP TABLE t1; SET note_verbosity=DEFAULT; + + +--echo # +--echo # Start of 10.6 tests +--echo # + +--echo # +--echo # MDEV-34123 CONCAT Function Returns Unexpected Empty Set in Query +--echo # + +CREATE TABLE t0 (c TIME(1)); +INSERT INTO t0 VALUES ('00:00:00.0'),('00:00:00.4'),('00:00:00.6'); +--source include/search_condition.inc +DROP TABLE t0; + + +--echo # +--echo # End of 10.6 tests +--echo # diff --git a/mysql-test/main/type_timestamp.result b/mysql-test/main/type_timestamp.result index 6ff36d296fa..268670bad46 100644 --- a/mysql-test/main/type_timestamp.result +++ b/mysql-test/main/type_timestamp.result @@ -1276,9 +1276,8 @@ CREATE TABLE t1 (a TIMESTAMP(4), b TIMESTAMP DEFAULT 0) ENGINE=MyISAM; INSERT IGNORE INTO t1 VALUES ('2001-01-01','2002-01-01'),('2003-01-01','2004-01-01'); SELECT * FROM t1 WHERE DEFAULT(b) - a; a b -Warnings: -Warning 1916 Got overflow when converting '-20010101000000' to UNSIGNED INT. Value truncated -Warning 1916 Got overflow when converting '-20030101000000' to UNSIGNED INT. Value truncated +2001-01-01 00:00:00.0000 2002-01-01 00:00:00 +2003-01-01 00:00:00.0000 2004-01-01 00:00:00 SELECT LEFT('', DEFAULT(b)-a) FROM t1; LEFT('', DEFAULT(b)-a) @@ -1291,9 +1290,8 @@ CREATE TABLE t1 (a TIMESTAMP(4), b TIMESTAMP DEFAULT 0) ENGINE=MyISAM; INSERT IGNORE INTO t1 (a) VALUES ('2001-01-01'),('2003-01-01'); SELECT * FROM t1 WHERE (SELECT MIN(b) FROM t1) - a; a b -Warnings: -Warning 1916 Got overflow when converting '-20010101000000' to UNSIGNED INT. Value truncated -Warning 1916 Got overflow when converting '-20030101000000' to UNSIGNED INT. Value truncated +2001-01-01 00:00:00.0000 0000-00-00 00:00:00 +2003-01-01 00:00:00.0000 0000-00-00 00:00:00 SELECT (SELECT MIN(b) FROM t1) - a FROM t1; (SELECT MIN(b) FROM t1) - a -20010101000000.0000 diff --git a/mysql-test/main/type_varchar.result b/mysql-test/main/type_varchar.result index bcb1227a462..463dbe28b2f 100644 --- a/mysql-test/main/type_varchar.result +++ b/mysql-test/main/type_varchar.result @@ -1181,3 +1181,251 @@ Warnings: Note 1105 Cannot use key `i` part[0] for lookup: `test`.`t1`.`i` of type `char` < "10" of type `int` DROP TABLE t1; SET note_verbosity=DEFAULT; +# +# MDEV-34123 CONCAT Function Returns Unexpected Empty Set in Query +# +CREATE TABLE IF NOT EXISTS t0 +( +c0_1 VARCHAR(200), +c0_2 TEXT +); +INSERT INTO t0 VALUES ('0.67882431850', '97966'); +SELECT (CONCAT(t0.c0_1, t0.c0_2)) AS ref0 FROM t0 WHERE (CONCAT(t0.c0_1, t0.c0_2)); +ref0 +0.6788243185097966 +DROP TABLE t0; +CREATE TABLE t0 (c VARCHAR(200)); +INSERT INTO t0 VALUES ('0.0'),('0.4'),('0.6'); +# +# WHERE +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT * FROM t1 WHERE c; +c +0.4 +0.6 +SELECT * FROM t1 WHERE c IS FALSE; +c +0.0 +SELECT * FROM t1 WHERE c IS TRUE; +c +0.4 +0.6 +SELECT * FROM t1 WHERE COALESCE(c); +c +0.4 +0.6 +SELECT * FROM t1 WHERE CONCAT(c); +c +0.4 +0.6 +SELECT * FROM t1 WHERE LEFT(c,100); +c +0.4 +0.6 +DROP TABLE t1; +# +# HAVING +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2; +c2 +0.4 +0.6 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS FALSE; +c2 +0.0 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS TRUE; +c2 +0.4 +0.6 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING COALESCE(c2); +c2 +0.4 +0.6 +SELECT CONCAT(c,'0') AS c2 FROM t1 GROUP BY c2 HAVING LEFT(c2,100); +c2 +0.40 +0.60 +DROP TABLE t1; +# +# := ON +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c); +c +0.4 +0.6 +0.4 +0.6 +0.4 +0.6 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS FALSE); +c +0.0 +0.0 +0.0 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS TRUE); +c +0.4 +0.6 +0.4 +0.6 +0.4 +0.6 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (COALESCE(t1.c)); +c +0.4 +0.6 +0.4 +0.6 +0.4 +0.6 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (CONCAT(t1.c)); +c +0.4 +0.6 +0.4 +0.6 +0.4 +0.6 +DROP TABLE t1; +# +# +# DELETE FROM [ WHERE ] +# +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c; +SELECT * FROM t1; +c +0.0 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS FALSE; +SELECT * FROM t1; +c +0.4 +0.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS TRUE; +SELECT * FROM t1; +c +0.0 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE COALESCE(c); +SELECT * FROM t1; +c +0.0 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE CONCAT(c); +SELECT * FROM t1; +c +0.0 +DROP TABLE t1; +# +# +# UPDATE SET [ WHERE ] +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE c; +SELECT * FROM t1; +c +0.0 +11.4 +11.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE c IS FALSE; +SELECT * FROM t1; +c +11 +0.4 +0.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE c IS TRUE; +SELECT * FROM t1; +c +0.0 +11.4 +11.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE COALESCE(c); +SELECT * FROM t1; +c +0.0 +11.4 +11.6 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=c+11 WHERE COALESCE(c); +SELECT * FROM t1; +c +0.0 +11.4 +11.6 +DROP TABLE t1; +# +# +# CHECK +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c); +INSERT INTO t1 SELECT * FROM t0 WHERE NOT c; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c; +SELECT * FROM t1; +c +0.4 +0.6 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS FALSE); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +SELECT * FROM t1; +c +0.0 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS TRUE); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +c +0.4 +0.6 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(COALESCE(c)); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +c +0.4 +0.6 +DROP TABLE t1; +# +# +# WHEN THEN +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT c, CASE WHEN c THEN 'true' ELSE 'false' END AS c2 FROM t1; +c c2 +0.0 false +0.4 true +0.6 true +SELECT c, CASE WHEN COALESCE(c) THEN 'true' ELSE 'false' END AS c2 FROM t1; +c c2 +0.0 false +0.4 true +0.6 true +DROP TABLE t1; +DROP TABLE t0; +# +# End of 10.6 tests +# diff --git a/mysql-test/main/type_varchar.test b/mysql-test/main/type_varchar.test index feb270272c1..b5ffc87ceed 100644 --- a/mysql-test/main/type_varchar.test +++ b/mysql-test/main/type_varchar.test @@ -498,3 +498,27 @@ EXPLAIN DELETE FROM t1 WHERE i < 10; DROP TABLE t1; SET note_verbosity=DEFAULT; + + +--echo # +--echo # MDEV-34123 CONCAT Function Returns Unexpected Empty Set in Query +--echo # + +CREATE TABLE IF NOT EXISTS t0 +( + c0_1 VARCHAR(200), + c0_2 TEXT +); +INSERT INTO t0 VALUES ('0.67882431850', '97966'); +SELECT (CONCAT(t0.c0_1, t0.c0_2)) AS ref0 FROM t0 WHERE (CONCAT(t0.c0_1, t0.c0_2)); +DROP TABLE t0; + +CREATE TABLE t0 (c VARCHAR(200)); +INSERT INTO t0 VALUES ('0.0'),('0.4'),('0.6'); +--source include/search_condition.inc +DROP TABLE t0; + + +--echo # +--echo # End of 10.6 tests +--echo # diff --git a/plugin/type_inet/item_inetfunc.cc b/plugin/type_inet/item_inetfunc.cc index 1bdae5e896b..d92d51fa598 100644 --- a/plugin/type_inet/item_inetfunc.cc +++ b/plugin/type_inet/item_inetfunc.cc @@ -214,7 +214,7 @@ String *Item_func_inet6_ntoa::val_str_ascii(String *buffer) Checks if the passed string represents an IPv4-address. */ -longlong Item_func_is_ipv4::val_int() +bool Item_func_is_ipv4::val_bool() { DBUG_ASSERT(fixed()); String_ptr_and_buffer tmp(args[0]); @@ -242,7 +242,7 @@ public: Checks if the passed string represents an IPv6-address. */ -longlong Item_func_is_ipv6::val_int() +bool Item_func_is_ipv6::val_bool() { DBUG_ASSERT(fixed()); String_ptr_and_buffer tmp(args[0]); @@ -253,7 +253,7 @@ longlong Item_func_is_ipv6::val_int() Checks if the passed IPv6-address is an IPv4-compat IPv6-address. */ -longlong Item_func_is_ipv4_compat::val_int() +bool Item_func_is_ipv4_compat::val_bool() { IP6 ip6(args[0]); return !ip6.is_null() && ip6.is_v4compat(); @@ -264,7 +264,7 @@ longlong Item_func_is_ipv4_compat::val_int() Checks if the passed IPv6-address is an IPv4-mapped IPv6-address. */ -longlong Item_func_is_ipv4_mapped::val_int() +bool Item_func_is_ipv4_mapped::val_bool() { IP6 ip6(args[0]); return !ip6.is_null() && ip6.is_v4mapped(); diff --git a/plugin/type_inet/item_inetfunc.h b/plugin/type_inet/item_inetfunc.h index ec38bec3d3a..73aed8c1f44 100644 --- a/plugin/type_inet/item_inetfunc.h +++ b/plugin/type_inet/item_inetfunc.h @@ -181,7 +181,7 @@ public: Item *do_get_copy(THD *thd) const override { return get_item_copy(thd, this); } - longlong val_int() override; + bool val_bool() override; }; @@ -204,7 +204,7 @@ public: Item *do_get_copy(THD *thd) const override { return get_item_copy(thd, this); } - longlong val_int() override; + bool val_bool() override; }; @@ -225,7 +225,7 @@ public: } Item *do_get_copy(THD *thd) const override { return get_item_copy(thd, this); } - longlong val_int() override; + bool val_bool() override; }; @@ -246,7 +246,7 @@ public: } Item *do_get_copy(THD *thd) const override { return get_item_copy(thd, this); } - longlong val_int() override; + bool val_bool() override; }; #endif // ITEM_INETFUNC_INCLUDED diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6_search_condition.result b/plugin/type_inet/mysql-test/type_inet/type_inet6_search_condition.result new file mode 100644 index 00000000000..7521b4f4d45 --- /dev/null +++ b/plugin/type_inet/mysql-test/type_inet/type_inet6_search_condition.result @@ -0,0 +1,167 @@ +# +# Start of 10.6 tests +# +# +# MDEV-34123 CONCAT Function Returns Unexpected Empty Set in Query +# +CREATE TABLE t0 (c INET6); +INSERT INTO t0 VALUES ('::'),('::1'),('::2'); +# +# WHERE +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT * FROM t1 WHERE c IS FALSE; +c +:: +SELECT * FROM t1 WHERE c IS TRUE; +c +::1 +::2 +SELECT * FROM t1 WHERE COALESCE(c); +c +::1 +::2 +DROP TABLE t1; +# +# HAVING +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS FALSE; +c2 +:: +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING c2 IS TRUE; +c2 +::1 +::2 +SELECT COALESCE(c,c) AS c2 FROM t1 GROUP BY c2 HAVING COALESCE(c2); +c2 +::1 +::2 +DROP TABLE t1; +# +# := ON +# +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS FALSE); +c +:: +:: +:: +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (t1.c IS TRUE); +c +::1 +::2 +::1 +::2 +::1 +::2 +SELECT t1.c FROM t1 JOIN t1 AS t2 ON (COALESCE(t1.c)); +c +::1 +::2 +::1 +::2 +::1 +::2 +DROP TABLE t1; +# +# +# DELETE FROM [ WHERE ] +# +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS FALSE; +SELECT * FROM t1; +c +::1 +::2 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE c IS TRUE; +SELECT * FROM t1; +c +:: +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +DELETE FROM t1 WHERE COALESCE(c); +SELECT * FROM t1; +c +:: +DROP TABLE t1; +# +# +# UPDATE SET [ WHERE ] +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=concat(c,'77') WHERE c IS FALSE; +SELECT * FROM t1; +c +::77 +::1 +::2 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=concat(c,'77') WHERE c IS TRUE; +SELECT * FROM t1; +c +:: +::177 +::277 +DROP TABLE t1; +CREATE TABLE t1 AS SELECT * FROM t0; +UPDATE t1 SET c=concat(c,'77') WHERE COALESCE(c); +SELECT * FROM t1; +c +:: +::177 +::277 +DROP TABLE t1; +# +# +# CHECK +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS FALSE); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +SELECT * FROM t1; +c +:: +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(c IS TRUE); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +c +::1 +::2 +DROP TABLE t1; +CREATE TABLE t1 LIKE t0; +ALTER TABLE t1 ADD CONSTRAINT check0 CHECK(COALESCE(c)); +INSERT INTO t1 SELECT * FROM t0 WHERE c IS FALSE; +ERROR 23000: CONSTRAINT `check0` failed for `test`.`t1` +INSERT INTO t1 SELECT * FROM t0 WHERE c IS TRUE; +SELECT * FROM t1; +c +::1 +::2 +DROP TABLE t1; +# +# +# WHEN THEN +CREATE TABLE t1 AS SELECT * FROM t0; +SELECT c, CASE WHEN c THEN 'true' ELSE 'false' END AS c2 FROM t1; +c c2 +:: false +::1 true +::2 true +SELECT c, CASE WHEN COALESCE(c) THEN 'true' ELSE 'false' END AS c2 FROM t1; +c c2 +:: false +::1 true +::2 true +DROP TABLE t1; +DROP TABLE t0; +# +# End of 10.6 tests +# diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6_search_condition.test b/plugin/type_inet/mysql-test/type_inet/type_inet6_search_condition.test new file mode 100644 index 00000000000..4df2dfb6b78 --- /dev/null +++ b/plugin/type_inet/mysql-test/type_inet/type_inet6_search_condition.test @@ -0,0 +1,16 @@ +--echo # +--echo # Start of 10.6 tests +--echo # + +--echo # +--echo # MDEV-34123 CONCAT Function Returns Unexpected Empty Set in Query +--echo # + +CREATE TABLE t0 (c INET6); +INSERT INTO t0 VALUES ('::'),('::1'),('::2'); +--source include/search_condition.inc +DROP TABLE t0; + +--echo # +--echo # End of 10.6 tests +--echo # diff --git a/plugin/type_inet/sql_type_inet.h b/plugin/type_inet/sql_type_inet.h index 2c1865a7cef..7e89fe8df08 100644 --- a/plugin/type_inet/sql_type_inet.h +++ b/plugin/type_inet/sql_type_inet.h @@ -39,6 +39,10 @@ public: using FixedBinTypeStorage::FixedBinTypeStorage; bool ascii_to_fbt(const char *str, size_t str_length); size_t to_string(char *dst, size_t dstsize) const; + bool to_bool() const + { + return !only_zero_bytes(m_buffer, sizeof(m_buffer)); + } static const Name &default_value(); }; diff --git a/sql/handler.cc b/sql/handler.cc index a21556d8181..b9294180210 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -6899,7 +6899,7 @@ extern "C" check_result_t handler_index_cond_check(void* h_arg) if (h->end_range && h->compare_key2(h->end_range) > 0) return CHECK_OUT_OF_RANGE; h->increment_statistics(&SSV::ha_icp_attempts); - if ((res= h->pushed_idx_cond->val_int()? CHECK_POS : CHECK_NEG) == + if ((res= h->pushed_idx_cond->val_bool()? CHECK_POS : CHECK_NEG) == CHECK_POS) h->increment_statistics(&SSV::ha_icp_match); return res; diff --git a/sql/item.cc b/sql/item.cc index 20289c317a3..2f1cc9014fd 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -3424,6 +3424,7 @@ double Item_field::val_real() longlong Item_field::val_int() { + DBUG_ASSERT(!is_cond()); DBUG_ASSERT(fixed()); if ((null_value=field->is_null())) return 0; @@ -4032,6 +4033,7 @@ double Item_string::val_real() */ longlong Item_string::val_int() { + DBUG_ASSERT(!is_cond()); return longlong_from_string_with_check(&str_value); } @@ -4042,6 +4044,12 @@ my_decimal *Item_string::val_decimal(my_decimal *decimal_value) } +bool Item_null::val_bool() +{ + null_value= true; + return false; +} + double Item_null::val_real() { null_value=1; @@ -4049,6 +4057,7 @@ double Item_null::val_real() } longlong Item_null::val_int() { + DBUG_ASSERT(!is_cond()); null_value=1; return 0; } @@ -7002,6 +7011,16 @@ int Item::save_int_in_field(Field *field, bool no_conversions) } +int Item::save_bool_in_field(Field *field, bool no_conversions) +{ + bool nr= val_bool(); + if (null_value) + return set_field_to_null_with_conversions(field, no_conversions); + field->set_notnull(); + return field->store((longlong) nr, false/*unsigned_flag*/); +} + + int Item::save_in_field(Field *field, bool no_conversions) { int error= type_handler()->Item_save_in_field(this, field, no_conversions); @@ -8910,7 +8929,8 @@ Item_cache_wrapper::Item_cache_wrapper(THD *thd, Item *item_arg): Type_std_attributes::set(orig_item); base_flags|= (item_base_t::FIXED | - (orig_item->base_flags & item_base_t::MAYBE_NULL)); + (orig_item->base_flags & + (item_base_t::MAYBE_NULL | item_base_t::IS_COND))); with_flags|= orig_item->with_flags; name= item_arg->name; @@ -10322,6 +10342,18 @@ void Item_cache::set_null() } +bool Item_cache_bool::cache_value() +{ + if (!example) + return false; + value_cached= true; + value= example->val_bool_result(); + null_value_inside= null_value= example->null_value; + unsigned_flag= false; + return true; +} + + bool Item_cache_int::cache_value() { if (!example) diff --git a/sql/item.h b/sql/item.h index 8ca9e31d4bb..3ae206370f0 100644 --- a/sql/item.h +++ b/sql/item.h @@ -776,8 +776,12 @@ enum class item_base_t : item_flags_t FIXED= (1<<2), // Was fixed with fix_fields(). IS_EXPLICIT_NAME= (1<<3), // The name of this Item was set by the user // (or was auto generated otherwise) - IS_IN_WITH_CYCLE= (1<<4) // This item is in CYCLE clause + IS_IN_WITH_CYCLE= (1<<4), // This item is in CYCLE clause // of WITH. + IS_COND= (1<<5) // The item is used as . + // Must be evaluated using val_bool(). + // Note, not all items used as a search + // condition set this flag yet. }; @@ -1092,6 +1096,8 @@ public: { return (bool) (base_flags & item_base_t::IS_EXPLICIT_NAME); } inline bool is_in_with_cycle() const { return (bool) (base_flags & item_base_t::IS_IN_WITH_CYCLE); } + inline bool is_cond() const + { return (bool) (base_flags & item_base_t::IS_COND); } inline bool with_sp_var() const { return (bool) (with_flags & item_with_t::SP_VAR); } @@ -1767,6 +1773,7 @@ public: int save_str_in_field(Field *field, bool no_conversions); int save_real_in_field(Field *field, bool no_conversions); int save_int_in_field(Field *field, bool no_conversions); + int save_bool_in_field(Field *field, bool no_conversions); int save_decimal_in_field(Field *field, bool no_conversions); int save_str_value_in_field(Field *field, String *result); @@ -3105,6 +3112,7 @@ public: DBUG_ASSERT(0); return this; } + bool val_bool() override = 0; }; @@ -3956,6 +3964,7 @@ public: } Type type() const override { return NULL_ITEM; } bool vcol_assignment_allowed_value() const override { return true; } + bool val_bool() override; double val_real() override; longlong val_int() override; String *val_str(String *str) override; @@ -4515,7 +4524,12 @@ public: Field *create_field_for_create_select(MEM_ROOT *root, TABLE *table) override { return tmp_table_field_from_field_type(root, table); } const longlong *const_ptr_longlong() const override { return &value; } - longlong val_int() override { return value; } + bool val_bool() override { return value != 0; } + longlong val_int() override + { + DBUG_ASSERT(!is_cond()); + return value; + } longlong val_int_min() const override { return value; } double val_real() override { return (double) value; } my_decimal *val_decimal(my_decimal *) override; @@ -4630,8 +4644,13 @@ public: const Type_handler *type_handler() const override { return &type_handler_newdecimal; } + bool val_bool() override + { return decimal_value.to_bool(); } longlong val_int() override - { return decimal_value.to_longlong(unsigned_flag); } + { + DBUG_ASSERT(!is_cond()); + return decimal_value.to_longlong(unsigned_flag); + } double val_real() override { return decimal_value.to_double(); } String *val_str(String *to) override @@ -4680,9 +4699,11 @@ public: const Type_handler *type_handler() const override { return &type_handler_double; } const double *const_ptr_double() const override { return &value; } + bool val_bool() override { return value != 0.0; } double val_real() override { return value; } longlong val_int() override { + DBUG_ASSERT(!is_cond()); if (value <= (double) LONGLONG_MIN) { return LONGLONG_MIN; @@ -4803,6 +4824,7 @@ public: { str_value.print(to); } + bool val_bool() override { return val_real() != 0.0; } double val_real() override; longlong val_int() override; const String *const_ptr_string() const override { return &str_value; } @@ -5062,12 +5084,17 @@ public: const Type_handler *type_handler() const override { return &type_handler_hex_hybrid; } decimal_digits_t decimal_precision() const override; + bool val_bool() override + { + return longlong_from_hex_hybrid(str_value.ptr(), str_value.length()) != 0; + } double val_real() override { return (double) (ulonglong) Item_hex_hybrid::val_int(); } longlong val_int() override { + DBUG_ASSERT(!is_cond()); return longlong_from_hex_hybrid(str_value.ptr(), str_value.length()); } my_decimal *val_decimal(my_decimal *decimal_value) override @@ -5103,8 +5130,13 @@ public: Item_hex_string(THD *thd): Item_hex_constant(thd) {} Item_hex_string(THD *thd, const char *str, size_t str_length): Item_hex_constant(thd, str, str_length) {} + bool val_bool() override + { + return double_from_string_with_check(&str_value) != 0.0; + } longlong val_int() override { + DBUG_ASSERT(!is_cond()); return longlong_from_string_with_check(&str_value); } double val_real() override @@ -5152,8 +5184,13 @@ public: Timestamp_or_zero_datetime_native native(m_value, decimals); return native.save_in_field(field, decimals); } + bool val_bool() override + { + return m_value.to_bool(); + } longlong val_int() override { + DBUG_ASSERT(!is_cond()); return m_value.to_datetime(current_thd).to_longlong(); } double val_real() override @@ -5252,8 +5289,13 @@ public: return cached_time.get_mysql_time(); } Item *clone_item(THD *thd) const override; + bool val_bool() override + { + return update_null() ? false : cached_time.to_bool(); + } longlong val_int() override { + DBUG_ASSERT(!is_cond()); return update_null() ? 0 : cached_time.to_longlong(); } double val_real() override @@ -5302,7 +5344,15 @@ public: return cached_time.get_mysql_time(); } Item *clone_item(THD *thd) const override; - longlong val_int() override { return cached_time.to_longlong(); } + bool val_bool() override + { + return cached_time.to_bool(); + } + longlong val_int() override + { + DBUG_ASSERT(!is_cond()); + return cached_time.to_longlong(); + } double val_real() override { return cached_time.to_double(); } String *val_str(String *to) override { return cached_time.to_string(to, decimals); } @@ -5356,8 +5406,13 @@ public: return cached_time.get_mysql_time(); } Item *clone_item(THD *thd) const override; + bool val_bool() override + { + return update_null() ? false : cached_time.to_bool(); + } longlong val_int() override { + DBUG_ASSERT(!is_cond()); return update_null() ? 0 : cached_time.to_longlong(); } double val_real() override @@ -7266,6 +7321,7 @@ public: { example= item; Type_std_attributes::set(item); + base_flags|= item->base_flags & item_base_t::IS_COND; if (item->type() == FIELD_ITEM) cached_field= ((Item_field *)item)->field; return 0; @@ -7409,6 +7465,27 @@ public: }; +class Item_cache_bool: public Item_cache_int +{ +public: + Item_cache_bool(THD *thd) + :Item_cache_int(thd, &type_handler_bool) + { } + bool cache_value() override; + bool val_bool() override + { + return !has_value() ? false : (bool) value; + } + longlong val_int() override + { + DBUG_ASSERT(!is_cond()); + return Item_cache_bool::val_bool(); + } + Item *do_get_copy(THD *thd) const override + { return get_item_copy(thd, this); } +}; + + class Item_cache_year: public Item_cache_int { public: diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index d1c797ae73b..8bc04d07dfd 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -197,7 +197,7 @@ static uint collect_cmp_types(Item **items, uint nitems, bool skip_nulls= FALSE) NULL if some arg is NULL. */ -longlong Item_func_not::val_int() +bool Item_func_not::val_bool() { DBUG_ASSERT(fixed()); bool value= args[0]->val_bool(); @@ -216,7 +216,7 @@ void Item_func_not::print(String *str, enum_query_type query_type) */ -longlong Item_func_not_all::val_int() +bool Item_func_not_all::val_bool() { DBUG_ASSERT(fixed()); bool value= args[0]->val_bool(); @@ -257,7 +257,7 @@ void Item_func_not_all::print(String *str, enum_query_type query_type) returns some rows it return same value as argument (TRUE/FALSE). */ -longlong Item_func_nop_all::val_int() +bool Item_func_nop_all::val_bool() { DBUG_ASSERT(fixed()); longlong value= args[0]->val_int(); @@ -1246,12 +1246,6 @@ bool Item_func_truth::val_bool() } -longlong Item_func_truth::val_int() -{ - return (val_bool() ? 1 : 0); -} - - bool Item_in_optimizer::is_top_level_item() const { return args[1]->is_top_level_item(); @@ -1646,17 +1640,17 @@ void Item_in_optimizer::get_cache_parameters(List ¶meters) @see Item_is_not_null_test::val_int() */ -longlong Item_in_optimizer::val_int() +bool Item_in_optimizer::val_bool() { bool tmp; DBUG_ASSERT(fixed()); cache->store(args[0]); cache->cache_value(); - DBUG_ENTER(" Item_in_optimizer::val_int"); + DBUG_ENTER(" Item_in_optimizer::val_bool"); if (invisible_mode()) { - longlong res= args[1]->val_int(); + longlong res= args[1]->val_bool(); null_value= args[1]->null_value; DBUG_PRINT("info", ("pass trough")); DBUG_RETURN(res); @@ -1755,7 +1749,7 @@ void Item_in_optimizer::cleanup() bool Item_in_optimizer::is_null() { - val_int(); + val_bool(); return null_value; } @@ -1851,7 +1845,7 @@ bool Item_in_optimizer::is_expensive() } -longlong Item_func_eq::val_int() +bool Item_func_eq::val_bool() { DBUG_ASSERT(fixed()); int value= cmp.compare(); @@ -1879,13 +1873,13 @@ bool Item_func_equal::fix_length_and_dec() return rc; } -longlong Item_func_equal::val_int() +bool Item_func_equal::val_bool() { DBUG_ASSERT(fixed()); return cmp.compare(); } -longlong Item_func_ne::val_int() +bool Item_func_ne::val_bool() { DBUG_ASSERT(fixed()); int value= cmp.compare(); @@ -1893,7 +1887,7 @@ longlong Item_func_ne::val_int() } -longlong Item_func_ge::val_int() +bool Item_func_ge::val_bool() { DBUG_ASSERT(fixed()); int value= cmp.compare(); @@ -1901,14 +1895,14 @@ longlong Item_func_ge::val_int() } -longlong Item_func_gt::val_int() +bool Item_func_gt::val_bool() { DBUG_ASSERT(fixed()); int value= cmp.compare(); return value > 0 ? 1 : 0; } -longlong Item_func_le::val_int() +bool Item_func_le::val_bool() { DBUG_ASSERT(fixed()); int value= cmp.compare(); @@ -1916,7 +1910,7 @@ longlong Item_func_le::val_int() } -longlong Item_func_lt::val_int() +bool Item_func_lt::val_bool() { DBUG_ASSERT(fixed()); int value= cmp.compare(); @@ -4881,7 +4875,7 @@ void Item_func_in::print(String *str, enum_query_type query_type) Value of the function */ -longlong Item_func_in::val_int() +bool Item_func_in::val_bool() { DBUG_ASSERT(fixed()); if (array) @@ -5637,7 +5631,7 @@ void Item_cond_and::mark_as_condition_AND_part(TABLE_LIST *embedding) */ -longlong Item_cond_and::val_int() +bool Item_cond_and::val_bool() { DBUG_ASSERT(fixed()); List_iterator_fast li(list); @@ -5655,7 +5649,7 @@ longlong Item_cond_and::val_int() } -longlong Item_cond_or::val_int() +bool Item_cond_or::val_bool() { DBUG_ASSERT(fixed()); List_iterator_fast li(list); @@ -5732,7 +5726,7 @@ bool Item_func_null_predicate::count_sargable_conds(void *arg) } -longlong Item_func_isnull::val_int() +bool Item_func_isnull::val_bool() { DBUG_ASSERT(fixed()); if (const_item() && !args[0]->maybe_null()) @@ -5765,7 +5759,7 @@ void Item_func_isnull::print(String *str, enum_query_type query_type) } -longlong Item_is_not_null_test::val_int() +bool Item_is_not_null_test::val_bool() { DBUG_ASSERT(fixed()); DBUG_ENTER("Item_is_not_null_test::val_int"); @@ -5793,7 +5787,7 @@ void Item_is_not_null_test::update_used_tables() } -longlong Item_func_isnotnull::val_int() +bool Item_func_isnotnull::val_bool() { DBUG_ASSERT(fixed()); return args[0]->is_null() ? 0 : 1; @@ -5832,7 +5826,7 @@ void Item_func_like::print(String *str, enum_query_type query_type) } -longlong Item_func_like::val_int() +bool Item_func_like::val_bool() { DBUG_ASSERT(fixed()); DBUG_ASSERT(escape != ESCAPE_NOT_INITIALIZED); @@ -6361,7 +6355,7 @@ Item_func_regex::fix_length_and_dec() } -longlong Item_func_regex::val_int() +bool Item_func_regex::val_bool() { DBUG_ASSERT(fixed()); if ((null_value= re.recompile(args[1]))) @@ -6635,7 +6629,7 @@ bool Item_func_like::turboBM_matches(const char* text, int text_len) const very fast to use. */ -longlong Item_func_xor::val_int() +bool Item_func_xor::val_bool() { DBUG_ASSERT(fixed()); int result= 0; @@ -7418,7 +7412,7 @@ bool Item_equal::count_sargable_conds(void *arg) 1 otherwise */ -longlong Item_equal::val_int() +bool Item_equal::val_bool() { if (cond_false) return 0; @@ -7628,7 +7622,7 @@ Item* Item_equal::get_first(JOIN_TAB *context, Item *field_item) } -longlong Item_func_dyncol_check::val_int() +bool Item_func_dyncol_check::val_bool() { char buff[STRING_BUFFER_USUAL_SIZE]; String tmp(buff, sizeof(buff), &my_charset_bin); @@ -7656,7 +7650,7 @@ null: return 0; } -longlong Item_func_dyncol_exists::val_int() +bool Item_func_dyncol_exists::val_bool() { char buff[STRING_BUFFER_USUAL_SIZE], nmstrbuf[11]; String tmp(buff, sizeof(buff), &my_charset_bin), diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index 1b6b05b5da0..d680945826d 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -242,6 +242,12 @@ public: const Type_handler *fixed_type_handler() const override { return &type_handler_bool; } CHARSET_INFO *compare_collation() const override { return NULL; } + longlong val_int() override final + { + DBUG_ASSERT(!is_cond()); + return val_bool(); + } + bool val_bool() override= 0; bool fix_length_and_dec() override { decimals=0; max_length=1; return FALSE; } decimal_digits_t decimal_precision() const override { return 1; } bool need_parentheses_in_default() override { return true; } @@ -257,7 +263,6 @@ class Item_func_truth : public Item_bool_func { public: bool val_bool() override; - longlong val_int() override; bool fix_length_and_dec() override; void print(String *str, enum_query_type query_type) override; enum precedence precedence() const override { return CMP_PRECEDENCE; } @@ -407,7 +412,7 @@ public: bool fix_left(THD *thd); table_map not_null_tables() const override { return 0; } bool is_null() override; - longlong val_int() override; + bool val_bool() override; void cleanup() override; enum Functype functype() const override { return IN_OPTIMIZER_FUNC; } LEX_CSTRING func_name_cstring() const override @@ -638,7 +643,7 @@ public: enum precedence precedence() const override { return XOR_PRECEDENCE; } void print(String *str, enum_query_type query_type) override { Item_func::print_op(str, query_type); } - longlong val_int() override; + bool val_bool() override; bool find_not_null_fields(table_map allowed) override { return false; } Item *neg_transformer(THD *thd) override; Item* propagate_equal_fields(THD *thd, const Context &ctx, COND_EQUAL *cond) override @@ -658,7 +663,7 @@ public: Item_bool_func(thd, a), abort_on_null(FALSE) {} void top_level_item() override { abort_on_null= 1; } bool is_top_level_item() const override { return abort_on_null; } - longlong val_int() override; + bool val_bool() override; enum Functype functype() const override { return NOT_FUNC; } LEX_CSTRING func_name_cstring() const override { @@ -711,7 +716,7 @@ class Item_func_trig_cond: public Item_bool_func public: Item_func_trig_cond(THD *thd, Item *a, bool *f): Item_bool_func(thd, a) { trig_var= f; } - longlong val_int() override { return *trig_var ? args[0]->val_int() : 1; } + bool val_bool() override { return *trig_var ? args[0]->val_bool() : true; } enum Functype functype() const override { return TRIG_COND_FUNC; }; LEX_CSTRING func_name_cstring() const override { @@ -740,7 +745,7 @@ public: Item_func_not(thd, a), test_sum_item(0), test_sub_item(0), show(0) {} table_map not_null_tables() const override { return 0; } - longlong val_int() override; + bool val_bool() override; enum Functype functype() const override { return NOT_ALL_FUNC; } LEX_CSTRING func_name_cstring() const override { @@ -766,7 +771,7 @@ class Item_func_nop_all :public Item_func_not_all public: Item_func_nop_all(THD *thd, Item *a): Item_func_not_all(thd, a) {} - longlong val_int() override; + bool val_bool() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("") }; @@ -786,7 +791,7 @@ public: Item_bool_rowready_func2(thd, a, b), abort_on_null(false), in_equality_no(UINT_MAX) {} - longlong val_int() override; + bool val_bool() override; enum Functype functype() const override { return EQ_FUNC; } enum Functype rev_functype() const override { return EQ_FUNC; } cond_result eq_cmp_result() const override { return COND_TRUE; } @@ -828,7 +833,7 @@ class Item_func_equal final :public Item_bool_rowready_func2 public: Item_func_equal(THD *thd, Item *a, Item *b): Item_bool_rowready_func2(thd, a, b) {} - longlong val_int() override; + bool val_bool() override; bool fix_length_and_dec() override; table_map not_null_tables() const override { return 0; } bool find_not_null_fields(table_map allowed) override { return false; } @@ -858,7 +863,7 @@ class Item_func_ge :public Item_bool_rowready_func2 public: Item_func_ge(THD *thd, Item *a, Item *b): Item_bool_rowready_func2(thd, a, b) {}; - longlong val_int() override; + bool val_bool() override; enum Functype functype() const override { return GE_FUNC; } enum Functype rev_functype() const override { return LE_FUNC; } cond_result eq_cmp_result() const override { return COND_TRUE; } @@ -878,7 +883,7 @@ class Item_func_gt :public Item_bool_rowready_func2 public: Item_func_gt(THD *thd, Item *a, Item *b): Item_bool_rowready_func2(thd, a, b) {}; - longlong val_int() override; + bool val_bool() override; enum Functype functype() const override { return GT_FUNC; } enum Functype rev_functype() const override { return LT_FUNC; } cond_result eq_cmp_result() const override { return COND_FALSE; } @@ -898,7 +903,7 @@ class Item_func_le :public Item_bool_rowready_func2 public: Item_func_le(THD *thd, Item *a, Item *b): Item_bool_rowready_func2(thd, a, b) {}; - longlong val_int() override; + bool val_bool() override; enum Functype functype() const override { return LE_FUNC; } enum Functype rev_functype() const override { return GE_FUNC; } cond_result eq_cmp_result() const override { return COND_TRUE; } @@ -918,7 +923,7 @@ class Item_func_lt :public Item_bool_rowready_func2 public: Item_func_lt(THD *thd, Item *a, Item *b): Item_bool_rowready_func2(thd, a, b) {} - longlong val_int() override; + bool val_bool() override; enum Functype functype() const override { return LT_FUNC; } enum Functype rev_functype() const override { return GT_FUNC; } cond_result eq_cmp_result() const override { return COND_FALSE; } @@ -941,7 +946,7 @@ protected: public: Item_func_ne(THD *thd, Item *a, Item *b): Item_bool_rowready_func2(thd, a, b) {} - longlong val_int() override; + bool val_bool() override; enum Functype functype() const override { return NE_FUNC; } enum Functype rev_functype() const override { return NE_FUNC; } cond_result eq_cmp_result() const override { return COND_FALSE; } @@ -1015,7 +1020,7 @@ public: String value0,value1,value2; Item_func_between(THD *thd, Item *a, Item *b, Item *c): Item_func_opt_neg(thd, a, b, c) { } - longlong val_int() override + bool val_bool() override { DBUG_ASSERT(fixed()); return m_comparator.type_handler()->Item_func_between_val_int(this); @@ -2570,7 +2575,7 @@ public: array(0), have_null(0), arg_types_compatible(FALSE), emb_on_expr_nest(0) { } - longlong val_int() override; + bool val_bool() override; bool fix_fields(THD *, Item **) override; bool fix_length_and_dec() override; bool compatible_types_scalar_bisection_possible() @@ -2764,7 +2769,7 @@ class Item_func_isnull :public Item_func_null_predicate { public: Item_func_isnull(THD *thd, Item *a): Item_func_null_predicate(thd, a) {} - longlong val_int() override; + bool val_bool() override; enum Functype functype() const override { return ISNULL_FUNC; } LEX_CSTRING func_name_cstring() const override { @@ -2828,7 +2833,7 @@ public: Item_func_isnull(thd, a), owner(ow) {} enum Functype functype() const override { return ISNOTNULLTEST_FUNC; } - longlong val_int() override; + bool val_bool() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("") }; @@ -2851,7 +2856,7 @@ public: Item_func_isnotnull(THD *thd, Item *a): Item_func_null_predicate(thd, a), abort_on_null(0) { } - longlong val_int() override; + bool val_bool() override; enum Functype functype() const override { return ISNOTNULL_FUNC; } LEX_CSTRING func_name_cstring() const override { @@ -2916,7 +2921,7 @@ public: bool get_negated() const { return negated; } // Used by ColumnStore Sql_mode_dependency value_depends_on_sql_mode() const override; - longlong val_int() override; + bool val_bool() override; enum Functype functype() const override { return LIKE_FUNC; } void print(String *str, enum_query_type query_type) override; CHARSET_INFO *compare_collation() const override @@ -3116,7 +3121,7 @@ public: re.cleanup(); DBUG_VOID_RETURN; } - longlong val_int() override; + bool val_bool() override; bool fix_length_and_dec() override; LEX_CSTRING func_name_cstring() const override { @@ -3424,7 +3429,7 @@ public: bool only_intersected); void update_const(THD *thd); enum Functype functype() const override { return MULT_EQUAL_FUNC; } - longlong val_int() override; + bool val_bool() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("multiple equal") }; @@ -3605,7 +3610,7 @@ public: Item_cond_and(THD *thd, Item_cond_and *item): Item_cond(thd, item) {} Item_cond_and(THD *thd, List &list_arg): Item_cond(thd, list_arg) {} enum Functype functype() const override { return COND_AND_FUNC; } - longlong val_int() override; + bool val_bool() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("and") }; @@ -3645,7 +3650,7 @@ public: Item_cond_or(THD *thd, Item_cond_or *item): Item_cond(thd, item) {} Item_cond_or(THD *thd, List &list_arg): Item_cond(thd, list_arg) {} enum Functype functype() const override { return COND_OR_FUNC; } - longlong val_int() override; + bool val_bool() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("or") }; @@ -3663,7 +3668,7 @@ class Item_func_dyncol_check :public Item_bool_func { public: Item_func_dyncol_check(THD *thd, Item *str): Item_bool_func(thd, str) {} - longlong val_int() override; + bool val_bool() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("column_check") }; @@ -3679,7 +3684,7 @@ class Item_func_dyncol_exists :public Item_bool_func public: Item_func_dyncol_exists(THD *thd, Item *str, Item *num): Item_bool_func(thd, str, num) {} - longlong val_int() override; + bool val_bool() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("column_exists") }; @@ -3718,7 +3723,7 @@ public: static LEX_CSTRING name= {STRING_WITH_LEN("%ISOPEN") }; return name; } - longlong val_int() override; + bool val_bool() override; Item *do_get_copy(THD *thd) const override { return get_item_copy(thd, this); } }; @@ -3737,7 +3742,7 @@ public: static LEX_CSTRING name= {STRING_WITH_LEN("%FOUND") }; return name; } - longlong val_int() override; + bool val_bool() override; Item *do_get_copy(THD *thd) const override { return get_item_copy(thd, this); } }; @@ -3756,7 +3761,7 @@ public: static LEX_CSTRING name= {STRING_WITH_LEN("%NOTFOUND") }; return name; } - longlong val_int() override; + bool val_bool() override; Item *do_get_copy(THD *thd) const override { return get_item_copy(thd, this); } }; diff --git a/sql/item_func.cc b/sql/item_func.cc index 02e9798b6db..6959d6f72a4 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -7031,7 +7031,7 @@ sp_cursor *Cursor_ref::get_open_cursor_or_error() } -longlong Item_func_cursor_isopen::val_int() +bool Item_func_cursor_isopen::val_bool() { sp_cursor *c= current_thd->spcont->get_cursor(m_cursor_offset); DBUG_ASSERT(c != NULL); @@ -7039,14 +7039,14 @@ longlong Item_func_cursor_isopen::val_int() } -longlong Item_func_cursor_found::val_int() +bool Item_func_cursor_found::val_bool() { sp_cursor *c= get_open_cursor_or_error(); return !(null_value= (!c || c->fetch_count() == 0)) && c->found(); } -longlong Item_func_cursor_notfound::val_int() +bool Item_func_cursor_notfound::val_bool() { sp_cursor *c= get_open_cursor_or_error(); return !(null_value= (!c || c->fetch_count() == 0)) && !c->found(); diff --git a/sql/item_func.h b/sql/item_func.h index bf3582ded03..db9dc5d2766 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -462,7 +462,7 @@ public: void convert_const_compared_to_int_field(THD *thd); Item_func *get_item_func() override { return this; } bool is_simplified_cond_processor(void *) override - { return const_item() && !val_int(); } + { return const_item() && !val_bool(); } }; @@ -974,6 +974,7 @@ public: } longlong val_int() override { + DBUG_ASSERT(!is_cond()); DBUG_ASSERT(fixed()); return Item_func_hybrid_field_type::type_handler()-> Item_func_hybrid_field_type_val_int(this); diff --git a/sql/item_geofunc.cc b/sql/item_geofunc.cc index b286039c30f..893f9253d94 100644 --- a/sql/item_geofunc.cc +++ b/sql/item_geofunc.cc @@ -1153,7 +1153,7 @@ LEX_CSTRING Item_func_spatial_mbr_rel::func_name_cstring() const } -longlong Item_func_spatial_mbr_rel::val_int() +bool Item_func_spatial_mbr_rel::val_bool() { DBUG_ASSERT(fixed()); String *res1= args[0]->val_str(&tmp_value1); @@ -1361,7 +1361,7 @@ public: }; -longlong Item_func_spatial_relate::val_int() +bool Item_func_spatial_relate::val_bool() { DBUG_ENTER("Item_func_spatial_relate::val_int"); DBUG_ASSERT(fixed()); @@ -1398,7 +1398,7 @@ exit: } -longlong Item_func_spatial_precise_rel::val_int() +bool Item_func_spatial_precise_rel::val_bool() { DBUG_ENTER("Item_func_spatial_precise_rel::val_int"); DBUG_ASSERT(fixed()); @@ -2061,7 +2061,7 @@ mem_error: } -longlong Item_func_isempty::val_int() +bool Item_func_isempty::val_bool() { DBUG_ASSERT(fixed()); String tmp; diff --git a/sql/item_geofunc.h b/sql/item_geofunc.h index e13900df335..50938cc4913 100644 --- a/sql/item_geofunc.h +++ b/sql/item_geofunc.h @@ -792,7 +792,7 @@ public: Item_func_spatial_mbr_rel(THD *thd, Item *a, Item *b, enum Functype sp_rel): Item_func_spatial_rel(thd, a, b, sp_rel) { } - longlong val_int() override; + bool val_bool() override; LEX_CSTRING func_name_cstring() const override; Item *do_get_copy(THD *thd) const override { return get_item_copy(thd, this); } @@ -808,7 +808,7 @@ public: Item_func_spatial_precise_rel(THD *thd, Item *a, Item *b, enum Functype sp_rel): Item_func_spatial_rel(thd, a, b, sp_rel), collector() { } - longlong val_int() override; + bool val_bool() override; LEX_CSTRING func_name_cstring() const override; Item *do_get_copy(THD *thd) const override { return get_item_copy(thd, this); } @@ -830,7 +830,7 @@ public: Item_func_spatial_relate(THD *thd, Item *a, Item *b, Item *matrix): Item_bool_func_args_geometry_geometry(thd, a, b, matrix) { } - longlong val_int() override; + bool val_bool() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_relate") }; @@ -945,7 +945,7 @@ class Item_func_isempty: public Item_bool_func_args_geometry public: Item_func_isempty(THD *thd, Item *a) :Item_bool_func_args_geometry(thd, a) {} - longlong val_int() override; + bool val_bool() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("st_isempty") }; diff --git a/sql/item_jsonfunc.cc b/sql/item_jsonfunc.cc index 3755b880247..9104d8263f2 100644 --- a/sql/item_jsonfunc.cc +++ b/sql/item_jsonfunc.cc @@ -525,7 +525,7 @@ static int path_setup_nwc(json_path_t *p, CHARSET_INFO *i_cs, } -longlong Item_func_json_valid::val_int() +bool Item_func_json_valid::val_bool() { String *js= args[0]->val_json(&tmp_value); @@ -546,7 +546,7 @@ bool Item_func_json_exists::fix_length_and_dec() } -longlong Item_func_json_exists::val_int() +bool Item_func_json_exists::val_bool() { json_engine_t je; uint array_counters[JSON_DEPTH_LIMIT]; @@ -1342,7 +1342,7 @@ static int check_contains(json_engine_t *js, json_engine_t *value) } -longlong Item_func_json_contains::val_int() +bool Item_func_json_contains::val_bool() { String *js= args[0]->val_json(&tmp_js); json_engine_t je, ve; @@ -1557,7 +1557,7 @@ return_null: } #endif /*DUMMY*/ -longlong Item_func_json_contains_path::val_int() +bool Item_func_json_contains_path::val_bool() { String *js= args[0]->val_json(&tmp_js); json_engine_t je; diff --git a/sql/item_jsonfunc.h b/sql/item_jsonfunc.h index 8c256e01ab4..58402376426 100644 --- a/sql/item_jsonfunc.h +++ b/sql/item_jsonfunc.h @@ -82,7 +82,7 @@ protected: public: Item_func_json_valid(THD *thd, Item *json) : Item_bool_func(thd, json) {} - longlong val_int() override; + bool val_bool() override; LEX_CSTRING func_name_cstring() const override { static LEX_CSTRING name= {STRING_WITH_LEN("json_valid") }; @@ -124,7 +124,7 @@ public: bool fix_length_and_dec() override; Item *do_get_copy(THD *thd) const override { return get_item_copy(thd, this); } - longlong val_int() override; + bool val_bool() override; }; @@ -313,7 +313,7 @@ public: return name; } bool fix_length_and_dec() override; - longlong val_int() override; + bool val_bool() override; Item *do_get_copy(THD *thd) const override { return get_item_copy(thd, this); } }; @@ -340,7 +340,7 @@ public: } bool fix_fields(THD *thd, Item **ref) override; bool fix_length_and_dec() override; - longlong val_int() override; + bool val_bool() override; Item *do_get_copy(THD *thd) const override { return get_item_copy(thd, this); } }; diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 9b121094d06..efcacd0cba0 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -150,6 +150,7 @@ double Item_str_func::val_real() longlong Item_str_func::val_int() { + DBUG_ASSERT(!is_cond()); DBUG_ASSERT(fixed()); StringBuffer<22> tmp; String *res= val_str(&tmp); diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index ed99c857aaf..7683550a1f8 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -4220,7 +4220,7 @@ int subselect_uniquesubquery_engine::scan_table() } } - if (!cond || cond->val_int()) + if (!cond || cond->val_bool()) { empty_result_set= FALSE; break; @@ -4530,7 +4530,7 @@ int subselect_indexsubquery_engine::exec() table->null_row= 0; if (!table->status) { - if ((!cond || cond->val_int()) && (!having || having->val_int())) + if ((!cond || cond->val_bool()) && (!having || having->val_bool())) { empty_result_set= FALSE; if (null_finding) diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h index 2a2d3c51811..bebb0f213f7 100644 --- a/sql/item_timefunc.h +++ b/sql/item_timefunc.h @@ -650,7 +650,10 @@ public: const Type_handler *type_handler() const override { return &type_handler_newdate; } longlong val_int() override - { return Date(this).to_longlong(); } + { + DBUG_ASSERT(!is_cond()); + return Date(this).to_longlong(); + } double val_real() override { return Date(this).to_double(); } String *val_str(String *to) override @@ -676,7 +679,10 @@ public: const Type_handler *type_handler() const override { return &type_handler_time2; } longlong val_int() override - { return Time(this).to_longlong(); } + { + DBUG_ASSERT(!is_cond()); + return Time(this).to_longlong(); + } double val_real() override { return Time(this).to_double(); } String *val_str(String *to) override @@ -698,7 +704,11 @@ public: Item_func(thd, a, b ,c) {} const Type_handler *type_handler() const override { return &type_handler_datetime2; } - longlong val_int() override { return Datetime(this).to_longlong(); } + longlong val_int() override + { + DBUG_ASSERT(!is_cond()); + return Datetime(this).to_longlong(); + } double val_real() override { return Datetime(this).to_double(); } String *val_str(String *to) override { return Datetime(this).to_string(to, decimals); } diff --git a/sql/item_vers.cc b/sql/item_vers.cc index 3f648cde890..b806b8da78b 100644 --- a/sql/item_vers.cc +++ b/sql/item_vers.cc @@ -179,8 +179,8 @@ Item_func_trt_trx_sees::Item_func_trt_trx_sees(THD *thd, Item* a, Item* b) : DBUG_ASSERT(arg_count == 2 && args[0] && args[1]); } -longlong -Item_func_trt_trx_sees::val_int() +bool +Item_func_trt_trx_sees::val_bool() { THD *thd= current_thd; DBUG_ASSERT(thd); diff --git a/sql/item_vers.h b/sql/item_vers.h index 42a5f0faec5..47df8a1f70d 100644 --- a/sql/item_vers.h +++ b/sql/item_vers.h @@ -34,7 +34,6 @@ public: } bool val_bool() override; - longlong val_int() override { return val_bool(); } bool fix_length_and_dec() override { set_maybe_null(); @@ -126,7 +125,7 @@ public: static LEX_CSTRING name= {STRING_WITH_LEN("trt_trx_sees") }; return name; } - longlong val_int() override; + bool val_bool() override; Item *do_get_copy(THD *thd) const override { return get_item_copy(thd, this); } }; diff --git a/sql/item_xmlfunc.cc b/sql/item_xmlfunc.cc index 906ff0121ff..3f7ce4db569 100644 --- a/sql/item_xmlfunc.cc +++ b/sql/item_xmlfunc.cc @@ -425,7 +425,7 @@ public: { return { STRING_WITH_LEN("xpath_cast_bool") }; } - longlong val_int() override + bool val_bool() override { if (args[0]->fixed_type_handler() == &type_handler_xpath_nodeset) { @@ -623,7 +623,7 @@ public: DBUG_ASSERT(0); return NULL; } - longlong val_int() override + bool val_bool() override { Item_func *comp= (Item_func*)args[1]; Item_string_xml_non_const *fake= diff --git a/sql/opt_range.cc b/sql/opt_range.cc index edf09ca4b47..012d9ab8feb 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -8564,7 +8564,7 @@ SEL_TREE *Item::get_mm_tree_for_const(RANGE_OPT_PARAM *param) param->thd->mem_root= param->old_root; SEL_TREE *tree; - const SEL_TREE::Type type= val_int()? SEL_TREE::ALWAYS: SEL_TREE::IMPOSSIBLE; + const SEL_TREE::Type type= val_bool()? SEL_TREE::ALWAYS: SEL_TREE::IMPOSSIBLE; param->thd->mem_root= tmp_root; tree= new (tmp_root) SEL_TREE(type, tmp_root, param->keys); diff --git a/sql/opt_range.h b/sql/opt_range.h index b9792ad5f38..636a980ceed 100644 --- a/sql/opt_range.h +++ b/sql/opt_range.h @@ -1731,13 +1731,13 @@ class SQL_SELECT :public Sql_alloc { /* RETURN - 0 if record must be skipped <-> (cond && cond->val_int() == 0) + 0 if record must be skipped <-> (cond && cond->val_bool() == false) -1 if error 1 otherwise */ inline int skip_record(THD *thd) { - int rc= MY_TEST(!cond || cond->val_int()); + int rc= MY_TEST(!cond || cond->val_bool()); if (thd->is_error()) rc= -1; return rc; diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc index 627ddc86abd..5a9c9282df7 100644 --- a/sql/opt_sum.cc +++ b/sql/opt_sum.cc @@ -1063,7 +1063,7 @@ static int maxmin_in_range(bool max_fl, Field* field, COND *cond) bool less_fl= 0; switch (((Item_func*) cond)->functype()) { case Item_func::BETWEEN: - return cond->val_int() == 0; // Return 1 if WHERE is false + return cond->val_bool() == false; // Return 1 if WHERE is false case Item_func::LT_FUNC: case Item_func::LE_FUNC: less_fl= 1; @@ -1082,7 +1082,7 @@ static int maxmin_in_range(bool max_fl, Field* field, COND *cond) SELECT MAX(b) FROM t1 WHERE a=const AND bval_int() == 0; // Return 1 if WHERE is false + return cond->val_bool() == false; // Return 1 if WHERE is false return 0; } default: diff --git a/sql/set_var.cc b/sql/set_var.cc index 3dd97527433..15c07b969af 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -1112,7 +1112,7 @@ int fill_sysvars(THD *thd, TABLE_LIST *tables, COND *cond) fields[0]->store(name_buffer, strlen(name_buffer), scs); if ((wild && wild_case_compare(system_charset_info, name_buffer, wild)) - || (cond && !cond->val_int())) + || (cond && !cond->val_bool())) continue; mysql_mutex_lock(&LOCK_global_system_variables); diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 32c7aae01a0..d17af093897 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -437,10 +437,10 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, DBUG_RETURN(TRUE); } - const_cond_result= const_cond && (!conds || conds->val_int()); + const_cond_result= const_cond && (!conds || conds->val_bool()); if (unlikely(thd->is_error())) { - /* Error evaluating val_int(). */ + /* Error evaluating val_bool(). */ DBUG_RETURN(TRUE); } diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc index 4a53b11c9af..2158758eca5 100644 --- a/sql/sql_handler.cc +++ b/sql/sql_handler.cc @@ -989,7 +989,7 @@ retry: } goto ok; } - if (cond && !cond->val_int()) + if (cond && !cond->val_bool()) { if (thd->is_error()) goto err; diff --git a/sql/sql_join_cache.cc b/sql/sql_join_cache.cc index 2ee6317123b..53a8145f661 100644 --- a/sql/sql_join_cache.cc +++ b/sql/sql_join_cache.cc @@ -4564,7 +4564,7 @@ bool JOIN_CACHE_BKA::skip_index_tuple(range_id_t range_info) { DBUG_ENTER("JOIN_CACHE_BKA::skip_index_tuple"); get_record_by_pos((uchar*)range_info); - DBUG_RETURN(!join_tab->cache_idx_cond->val_int()); + DBUG_RETURN(!join_tab->cache_idx_cond->val_bool()); } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 2ebc734a39f..fad30ead822 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -9190,7 +9190,11 @@ Item *normalize_cond(THD *thd, Item *cond) Item::Type type= cond->type(); if (type == Item::FIELD_ITEM || type == Item::REF_ITEM) { + item_base_t is_cond_flag= cond->base_flags & item_base_t::IS_COND; + cond->base_flags&= ~item_base_t::IS_COND; cond= new (thd->mem_root) Item_func_ne(thd, cond, new (thd->mem_root) Item_int(thd, 0)); + if (cond) + cond->base_flags|= is_cond_flag; } else { diff --git a/sql/sql_select.cc b/sql/sql_select.cc index a25c88dfa54..528fe545f64 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -3212,7 +3212,7 @@ int JOIN::optimize_stage2() having->update_used_tables(); if (having->const_item() && !having->is_expensive()) { - if (!having->val_int()) + if (!having->val_bool()) { having= const_cast(&Item_false); zero_result_cause= "Impossible HAVING noticed after reading const tables"; @@ -4791,8 +4791,8 @@ void JOIN::exec_inner() DBUG_ASSERT(error == 0); if (cond_value != Item::COND_FALSE && having_value != Item::COND_FALSE && - (!conds || conds->val_int()) && - (!having || having->val_int())) + (!conds || conds->val_bool()) && + (!having || having->val_bool())) { if (do_send_rows && (procedure ? (procedure->send_row(procedure_fields_list) || @@ -4825,11 +4825,11 @@ void JOIN::exec_inner() */ if (!zero_result_cause && exec_const_cond && !(select_options & SELECT_DESCRIBE) && - !exec_const_cond->val_int()) + !exec_const_cond->val_bool()) zero_result_cause= "Impossible WHERE noticed after reading const tables"; /* - We've called exec_const_cond->val_int(). This may have caused an error. + We've called exec_const_cond->val_bool(). This may have caused an error. */ if (unlikely(thd->is_error())) { @@ -12846,7 +12846,7 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond) bool const_cond_result; { Json_writer_array a(thd, "computing_condition"); - const_cond_result= const_cond->val_int() != 0; + const_cond_result= const_cond->val_bool() != 0; } if (!const_cond_result) { @@ -15992,7 +15992,7 @@ return_zero_rows(JOIN *join, select_result *result, List *tables, join->no_rows_in_result_called= 1; while ((item= it++)) item->no_rows_in_result(); - if (having && having->val_int() == 0) + if (having && having->val_bool() == false) send_row=0; } @@ -17338,6 +17338,7 @@ Item *eliminate_item_equal(THD *thd, COND *cond, COND_EQUAL *upper_levels, return 0; eq_item->eval_not_null_tables(0); eq_item->quick_fix_field(); + eq_item->base_flags|= item_base_t::IS_COND; } current_sjm= field_sjm; } @@ -21780,7 +21781,7 @@ do_select(JOIN *join, Procedure *procedure) sufficient to check only the condition pseudo_bits_cond. */ DBUG_ASSERT(join->outer_ref_cond == NULL); - if (!join->pseudo_bits_cond || join->pseudo_bits_cond->val_int()) + if (!join->pseudo_bits_cond || join->pseudo_bits_cond->val_bool()) { // HAVING will be checked by end_select error= (*end_select)(join, 0, 0); @@ -21841,7 +21842,7 @@ do_select(JOIN *join, Procedure *procedure) JOIN_TAB *join_tab= join->join_tab + (join->tables_list ? join->const_tables : 0); - if (join->outer_ref_cond && !join->outer_ref_cond->val_int()) + if (join->outer_ref_cond && !join->outer_ref_cond->val_bool()) error= NESTED_LOOP_NO_MORE_ROWS; else error= join->first_select(join,join_tab,0); @@ -22419,7 +22420,7 @@ evaluate_join_record(JOIN *join, JOIN_TAB *join_tab, if (select_cond) { - select_cond_result= MY_TEST(select_cond->val_int()); + select_cond_result= MY_TEST(select_cond->val_bool()); /* check for errors evaluating the condition */ if (unlikely(join->thd->is_error())) @@ -22815,7 +22816,7 @@ join_read_const_table(THD *thd, JOIN_TAB *tab, POSITION *pos) (*tab->on_expr_ref)->update_used_tables(); DBUG_ASSERT((*tab->on_expr_ref)->const_item()); #endif - if ((table->null_row= MY_TEST((*tab->on_expr_ref)->val_int() == 0))) + if ((table->null_row= MY_TEST((*tab->on_expr_ref)->val_bool() == 0))) mark_as_null_row(table); } if (!table->null_row && ! tab->join->mixed_implicit_grouping) @@ -23571,7 +23572,7 @@ end_send(JOIN *join, JOIN_TAB *join_tab, bool end_of_records) /* Copy non-aggregated fields when loose index scan is used. */ copy_fields(&join->tmp_table_param); } - if (join->having && join->having->val_int() == 0) + if (join->having && join->having->val_bool() == 0) DBUG_RETURN(NESTED_LOOP_OK); // Didn't match having if (join->procedure) { @@ -23762,7 +23763,7 @@ end_send_group(JOIN *join, JOIN_TAB *join_tab, bool end_of_records) while ((item= it++)) item->no_rows_in_result(); } - if (join->having && join->having->val_int() == 0) + if (join->having && join->having->val_bool() == 0)// TODO: tests error= -1; // Didn't satisfy having else { @@ -23872,7 +23873,7 @@ end_write(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)), if (copy_funcs(join_tab->tmp_table_param->items_to_copy, join->thd)) DBUG_RETURN(NESTED_LOOP_ERROR); /* purecov: inspected */ - if (likely(!join_tab->having || join_tab->having->val_int())) + if (likely(!join_tab->having || join_tab->having->val_bool())) { int error; join->found_records++; @@ -24123,7 +24124,7 @@ end_write_group(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)), } copy_sum_funcs(join->sum_funcs, join->sum_funcs_end[send_group_parts]); - if (!join_tab->having || join_tab->having->val_int()) + if (!join_tab->having || join_tab->having->val_bool()) { int error= table->file->ha_write_tmp_row(table->record[0]); if (unlikely(error) && @@ -26126,7 +26127,7 @@ static int remove_dup_with_compare(THD *thd, TABLE *table, Field **first_field, break; goto err; } - if (having && !having->val_int()) + if (having && !having->val_bool()) { if (unlikely((error= file->ha_delete_row(record)))) goto err; @@ -26264,7 +26265,7 @@ static int remove_dup_with_hash_index(THD *thd, TABLE *table, break; goto err; } - if (having && !having->val_int()) + if (having && !having->val_bool()) { if (unlikely((error= file->ha_delete_row(record)))) goto err; @@ -28401,7 +28402,7 @@ int JOIN::rollup_send_data(uint idx) int res= 0; /* Get reference pointers to sum functions in place */ copy_ref_ptr_array(ref_ptrs, rollup.ref_pointer_arrays[i]); - if ((!having || having->val_int())) + if ((!having || having->val_bool())) { if (send_records < unit->lim.get_select_limit() && do_send_rows && (res= result->send_data_with_check(rollup.fields[i], diff --git a/sql/sql_show.cc b/sql/sql_show.cc index e66f948c3a3..f323b42a84f 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -3832,7 +3832,7 @@ static bool show_status_array(THD *thd, const char *wild, if ((wild_checked || !(wild && wild[0] && wild_case_compare(system_charset_info, name_buffer, wild))) && - (!cond || cond->val_int())) + (!cond || cond->val_bool())) { const char *pos; // We assign a lot of const's size_t length; @@ -5315,7 +5315,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond) table->field[schema_table->idx_field2]-> store(table_name->str, table_name->length, system_charset_info); - if (!partial_cond || partial_cond->val_int()) + if (!partial_cond || partial_cond->val_bool()) { /* If table is I_S.tables and open_table_method is 0 (eg SKIP_OPEN) @@ -8148,7 +8148,7 @@ int fill_status(THD *thd, TABLE_LIST *tables, COND *cond) COND *partial_cond= make_cond_for_info_schema(thd, cond, tables); // Evaluate and cache const subqueries now, before the mutex. if (partial_cond) - partial_cond->val_int(); + partial_cond->val_bool(); tmp.local_memory_used= 0; // meaning tmp was not populated yet diff --git a/sql/sql_type.cc b/sql/sql_type.cc index 1928090292b..f09fd14ff68 100644 --- a/sql/sql_type.cc +++ b/sql/sql_type.cc @@ -4363,6 +4363,13 @@ int Type_handler_int_result::Item_save_in_field(Item *item, Field *field, } +int Type_handler_bool::Item_save_in_field(Item *item, Field *field, + bool no_conversions) const +{ + return item->save_bool_in_field(field, no_conversions); +} + + /***********************************************************************/ bool Type_handler_row:: @@ -4523,6 +4530,12 @@ Type_handler_int_result::Item_get_cache(THD *thd, const Item *item) const return new (thd->mem_root) Item_cache_int(thd, item->type_handler()); } +Item_cache * +Type_handler_bool::Item_get_cache(THD *thd, const Item *item) const +{ + return new (thd->mem_root) Item_cache_bool(thd); +} + Item_cache * Type_handler_year::Item_get_cache(THD *thd, const Item *item) const { @@ -5153,7 +5166,22 @@ bool Type_handler_real_result::Item_val_bool(Item *item) const bool Type_handler_int_result::Item_val_bool(Item *item) const { - return item->val_int() != 0; + /* + Some Item descendants have DBUG_ASSERT(!is_cond()) is their + val_int() implementations, which means val_int() must not be used + to evaluate a condition: val_bool() must be used instead. + If we come here, it means item's class does not override val_bool() + and we need to evaluate the boolean value from the integer value + as a fall-back method. To avoid the assert, let's hide the IS_COND flag. + Eventually we'll need to implement val_bool() in all Item descendants and + remove the trick with flags. This change would be too ricky for 10.6. + Let's do it in a later version. + */ + item_base_t flags= item->base_flags; + item->base_flags &= ~item_base_t::IS_COND; + bool rc= item->val_int() != 0; + item->base_flags= flags; + return rc; } bool Type_handler_temporal_result::Item_val_bool(Item *item) const diff --git a/sql/sql_type.h b/sql/sql_type.h index b593c9aa053..b99a624d9ac 100644 --- a/sql/sql_type.h +++ b/sql/sql_type.h @@ -1964,6 +1964,11 @@ public: { return neg ? -to_seconds_abs() : to_seconds_abs(); } + bool to_bool() const + { + return is_valid_time() && + (TIME_to_ulonglong_time(this) != 0 || second_part != 0); + } longlong to_longlong() const { if (!is_valid_time()) @@ -2324,6 +2329,10 @@ public: DBUG_ASSERT(is_valid_date_slow()); return Temporal::to_packed(); } + bool to_bool() const + { + return to_longlong() != 0; + } longlong to_longlong() const { return is_valid_date() ? (longlong) TIME_to_ulonglong_date(this) : 0LL; @@ -2629,6 +2638,11 @@ public: ltime->time_type= type; return false; } + bool to_bool() const + { + return is_valid_datetime() && + (TIME_to_ulonglong_datetime(this) != 0 || second_part != 0); + } longlong to_longlong() const { return is_valid_datetime() ? @@ -2857,6 +2871,10 @@ public: return Datetime::zero(); return Timestamp::to_datetime(thd); } + bool to_bool() const + { + return !m_is_zero_datetime; + } bool is_zero_datetime() const { return m_is_zero_datetime; } void trunc(uint decimals) { @@ -5840,6 +5858,9 @@ public: const Type_handler *type_handler_signed() const override; void Item_update_null_value(Item *item) const override; bool Item_sum_hybrid_fix_length_and_dec(Item_sum_hybrid *) const override; + Item_cache *Item_get_cache(THD *thd, const Item *item) const override; + int Item_save_in_field(Item *item, Field *field, bool no_conversions) + const override; }; diff --git a/sql/sql_type_fixedbin.h b/sql/sql_type_fixedbin.h index 4755a38e85e..995d255fa14 100644 --- a/sql/sql_type_fixedbin.h +++ b/sql/sql_type_fixedbin.h @@ -253,6 +253,10 @@ public: { return singleton(); } + bool val_bool() override + { + return m_value.to_bool(); + } longlong val_int() override { return 0; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 9a21a93c788..67a702f8969 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1483,6 +1483,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize); %type literal insert_ident order_ident temporal_literal simple_ident expr sum_expr in_sum_expr + search_condition variable variable_aux boolean_test predicate bit_expr parenthesized_expr @@ -4210,6 +4211,7 @@ simple_when_clause: searched_when_clause: WHEN_SYM expr_lex { + $2->get_item()->base_flags|= item_base_t::IS_COND; if (unlikely($2->case_stmt_action_when(false))) MYSQL_YYABORT; } @@ -9408,6 +9410,10 @@ optional_braces: | '(' ')' {} ; +search_condition: + expr { ($$= $1)->base_flags|= item_base_t::IS_COND ; } + ; + /* all possible expressions */ expr: expr or expr %prec OR_SYM @@ -11867,7 +11873,7 @@ join_table: MYSQL_YYABORT; Select->parsing_place= IN_ON; } - expr + search_condition { add_join_on(thd, $5, $8); $5->on_context= Lex->pop_context(); @@ -12224,7 +12230,7 @@ opt_where_clause: { Select->parsing_place= IN_WHERE; } - expr + search_condition { SELECT_LEX *select= Select; select->where= normalize_cond(thd, $3); @@ -12240,7 +12246,7 @@ opt_having_clause: { Select->parsing_place= IN_HAVING; } - expr + search_condition { SELECT_LEX *sel= Select; sel->having= normalize_cond(thd, $3); @@ -14359,7 +14365,7 @@ wild_and_where: MYSQL_YYABORT; $$= $2; } - | WHERE remember_tok_start expr + | WHERE remember_tok_start search_condition { Select->where= normalize_cond(thd, $3); if ($3) diff --git a/sql/table.cc b/sql/table.cc index b4e961677a9..6535c342521 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -6416,7 +6416,7 @@ int TABLE_LIST::view_check_option(THD *thd, bool ignore_failure) /* VIEW's CHECK OPTION CLAUSE */ Counting_error_handler ceh; thd->push_internal_handler(&ceh); - bool res= check_option->val_int() == 0; + bool res= check_option->val_bool() == false; thd->pop_internal_handler(); if (ceh.errors) return(VIEW_CHECK_ERROR); @@ -6459,7 +6459,7 @@ int TABLE::verify_constraints(bool ignore_failure) yes! NULL is ok. see 4.23.3.4 Table check constraints, part 2, SQL:2016 */ - if (((*chk)->expr->val_int() == 0 && !(*chk)->expr->null_value) || + if (((*chk)->expr->val_bool() == false && !(*chk)->expr->null_value) || in_use->is_error()) { enum_vcol_info_type vcol_type= (*chk)->get_vcol_type(); From 5b940bdcfc34126301969a5dda448da890b4564d Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Tue, 8 Oct 2024 13:08:10 +0300 Subject: [PATCH 010/121] MDEV-25060 Freeing overrun buffer, various crashes, ASAN heap-buffer-overflow in _mi_put_key_in_record Rec buffer size depends on vreclength like this: length= MY_MAX(length, info->s->vreclength); The problem is rec buffer is allocated before vreclength is calculated. The fix reallocates rec buffer if vreclength changed. 1. Rec buffer allocated f0 mi_alloc_rec_buff (...) at ../src/storage/myisam/mi_open.c:738 f1 0x00005f4928244516 in mi_open (...) at ../src/storage/myisam/mi_open.c:671 f2 0x00005f4928210b98 in ha_myisam::open (...) at ../src/storage/myisam/ha_myisam.cc:847 f3 0x00005f49273aba41 in handler::ha_open (...) at ../src/sql/handler.cc:3105 f4 0x00005f4927995a65 in open_table_from_share (...) at ../src/sql/table.cc:4320 f5 0x00005f492769f084 in open_table (...) at ../src/sql/sql_base.cc:2024 f6 0x00005f49276a3ea9 in open_and_process_table (...) at ../src/sql/sql_base.cc:3819 f7 0x00005f49276a29b8 in open_tables (...) at ../src/sql/sql_base.cc:4303 f8 0x00005f49276a6f3f in open_and_lock_tables (...) at ../src/sql/sql_base.cc:5250 f9 0x00005f49275162de in open_and_lock_tables (...) at ../src/sql/sql_base.h:509 f10 0x00005f4927a30d7a in open_only_one_table (...) at ../src/sql/sql_admin.cc:412 f11 0x00005f4927a2c0c2 in mysql_admin_table (...) at ../src/sql/sql_admin.cc:603 f12 0x00005f4927a2fda8 in Sql_cmd_optimize_table::execute (...) at ../src/sql/sql_admin.cc:1517 f13 0x00005f49278102e3 in mysql_execute_command (...) at ../src/sql/sql_parse.cc:6180 f14 0x00005f49278012d7 in mysql_parse (...) at ../src/sql/sql_parse.cc:8236 2. vreclength calculated f0 ha_myisam::setup_vcols_for_repair (...) at ../src/storage/myisam/ha_myisam.cc:1002 f1 0x00005f49282138b4 in ha_myisam::optimize (...) at ../src/storage/myisam/ha_myisam.cc:1250 f2 0x00005f49273b4961 in handler::ha_optimize (...) at ../src/sql/handler.cc:4896 f3 0x00005f4927a2d254 in mysql_admin_table (...) at ../src/sql/sql_admin.cc:875 f4 0x00005f4927a2fda8 in Sql_cmd_optimize_table::execute (...) at ../src/sql/sql_admin.cc:1517 f5 0x00005f49278102e3 in mysql_execute_command (...) at ../src/sql/sql_parse.cc:6180 f6 0x00005f49278012d7 in mysql_parse (...) at ../src/sql/sql_parse.cc:8236 FYI backtrace was done with set print frame-info location set print frame-arguments presence set width 80 --- storage/myisam/ha_myisam.cc | 31 +++++++++++++++++++++++-------- storage/myisam/ha_myisam.h | 2 +- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc index c5d13273b23..05f8238bc20 100644 --- a/storage/myisam/ha_myisam.cc +++ b/storage/myisam/ha_myisam.cc @@ -997,11 +997,11 @@ int ha_myisam::write_row(const uchar *buf) return mi_write(file,buf); } -void ha_myisam::setup_vcols_for_repair(HA_CHECK *param) +int ha_myisam::setup_vcols_for_repair(HA_CHECK *param) { DBUG_ASSERT(file->s->base.reclength <= file->s->vreclength); if (!table->vfield) - return; + return 0; if (file->s->base.reclength == file->s->vreclength) { @@ -1018,14 +1018,18 @@ void ha_myisam::setup_vcols_for_repair(HA_CHECK *param) } } if (!indexed_vcols) - return; + return 0; file->s->vreclength= new_vreclength; + if (!mi_alloc_rec_buff(file, -1, &file->rec_buff)) + return HA_ERR_OUT_OF_MEM; + bzero(file->rec_buff, mi_get_rec_buff_len(file, file->rec_buff)); } DBUG_ASSERT(file->s->base.reclength < file->s->vreclength || !table->s->stored_fields); param->init_fix_record= init_compute_vcols; param->fix_record= compute_vcols; table->use_all_columns(); + return 0; } int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt) @@ -1061,7 +1065,11 @@ int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt) (uint) (share->global_changed ? 1 : 0))))) return HA_ADMIN_ALREADY_DONE; - setup_vcols_for_repair(param); + if ((error = setup_vcols_for_repair(param))) + { + thd_proc_info(thd, old_proc_info); + return error; + } error = chk_status(param, file); // Not fatal error = chk_size(param, file); @@ -1157,7 +1165,8 @@ int ha_myisam::analyze(THD *thd, HA_CHECK_OPT* check_opt) if (!(share->state.changed & STATE_NOT_ANALYZED)) return HA_ADMIN_ALREADY_DONE; - setup_vcols_for_repair(param); + if ((error = setup_vcols_for_repair(param))) + return error; error = chk_key(param, file); if (!error) @@ -1192,7 +1201,8 @@ int ha_myisam::repair(THD* thd, HA_CHECK_OPT *check_opt) param->backup_time= check_opt->start_time; start_records=file->state->records; - setup_vcols_for_repair(param); + if ((error = setup_vcols_for_repair(param))) + return error; while ((error=repair(thd,*param,0)) && param->retry_repair) { @@ -1245,7 +1255,8 @@ int ha_myisam::optimize(THD* thd, HA_CHECK_OPT *check_opt) param->tmpfile_createflag= O_RDWR | O_TRUNC; param->sort_buffer_length= THDVAR(thd, sort_buffer_size); - setup_vcols_for_repair(param); + if ((error = setup_vcols_for_repair(param))) + return error; if ((error= repair(thd,*param,1)) && param->retry_repair) { @@ -1665,7 +1676,11 @@ int ha_myisam::enable_indexes(key_map map, bool persist) param->stats_method= (enum_handler_stats_method)THDVAR(thd, stats_method); param->tmpdir=&mysql_tmpdir_list; - setup_vcols_for_repair(param); + if ((error = setup_vcols_for_repair(param))) + { + thd_proc_info(thd, save_proc_info); + DBUG_RETURN(error); + } if ((error= (repair(thd,*param,0) != HA_ADMIN_OK)) && param->retry_repair) { diff --git a/storage/myisam/ha_myisam.h b/storage/myisam/ha_myisam.h index e72636e9e22..24790040cf8 100644 --- a/storage/myisam/ha_myisam.h +++ b/storage/myisam/ha_myisam.h @@ -48,7 +48,7 @@ class ha_myisam final : public handler char *data_file_name, *index_file_name; bool can_enable_indexes; int repair(THD *thd, HA_CHECK ¶m, bool optimize); - void setup_vcols_for_repair(HA_CHECK *param); + int setup_vcols_for_repair(HA_CHECK *param); public: ha_myisam(handlerton *hton, TABLE_SHARE *table_arg); From 4e4c7dd4f5aa3bd668f8a9e0826562ef1c545e09 Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Tue, 8 Oct 2024 13:08:10 +0300 Subject: [PATCH 011/121] MDEV-28288 System versioning doesn't support correct work for engine=connect and doesn't always give any warnings/errors Disabled system versioning for connect due to unsupported microseconds (MDEV-15967). --- storage/connect/ha_connect.cc | 9 +++++++++ storage/connect/mysql-test/connect/r/tbl.result | 9 +++++++++ storage/connect/mysql-test/connect/t/tbl.test | 11 +++++++++++ 3 files changed, 29 insertions(+) diff --git a/storage/connect/ha_connect.cc b/storage/connect/ha_connect.cc index f40095b7cb8..0901ec92466 100644 --- a/storage/connect/ha_connect.cc +++ b/storage/connect/ha_connect.cc @@ -6467,6 +6467,15 @@ int ha_connect::create(const char *name, TABLE *table_arg, PGLOBAL g= xp->g; DBUG_ENTER("ha_connect::create"); + + if (table_arg->versioned()) + { + /* Due to microseconds not supported by CONNECT (MDEV-15967) system versioning + cannot work as expected (MDEV-15968, MDEV-28288) */ + my_error(ER_VERS_NOT_SUPPORTED, MYF(0), "CONNECT storage engine"); + DBUG_RETURN(HA_ERR_UNSUPPORTED); + } + /* This assignment fixes test failures if some "ALTER TABLE t1 ADD KEY(a)" query exits on ER_ACCESS_DENIED_ERROR diff --git a/storage/connect/mysql-test/connect/r/tbl.result b/storage/connect/mysql-test/connect/r/tbl.result index d3d1c550530..0932220a263 100644 --- a/storage/connect/mysql-test/connect/r/tbl.result +++ b/storage/connect/mysql-test/connect/r/tbl.result @@ -141,3 +141,12 @@ DROP TABLE t1; DROP TABLE t2; DROP TABLE t3; DROP TABLE t4; +# +# MDEV-28288 System versioning doesn't support correct work for +# engine=connect and doesn't always give any warnings/errors +# +create table t2 ( +x int, +y int +) engine=connect table_type=FIX file_name='test.txt' with system versioning; +ERROR HY000: System-versioned tables do not support CONNECT storage engine diff --git a/storage/connect/mysql-test/connect/t/tbl.test b/storage/connect/mysql-test/connect/t/tbl.test index 4f8497d4e6a..19f633e9bf7 100644 --- a/storage/connect/mysql-test/connect/t/tbl.test +++ b/storage/connect/mysql-test/connect/t/tbl.test @@ -51,3 +51,14 @@ DROP TABLE t1; DROP TABLE t2; DROP TABLE t3; DROP TABLE t4; + + +--echo # +--echo # MDEV-28288 System versioning doesn't support correct work for +--echo # engine=connect and doesn't always give any warnings/errors +--echo # +--error ER_VERS_NOT_SUPPORTED +create table t2 ( + x int, + y int +) engine=connect table_type=FIX file_name='test.txt' with system versioning; From d37bb140b1803f690f4b9d2472c581a1a9c44cff Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Tue, 8 Oct 2024 13:08:10 +0300 Subject: [PATCH 012/121] MDEV-31297 Create table as select on system versioned tables do not work consistently on replication Row-based replication does not execute CREATE .. SELECT but instead CREATE TABLE. CREATE .. SELECT creates implict system fields on unusual place: in-between declared fields and select fields. That was done because select_field_pos logic requires select fields go last in create_list. So, CREATE .. SELECT on master and CREATE TABLE on slave create system fields on different positions and replication gets field mismatch. To fix this we've changed CREATE .. SELECT to create implicit system fields on usual place in the end and updated select_field_pos for handling this case. --- mysql-test/suite/versioning/r/rpl_row.result | 24 ++++++++++++++++++++ mysql-test/suite/versioning/t/rpl_row.test | 15 ++++++++++++ sql/handler.cc | 19 +++++++++++++++- sql/handler.h | 3 +++ sql/sql_insert.cc | 6 ++--- sql/sql_table.cc | 12 +++++++++- 6 files changed, 74 insertions(+), 5 deletions(-) diff --git a/mysql-test/suite/versioning/r/rpl_row.result b/mysql-test/suite/versioning/r/rpl_row.result index 89c3ce21033..fe1eeb17941 100644 --- a/mysql-test/suite/versioning/r/rpl_row.result +++ b/mysql-test/suite/versioning/r/rpl_row.result @@ -49,4 +49,28 @@ x y 1 1 connection master; drop table t1; +# +# MDEV-31297 Create table as select on system versioned tables do not work consistently on replication +# +connection master; +create table t engine=innodb with system versioning as select 1 as i; +show create table t; +Table Create Table +t CREATE TABLE `t` ( + `i` int(1) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci WITH SYSTEM VERSIONING +select * from t; +i +1 +connection slave; +show create table t; +Table Create Table +t CREATE TABLE `t` ( + `i` int(1) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci WITH SYSTEM VERSIONING +select * from t; +i +1 +connection master; +drop table t; include/rpl_end.inc diff --git a/mysql-test/suite/versioning/t/rpl_row.test b/mysql-test/suite/versioning/t/rpl_row.test index 2e5d4c76f4a..0673a50fbc3 100644 --- a/mysql-test/suite/versioning/t/rpl_row.test +++ b/mysql-test/suite/versioning/t/rpl_row.test @@ -56,4 +56,19 @@ drop table t1; --remove_files_wildcard $TMP *.txt --remove_files_wildcard $TMP *.sql +--echo # +--echo # MDEV-31297 Create table as select on system versioned tables do not work consistently on replication +--echo # +--connection master +create table t engine=innodb with system versioning as select 1 as i; +show create table t; +select * from t; + +--sync_slave_with_master +show create table t; +select * from t; + +--connection master +drop table t; + --source include/rpl_end.inc diff --git a/sql/handler.cc b/sql/handler.cc index e881d4d1677..074bc02efd2 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -8017,6 +8017,21 @@ bool Table_scope_and_contents_source_st::vers_fix_system_fields( } +int get_select_field_pos(Alter_info *alter_info, int select_field_count, + bool versioned) +{ + int select_field_pos= alter_info->create_list.elements - select_field_count; + if (select_field_count && versioned && + /* + ALTER_PARSER_ADD_COLUMN indicates system fields was created implicitly, + select_field_count guarantees it's not ALTER TABLE + */ + alter_info->flags & ALTER_PARSER_ADD_COLUMN) + select_field_pos-= 2; + return select_field_pos; +} + + bool Table_scope_and_contents_source_st::vers_check_system_fields( THD *thd, Alter_info *alter_info, const Lex_table_name &table_name, const Lex_table_name &db, int select_count) @@ -8030,6 +8045,8 @@ bool Table_scope_and_contents_source_st::vers_check_system_fields( { uint fieldnr= 0; List_iterator field_it(alter_info->create_list); + uint select_field_pos= (uint) get_select_field_pos(alter_info, select_count, + true); while (Create_field *f= field_it++) { /* @@ -8040,7 +8057,7 @@ bool Table_scope_and_contents_source_st::vers_check_system_fields( SELECT go last there. */ bool is_dup= false; - if (fieldnr >= alter_info->create_list.elements - select_count) + if (fieldnr >= select_field_pos && f->invisible < INVISIBLE_SYSTEM) { List_iterator dup_it(alter_info->create_list); for (Create_field *dup= dup_it++; !is_dup && dup != f; dup= dup_it++) diff --git a/sql/handler.h b/sql/handler.h index d7dddd95da5..d204d9f1f9d 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -5307,4 +5307,7 @@ int del_global_index_stat(THD *thd, TABLE* table, KEY* key_info); int del_global_table_stat(THD *thd, const LEX_CSTRING *db, const LEX_CSTRING *table); uint ha_count_rw_all(THD *thd, Ha_trx_info **ptr_ha_info); bool non_existing_table_error(int error); + +int get_select_field_pos(Alter_info *alter_info, int select_field_count, + bool versioned); #endif /* HANDLER_INCLUDED */ diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 875ae9f9c63..a189d1da86e 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -4524,9 +4524,6 @@ TABLE *select_create::create_table_from_items(THD *thd, List *items, if (!(thd->variables.option_bits & OPTION_EXPLICIT_DEF_TIMESTAMP)) promote_first_timestamp_column(&alter_info->create_list); - if (create_info->fix_create_fields(thd, alter_info, *create_table)) - DBUG_RETURN(NULL); - while ((item=it++)) { Field *tmp_field= item->create_field_for_create_select(thd->mem_root, @@ -4564,6 +4561,9 @@ TABLE *select_create::create_table_from_items(THD *thd, List *items, alter_info->create_list.push_back(cr_field, thd->mem_root); } + if (create_info->fix_create_fields(thd, alter_info, *create_table)) + DBUG_RETURN(NULL); + /* Item*::type_handler() always returns pointers to type_handler_{time2|datetime2|timestamp2} no matter what diff --git a/sql/sql_table.cc b/sql/sql_table.cc index bd43a70324a..4425157047c 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -3634,7 +3634,8 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, DBUG_RETURN(TRUE); } - select_field_pos= alter_info->create_list.elements - select_field_count; + select_field_pos= get_select_field_pos(alter_info, select_field_count, + create_info->versioned()); null_fields= 0; create_info->varchar= 0; max_key_length= file->max_key_length(); @@ -3699,7 +3700,16 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, /* If this was a CREATE ... SELECT statement, accept a field redefinition if we are changing a field in the SELECT part + + The cases are: + + field_no < select_field_pos: both field and dup are table fields; + dup_no >= select_field_pos: both field and dup are select fields or + field is implicit systrem field and dup is select field. + + We are not allowed to put row_start/row_end into SELECT expression. */ + DBUG_ASSERT(dup_no < field_no); if (field_no < select_field_pos || dup_no >= select_field_pos || dup_field->invisible >= INVISIBLE_SYSTEM) { From 706a8bcb5b128c30ea59bae5ad940541918aaf21 Mon Sep 17 00:00:00 2001 From: Aleksey Midenkov Date: Tue, 8 Oct 2024 13:08:10 +0300 Subject: [PATCH 013/121] MDEV-33470 Unique hash index is broken on DML for system-versioned table Hash index is vcol-based wrapper (MDEV-371). row_end is added to unique index. So when row_end is updated unique hash index must be recalculated via vcol_update_fields(). DELETE did not update virtual fields, so DELETE HISTORY was getting wrong hash value. The fix does update_virtual_fields() on vers_update_end() so in every case row_end is updated virtual fields are updated as well. --- mysql-test/suite/versioning/r/delete_history.result | 11 +++++++++++ mysql-test/suite/versioning/t/delete_history.test | 13 +++++++++++++ sql/sql_insert.cc | 4 ---- sql/table.cc | 2 ++ 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/mysql-test/suite/versioning/r/delete_history.result b/mysql-test/suite/versioning/r/delete_history.result index d07c71ee9f5..5b279b12f33 100644 --- a/mysql-test/suite/versioning/r/delete_history.result +++ b/mysql-test/suite/versioning/r/delete_history.result @@ -224,3 +224,14 @@ ERROR HY000: The target table v1 of the DELETE is not updatable DROP VIEW v1; DROP TABLE t1; # End of 10.4 tests +# +# MDEV-33470 Unique hash index is broken on DML for system-versioned table +# +create or replace table t ( +c int, unique (c) using hash) +with system versioning; +insert into t values (0); +delete from t; +delete history from t; +drop table t; +# End of 10.5 tests diff --git a/mysql-test/suite/versioning/t/delete_history.test b/mysql-test/suite/versioning/t/delete_history.test index 042670bcfec..7e051ac4be3 100644 --- a/mysql-test/suite/versioning/t/delete_history.test +++ b/mysql-test/suite/versioning/t/delete_history.test @@ -232,4 +232,17 @@ DROP TABLE t1; --echo # End of 10.4 tests +--echo # +--echo # MDEV-33470 Unique hash index is broken on DML for system-versioned table +--echo # +create or replace table t ( + c int, unique (c) using hash) +with system versioning; +insert into t values (0); +delete from t; +delete history from t; +drop table t; + +--echo # End of 10.5 tests + --source suite/versioning/common_finish.inc diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index a189d1da86e..a66b0579f4a 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -1810,10 +1810,6 @@ int vers_insert_history_row(TABLE *table) if (row_start->cmp(row_start->ptr, row_end->ptr) >= 0) return 0; - if (table->vfield && - table->update_virtual_fields(table->file, VCOL_UPDATE_FOR_READ)) - return HA_ERR_GENERIC; - return table->file->ha_write_row(table->record[0]); } diff --git a/sql/table.cc b/sql/table.cc index f0020deb519..31a5afdb125 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -9078,6 +9078,8 @@ void TABLE::vers_update_end() in_use->query_start_sec_part())) DBUG_ASSERT(0); vers_end_field()->set_has_explicit_value(); + if (vfield) + update_virtual_fields(file, VCOL_UPDATE_FOR_WRITE); } /** From 65418ca9ad39e862d29875838e8824f758bd749a Mon Sep 17 00:00:00 2001 From: Thirunarayanan Balathandayuthapani Date: Tue, 8 Oct 2024 16:43:57 +0530 Subject: [PATCH 014/121] MDEV-34392 Inplace algorithm violates the foreign key constraint - Fix the compilation error in gcc-5 --- sql/table.h | 11 +++++++++-- storage/innobase/handler/ha_innodb.cc | 8 +++++++- storage/innobase/handler/handler0alter.cc | 7 +++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/sql/table.h b/sql/table.h index 45fd8c01d9e..ebcd38ee3a0 100644 --- a/sql/table.h +++ b/sql/table.h @@ -1927,7 +1927,14 @@ public: DBUG_ASSERT(fields_nullable); DBUG_ASSERT(field < n_fields); size_t bit= size_t{field} + referenced * n_fields; - fields_nullable[bit / 8]|= (unsigned char)(1 << (bit % 8)); +#if defined __GNUC__ && __GNUC__ == 5 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wconversion" +#endif + fields_nullable[bit / 8]|= static_cast(1 << (bit % 8)); +#if defined __GNUC__ && __GNUC__ == 5 +# pragma GCC diagnostic pop +#endif } /** @@ -1944,7 +1951,7 @@ public: unsigned n_field= get_n_fields(); DBUG_ASSERT(field < n_field); size_t bit= size_t{field} + referenced * n_field; - return fields_nullable[bit / 8] & (1 << (bit % 8)); + return fields_nullable[bit / 8] & (1U << (bit % 8)); } } FOREIGN_KEY_INFO; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 37b2d9ad7bd..8797a936600 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -12518,7 +12518,10 @@ create_table_info_t::create_foreign_keys() } } } - +#if defined __GNUC__ && __GNUC__ == 5 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wconversion" +#endif switch (fk->delete_opt) { case FK_OPTION_UNDEF: case FK_OPTION_RESTRICT: @@ -12560,6 +12563,9 @@ create_table_info_t::create_foreign_keys() ut_ad(0); break; } +#if defined __GNUC__ && __GNUC__ == 5 +# pragma GCC diagnostic pop +#endif } if (dict_foreigns_has_s_base_col(local_fk_set, table)) { diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 613ba560ab2..d477a2a936c 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -2807,6 +2807,10 @@ innobase_set_foreign_key_option( break; } +#if defined __GNUC__ && __GNUC__ == 5 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wconversion" +#endif switch (fk_key->update_opt) { case FK_OPTION_NO_ACTION: case FK_OPTION_RESTRICT: @@ -2823,6 +2827,9 @@ innobase_set_foreign_key_option( break; } +#if defined __GNUC__ && __GNUC__ == 5 +# pragma GCC diagnostic pop +#endif return(innobase_check_fk_option(foreign)); } From 3ea71a2c8ed031a163013604c892d01dffa517d7 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sat, 31 Aug 2024 23:57:33 +0200 Subject: [PATCH 015/121] MDEV-16699 heap-use-after-free in group_concat with compressed or GIS columns Field_blob::store() has special code for GROUP_CONCAT temporary table (to store blob values in Blob_mem_storage - this prevents them from being freed/overwritten when a next row is read). Field_geom and Field_blob_compressed inherit from Field_blob but they have their own ::store() method without this special Blob_mem_storage support. Considering that non-grouping CONCAT() of such fields converts them to plain BLOB, let's do the same for GROUP_CONCAT. To do it, Item_func_group_concat::setup will signal that it's creating a temporary table for GROUP_CONCAT, and Field_blog::make_new_field() override will create base Field_blob when under group concat. --- mysql-test/main/column_compression.result | 19 ++++++++++++++++--- mysql-test/main/column_compression.test | 13 +++++++++---- mysql-test/main/gis.result | 19 ++++++++++++++++++- mysql-test/main/gis.test | 12 +++++++++++- sql/field.cc | 18 ++++++++++++++++++ sql/field.h | 1 + sql/item_sum.cc | 12 +++++++----- sql/sql_class.h | 3 ++- sql/sql_insert.cc | 5 +---- sql/sql_select.cc | 1 + sql/table.h | 12 +++++------- 11 files changed, 89 insertions(+), 26 deletions(-) diff --git a/mysql-test/main/column_compression.result b/mysql-test/main/column_compression.result index f7b02639af3..891f663a872 100644 --- a/mysql-test/main/column_compression.result +++ b/mysql-test/main/column_compression.result @@ -2918,10 +2918,8 @@ CREATE TABLE t1 (a VARCHAR(500) COMPRESSED CHARACTER SET utf8mb3) ENGINE=InnoDB; INSERT INTO t1 SET a=REPEAT('x',127); ALTER TABLE t1 FORCE, ALGORITHM=COPY; DROP TABLE t1; -# # End of 10.4 tests # -# # MDEV-19727 Add Type_handler::Key_part_spec_init_ft # CREATE TABLE t1 (a VARCHAR(1000) COMPRESSED, FULLTEXT INDEX(a)); @@ -2929,5 +2927,20 @@ ERROR HY000: Compressed column 'a' can't be used in key specification CREATE TABLE t1 (a TEXT COMPRESSED, FULLTEXT INDEX(a)); ERROR HY000: Compressed column 'a' can't be used in key specification # -# End of 10.5 tests +# MDEV-16699 heap-use-after-free in group_concat with compressed or GIS columns # +create table t1 (c text compressed); +insert into t1 values ('foo'),(repeat('a',55000)); +select length(group_concat(c order by 1)) from t1; +length(group_concat(c order by 1)) +55004 +create table t2 as select group_concat(c order by 1), concat(c), c from t1; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `group_concat(c order by 1)` mediumtext DEFAULT NULL, + `concat(c)` text DEFAULT NULL, + `c` text /*M!100301 COMPRESSED*/ DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +drop table t1, t2; +# End of 10.5 tests diff --git a/mysql-test/main/column_compression.test b/mysql-test/main/column_compression.test index de59cf5c7c8..b520b423865 100644 --- a/mysql-test/main/column_compression.test +++ b/mysql-test/main/column_compression.test @@ -452,10 +452,7 @@ INSERT INTO t1 SET a=REPEAT('x',127); ALTER TABLE t1 FORCE, ALGORITHM=COPY; DROP TABLE t1; - ---echo # --echo # End of 10.4 tests ---echo # --echo # --echo # MDEV-19727 Add Type_handler::Key_part_spec_init_ft @@ -474,5 +471,13 @@ CREATE TABLE t1 (a VARCHAR(1000) COMPRESSED, FULLTEXT INDEX(a)); CREATE TABLE t1 (a TEXT COMPRESSED, FULLTEXT INDEX(a)); --echo # ---echo # End of 10.5 tests +--echo # MDEV-16699 heap-use-after-free in group_concat with compressed or GIS columns --echo # +create table t1 (c text compressed); +insert into t1 values ('foo'),(repeat('a',55000)); +select length(group_concat(c order by 1)) from t1; +create table t2 as select group_concat(c order by 1), concat(c), c from t1; +show create table t2; +drop table t1, t2; + +--echo # End of 10.5 tests diff --git a/mysql-test/main/gis.result b/mysql-test/main/gis.result index e8c5e5c8e73..0a8e53f6bab 100644 --- a/mysql-test/main/gis.result +++ b/mysql-test/main/gis.result @@ -5435,5 +5435,22 @@ AsText(g) POINT(1 1) DROP TABLE t1; # -# End of 10.5 tests +# MDEV-16699 heap-use-after-free in group_concat with compressed or GIS columns # +create table t1 (c polygon); +insert into t1 values +(PolygonFromText('POLYGON((1 2,1 2))')), +(PolygonFromText('POLYGON((0 0,1 1,0 0))')); +select length(group_concat(c, c order by 1,2)) from t1; +length(group_concat(c, c order by 1,2)) +229 +create table t2 as select group_concat(c, c order by 1,2), concat(c), c from t1; +show create table t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `group_concat(c, c order by 1,2)` mediumblob DEFAULT NULL, + `concat(c)` longblob DEFAULT NULL, + `c` polygon DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +drop table t1, t2; +# End of 10.5 tests diff --git a/mysql-test/main/gis.test b/mysql-test/main/gis.test index 6bac1e0c906..97938d106e1 100644 --- a/mysql-test/main/gis.test +++ b/mysql-test/main/gis.test @@ -3445,5 +3445,15 @@ SELECT AsText(g) FROM t1; DROP TABLE t1; --echo # ---echo # End of 10.5 tests +--echo # MDEV-16699 heap-use-after-free in group_concat with compressed or GIS columns --echo # +create table t1 (c polygon); +insert into t1 values + (PolygonFromText('POLYGON((1 2,1 2))')), + (PolygonFromText('POLYGON((0 0,1 1,0 0))')); +select length(group_concat(c, c order by 1,2)) from t1; +create table t2 as select group_concat(c, c order by 1,2), concat(c), c from t1; +show create table t2; +drop table t1, t2; + +--echo # End of 10.5 tests diff --git a/sql/field.cc b/sql/field.cc index a423fdd0fa3..3a8dc305db0 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -8882,6 +8882,24 @@ int Field_blob::key_cmp(const uchar *a,const uchar *b) const } +#ifndef DBUG_OFF +/* helper to assert that new_table->blob_storage is NULL */ +static struct blob_storage_check +{ + union { bool b; intptr p; } val; + blob_storage_check() { val.p= -1; val.b= false; } +} blob_storage_check; +#endif +Field *Field_blob::make_new_field(MEM_ROOT *root, TABLE *newt, bool keep_type) +{ + DBUG_ASSERT((intptr(newt->blob_storage) & blob_storage_check.val.p) == 0); + if (newt->group_concat) + return new (root) Field_blob(field_length, maybe_null(), &field_name, + charset()); + return Field::make_new_field(root, newt, keep_type); +} + + Field *Field_blob::new_key_field(MEM_ROOT *root, TABLE *new_table, uchar *new_ptr, uint32 length, uchar *new_null_ptr, uint new_null_bit) diff --git a/sql/field.h b/sql/field.h index f249c00fb05..7ea431e8acb 100644 --- a/sql/field.h +++ b/sql/field.h @@ -4559,6 +4559,7 @@ public: return get_key_image_itRAW(ptr_arg, buff, length); } void set_key_image(const uchar *buff,uint length) override; + Field *make_new_field(MEM_ROOT *, TABLE *new_table, bool keep_type) override; Field *new_key_field(MEM_ROOT *root, TABLE *new_table, uchar *new_ptr, uint32 length, uchar *new_null_ptr, uint new_null_bit) override; diff --git a/sql/item_sum.cc b/sql/item_sum.cc index a7fae9ea4c0..b2b41fa1948 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -4379,6 +4379,7 @@ bool Item_func_group_concat::setup(THD *thd) count_field_types(select_lex, tmp_table_param, all_fields, 0); tmp_table_param->force_copy_fields= force_copy_fields; tmp_table_param->hidden_field_count= (arg_count_order > 0); + tmp_table_param->group_concat= true; DBUG_ASSERT(table == 0); if (order_or_distinct) { @@ -4406,11 +4407,10 @@ bool Item_func_group_concat::setup(THD *thd) Note that in the table, we first have the ORDER BY fields, then the field list. */ - if (!(table= create_tmp_table(thd, tmp_table_param, all_fields, - (ORDER*) 0, 0, TRUE, - (select_lex->options | - thd->variables.option_bits), - HA_POS_ERROR, &empty_clex_str))) + table= create_tmp_table(thd, tmp_table_param, all_fields, NULL, 0, TRUE, + (select_lex->options | thd->variables.option_bits), + HA_POS_ERROR, &empty_clex_str); + if (!table) DBUG_RETURN(TRUE); table->file->extra(HA_EXTRA_NO_ROWS); table->no_rows= 1; @@ -4421,6 +4421,8 @@ bool Item_func_group_concat::setup(THD *thd) */ if (order_or_distinct && table->s->blob_fields) table->blob_storage= new Blob_mem_storage(); + else + table->blob_storage= NULL; /* Need sorting or uniqueness: init tree and choose a function to sort. diff --git a/sql/sql_class.h b/sql/sql_class.h index 3048e27daf8..6baf796fb8b 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -6148,6 +6148,7 @@ public: aggregate functions as normal functions. */ bool precomputed_group_by; + bool group_concat; bool force_copy_fields; /* If TRUE, create_tmp_field called from create_tmp_table will convert @@ -6166,7 +6167,7 @@ public: group_length(0), group_null_parts(0), using_outer_summary_function(0), schema_table(0), materialized_subquery(0), force_not_null_cols(0), - precomputed_group_by(0), + precomputed_group_by(0), group_concat(0), force_copy_fields(0), bit_fields_as_long(0), skip_create_table(0) {} ~TMP_TABLE_PARAM() diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index a66b0579f4a..d635ba7085b 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -4509,12 +4509,9 @@ TABLE *select_create::create_table_from_items(THD *thd, List *items, bool save_table_creation_was_logged; DBUG_ENTER("select_create::create_table_from_items"); + tmp_table.reset(); tmp_table.s= &share; init_tmp_table_share(thd, &share, "", 0, "", ""); - - tmp_table.s->db_create_options=0; - tmp_table.null_row= 0; - tmp_table.maybe_null= 0; tmp_table.in_use= thd; if (!(thd->variables.option_bits & OPTION_EXPLICIT_DEF_TIMESTAMP)) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 001053e0ed7..fcc1e4dbfea 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -19029,6 +19029,7 @@ TABLE *Create_tmp_table::start(THD *thd, table->copy_blobs= 1; table->in_use= thd; table->no_rows_with_nulls= param->force_not_null_cols; + table->group_concat= param->group_concat; table->expr_arena= thd; table->s= share; diff --git a/sql/table.h b/sql/table.h index ebcd38ee3a0..96cb9ed1b3f 100644 --- a/sql/table.h +++ b/sql/table.h @@ -1513,7 +1513,6 @@ public: Used only in the MODE_NO_AUTO_VALUE_ON_ZERO mode. */ bool auto_increment_field_not_null; - bool insert_or_update; /* Can be used by the handler */ /* NOTE: alias_name_used is only a hint! It works only in need_correct_ident() condition. On other cases it is FALSE even if table_name is alias. @@ -1534,12 +1533,11 @@ public: REGINFO reginfo; /* field connections */ MEM_ROOT mem_root; - /** - Initialized in Item_func_group_concat::setup for appropriate - temporary table if GROUP_CONCAT is used with ORDER BY | DISTINCT - and BLOB field count > 0. - */ - Blob_mem_storage *blob_storage; + /* this is for temporary tables created inside Item_func_group_concat */ + union { + bool group_concat; /* used during create_tmp_table() */ + Blob_mem_storage *blob_storage; /* used after create_tmp_table() */ + }; GRANT_INFO grant; /* The arena which the items for expressions from the table definition From 23d7dc1ea19f55f58078ea5ea876de36132a3174 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sun, 6 Oct 2024 17:06:07 +0200 Subject: [PATCH 016/121] MDEV-35086 Trying to lock mutex when the mutex was already locked (session_tracker.cc), server hangs followup for 9021f40b8ebf --- ...last_gtid.result => session_tracker_sysvar.result} | 9 +++++++++ ...ker_last_gtid.test => session_tracker_sysvar.test} | 11 +++++++++++ sql/session_tracker.cc | 1 + 3 files changed, 21 insertions(+) rename mysql-test/main/{session_tracker_last_gtid.result => session_tracker_sysvar.result} (69%) rename mysql-test/main/{session_tracker_last_gtid.test => session_tracker_sysvar.test} (61%) diff --git a/mysql-test/main/session_tracker_last_gtid.result b/mysql-test/main/session_tracker_sysvar.result similarity index 69% rename from mysql-test/main/session_tracker_last_gtid.result rename to mysql-test/main/session_tracker_sysvar.result index da94e64ac14..6b56cb400b8 100644 --- a/mysql-test/main/session_tracker_last_gtid.result +++ b/mysql-test/main/session_tracker_sysvar.result @@ -28,3 +28,12 @@ drop table t1; -- last_gtid: 0-1-1002 reset master; +# +# MDEV-35086 Trying to lock mutex when the mutex was already locked (session_tracker.cc), server hangs +# +set session_track_system_variables='*'; +alter table t1 nowait force; +ERROR 42S02: Table 'test.t1' doesn't exist +use mysql; +set session_track_system_variables=default; +# End of 10.5 tests diff --git a/mysql-test/main/session_tracker_last_gtid.test b/mysql-test/main/session_tracker_sysvar.test similarity index 61% rename from mysql-test/main/session_tracker_last_gtid.test rename to mysql-test/main/session_tracker_sysvar.test index 58aee2de837..54b69782697 100644 --- a/mysql-test/main/session_tracker_last_gtid.test +++ b/mysql-test/main/session_tracker_sysvar.test @@ -18,3 +18,14 @@ drop table t1; --disable_session_track_info reset master; + +--echo # +--echo # MDEV-35086 Trying to lock mutex when the mutex was already locked (session_tracker.cc), server hangs +--echo # +set session_track_system_variables='*'; +--error ER_NO_SUCH_TABLE +alter table t1 nowait force; +use mysql; +set session_track_system_variables=default; + +--echo # End of 10.5 tests diff --git a/sql/session_tracker.cc b/sql/session_tracker.cc index cd3491ca9f3..8e5e4d2142d 100644 --- a/sql/session_tracker.cc +++ b/sql/session_tracker.cc @@ -433,6 +433,7 @@ bool Session_sysvars_tracker::vars_list::store(THD *thd, String *buf) if (!*node->test_load) { mysql_mutex_unlock(&LOCK_plugin); + mysql_mutex_unlock(&LOCK_global_system_variables); continue; } sys_var *svar= node->m_svar; From 4281e0068b9c92efe9ff5485899d0c214b51eeed Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sun, 6 Oct 2024 17:41:07 +0200 Subject: [PATCH 017/121] MDEV-35082 HANDLER with FULLTEXT keys is not always rejected need to check for index capabilities also for HANDLER READ NEXT --- mysql-test/suite/handler/interface.result | 13 ++++++++-- mysql-test/suite/handler/interface.test | 15 ++++++++++-- .../suite/innodb_fts/r/innodb_fts_misc.result | 4 ++-- mysql-test/suite/innodb_fts/r/misc.result | 4 ++-- .../suite/innodb_fts/t/innodb_fts_misc.test | 2 ++ mysql-test/suite/innodb_fts/t/misc.test | 2 ++ sql/sql_handler.cc | 24 +++++++++---------- 7 files changed, 43 insertions(+), 21 deletions(-) diff --git a/mysql-test/suite/handler/interface.result b/mysql-test/suite/handler/interface.result index 3758400345b..2a0f36e5fa2 100644 --- a/mysql-test/suite/handler/interface.result +++ b/mysql-test/suite/handler/interface.result @@ -338,9 +338,9 @@ CREATE TABLE t1 (g GEOMETRY NOT NULL, SPATIAL gi(g)); INSERT INTO t1 VALUES (POINT(0,0)); HANDLER t1 OPEN AS h; HANDLER h READ `gi`= (10); -ERROR HY000: SPATIAL index `gi` does not support this operation +ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field HANDLER h READ `gi`> (10); -ERROR HY000: SPATIAL index `gi` does not support this operation +ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field HANDLER h CLOSE; DROP TABLE t1; CREATE TABLE t1 (w VARCHAR(100), FULLTEXT fk(w)); @@ -352,3 +352,12 @@ HANDLER h READ `fk`> (10); ERROR HY000: FULLTEXT index `fk` does not support this operation HANDLER h CLOSE; DROP TABLE t1; +# +# MDEV-35082 HANDLER with FULLTEXT keys is not always rejected +# +create table t (a int primary key, v text not null, fulltext(v)); +handler t open; +handler t read v next; +ERROR HY000: FULLTEXT index `v` does not support this operation +drop table t; +# End of 10.5 tests diff --git a/mysql-test/suite/handler/interface.test b/mysql-test/suite/handler/interface.test index a4ed640dbc0..43abe47cf9b 100644 --- a/mysql-test/suite/handler/interface.test +++ b/mysql-test/suite/handler/interface.test @@ -385,9 +385,9 @@ DROP TABLE t1; CREATE TABLE t1 (g GEOMETRY NOT NULL, SPATIAL gi(g)); INSERT INTO t1 VALUES (POINT(0,0)); HANDLER t1 OPEN AS h; ---error ER_KEY_DOESNT_SUPPORT +--error ER_CANT_CREATE_GEOMETRY_OBJECT HANDLER h READ `gi`= (10); ---error ER_KEY_DOESNT_SUPPORT +--error ER_CANT_CREATE_GEOMETRY_OBJECT HANDLER h READ `gi`> (10); HANDLER h CLOSE; DROP TABLE t1; @@ -401,3 +401,14 @@ HANDLER h READ `fk`= (10); HANDLER h READ `fk`> (10); HANDLER h CLOSE; DROP TABLE t1; + +--echo # +--echo # MDEV-35082 HANDLER with FULLTEXT keys is not always rejected +--echo # +create table t (a int primary key, v text not null, fulltext(v)); +handler t open; +--error ER_KEY_DOESNT_SUPPORT +handler t read v next; +drop table t; + +--echo # End of 10.5 tests diff --git a/mysql-test/suite/innodb_fts/r/innodb_fts_misc.result b/mysql-test/suite/innodb_fts/r/innodb_fts_misc.result index 2cc992be73a..434e060e258 100644 --- a/mysql-test/suite/innodb_fts/r/innodb_fts_misc.result +++ b/mysql-test/suite/innodb_fts/r/innodb_fts_misc.result @@ -1188,9 +1188,9 @@ DROP TABLE t; CREATE TABLE t(a CHAR(1),FULLTEXT KEY(a)) ENGINE=INNODB; HANDLER t OPEN; HANDLER t READ a NEXT; -a +ERROR HY000: FULLTEXT index `a` does not support this operation HANDLER t READ a PREV; -a +ERROR HY000: FULLTEXT index `a` does not support this operation DROP TABLE t; CREATE TABLE `%`(a TEXT, FULLTEXT INDEX(a)) ENGINE=INNODB; CREATE TABLE `A B`(a TEXT, FULLTEXT INDEX(a)) ENGINE=INNODB; diff --git a/mysql-test/suite/innodb_fts/r/misc.result b/mysql-test/suite/innodb_fts/r/misc.result index 684996fb748..4afd9bf1f74 100644 --- a/mysql-test/suite/innodb_fts/r/misc.result +++ b/mysql-test/suite/innodb_fts/r/misc.result @@ -1183,9 +1183,9 @@ DROP TABLE t; CREATE TABLE t(a CHAR(1),FULLTEXT KEY(a)) ENGINE=INNODB; HANDLER t OPEN; HANDLER t READ a NEXT; -a +ERROR HY000: FULLTEXT index `a` does not support this operation HANDLER t READ a PREV; -a +ERROR HY000: FULLTEXT index `a` does not support this operation DROP TABLE t; CREATE TABLE `%`(a TEXT, FULLTEXT INDEX(a)) ENGINE=INNODB; CREATE TABLE `A B`(a TEXT, FULLTEXT INDEX(a)) ENGINE=INNODB; diff --git a/mysql-test/suite/innodb_fts/t/innodb_fts_misc.test b/mysql-test/suite/innodb_fts/t/innodb_fts_misc.test index 470acd554b4..b67f3552790 100644 --- a/mysql-test/suite/innodb_fts/t/innodb_fts_misc.test +++ b/mysql-test/suite/innodb_fts/t/innodb_fts_misc.test @@ -1155,7 +1155,9 @@ DROP TABLE t; # InnoDB FTS does not support index scan from handler CREATE TABLE t(a CHAR(1),FULLTEXT KEY(a)) ENGINE=INNODB; HANDLER t OPEN; +--error ER_KEY_DOESNT_SUPPORT HANDLER t READ a NEXT; +--error ER_KEY_DOESNT_SUPPORT HANDLER t READ a PREV; DROP TABLE t; diff --git a/mysql-test/suite/innodb_fts/t/misc.test b/mysql-test/suite/innodb_fts/t/misc.test index f897cf1265d..f3c10d16205 100644 --- a/mysql-test/suite/innodb_fts/t/misc.test +++ b/mysql-test/suite/innodb_fts/t/misc.test @@ -1148,7 +1148,9 @@ DROP TABLE t; # InnoDB FTS does not support index scan from handler CREATE TABLE t(a CHAR(1),FULLTEXT KEY(a)) ENGINE=INNODB; HANDLER t OPEN; +--error ER_KEY_DOESNT_SUPPORT HANDLER t READ a NEXT; +--error ER_KEY_DOESNT_SUPPORT HANDLER t READ a PREV; DROP TABLE t; diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc index 4108f42eb14..c549f89b750 100644 --- a/sql/sql_handler.cc +++ b/sql/sql_handler.cc @@ -647,28 +647,26 @@ mysql_ha_fix_cond_and_key(SQL_HANDLER *handler, } } + const KEY *c_key= table->s->key_info + handler->keyno; + if (c_key->algorithm == HA_KEY_ALG_FULLTEXT || + (ha_rkey_mode != HA_READ_KEY_EXACT && + (table->file->index_flags(handler->keyno, 0, TRUE) & + (HA_READ_NEXT | HA_READ_PREV | HA_READ_RANGE)) == 0)) + { + my_error(ER_KEY_DOESNT_SUPPORT, MYF(0), + table->file->index_type(handler->keyno), c_key->name.str); + return 1; + } + /* Check key parts */ if (mode == RKEY) { - TABLE *table= handler->table; KEY *keyinfo= table->key_info + handler->keyno; KEY_PART_INFO *key_part= keyinfo->key_part; List_iterator it_ke(*key_expr); Item *item; key_part_map keypart_map; uint key_len; - const KEY *c_key= table->s->key_info + handler->keyno; - - if ((c_key->flags & HA_SPATIAL) || - c_key->algorithm == HA_KEY_ALG_FULLTEXT || - (ha_rkey_mode != HA_READ_KEY_EXACT && - (table->file->index_flags(handler->keyno, 0, TRUE) & - (HA_READ_NEXT | HA_READ_PREV | HA_READ_RANGE)) == 0)) - { - my_error(ER_KEY_DOESNT_SUPPORT, MYF(0), - table->file->index_type(handler->keyno), keyinfo->name.str); - return 1; - } if (key_expr->elements > keyinfo->user_defined_key_parts) { From 23820f1d79f6aa30930a96ac182899e737ee3590 Mon Sep 17 00:00:00 2001 From: Thirunarayanan Balathandayuthapani Date: Tue, 8 Oct 2024 22:55:50 +0530 Subject: [PATCH 018/121] MDEV-34392 Inplace algorithm violates the foreign key constraint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fixing the compilation issue for the compiler lesser than gcc-6 Reviewed-by : Marko Mäkelä --- sql/table.h | 4 ++-- storage/innobase/handler/ha_innodb.cc | 4 ++-- storage/innobase/handler/handler0alter.cc | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sql/table.h b/sql/table.h index 96cb9ed1b3f..b3e23ab02e8 100644 --- a/sql/table.h +++ b/sql/table.h @@ -1925,12 +1925,12 @@ public: DBUG_ASSERT(fields_nullable); DBUG_ASSERT(field < n_fields); size_t bit= size_t{field} + referenced * n_fields; -#if defined __GNUC__ && __GNUC__ == 5 +#if defined __GNUC__ && !defined __clang__ && __GNUC__ < 6 # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wconversion" #endif fields_nullable[bit / 8]|= static_cast(1 << (bit % 8)); -#if defined __GNUC__ && __GNUC__ == 5 +#if defined __GNUC__ && !defined __clang__ && __GNUC__ < 6 # pragma GCC diagnostic pop #endif } diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 8797a936600..7fe91cd6c17 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -12518,7 +12518,7 @@ create_table_info_t::create_foreign_keys() } } } -#if defined __GNUC__ && __GNUC__ == 5 +#if defined __GNUC__ && !defined __clang__ && __GNUC__ < 6 # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wconversion" #endif @@ -12563,7 +12563,7 @@ create_table_info_t::create_foreign_keys() ut_ad(0); break; } -#if defined __GNUC__ && __GNUC__ == 5 +#if defined __GNUC__ && !defined __clang__ && __GNUC__ < 6 # pragma GCC diagnostic pop #endif } diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index d477a2a936c..9053762014d 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -2807,7 +2807,7 @@ innobase_set_foreign_key_option( break; } -#if defined __GNUC__ && __GNUC__ == 5 +#if defined __GNUC__ && !defined __clang__ && __GNUC__ < 6 # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wconversion" #endif @@ -2827,7 +2827,7 @@ innobase_set_foreign_key_option( break; } -#if defined __GNUC__ && __GNUC__ == 5 +#if defined __GNUC__ && !defined __clang__ && __GNUC__ < 6 # pragma GCC diagnostic pop #endif return(innobase_check_fk_option(foreign)); From 8981ee238aa780d2bf44cb6876ea2f20030393ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Wed, 9 Oct 2024 11:26:12 +0300 Subject: [PATCH 019/121] MDEV-33106 innodb.innodb-lock-inherit-read_commited times out Sometimes, in MariaDB Server 10.5 but apparently not in later branches, the test would hang because con1 and con2 would be blocked in debug_sync (for example, lock_wait_suspend_thread_enter and row_ins_sec_index_entry_dup_locks_created) and therefore blocking the purge of transactions from completing. To prevent an occasional DEBUG_SYNC induced hang in the test, we will wait for everything to be purged, except the last 2 transactions. This change should be null-merged to 10.6, because the test is not failing in 10.6 or later major versions. --- .../suite/innodb/r/innodb-lock-inherit-read_commited.result | 4 ++-- .../suite/innodb/t/innodb-lock-inherit-read_commited.test | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mysql-test/suite/innodb/r/innodb-lock-inherit-read_commited.result b/mysql-test/suite/innodb/r/innodb-lock-inherit-read_commited.result index 1fe569d28ef..d93aae49ea4 100644 --- a/mysql-test/suite/innodb/r/innodb-lock-inherit-read_commited.result +++ b/mysql-test/suite/innodb/r/innodb-lock-inherit-read_commited.result @@ -40,7 +40,7 @@ connection purge_control; COMMIT; disconnect purge_control; connection default; -InnoDB 0 transactions not purged +SET GLOBAL innodb_max_purge_lag_wait=2; SET debug_sync = 'now SIGNAL con2_go WAIT_FOR con2_insert_done'; SET debug_sync = 'now SIGNAL con1_go WAIT_FOR con1_insert_done'; SET debug_sync = 'now SIGNAL con1_finish'; @@ -99,7 +99,7 @@ connection purge_control; COMMIT; disconnect purge_control; connection default; -InnoDB 0 transactions not purged +SET GLOBAL innodb_max_purge_lag_wait=2; SET debug_sync = 'now SIGNAL con2_go WAIT_FOR con2_insert_done'; SET debug_sync = 'now SIGNAL con1_go WAIT_FOR con1_insert_done'; SET debug_sync = 'now SIGNAL con1_finish'; diff --git a/mysql-test/suite/innodb/t/innodb-lock-inherit-read_commited.test b/mysql-test/suite/innodb/t/innodb-lock-inherit-read_commited.test index d9c933fa9b5..b89aead5afa 100644 --- a/mysql-test/suite/innodb/t/innodb-lock-inherit-read_commited.test +++ b/mysql-test/suite/innodb/t/innodb-lock-inherit-read_commited.test @@ -79,7 +79,7 @@ disconnect purge_control; connection default; # Wait for purge to delete the delete-marked record ---source ../../innodb/include/wait_all_purged.inc +SET GLOBAL innodb_max_purge_lag_wait=2; SET debug_sync = 'now SIGNAL con2_go WAIT_FOR con2_insert_done'; SET debug_sync = 'now SIGNAL con1_go WAIT_FOR con1_insert_done'; From 9cd9c3cf16697d203eb822930ce9497cafdacfde Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Fri, 4 Oct 2024 10:13:10 +0200 Subject: [PATCH 020/121] fix grant5 test to return to the original database. --- mysql-test/main/grant5.result | 1 + mysql-test/main/grant5.test | 1 + 2 files changed, 2 insertions(+) diff --git a/mysql-test/main/grant5.result b/mysql-test/main/grant5.result index c3a4baad259..9407c17f52e 100644 --- a/mysql-test/main/grant5.result +++ b/mysql-test/main/grant5.result @@ -38,6 +38,7 @@ connection default; disconnect u1; drop user u1@localhost; drop database mysqltest1; +use test; # # MDEV-22313: Neither SHOW CREATE USER nor SHOW GRANTS prints a user's default role # diff --git a/mysql-test/main/grant5.test b/mysql-test/main/grant5.test index 49e0ab1abf1..a7b82f454dc 100644 --- a/mysql-test/main/grant5.test +++ b/mysql-test/main/grant5.test @@ -50,6 +50,7 @@ connection default; disconnect u1; drop user u1@localhost; drop database mysqltest1; +use test; --echo # --echo # MDEV-22313: Neither SHOW CREATE USER nor SHOW GRANTS prints a user's default role From cc59fbfffa63fe3cb5846f92231bd7f0448a29b3 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Fri, 4 Oct 2024 09:28:46 +0200 Subject: [PATCH 021/121] MDEV-18151 Skipped error returning for GRANT/SET PASSWORD Make error issueing for GRANT and SET PASSWORD the same. Report errors wich were skipped before. --- mysql-test/main/grant5.result | 10 ++++++++- mysql-test/main/grant5.test | 16 +++++++++++++- mysql-test/main/grant_plugin.result | 17 +++++++++++++++ mysql-test/main/grant_plugin.test | 24 +++++++++++++++++++++ mysql-test/main/plugin_auth.test | 2 +- mysql-test/suite/plugins/r/multiauth.result | 1 + mysql-test/suite/plugins/t/multiauth.test | 1 + sql/sql_acl.cc | 20 ++++++++++++++--- 8 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 mysql-test/main/grant_plugin.result create mode 100644 mysql-test/main/grant_plugin.test diff --git a/mysql-test/main/grant5.result b/mysql-test/main/grant5.result index 9407c17f52e..817a58e6ec2 100644 --- a/mysql-test/main/grant5.result +++ b/mysql-test/main/grant5.result @@ -461,6 +461,14 @@ create table mysql.host (host char(60) binary default '' not null, db char(64) b insert mysql.host values('10.5.0.0/255.255.0.0','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','N'); flush privileges; drop table mysql.host; -# # End of 10.4 tests # +# MDEV-18151: Skipped error returning for GRANT/SET PASSWORD +# +CREATE USER foo@localhost; +GRANT FILE ON *.* TO foo@localhost IDENTIFIED VIA not_installed_plugin; +ERROR HY000: Plugin 'not_installed_plugin' is not loaded +DROP USER foo@localhost; +CREATE USER foo@localhost IDENTIFIED VIA not_installed_plugin; +ERROR HY000: Plugin 'not_installed_plugin' is not loaded +# End of 10.5 tests diff --git a/mysql-test/main/grant5.test b/mysql-test/main/grant5.test index a7b82f454dc..48cc3087ffc 100644 --- a/mysql-test/main/grant5.test +++ b/mysql-test/main/grant5.test @@ -419,6 +419,20 @@ insert mysql.host values('10.5.0.0/255.255.0.0','','Y','Y','Y','Y','Y','Y','Y',' flush privileges; drop table mysql.host; ---echo # --echo # End of 10.4 tests + --echo # +--echo # MDEV-18151: Skipped error returning for GRANT/SET PASSWORD +--echo # + +CREATE USER foo@localhost; +--error ER_PLUGIN_IS_NOT_LOADED +GRANT FILE ON *.* TO foo@localhost IDENTIFIED VIA not_installed_plugin; + +# Cleanup +DROP USER foo@localhost; + +--error ER_PLUGIN_IS_NOT_LOADED +CREATE USER foo@localhost IDENTIFIED VIA not_installed_plugin; + +--echo # End of 10.5 tests diff --git a/mysql-test/main/grant_plugin.result b/mysql-test/main/grant_plugin.result new file mode 100644 index 00000000000..bf5b42b28b6 --- /dev/null +++ b/mysql-test/main/grant_plugin.result @@ -0,0 +1,17 @@ +# +# MDEV-18151: Skipped error returning for GRANT/SET PASSWORD +# +install soname 'auth_0x0100'; +CREATE USER foo@localhost IDENTIFIED VIA auth_0x0100; +uninstall plugin auth_0x0100; +select Priv from mysql.global_priv where User = "foo" and host="localhost" +into @priv; +Warnings: +Warning 1287 ' INTO FROM...' instead +SET PASSWORD FOR foo@localhost = "1111"; +ERROR HY000: Plugin 'auth_0x0100' is not loaded +select Priv = @priv as "Nothing changed" from mysql.global_priv where User = "foo" and host="localhost"; +Nothing changed +1 +DROP USER foo@localhost; +# End of 10.5 tests diff --git a/mysql-test/main/grant_plugin.test b/mysql-test/main/grant_plugin.test new file mode 100644 index 00000000000..610176b0ce7 --- /dev/null +++ b/mysql-test/main/grant_plugin.test @@ -0,0 +1,24 @@ + +--source include/not_embedded.inc + +if (!$AUTH_0X0100_SO) { + skip No auth_0x0100 plugin; +} + +--echo # +--echo # MDEV-18151: Skipped error returning for GRANT/SET PASSWORD +--echo # + +install soname 'auth_0x0100'; +CREATE USER foo@localhost IDENTIFIED VIA auth_0x0100; +uninstall plugin auth_0x0100; + +select Priv from mysql.global_priv where User = "foo" and host="localhost" +into @priv; +--error ER_PLUGIN_IS_NOT_LOADED +SET PASSWORD FOR foo@localhost = "1111"; +select Priv = @priv as "Nothing changed" from mysql.global_priv where User = "foo" and host="localhost"; + +DROP USER foo@localhost; + +--echo # End of 10.5 tests diff --git a/mysql-test/main/plugin_auth.test b/mysql-test/main/plugin_auth.test index 6912462066c..54d4b6637cb 100644 --- a/mysql-test/main/plugin_auth.test +++ b/mysql-test/main/plugin_auth.test @@ -31,7 +31,7 @@ connect(plug_con,localhost,plug,plug_dest); select USER(),CURRENT_USER(); --echo ## test SET PASSWORD -#--error ER_SET_PASSWORD_AUTH_PLUGIN +# here we set for native password plugin SET PASSWORD = PASSWORD('plug_dest'); connection default; diff --git a/mysql-test/suite/plugins/r/multiauth.result b/mysql-test/suite/plugins/r/multiauth.result index d1ecd600d84..07238b0940d 100644 --- a/mysql-test/suite/plugins/r/multiauth.result +++ b/mysql-test/suite/plugins/r/multiauth.result @@ -139,6 +139,7 @@ show create user mysqltest1; CREATE USER for mysqltest1@% CREATE USER `mysqltest1`@`%` IDENTIFIED VIA unix_socket OR mysql_native_password USING '*BFE3F4604CFD21E6595080A261D92EF0183B5971' set password for mysqltest1 = password('foobar'); +ERROR HY000: SET PASSWORD is ignored for users authenticating via unix_socket plugin show create user mysqltest1; CREATE USER for mysqltest1@% CREATE USER `mysqltest1`@`%` IDENTIFIED VIA unix_socket OR mysql_native_password USING '*9B500343BC52E2911172EB52AE5CF4847604C6E5' diff --git a/mysql-test/suite/plugins/t/multiauth.test b/mysql-test/suite/plugins/t/multiauth.test index 86c98a5d5c3..8f8a093e401 100644 --- a/mysql-test/suite/plugins/t/multiauth.test +++ b/mysql-test/suite/plugins/t/multiauth.test @@ -145,6 +145,7 @@ set password for mysqltest1 = password('foobar'); show create user mysqltest1; alter user mysqltest1 identified via unix_socket OR mysql_native_password as password("some"); show create user mysqltest1; +--error ER_SET_PASSWORD_AUTH_PLUGIN set password for mysqltest1 = password('foobar'); show create user mysqltest1; alter user mysqltest1 identified via unix_socket; diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index d0fa2ff9c1f..cd579be8010 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -2312,11 +2312,10 @@ static int set_user_auth(THD *thd, const LEX_CSTRING &user, mysql_mutex_assert_owner(&acl_cache->lock); + // check for SET PASSWORD if (!plugin) { - push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, - ER_PLUGIN_IS_NOT_LOADED, - ER_THD(thd, ER_PLUGIN_IS_NOT_LOADED), plugin_name); + my_error(ER_PLUGIN_IS_NOT_LOADED, MYF(0), plugin_name); return ER_PLUGIN_IS_NOT_LOADED; } @@ -2370,6 +2369,21 @@ static int set_user_auth(THD *thd, const LEX_CSTRING &user, res= 0; end: + switch(res) + { + case ER_OUTOFMEMORY: // should be reported by my_malloc + case ER_NOT_VALID_PASSWORD: // should be reported by plugin + case ER_PASSWD_LENGTH: // should be reported by plugin + DBUG_ASSERT(thd->is_error()); + /* fall through*/ + case 0: + break; + case ER_SET_PASSWORD_AUTH_PLUGIN: + my_error(res, MYF(0), plugin_name); + break; + default: + DBUG_ASSERT(0); + } if (unlock_plugin) plugin_unlock(thd, plugin); return res; From b138f428ea2d3496a3a5a2212c424f8218547ef1 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Fri, 4 Oct 2024 10:15:35 +0200 Subject: [PATCH 022/121] MDEV-18151 Skipped error returning for GRANT/SET PASSWORD Make message of error not warning. --- mysql-test/main/failed_auth_unixsocket.result | 8 ++++++++ mysql-test/main/failed_auth_unixsocket.test | 14 ++++++++++++++ mysql-test/suite/plugins/r/multiauth.result | 4 ++-- sql/share/errmsg-utf8.txt | 4 ++-- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/mysql-test/main/failed_auth_unixsocket.result b/mysql-test/main/failed_auth_unixsocket.result index 7e8b8fe70b9..084eb2fab64 100644 --- a/mysql-test/main/failed_auth_unixsocket.result +++ b/mysql-test/main/failed_auth_unixsocket.result @@ -8,3 +8,11 @@ ERROR 28000: Access denied for user 'USER'@'localhost' replace mysql.global_priv select * from global_priv_backup; flush privileges; drop table global_priv_backup; +# +# MDEV-18151: Skipped error returning for GRANT/SET PASSWORD +# +CREATE USER foo; +GRANT EXECUTE ON * TO foo IDENTIFIED WITH unix_socket AS PASSWORD('bar'); +ERROR HY000: SET PASSWORD is not applicable for users authenticating via unix_socket plugin +DROP USER foo; +# End of 10.5 tests diff --git a/mysql-test/main/failed_auth_unixsocket.test b/mysql-test/main/failed_auth_unixsocket.test index fe80d947036..5a77e1cdbda 100644 --- a/mysql-test/main/failed_auth_unixsocket.test +++ b/mysql-test/main/failed_auth_unixsocket.test @@ -27,3 +27,17 @@ change_user $USER; replace mysql.global_priv select * from global_priv_backup; flush privileges; drop table global_priv_backup; + + +--echo # +--echo # MDEV-18151: Skipped error returning for GRANT/SET PASSWORD +--echo # + +CREATE USER foo; +--error ER_SET_PASSWORD_AUTH_PLUGIN +GRANT EXECUTE ON * TO foo IDENTIFIED WITH unix_socket AS PASSWORD('bar'); + +# Cleanup +DROP USER foo; + +--echo # End of 10.5 tests diff --git a/mysql-test/suite/plugins/r/multiauth.result b/mysql-test/suite/plugins/r/multiauth.result index 07238b0940d..e002172073e 100644 --- a/mysql-test/suite/plugins/r/multiauth.result +++ b/mysql-test/suite/plugins/r/multiauth.result @@ -139,13 +139,13 @@ show create user mysqltest1; CREATE USER for mysqltest1@% CREATE USER `mysqltest1`@`%` IDENTIFIED VIA unix_socket OR mysql_native_password USING '*BFE3F4604CFD21E6595080A261D92EF0183B5971' set password for mysqltest1 = password('foobar'); -ERROR HY000: SET PASSWORD is ignored for users authenticating via unix_socket plugin +ERROR HY000: SET PASSWORD is not applicable for users authenticating via unix_socket plugin show create user mysqltest1; CREATE USER for mysqltest1@% CREATE USER `mysqltest1`@`%` IDENTIFIED VIA unix_socket OR mysql_native_password USING '*9B500343BC52E2911172EB52AE5CF4847604C6E5' alter user mysqltest1 identified via unix_socket; set password for mysqltest1 = password('bla'); -ERROR HY000: SET PASSWORD is ignored for users authenticating via unix_socket plugin +ERROR HY000: SET PASSWORD is not applicable for users authenticating via unix_socket plugin alter user mysqltest1 identified via mysql_native_password as password("some") or unix_socket; show create user mysqltest1; CREATE USER for mysqltest1@% diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index 13642a62c73..96bdb38f335 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7235,8 +7235,8 @@ ER_ACCESS_DENIED_NO_PASSWORD_ERROR 28000 ukr "Доступ заборонено для користувача: '%s'@'%s'" ER_SET_PASSWORD_AUTH_PLUGIN - chi "通过%s插件验证的用户忽略SET PASSWORD" - eng "SET PASSWORD is ignored for users authenticating via %s plugin" + eng "SET PASSWORD is not applicable for users authenticating via %s plugin" + ukr "SET PASSWORD не можна застосувати для користувачів, що автентифікуються з допомогою плагінy %s" ER_GRANT_PLUGIN_USER_EXISTS chi "由于用户%-.*s已经存在,GRANT IDENTIFIED WITH授权是非法的" From a79c9b3812862013d6faa67f88f274c0e173be30 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Mon, 14 Oct 2024 09:36:17 +0200 Subject: [PATCH 023/121] MDEV-35135 Assertion `!is_cond()' failed in Item_bool_func::val_int / do_select Change val_int with val_bool when it is a condition. --- mysql-test/main/type_bool.result | 10 ++++++++++ mysql-test/main/type_bool.test | 13 +++++++++++++ sql/opt_subselect.cc | 4 ++-- sql/opt_sum.cc | 4 ++-- sql/sql_help.cc | 8 ++++---- sql/sql_join_cache.cc | 2 +- sql/sql_select.cc | 26 +++++++++++++------------- 7 files changed, 45 insertions(+), 22 deletions(-) create mode 100644 mysql-test/main/type_bool.result create mode 100644 mysql-test/main/type_bool.test diff --git a/mysql-test/main/type_bool.result b/mysql-test/main/type_bool.result new file mode 100644 index 00000000000..b529aa5f828 --- /dev/null +++ b/mysql-test/main/type_bool.result @@ -0,0 +1,10 @@ +# +# MDEV-35135: Assertion `!is_cond()' failed in Item_bool_func::val_int / +# do_select +# +CREATE TABLE t (a INT) ENGINE=MyISAM; +INSERT INTO t VALUES (1); +SELECT VARIANCE(a) AS f1, VARIANCE(a) AS f2 FROM t WHERE ROWNUM() = 2 HAVING f1 > 1; +f1 f2 +DROP TABLE t; +# End of 10.6 tests diff --git a/mysql-test/main/type_bool.test b/mysql-test/main/type_bool.test new file mode 100644 index 00000000000..43d3673f0d6 --- /dev/null +++ b/mysql-test/main/type_bool.test @@ -0,0 +1,13 @@ +--echo # +--echo # MDEV-35135: Assertion `!is_cond()' failed in Item_bool_func::val_int / +--echo # do_select +--echo # + +CREATE TABLE t (a INT) ENGINE=MyISAM; +INSERT INTO t VALUES (1); +SELECT VARIANCE(a) AS f1, VARIANCE(a) AS f2 FROM t WHERE ROWNUM() = 2 HAVING f1 > 1; + +# Cleanup +DROP TABLE t; + +--echo # End of 10.6 tests diff --git a/sql/opt_subselect.cc b/sql/opt_subselect.cc index 3dc281bca10..fa3379e30b4 100644 --- a/sql/opt_subselect.cc +++ b/sql/opt_subselect.cc @@ -5984,7 +5984,7 @@ Item *and_new_conditions_to_optimized_cond(THD *thd, Item *cond, List_iterator_fast ei(*cond_equalities); while ((mult_eq= ei++)) { - if (mult_eq->const_item() && !mult_eq->val_int()) + if (mult_eq->const_item() && !mult_eq->val_bool()) is_simplified_cond= true; else { @@ -6074,7 +6074,7 @@ Item *and_new_conditions_to_optimized_cond(THD *thd, Item *cond, List_iterator_fast ei(new_cond_equal.current_level); while ((mult_eq=ei++)) { - if (mult_eq->const_item() && !mult_eq->val_int()) + if (mult_eq->const_item() && !mult_eq->val_bool()) is_simplified_cond= true; else { diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc index 5a9c9282df7..fb5c9a5b0ee 100644 --- a/sql/opt_sum.cc +++ b/sql/opt_sum.cc @@ -809,7 +809,7 @@ static bool matching_cond(bool max_fl, TABLE_REF *ref, KEY *keyinfo, if (org_key_part_used != *key_part_used || (is_field_part && - (between || eq_type || max_fl == less_fl) && !cond->val_int())) + (between || eq_type || max_fl == less_fl) && !cond->val_bool())) { /* It's the first predicate for this part or a predicate of the @@ -859,7 +859,7 @@ static bool matching_cond(bool max_fl, TABLE_REF *ref, KEY *keyinfo, } else if (eq_type) { - if ((!is_null && !cond->val_int()) || + if ((!is_null && !cond->val_bool()) || (is_null && !MY_TEST(part->field->is_null()))) DBUG_RETURN(FALSE); // Impossible test } diff --git a/sql/sql_help.cc b/sql/sql_help.cc index 34e77e3773f..49addd9cfa3 100644 --- a/sql/sql_help.cc +++ b/sql/sql_help.cc @@ -203,7 +203,7 @@ int search_topics(THD *thd, TABLE *topics, struct st_find_field *find_fields, while (!read_record_info.read_record()) { - if (!select->cond->val_int()) // Doesn't match like + if (!select->cond->val_bool()) // Doesn't match like continue; memorize_variant_topic(thd,topics,count,find_fields, names,name,description,example); @@ -247,7 +247,7 @@ int search_keyword(THD *thd, TABLE *keywords, while (!read_record_info.read_record() && count<2) { - if (!select->cond->val_int()) // Dosn't match like + if (!select->cond->val_bool()) // Dosn't match like continue; *key_id= (int)find_fields[help_keyword_help_keyword_id].field->val_int(); @@ -381,7 +381,7 @@ int search_categories(THD *thd, TABLE *categories, DBUG_RETURN(0); while (!read_record_info.read_record()) { - if (select && !select->cond->val_int()) + if (select && !select->cond->val_bool()) continue; String *lname= new (thd->mem_root) String; get_field(thd->mem_root,pfname,lname); @@ -419,7 +419,7 @@ void get_all_items_for_category(THD *thd, TABLE *items, Field *pfname, while (!read_record_info.read_record()) { - if (!select->cond->val_int()) + if (!select->cond->val_bool()) continue; String *name= new (thd->mem_root) String(); get_field(thd->mem_root,pfname,name); diff --git a/sql/sql_join_cache.cc b/sql/sql_join_cache.cc index 53a8145f661..bd2174cde81 100644 --- a/sql/sql_join_cache.cc +++ b/sql/sql_join_cache.cc @@ -4828,7 +4828,7 @@ bool JOIN_CACHE_BKAH::skip_index_tuple(range_id_t range_info) next_rec_ref_ptr= get_next_rec_ref(next_rec_ref_ptr); uchar *rec_ptr= next_rec_ref_ptr + rec_fields_offset; get_record_by_pos(rec_ptr); - if (join_tab->cache_idx_cond->val_int()) + if (join_tab->cache_idx_cond->val_bool()) DBUG_RETURN(FALSE); } while(next_rec_ref_ptr != last_rec_ref_ptr); DBUG_RETURN(TRUE); diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 7ae8e71fa4b..cef2ad90146 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -17219,7 +17219,7 @@ Item *eliminate_item_equal(THD *thd, COND *cond, COND_EQUAL *upper_levels, { List eq_list; Item_func_eq *eq_item= 0; - if (((Item *) item_equal)->const_item() && !item_equal->val_int()) + if (((Item *) item_equal)->const_item() && !item_equal->val_bool()) return (Item*) &Item_false; Item *item_const= item_equal->get_const(); Item_equal_fields_iterator it(*item_equal); @@ -17288,7 +17288,7 @@ Item *eliminate_item_equal(THD *thd, COND *cond, COND_EQUAL *upper_levels, Item_func_eq *func= new (thd->mem_root) Item_func_eq(thd, item_const, upper_const); func->set_cmp_func(thd); func->quick_fix_field(); - if (func->val_int()) + if (func->val_bool()) item= 0; } else @@ -18745,7 +18745,7 @@ void propagate_new_equalities(THD *thd, Item *cond, List_iterator ei(*cond_equalities); while ((equal_item= ei++)) { - if (equal_item->const_item() && !equal_item->val_int()) + if (equal_item->const_item() && !equal_item->val_bool()) { *is_simplifiable_cond= true; return; @@ -18776,7 +18776,7 @@ void propagate_new_equalities(THD *thd, Item *cond, { equality->merge_with_check(thd, equal_item, true); } - if (equality->const_item() && !equality->val_int()) + if (equality->const_item() && !equality->val_bool()) *is_simplifiable_cond= true; } else @@ -18941,7 +18941,7 @@ Item_cond::remove_eq_conds(THD *thd, Item::cond_result *cond_value, Item_equal *eq_item; while ((eq_item= it++)) { - if (eq_item->const_item() && eq_item->val_int()) + if (eq_item->const_item() && eq_item->val_bool()) it.remove(); } cond_arg_list->append((List *) cond_equalities); @@ -19088,7 +19088,7 @@ Item_cond::remove_eq_conds(THD *thd, Item::cond_result *cond_value, List_iterator_fast ei(*cond_equalities); while ((equality= ei++)) { - if (equality->const_item() && !equality->val_int()) + if (equality->const_item() && !equality->val_bool()) { *cond_value= Item::COND_FALSE; return (COND*) 0; @@ -21810,7 +21810,7 @@ do_select(JOIN *join, Procedure *procedure) */ clear_tables(join, &cleared_tables); } - if (!join->having || join->having->val_int()) + if (!join->having || join->having->val_bool()) { List *columns_list= (procedure ? &join->procedure_fields_list : join->fields); @@ -22302,7 +22302,7 @@ sub_select(JOIN *join,JOIN_TAB *join_tab,bool end_of_records) /* Set first_unmatched for the last inner table of this group */ join_tab->last_inner->first_unmatched= join_tab; - if (join_tab->on_precond && !join_tab->on_precond->val_int()) + if (join_tab->on_precond && !join_tab->on_precond->val_bool()) rc= NESTED_LOOP_NO_MORE_ROWS; } join->thd->get_stmt_da()->reset_current_row_for_warning(); @@ -22481,7 +22481,7 @@ evaluate_join_record(JOIN *join, JOIN_TAB *join_tab, */ if (tab->select_cond) { - const longlong res= tab->select_cond->val_int(); + const longlong res= tab->select_cond->val_bool(); if (join->thd->is_error()) DBUG_RETURN(NESTED_LOOP_ERROR); @@ -22620,7 +22620,7 @@ evaluate_null_complemented_join_record(JOIN *join, JOIN_TAB *join_tab) mark_as_null_row(join_tab->table); // For group by without error select_cond= join_tab->select_cond; /* Check all attached conditions for inner table rows. */ - if (select_cond && !select_cond->val_int()) + if (select_cond && !select_cond->val_bool()) return NESTED_LOOP_OK; } join_tab--; @@ -22642,7 +22642,7 @@ evaluate_null_complemented_join_record(JOIN *join, JOIN_TAB *join_tab) first_unmatched->found= 1; for (JOIN_TAB *tab= first_unmatched; tab <= join_tab; tab++) { - if (tab->select_cond && !tab->select_cond->val_int()) + if (tab->select_cond && !tab->select_cond->val_bool()) { join->return_tab= tab; return NESTED_LOOP_OK; @@ -23738,7 +23738,7 @@ end_send_group(JOIN *join, JOIN_TAB *join_tab, bool end_of_records) int error=0; if (join->procedure) { - if (join->having && join->having->val_int() == 0) + if (join->having && !join->having->val_bool()) error= -1; // Didn't satisfy having else { @@ -28446,7 +28446,7 @@ int JOIN::rollup_write_data(uint idx, TMP_TABLE_PARAM *tmp_table_param_arg, { /* Get reference pointers to sum functions in place */ copy_ref_ptr_array(ref_ptrs, rollup.ref_pointer_arrays[i]); - if ((!having || having->val_int())) + if ((!having || having->val_bool())) { int write_error; Item *item; From 5777d9f2821011101423209a1e4994939ef44818 Mon Sep 17 00:00:00 2001 From: Thirunarayanan Balathandayuthapani Date: Mon, 14 Oct 2024 02:25:25 +0530 Subject: [PATCH 024/121] MDEV-35116 InnoDB fails to set error index for HA_ERR_NULL_IN_SPATIAL - InnoDB fails to set the index information or index number for the spatial index error HA_ERR_NULL_IN_SPATIAL. row_build_spatial_index_key(): Initialize the tmp_mbr array completely. check_if_supported_inplace_alter(): Fix the spelling mistake of alter --- .../suite/innodb/r/instant_alter.result | 30 +++++++++---------- mysql-test/suite/innodb_gis/r/rtree.result | 14 +++++++++ mysql-test/suite/innodb_gis/t/rtree.test | 16 ++++++++++ storage/innobase/handler/ha_innodb.cc | 1 + storage/innobase/handler/handler0alter.cc | 2 +- storage/innobase/row/row0ins.cc | 28 ++++++++--------- storage/innobase/row/row0merge.cc | 1 + storage/innobase/row/row0row.cc | 2 +- 8 files changed, 62 insertions(+), 32 deletions(-) diff --git a/mysql-test/suite/innodb/r/instant_alter.result b/mysql-test/suite/innodb/r/instant_alter.result index 4a67e04205b..6c319454e4f 100644 --- a/mysql-test/suite/innodb/r/instant_alter.result +++ b/mysql-test/suite/innodb/r/instant_alter.result @@ -552,18 +552,18 @@ ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=never. Try ALGORITHM=INPLACE SET GLOBAL innodb_instant_alter_column_allowed = add_last; ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_atler_column_allowed=add_last. Try ALGORITHM=INPLACE +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=add_last. Try ALGORITHM=INPLACE ALTER TABLE t1 ADD d TEXT AFTER a, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_atler_column_allowed=add_last. Try ALGORITHM=INPLACE +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=add_last. Try ALGORITHM=INPLACE SET GLOBAL innodb_instant_alter_column_allowed = add_drop_reorder; ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; SET GLOBAL innodb_instant_alter_column_allowed = add_last; ALTER TABLE t1 MODIFY a INT DEFAULT 1, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_atler_column_allowed=add_last. Try ALGORITHM=INPLACE +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=add_last. Try ALGORITHM=INPLACE ALTER TABLE t1 ADD d TEXT AFTER a, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_atler_column_allowed=add_last. Try ALGORITHM=INPLACE +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=add_last. Try ALGORITHM=INPLACE ALTER TABLE t1 MODIFY a INT DEFAULT 0, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_atler_column_allowed=add_last. Try ALGORITHM=INPLACE +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=add_last. Try ALGORITHM=INPLACE ALTER TABLE t1 MODIFY a INT DEFAULT 0; affected rows: 0 info: Records: 0 Duplicates: 0 Warnings: 0 @@ -1486,18 +1486,18 @@ ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=never. Try ALGORITHM=INPLACE SET GLOBAL innodb_instant_alter_column_allowed = add_last; ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_atler_column_allowed=add_last. Try ALGORITHM=INPLACE +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=add_last. Try ALGORITHM=INPLACE ALTER TABLE t1 ADD d TEXT AFTER a, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_atler_column_allowed=add_last. Try ALGORITHM=INPLACE +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=add_last. Try ALGORITHM=INPLACE SET GLOBAL innodb_instant_alter_column_allowed = add_drop_reorder; ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; SET GLOBAL innodb_instant_alter_column_allowed = add_last; ALTER TABLE t1 MODIFY a INT DEFAULT 1, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_atler_column_allowed=add_last. Try ALGORITHM=INPLACE +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=add_last. Try ALGORITHM=INPLACE ALTER TABLE t1 ADD d TEXT AFTER a, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_atler_column_allowed=add_last. Try ALGORITHM=INPLACE +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=add_last. Try ALGORITHM=INPLACE ALTER TABLE t1 MODIFY a INT DEFAULT 0, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_atler_column_allowed=add_last. Try ALGORITHM=INPLACE +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=add_last. Try ALGORITHM=INPLACE ALTER TABLE t1 MODIFY a INT DEFAULT 0; affected rows: 0 info: Records: 0 Duplicates: 0 Warnings: 0 @@ -2420,18 +2420,18 @@ ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=never. Try ALGORITHM=INPLACE SET GLOBAL innodb_instant_alter_column_allowed = add_last; ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_atler_column_allowed=add_last. Try ALGORITHM=INPLACE +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=add_last. Try ALGORITHM=INPLACE ALTER TABLE t1 ADD d TEXT AFTER a, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_atler_column_allowed=add_last. Try ALGORITHM=INPLACE +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=add_last. Try ALGORITHM=INPLACE SET GLOBAL innodb_instant_alter_column_allowed = add_drop_reorder; ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; SET GLOBAL innodb_instant_alter_column_allowed = add_last; ALTER TABLE t1 MODIFY a INT DEFAULT 1, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_atler_column_allowed=add_last. Try ALGORITHM=INPLACE +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=add_last. Try ALGORITHM=INPLACE ALTER TABLE t1 ADD d TEXT AFTER a, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_atler_column_allowed=add_last. Try ALGORITHM=INPLACE +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=add_last. Try ALGORITHM=INPLACE ALTER TABLE t1 MODIFY a INT DEFAULT 0, ALGORITHM=INSTANT; -ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_atler_column_allowed=add_last. Try ALGORITHM=INPLACE +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_instant_alter_column_allowed=add_last. Try ALGORITHM=INPLACE ALTER TABLE t1 MODIFY a INT DEFAULT 0; affected rows: 0 info: Records: 0 Duplicates: 0 Warnings: 0 diff --git a/mysql-test/suite/innodb_gis/r/rtree.result b/mysql-test/suite/innodb_gis/r/rtree.result index 11451821386..e8bca379c68 100644 --- a/mysql-test/suite/innodb_gis/r/rtree.result +++ b/mysql-test/suite/innodb_gis/r/rtree.result @@ -866,3 +866,17 @@ INSERT INTO `address` VALUES (1,'47 MySakila Drive',NULL,'Alberta',300,'','',0x0 (605,'1325 Fukuyama Street','','Heilongjiang',537,'27107','288241215394',0x00000000010100000017540A70700160401E1C47077F7D4740,'2014-09-25 22:30:44'); COMMIT; DROP TABLE address; +# +# MDEV-35116 InnoDB fails to set error index +# for HA_ERR_NULL_IN_SPATIAL +# +BINLOG ' SOgWTg8BAAAAbgAAAHIAAAAAAAQANS42LjMtbTUtZGVidWctbG9nAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABI6BZOEzgNAAgAEgAEBAQEEgAAVgAEGggAAAAICAgCAAAAAAVAYI8='; +CREATE TABLE t1 (i INT, g GEOMETRY NOT NULL, +SPATIAL INDEX (g)) ENGINE=InnoDB; +CREATE TEMPORARY TABLE t2 (PRIMARY KEY(a)) ENGINE=InnoDB +WITH RECURSIVE t(a) AS (VALUES(1),(1)) SELECT * FROM t; +ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +call mtr.add_suppression("BINLOG_BASE64_EVENT: Could not execute Write_rows_v1 event on table .*"); +BINLOG ' SVtYRxMBAAAAKQAAADQBAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE=SVtYRxcBAAAAIgAAAFYBAAAQABAAAAAAAAEAAf /+ AgAAAA=='; +ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field +DROP TABLE t1; diff --git a/mysql-test/suite/innodb_gis/t/rtree.test b/mysql-test/suite/innodb_gis/t/rtree.test index 98931e70e62..7cccb56a2d5 100644 --- a/mysql-test/suite/innodb_gis/t/rtree.test +++ b/mysql-test/suite/innodb_gis/t/rtree.test @@ -851,3 +851,19 @@ INSERT INTO `address` VALUES (1,'47 MySakila Drive',NULL,'Alberta',300,'','',0x0 COMMIT; DROP TABLE address; + +--echo # +--echo # MDEV-35116 InnoDB fails to set error index +--echo # for HA_ERR_NULL_IN_SPATIAL +--echo # +BINLOG ' SOgWTg8BAAAAbgAAAHIAAAAAAAQANS42LjMtbTUtZGVidWctbG9nAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABI6BZOEzgNAAgAEgAEBAQEEgAAVgAEGggAAAAICAgCAAAAAAVAYI8='; +CREATE TABLE t1 (i INT, g GEOMETRY NOT NULL, + SPATIAL INDEX (g)) ENGINE=InnoDB; +--error ER_DUP_ENTRY +CREATE TEMPORARY TABLE t2 (PRIMARY KEY(a)) ENGINE=InnoDB +WITH RECURSIVE t(a) AS (VALUES(1),(1)) SELECT * FROM t; + +call mtr.add_suppression("BINLOG_BASE64_EVENT: Could not execute Write_rows_v1 event on table .*"); +--error ER_CANT_CREATE_GEOMETRY_OBJECT +BINLOG ' SVtYRxMBAAAAKQAAADQBAAAAABAAAAAAAAAABHRlc3QAAnQxAAEDAAE=SVtYRxcBAAAAIgAAAFYBAAAQABAAAAAAAAEAAf /+ AgAAAA=='; +DROP TABLE t1; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 7fe91cd6c17..f12212c1aeb 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -8140,6 +8140,7 @@ calc_row_difference( to block it. */ if (DATA_GEOMETRY_MTYPE(col_type) && o_len != 0 && n_len == 0) { + trx->error_info = clust_index; return(DB_CANT_CREATE_GEOMETRY_OBJECT); } diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 9053762014d..936333ecba5 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -2108,7 +2108,7 @@ innodb_instant_alter_column_allowed_reason: if ((ha_alter_info->handler_flags & (ALTER_STORED_COLUMN_ORDER | ALTER_DROP_STORED_COLUMN)) || m_prebuilt->table->instant) { - reason_rebuild = "innodb_instant_atler_column_allowed=" + reason_rebuild = "innodb_instant_alter_column_allowed=" "add_last"; goto innodb_instant_alter_column_allowed_reason; } diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc index 4f14ccbd7ab..d0b640338e4 100644 --- a/storage/innobase/row/row0ins.cc +++ b/storage/innobase/row/row0ins.cc @@ -3434,24 +3434,22 @@ row_ins_spatial_index_entry_set_mbr_field( /** Sets the values of the dtuple fields in entry from the values of appropriate columns in row. -@param[in] index index handler -@param[out] entry index entry to make -@param[in] row row -@return DB_SUCCESS if the set is successful */ +@param[in] node row insert node +@param[in] thr query thread +@retval DB_SUCCESS if the set is successful +@retval DB_CANT_CREATE_GEOMETRY_OBJECT when spatial index fails to +create geometry object */ static dberr_t -row_ins_index_entry_set_vals( - const dict_index_t* index, - dtuple_t* entry, - const dtuple_t* row) +row_ins_index_entry_set_vals(const ins_node_t* node, que_thr_t* thr) { - ulint n_fields; - ulint i; + const dict_index_t* index = node->index; + dtuple_t* entry = *node->entry; + const dtuple_t* row = node->row; ulint num_v = dtuple_get_n_v_fields(entry); + ulint n_fields = dtuple_get_n_fields(entry); - n_fields = dtuple_get_n_fields(entry); - - for (i = 0; i < n_fields + num_v; i++) { + for (ulint i = 0; i < n_fields + num_v; i++) { dict_field_t* ind_field = NULL; dfield_t* field; const dfield_t* row_field; @@ -3521,6 +3519,7 @@ row_ins_index_entry_set_vals( if ((i == 0) && dict_index_is_spatial(index)) { if (!row_field->data || row_field->len < GEO_DATA_HEADER_SIZE) { + thr_get_trx(thr)->error_info = index; return(DB_CANT_CREATE_GEOMETRY_OBJECT); } row_ins_spatial_index_entry_set_mbr_field( @@ -3555,8 +3554,7 @@ row_ins_index_entry_step( ut_ad(dtuple_check_typed(node->row)); - err = row_ins_index_entry_set_vals(node->index, *node->entry, - node->row); + err = row_ins_index_entry_set_vals(node, thr); if (err != DB_SUCCESS) { DBUG_RETURN(err); diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc index 9a44bb7d314..14c761e301c 100644 --- a/storage/innobase/row/row0merge.cc +++ b/storage/innobase/row/row0merge.cc @@ -2292,6 +2292,7 @@ write_buffers: error. */ if (!row_geo_field_is_valid(row, buf->index)) { err = DB_CANT_CREATE_GEOMETRY_OBJECT; + trx->error_key_num = i; break; } diff --git a/storage/innobase/row/row0row.cc b/storage/innobase/row/row0row.cc index 30622d031ea..ebd6b248721 100644 --- a/storage/innobase/row/row0row.cc +++ b/storage/innobase/row/row0row.cc @@ -162,7 +162,7 @@ static bool row_build_spatial_index_key( write_mbr: if (dlen <= GEO_DATA_HEADER_SIZE) { - for (uint i = 0; i < SPDIMS; i += 2) { + for (uint i = 0; i < 2 * SPDIMS; i += 2) { tmp_mbr[i] = DBL_MAX; tmp_mbr[i + 1] = -DBL_MAX; } From d5f5062a48d22d7ca3444831b48c5e5328a8acef Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Mon, 14 Oct 2024 13:09:20 +0200 Subject: [PATCH 025/121] our release packages on rhel8 use bundled readline for historical reasons, but we keep doing it for compatibility --- cmake/build_configurations/mysql_release.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmake/build_configurations/mysql_release.cmake b/cmake/build_configurations/mysql_release.cmake index 03eda11db54..8f306548dc9 100644 --- a/cmake/build_configurations/mysql_release.cmake +++ b/cmake/build_configurations/mysql_release.cmake @@ -117,6 +117,9 @@ ELSEIF(RPM) SET(WITH_ROCKSDB_LZ4 OFF CACHE STRING "") SET(GRN_WITH_LZ4 no CACHE STRING "") ENDIF() + IF(RPM MATCHES "rhel8") + SET(WITH_READLINE ON CACHE BOOL "") + ENDIF() ELSEIF(DEB) SET(WITH_SSL system CACHE STRING "") SET(WITH_ZLIB system CACHE STRING "") From 8a52639ede533affdc35272894819daff581e7c8 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Wed, 7 Aug 2024 13:27:44 +1000 Subject: [PATCH 026/121] MDEV-34716 spider: some trivial cleanups and documentation - document tmp_share, which are temporary spider shares with only one link (no ha) - simplify spider_get_sys_tables_connect_info() where link_idx is always 0 --- storage/spider/spd_copy_tables.cc | 1 + storage/spider/spd_include.h | 3 + storage/spider/spd_sys_table.cc | 192 +++++++++++++++--------------- storage/spider/spd_table.cc | 10 +- storage/spider/spd_trx.cc | 1 + 5 files changed, 106 insertions(+), 101 deletions(-) diff --git a/storage/spider/spd_copy_tables.cc b/storage/spider/spd_copy_tables.cc index d76c8e425ec..4c361df0562 100644 --- a/storage/spider/spd_copy_tables.cc +++ b/storage/spider/spd_copy_tables.cc @@ -249,6 +249,7 @@ int spider_udf_get_copy_tgt_tables( char table_key[MAX_KEY_LENGTH]; SPIDER_COPY_TABLE_CONN *table_conn = NULL, *src_table_conn_prev = NULL, *dst_table_conn_prev = NULL; + /* This share has only one link. */ SPIDER_SHARE *tmp_share; char **tmp_connect_info; uint *tmp_connect_info_length; diff --git a/storage/spider/spd_include.h b/storage/spider/spd_include.h index 473bdc2c416..7371c6da6f3 100644 --- a/storage/spider/spd_include.h +++ b/storage/spider/spd_include.h @@ -1440,6 +1440,7 @@ typedef struct st_spider_mon_table_result typedef struct st_spider_table_mon { + /* This share has only one link. */ SPIDER_SHARE *share; uint32 server_id; st_spider_table_mon_list *parent; @@ -1466,6 +1467,7 @@ typedef struct st_spider_table_mon_list SPIDER_TABLE_MON *current; volatile int mon_status; + /* This share has only one link */ SPIDER_SHARE *share; pthread_mutex_t caller_mutex; @@ -1479,6 +1481,7 @@ typedef struct st_spider_table_mon_list typedef struct st_spider_copy_table_conn { + /* This share has only one link. */ SPIDER_SHARE *share; int link_idx; SPIDER_CONN *conn; diff --git a/storage/spider/spd_sys_table.cc b/storage/spider/spd_sys_table.cc index 9e39ffc8d90..d65a9f72f8c 100644 --- a/storage/spider/spd_sys_table.cc +++ b/storage/spider/spd_sys_table.cc @@ -2095,9 +2095,7 @@ int spider_get_sys_tables_connect_info( ) { char *ptr; int error_num = 0; - const int link_idx= 0; DBUG_ENTER("spider_get_sys_tables_connect_info"); - DBUG_PRINT("info",("spider link_idx:%d", link_idx)); if ((ptr = get_field(mem_root, table->field[SPIDER_TABLES_PRIORITY_POS]))) { share->priority = my_strtoll10(ptr, (char**) NULL, &error_num); @@ -2108,223 +2106,223 @@ int spider_get_sys_tables_connect_info( !table->field[SPIDER_TABLES_SERVER_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_SERVER_POS])) ) { - share->server_names_lengths[link_idx] = strlen(ptr); - share->server_names[link_idx] = - spider_create_string(ptr, share->server_names_lengths[link_idx]); + share->server_names_lengths[0] = strlen(ptr); + share->server_names[0] = + spider_create_string(ptr, share->server_names_lengths[0]); DBUG_PRINT("info",("spider server_name:%s", - share->server_names[link_idx])); + share->server_names[0])); } else { - share->server_names_lengths[link_idx] = 0; - share->server_names[link_idx] = NULL; + share->server_names_lengths[0] = 0; + share->server_names[0] = NULL; DBUG_PRINT("info",("spider server_name is NULL")); } if ( !table->field[SPIDER_TABLES_SCHEME_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_SCHEME_POS])) ) { - share->tgt_wrappers_lengths[link_idx] = strlen(ptr); - share->tgt_wrappers[link_idx] = - spider_create_string(ptr, share->tgt_wrappers_lengths[link_idx]); + share->tgt_wrappers_lengths[0] = strlen(ptr); + share->tgt_wrappers[0] = + spider_create_string(ptr, share->tgt_wrappers_lengths[0]); DBUG_PRINT("info",("spider tgt_wrapper:%s", - share->tgt_wrappers[link_idx])); + share->tgt_wrappers[0])); } else { - share->tgt_wrappers_lengths[link_idx] = 0; - share->tgt_wrappers[link_idx] = NULL; + share->tgt_wrappers_lengths[0] = 0; + share->tgt_wrappers[0] = NULL; DBUG_PRINT("info",("spider tgt_wrapper is NULL")); } if ( !table->field[SPIDER_TABLES_HOST_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_HOST_POS])) ) { - share->tgt_hosts_lengths[link_idx] = strlen(ptr); - share->tgt_hosts[link_idx] = - spider_create_string(ptr, share->tgt_hosts_lengths[link_idx]); + share->tgt_hosts_lengths[0] = strlen(ptr); + share->tgt_hosts[0] = + spider_create_string(ptr, share->tgt_hosts_lengths[0]); DBUG_PRINT("info",("spider tgt_host:%s", - share->tgt_hosts[link_idx])); + share->tgt_hosts[0])); } else { - share->tgt_hosts_lengths[link_idx] = 0; - share->tgt_hosts[link_idx] = NULL; + share->tgt_hosts_lengths[0] = 0; + share->tgt_hosts[0] = NULL; DBUG_PRINT("info",("spider tgt_host is NULL")); } if ( !table->field[SPIDER_TABLES_PORT_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_PORT_POS])) ) { - share->tgt_ports[link_idx] = atol(ptr); + share->tgt_ports[0] = atol(ptr); } else { - share->tgt_ports[link_idx] = -1; + share->tgt_ports[0] = -1; } - DBUG_PRINT("info",("spider port:%ld", share->tgt_ports[link_idx])); + DBUG_PRINT("info",("spider port:%ld", share->tgt_ports[0])); if ( !table->field[SPIDER_TABLES_SOCKET_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_SOCKET_POS])) ) { - share->tgt_sockets_lengths[link_idx] = strlen(ptr); - share->tgt_sockets[link_idx] = - spider_create_string(ptr, share->tgt_sockets_lengths[link_idx]); + share->tgt_sockets_lengths[0] = strlen(ptr); + share->tgt_sockets[0] = + spider_create_string(ptr, share->tgt_sockets_lengths[0]); } else { - share->tgt_sockets_lengths[link_idx] = 0; - share->tgt_sockets[link_idx] = NULL; + share->tgt_sockets_lengths[0] = 0; + share->tgt_sockets[0] = NULL; } if ( !table->field[SPIDER_TABLES_USERNAME_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_USERNAME_POS])) ) { - share->tgt_usernames_lengths[link_idx] = strlen(ptr); - share->tgt_usernames[link_idx] = - spider_create_string(ptr, share->tgt_usernames_lengths[link_idx]); + share->tgt_usernames_lengths[0] = strlen(ptr); + share->tgt_usernames[0] = + spider_create_string(ptr, share->tgt_usernames_lengths[0]); } else { - share->tgt_usernames_lengths[link_idx] = 0; - share->tgt_usernames[link_idx] = NULL; + share->tgt_usernames_lengths[0] = 0; + share->tgt_usernames[0] = NULL; } if ( !table->field[SPIDER_TABLES_PASSWORD_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_PASSWORD_POS])) ) { - share->tgt_passwords_lengths[link_idx] = strlen(ptr); - share->tgt_passwords[link_idx] = - spider_create_string(ptr, share->tgt_passwords_lengths[link_idx]); + share->tgt_passwords_lengths[0] = strlen(ptr); + share->tgt_passwords[0] = + spider_create_string(ptr, share->tgt_passwords_lengths[0]); } else { - share->tgt_passwords_lengths[link_idx] = 0; - share->tgt_passwords[link_idx] = NULL; + share->tgt_passwords_lengths[0] = 0; + share->tgt_passwords[0] = NULL; } if ( !table->field[SPIDER_TABLES_SSL_CA_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_SSL_CA_POS])) ) { - share->tgt_ssl_cas_lengths[link_idx] = strlen(ptr); - share->tgt_ssl_cas[link_idx] = - spider_create_string(ptr, share->tgt_ssl_cas_lengths[link_idx]); + share->tgt_ssl_cas_lengths[0] = strlen(ptr); + share->tgt_ssl_cas[0] = + spider_create_string(ptr, share->tgt_ssl_cas_lengths[0]); } else { - share->tgt_ssl_cas_lengths[link_idx] = 0; - share->tgt_ssl_cas[link_idx] = NULL; + share->tgt_ssl_cas_lengths[0] = 0; + share->tgt_ssl_cas[0] = NULL; } if ( !table->field[SPIDER_TABLES_SSL_CAPATH_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_SSL_CAPATH_POS])) ) { - share->tgt_ssl_capaths_lengths[link_idx] = strlen(ptr); - share->tgt_ssl_capaths[link_idx] = - spider_create_string(ptr, share->tgt_ssl_capaths_lengths[link_idx]); + share->tgt_ssl_capaths_lengths[0] = strlen(ptr); + share->tgt_ssl_capaths[0] = + spider_create_string(ptr, share->tgt_ssl_capaths_lengths[0]); } else { - share->tgt_ssl_capaths_lengths[link_idx] = 0; - share->tgt_ssl_capaths[link_idx] = NULL; + share->tgt_ssl_capaths_lengths[0] = 0; + share->tgt_ssl_capaths[0] = NULL; } if ( !table->field[SPIDER_TABLES_SSL_CERT_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_SSL_CERT_POS])) ) { - share->tgt_ssl_certs_lengths[link_idx] = strlen(ptr); - share->tgt_ssl_certs[link_idx] = - spider_create_string(ptr, share->tgt_ssl_certs_lengths[link_idx]); + share->tgt_ssl_certs_lengths[0] = strlen(ptr); + share->tgt_ssl_certs[0] = + spider_create_string(ptr, share->tgt_ssl_certs_lengths[0]); } else { - share->tgt_ssl_certs_lengths[link_idx] = 0; - share->tgt_ssl_certs[link_idx] = NULL; + share->tgt_ssl_certs_lengths[0] = 0; + share->tgt_ssl_certs[0] = NULL; } if ( !table->field[SPIDER_TABLES_SSL_CIPHER_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_SSL_CIPHER_POS])) ) { - share->tgt_ssl_ciphers_lengths[link_idx] = strlen(ptr); - share->tgt_ssl_ciphers[link_idx] = - spider_create_string(ptr, share->tgt_ssl_ciphers_lengths[link_idx]); + share->tgt_ssl_ciphers_lengths[0] = strlen(ptr); + share->tgt_ssl_ciphers[0] = + spider_create_string(ptr, share->tgt_ssl_ciphers_lengths[0]); } else { - share->tgt_ssl_ciphers_lengths[link_idx] = 0; - share->tgt_ssl_ciphers[link_idx] = NULL; + share->tgt_ssl_ciphers_lengths[0] = 0; + share->tgt_ssl_ciphers[0] = NULL; } if ( !table->field[SPIDER_TABLES_SSL_KEY_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_SSL_KEY_POS])) ) { - share->tgt_ssl_keys_lengths[link_idx] = strlen(ptr); - share->tgt_ssl_keys[link_idx] = - spider_create_string(ptr, share->tgt_ssl_keys_lengths[link_idx]); + share->tgt_ssl_keys_lengths[0] = strlen(ptr); + share->tgt_ssl_keys[0] = + spider_create_string(ptr, share->tgt_ssl_keys_lengths[0]); } else { - share->tgt_ssl_keys_lengths[link_idx] = 0; - share->tgt_ssl_keys[link_idx] = NULL; + share->tgt_ssl_keys_lengths[0] = 0; + share->tgt_ssl_keys[0] = NULL; } if ( !table->field[SPIDER_TABLES_SSL_VERIFY_SERVER_CERT_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_SSL_VERIFY_SERVER_CERT_POS])) ) { - share->tgt_ssl_vscs[link_idx] = atol(ptr); + share->tgt_ssl_vscs[0] = atol(ptr); } else - share->tgt_ssl_vscs[link_idx] = -1; + share->tgt_ssl_vscs[0] = -1; if ( !table->field[SPIDER_TABLES_MONITORING_BINLOG_POS_AT_FAILING_POS]-> is_null() && (ptr = get_field(mem_root, table-> field[SPIDER_TABLES_MONITORING_BINLOG_POS_AT_FAILING_POS])) ) { - share->monitoring_binlog_pos_at_failing[link_idx] = atol(ptr); + share->monitoring_binlog_pos_at_failing[0] = atol(ptr); } else - share->monitoring_binlog_pos_at_failing[link_idx] = 0; + share->monitoring_binlog_pos_at_failing[0] = 0; if ( !table->field[SPIDER_TABLES_DEFAULT_FILE_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_DEFAULT_FILE_POS])) ) { - share->tgt_default_files_lengths[link_idx] = strlen(ptr); - share->tgt_default_files[link_idx] = - spider_create_string(ptr, share->tgt_default_files_lengths[link_idx]); + share->tgt_default_files_lengths[0] = strlen(ptr); + share->tgt_default_files[0] = + spider_create_string(ptr, share->tgt_default_files_lengths[0]); } else { - share->tgt_default_files_lengths[link_idx] = 0; - share->tgt_default_files[link_idx] = NULL; + share->tgt_default_files_lengths[0] = 0; + share->tgt_default_files[0] = NULL; } if ( !table->field[SPIDER_TABLES_DEFAULT_GROUP_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_DEFAULT_GROUP_POS])) ) { - share->tgt_default_groups_lengths[link_idx] = strlen(ptr); - share->tgt_default_groups[link_idx] = - spider_create_string(ptr, share->tgt_default_groups_lengths[link_idx]); + share->tgt_default_groups_lengths[0] = strlen(ptr); + share->tgt_default_groups[0] = + spider_create_string(ptr, share->tgt_default_groups_lengths[0]); } else { - share->tgt_default_groups_lengths[link_idx] = 0; - share->tgt_default_groups[link_idx] = NULL; + share->tgt_default_groups_lengths[0] = 0; + share->tgt_default_groups[0] = NULL; } if ( !table->field[SPIDER_TABLES_DSN_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_DSN_POS])) ) { - share->tgt_dsns_lengths[link_idx] = strlen(ptr); - share->tgt_dsns[link_idx] = - spider_create_string(ptr, share->tgt_dsns_lengths[link_idx]); + share->tgt_dsns_lengths[0] = strlen(ptr); + share->tgt_dsns[0] = + spider_create_string(ptr, share->tgt_dsns_lengths[0]); } else { - share->tgt_dsns_lengths[link_idx] = 0; - share->tgt_dsns[link_idx] = NULL; + share->tgt_dsns_lengths[0] = 0; + share->tgt_dsns[0] = NULL; } if ( !table->field[SPIDER_TABLES_TGT_DB_NAME_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_TGT_DB_NAME_POS])) ) { - share->tgt_dbs_lengths[link_idx] = strlen(ptr); - share->tgt_dbs[link_idx] = - spider_create_string(ptr, share->tgt_dbs_lengths[link_idx]); + share->tgt_dbs_lengths[0] = strlen(ptr); + share->tgt_dbs[0] = + spider_create_string(ptr, share->tgt_dbs_lengths[0]); } else { - share->tgt_dbs_lengths[link_idx] = 0; - share->tgt_dbs[link_idx] = NULL; + share->tgt_dbs_lengths[0] = 0; + share->tgt_dbs[0] = NULL; } if ( !table->field[SPIDER_TABLES_TGT_TABLE_NAME_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_TGT_TABLE_NAME_POS])) ) { - share->tgt_table_names_lengths[link_idx] = strlen(ptr); - share->tgt_table_names[link_idx] = - spider_create_string(ptr, share->tgt_table_names_lengths[link_idx]); + share->tgt_table_names_lengths[0] = strlen(ptr); + share->tgt_table_names[0] = + spider_create_string(ptr, share->tgt_table_names_lengths[0]); } else { - share->tgt_table_names_lengths[link_idx] = 0; - share->tgt_table_names[link_idx] = NULL; + share->tgt_table_names_lengths[0] = 0; + share->tgt_table_names[0] = NULL; } if ( !table->field[SPIDER_TABLES_STATIC_LINK_ID_POS]->is_null() && (ptr = get_field(mem_root, table->field[SPIDER_TABLES_STATIC_LINK_ID_POS])) ) { - share->static_link_ids_lengths[link_idx] = strlen(ptr); - share->static_link_ids[link_idx] = - spider_create_string(ptr, share->static_link_ids_lengths[link_idx]); + share->static_link_ids_lengths[0] = strlen(ptr); + share->static_link_ids[0] = + spider_create_string(ptr, share->static_link_ids_lengths[0]); } else { - share->static_link_ids_lengths[link_idx] = 0; - share->static_link_ids[link_idx] = NULL; + share->static_link_ids_lengths[0] = 0; + share->static_link_ids[0] = NULL; } DBUG_RETURN(error_num); } diff --git a/storage/spider/spd_table.cc b/storage/spider/spd_table.cc index d41a957d436..36bac44f150 100644 --- a/storage/spider/spd_table.cc +++ b/storage/spider/spd_table.cc @@ -857,6 +857,7 @@ int spider_free_share_alloc( DBUG_RETURN(0); } +/* Free a tmp_share, which has only one link */ void spider_free_tmp_share_alloc( SPIDER_SHARE *share ) { @@ -5610,6 +5611,7 @@ int spider_open_all_tables( THD *thd = trx->thd; TABLE *table_tables; int error_num, *need_mon, mon_val; + /* This share has only one link */ SPIDER_SHARE tmp_share; char *db_name, *table_name; uint db_name_length, table_name_length; @@ -5696,9 +5698,6 @@ int spider_open_all_tables( table_name_length )) || (error_num = spider_create_conn_keys(&tmp_share)) || -/* - (error_num = spider_db_create_table_names_str(&tmp_share)) || -*/ (error_num = spider_create_tmp_dbton_share(&tmp_share)) ) { spider_sys_index_end(table_tables); @@ -7170,7 +7169,10 @@ bool spider_check_pk_update( DBUG_RETURN(FALSE); } - +/* + Set fields of a tmp share which has only one link. For use in + monitoring, spider_copy_tables udf etc. +*/ void spider_set_tmp_share_pointer( SPIDER_SHARE *tmp_share, char **tmp_connect_info, diff --git a/storage/spider/spd_trx.cc b/storage/spider/spd_trx.cc index 305d8fc7327..694b75dfbce 100644 --- a/storage/spider/spd_trx.cc +++ b/storage/spider/spd_trx.cc @@ -2774,6 +2774,7 @@ int spider_internal_xa_rollback_by_xid( int error_num; char xa_key[MAX_KEY_LENGTH]; char xa_member_key[MAX_KEY_LENGTH]; + /* This share has only one link */ SPIDER_SHARE tmp_share; char *tmp_connect_info[SPIDER_TMP_SHARE_CHAR_PTR_COUNT]; uint tmp_connect_info_length[SPIDER_TMP_SHARE_UINT_COUNT]; From 9d09ef48633de0da55bf9d6006c48b35cf0bc180 Mon Sep 17 00:00:00 2001 From: Ian Gilfillan Date: Mon, 14 Oct 2024 20:09:53 +0200 Subject: [PATCH 027/121] MDEV-33556: Document mariadb-import --parallel option in man page --- man/mariadb-import.1 | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/man/mariadb-import.1 b/man/mariadb-import.1 index 2c23aca8d17..630e3024dea 100644 --- a/man/mariadb-import.1 +++ b/man/mariadb-import.1 @@ -464,6 +464,22 @@ first argument\&. .sp -1 .IP \(bu 2.3 .\} +.\" mariadb-import: parallel option +.\" paralle option: mariadb-import +\fB\-\-parallel=\fR\fB\fIN\fR\fR, +\fB\-j \fR\fB\fIN\fR\fR\fR +.sp +Number of LOAD DATA jobs executed in parallel. \-\-use-threads is a synonym\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} .\" mariadb-import: password option .\" password option: mariadb-import \fB\-\-password[=\fR\fB\fIpassword\fR\fR\fB]\fR, @@ -792,7 +808,7 @@ The MariaDB user name to use when connecting to the server\&. .sp Load files in parallel using \fIN\fR -threads\&. +threads\&. Synonym for \-j, \-\-parallel=num .RE .sp .RS 4 From d3b84ff10d855fa4b4fc42dcbe542f045f6cc970 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Mon, 14 Oct 2024 17:19:22 +1100 Subject: [PATCH 028/121] MDEV-30067 Remove some overly enthusiastic asserts when deleting from a partitioned table When an DDL statement results in a local partition table with partitions not covering all values in the table, a failure is emitted. However, when the table in question is a spider table, the issue does not surface until some future statements (DELETE in the test examples in this commit) are executed. This is consistent with the design of spider which aims to minimise connections with the data node. The resulting error is legitimate and should not result in an assertion failure. Similarly, a partitioned spider table could have misplaced rows, so we remove the other assertion as well. --- sql/ha_partition.cc | 20 ---------- .../spider/bugfix/r/mdev_30067.result | 27 +++++++++++++ .../spider/bugfix/t/mdev_30067.test | 40 +++++++++++++++++++ 3 files changed, 67 insertions(+), 20 deletions(-) create mode 100644 storage/spider/mysql-test/spider/bugfix/r/mdev_30067.result create mode 100644 storage/spider/mysql-test/spider/bugfix/t/mdev_30067.test diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 587e30339bc..22d1dca0ad9 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -4704,35 +4704,15 @@ int ha_partition::delete_row(const uchar *buf) DBUG_ASSERT(bitmap_is_subset(&m_part_info->full_part_field_set, table->read_set)); #ifndef DBUG_OFF - THD* thd = ha_thd(); /* The protocol for deleting a row is: 1) position the handler (cursor) on the row to be deleted, either through the last read row (rnd or index) or by rnd_pos. 2) call delete_row with the full record as argument. - This means that m_last_part should already be set to actual partition - where the row was read from. And if that is not the same as the - calculated part_id we found a misplaced row, we return an error to - notify the user that something is broken in the row distribution - between partitions! Since we don't check all rows on read, we return an - error instead of forwarding the delete to the correct (m_last_part) - partition! - Notice that HA_READ_BEFORE_WRITE_REMOVAL does not require this protocol, so this is not supported for this engine. - - For partitions by system_time, get_part_for_buf() is always either current - or last historical partition, but DELETE HISTORY can delete from any - historical partition. So, skip the check in this case. */ - if (!thd->lex->vers_conditions.delete_history) - { - uint32 part_id; - error= get_part_for_buf(buf, m_rec0, m_part_info, &part_id); - DBUG_ASSERT(!error); - DBUG_ASSERT(part_id == m_last_part); - } DBUG_ASSERT(bitmap_is_set(&(m_part_info->read_partitions), m_last_part)); DBUG_ASSERT(bitmap_is_set(&(m_part_info->lock_partitions), m_last_part)); #endif diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_30067.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_30067.result new file mode 100644 index 00000000000..180e3e144bc --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/r/mdev_30067.result @@ -0,0 +1,27 @@ +for master_1 +for child2 +for child3 +set spider_same_server_link= 1; +CREATE SERVER srv FOREIGN DATA WRAPPER mysql +OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root'); +CREATE TABLE t (c INT); +INSERT INTO t VALUES (13); +CREATE TABLE t1 (c INT) ENGINE=Spider COMMENT='WRAPPER "mysql",srv "srv",TABLE "t"' PARTITION BY LIST (c) (PARTITION p VALUES IN (42)); +DELETE FROM a1 USING t1 AS a1; +drop table t, t1; +CREATE TABLE t (c INT KEY,c1 BLOB,c2 TEXT) ENGINE=InnoDB; +INSERT INTO t VALUES (0,1,0),(1,0,0),(2,0,0); +CREATE TABLE t1 (c INT KEY,c1 BLOB,c2 TEXT) ENGINE=Spider COMMENT='WRAPPER "mysql",srv "srv",TABLE "t"'; +ALTER TABLE t1 ENGINE=Spider PARTITION BY LIST (c) (PARTITION p VALUES IN (1,2)); +DELETE FROM a2,a1 USING t1 AS a1 JOIN t1 AS a2,t1 AS a3; +drop table t, t1; +CREATE TABLE t (c INT); +CREATE TABLE t1 (c INT) ENGINE=Spider COMMENT='WRAPPER "mysql",srv "srv",TABLE "t"' PARTITION BY LIST (c) (PARTITION p1 VALUES IN (42), PARTITION p2 VALUES IN (13)); +INSERT INTO t1 VALUES (13); +ALTER TABLE t1 PARTITION BY LIST (c) (PARTITION p1 VALUES IN (13), PARTITION p2 VALUES IN (87)); +DELETE FROM a1 USING t1 AS a1; +drop table t, t1; +drop server srv; +for master_1 +for child2 +for child3 diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_30067.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_30067.test new file mode 100644 index 00000000000..9e905a85e8b --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_30067.test @@ -0,0 +1,40 @@ +--disable_query_log +--disable_result_log +--source ../../t/test_init.inc +--enable_result_log +--enable_query_log + +set spider_same_server_link= 1; +evalp CREATE SERVER srv FOREIGN DATA WRAPPER mysql +OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root'); + +# simplified case; triggering DBUG_ASSERT(!error) +CREATE TABLE t (c INT); +INSERT INTO t VALUES (13); +CREATE TABLE t1 (c INT) ENGINE=Spider COMMENT='WRAPPER "mysql",srv "srv",TABLE "t"' PARTITION BY LIST (c) (PARTITION p VALUES IN (42)); +DELETE FROM a1 USING t1 AS a1; +drop table t, t1; + +# original case; triggering DBUG_ASSERT(!error) +CREATE TABLE t (c INT KEY,c1 BLOB,c2 TEXT) ENGINE=InnoDB; +INSERT INTO t VALUES (0,1,0),(1,0,0),(2,0,0); +CREATE TABLE t1 (c INT KEY,c1 BLOB,c2 TEXT) ENGINE=Spider COMMENT='WRAPPER "mysql",srv "srv",TABLE "t"'; +ALTER TABLE t1 ENGINE=Spider PARTITION BY LIST (c) (PARTITION p VALUES IN (1,2)); +DELETE FROM a2,a1 USING t1 AS a1 JOIN t1 AS a2,t1 AS a3; +drop table t, t1; + +# triggering DBUG_ASSERT(part_id == m_last_part) +CREATE TABLE t (c INT); +CREATE TABLE t1 (c INT) ENGINE=Spider COMMENT='WRAPPER "mysql",srv "srv",TABLE "t"' PARTITION BY LIST (c) (PARTITION p1 VALUES IN (42), PARTITION p2 VALUES IN (13)); +INSERT INTO t1 VALUES (13); +ALTER TABLE t1 PARTITION BY LIST (c) (PARTITION p1 VALUES IN (13), PARTITION p2 VALUES IN (87)); +DELETE FROM a1 USING t1 AS a1; +drop table t, t1; + +drop server srv; + +--disable_query_log +--disable_result_log +--source ../../t/test_deinit.inc +--enable_result_log +--enable_query_log From 98a9c75ea38e1bec2a3a7b39209ecbb8deb93d9f Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Mon, 29 Jul 2024 17:03:11 +1000 Subject: [PATCH 029/121] MDEV-34659 Use evalp in CREATE SERVER's in init_spider.inc This was already fixed in higher versions. --- .../mysql-test/spider/include/init_spider.inc | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/storage/spider/mysql-test/spider/include/init_spider.inc b/storage/spider/mysql-test/spider/include/init_spider.inc index 9ec26b9eeee..74d8c4436b5 100644 --- a/storage/spider/mysql-test/spider/include/init_spider.inc +++ b/storage/spider/mysql-test/spider/include/init_spider.inc @@ -5,7 +5,7 @@ if ($VERSION_COMPILE_OS_WIN) INSTALL SONAME 'ha_spider'; if ($MASTER_1_MYPORT) { - eval CREATE SERVER s_1 FOREIGN DATA WRAPPER mysql OPTIONS ( + evalp CREATE SERVER s_1 FOREIGN DATA WRAPPER mysql OPTIONS ( HOST 'localhost', DATABASE 'auto_test_local', USER 'root', @@ -15,7 +15,7 @@ if ($VERSION_COMPILE_OS_WIN) } if ($CHILD2_1_MYPORT) { - eval CREATE SERVER s_2_1 FOREIGN DATA WRAPPER mysql OPTIONS ( + evalp CREATE SERVER s_2_1 FOREIGN DATA WRAPPER mysql OPTIONS ( HOST 'localhost', DATABASE 'auto_test_remote', USER 'root', @@ -25,7 +25,7 @@ if ($VERSION_COMPILE_OS_WIN) } if ($CHILD2_2_MYPORT) { - eval CREATE SERVER s_2_2 FOREIGN DATA WRAPPER mysql OPTIONS ( + evalp CREATE SERVER s_2_2 FOREIGN DATA WRAPPER mysql OPTIONS ( HOST 'localhost', DATABASE 'auto_test_remote2', USER 'root', @@ -35,7 +35,7 @@ if ($VERSION_COMPILE_OS_WIN) } if ($CHILD2_3_MYPORT) { - eval CREATE SERVER s_2_3 FOREIGN DATA WRAPPER mysql OPTIONS ( + evalp CREATE SERVER s_2_3 FOREIGN DATA WRAPPER mysql OPTIONS ( HOST 'localhost', DATABASE 'auto_test_remote3', USER 'root', @@ -45,7 +45,7 @@ if ($VERSION_COMPILE_OS_WIN) } if ($CHILD3_1_MYPORT) { - eval CREATE SERVER s_3_1 FOREIGN DATA WRAPPER mysql OPTIONS ( + evalp CREATE SERVER s_3_1 FOREIGN DATA WRAPPER mysql OPTIONS ( HOST 'localhost', DATABASE 'auto_test_local', USER 'root', @@ -55,7 +55,7 @@ if ($VERSION_COMPILE_OS_WIN) } if ($CHILD3_2_MYPORT) { - eval CREATE SERVER s_3_2 FOREIGN DATA WRAPPER mysql OPTIONS ( + evalp CREATE SERVER s_3_2 FOREIGN DATA WRAPPER mysql OPTIONS ( HOST 'localhost', DATABASE 'auto_test_local', USER 'root', @@ -65,7 +65,7 @@ if ($VERSION_COMPILE_OS_WIN) } if ($CHILD2_3_MYPORT) { - eval CREATE SERVER s_3_3 FOREIGN DATA WRAPPER mysql OPTIONS ( + evalp CREATE SERVER s_3_3 FOREIGN DATA WRAPPER mysql OPTIONS ( HOST 'localhost', DATABASE 'auto_test_local', USER 'root', @@ -79,7 +79,7 @@ if (!$VERSION_COMPILE_OS_WIN) INSTALL SONAME 'ha_spider'; if ($MASTER_1_MYSOCK) { - eval CREATE SERVER s_1 FOREIGN DATA WRAPPER mysql OPTIONS ( + evalp CREATE SERVER s_1 FOREIGN DATA WRAPPER mysql OPTIONS ( HOST 'localhost', DATABASE 'auto_test_local', USER 'root', @@ -89,7 +89,7 @@ if (!$VERSION_COMPILE_OS_WIN) } if ($CHILD2_1_MYSOCK) { - eval CREATE SERVER s_2_1 FOREIGN DATA WRAPPER mysql OPTIONS ( + evalp CREATE SERVER s_2_1 FOREIGN DATA WRAPPER mysql OPTIONS ( HOST 'localhost', DATABASE 'auto_test_remote', USER 'root', @@ -99,7 +99,7 @@ if (!$VERSION_COMPILE_OS_WIN) } if ($CHILD2_2_MYSOCK) { - eval CREATE SERVER s_2_2 FOREIGN DATA WRAPPER mysql OPTIONS ( + evalp CREATE SERVER s_2_2 FOREIGN DATA WRAPPER mysql OPTIONS ( HOST 'localhost', DATABASE 'auto_test_remote2', USER 'root', @@ -109,7 +109,7 @@ if (!$VERSION_COMPILE_OS_WIN) } if ($CHILD2_3_MYSOCK) { - eval CREATE SERVER s_2_3 FOREIGN DATA WRAPPER mysql OPTIONS ( + evalp CREATE SERVER s_2_3 FOREIGN DATA WRAPPER mysql OPTIONS ( HOST 'localhost', DATABASE 'auto_test_remote3', USER 'root', @@ -119,7 +119,7 @@ if (!$VERSION_COMPILE_OS_WIN) } if ($CHILD3_1_MYSOCK) { - eval CREATE SERVER s_3_1 FOREIGN DATA WRAPPER mysql OPTIONS ( + evalp CREATE SERVER s_3_1 FOREIGN DATA WRAPPER mysql OPTIONS ( HOST 'localhost', DATABASE 'auto_test_local', USER 'root', @@ -129,7 +129,7 @@ if (!$VERSION_COMPILE_OS_WIN) } if ($CHILD3_2_MYSOCK) { - eval CREATE SERVER s_3_2 FOREIGN DATA WRAPPER mysql OPTIONS ( + evalp CREATE SERVER s_3_2 FOREIGN DATA WRAPPER mysql OPTIONS ( HOST 'localhost', DATABASE 'auto_test_local', USER 'root', @@ -139,7 +139,7 @@ if (!$VERSION_COMPILE_OS_WIN) } if ($CHILD3_3_MYSOCK) { - eval CREATE SERVER s_3_3 FOREIGN DATA WRAPPER mysql OPTIONS ( + evalp CREATE SERVER s_3_3 FOREIGN DATA WRAPPER mysql OPTIONS ( HOST 'localhost', DATABASE 'auto_test_local', USER 'root', From 0a59aafc5fa0637e3197544e6adb4bb522cfcc96 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Tue, 15 Oct 2024 14:30:30 +1100 Subject: [PATCH 030/121] MDEV-34659 Bound check in spider cast function query construction During spider query construction of certain cast functions, it locates the last occurrence of a keyword in the output of the Item::print() function and append from there to the constructed query so far. For example, consider the following query SELECT * FROM t2 ORDER BY CAST(c AS INET6); It constructs the following query and executes it at the data node (assuming the data node table is called t0). select cast(t0.`c` as inet6) ``,t0.`c` `c` from `test`.`t1` t0 order by `` When the construction has completed the initial part select cast(t0.`c` It then attempts to construct the " as inet6" part. To that end, it calls print() on the Item_typecast_fbt corresponding to the cast item, and obtains cast(`test`.`t2`.`c` as inet6) It then looks for " as ", and places cursor there for appending: cast(`test`.`t2`.`c` as inet6) ^ In this patch, if the search fails, i.e. there's no " as ...", we make sure that the cursor is not placed before the beginning of the string (out of bound). We also relax the search from " as char" to " as " in the case of CHAR_TYPECAST_FUNC, since there is more than one Item type with this func type. For example, "AS INET6" is an Item_typecast_fbt which has this func type. --- .../spider/bugfix/r/mdev_34659.result | 23 ++++++++++++++++++ .../spider/bugfix/t/mdev_34659.test | 24 +++++++++++++++++++ storage/spider/spd_db_include.h | 2 -- storage/spider/spd_db_mysql.cc | 17 +++++++------ 4 files changed, 57 insertions(+), 9 deletions(-) create mode 100644 storage/spider/mysql-test/spider/bugfix/r/mdev_34659.result create mode 100644 storage/spider/mysql-test/spider/bugfix/t/mdev_34659.test diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_34659.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_34659.result new file mode 100644 index 00000000000..e77939396b0 --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/r/mdev_34659.result @@ -0,0 +1,23 @@ +for master_1 +for child2 +for child3 +SET spider_same_server_link= on; +SET sql_mode=''; +CREATE SERVER srv FOREIGN DATA WRAPPER mysql +OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root'); +CREATE TABLE t1 (c INT) ENGINE=MyISAM; +CREATE TABLE t2 (c INT) ENGINE=Spider COMMENT='WRAPPER "mysql",SRV "srv",TABLE "t1"'; +insert into t2 values (456), (123); +SELECT * FROM t2 ORDER BY CAST(c AS char(60)); +c +123 +456 +SELECT * FROM t2 ORDER BY CAST(c AS INET6); +c +456 +123 +DROP TABLE t1,t2; +drop server srv; +for master_1 +for child2 +for child3 diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_34659.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_34659.test new file mode 100644 index 00000000000..3b481d2277f --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_34659.test @@ -0,0 +1,24 @@ +--disable_query_log +--disable_result_log +--source ../../t/test_init.inc +--enable_result_log +--enable_query_log + +SET spider_same_server_link= on; +SET sql_mode=''; +evalp CREATE SERVER srv FOREIGN DATA WRAPPER mysql +OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root'); +CREATE TABLE t1 (c INT) ENGINE=MyISAM; +CREATE TABLE t2 (c INT) ENGINE=Spider COMMENT='WRAPPER "mysql",SRV "srv",TABLE "t1"'; +insert into t2 values (456), (123); +SELECT * FROM t2 ORDER BY CAST(c AS char(60)); +SELECT * FROM t2 ORDER BY CAST(c AS INET6); +# Cleanup +DROP TABLE t1,t2; +drop server srv; + +--disable_query_log +--disable_result_log +--source ../../t/test_deinit.inc +--enable_result_log +--enable_query_log diff --git a/storage/spider/spd_db_include.h b/storage/spider/spd_db_include.h index 17ae8a42704..015b65b2674 100644 --- a/storage/spider/spd_db_include.h +++ b/storage/spider/spd_db_include.h @@ -128,8 +128,6 @@ typedef st_spider_result SPIDER_RESULT; #define SPIDER_SQL_LIKE_LEN (sizeof(SPIDER_SQL_LIKE_STR) - 1) #define SPIDER_SQL_NOT_LIKE_STR "not like" #define SPIDER_SQL_NOT_LIKE_LEN (sizeof(SPIDER_SQL_NOT_LIKE_STR) - 1) -#define SPIDER_SQL_AS_CHAR_STR " as char" -#define SPIDER_SQL_AS_CHAR_LEN (sizeof(SPIDER_SQL_AS_CHAR_STR) - 1) #define SPIDER_SQL_CAST_STR "cast(" #define SPIDER_SQL_CAST_LEN (sizeof(SPIDER_SQL_CAST_STR) - 1) #define SPIDER_SQL_AS_DATETIME_STR " as datetime" diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc index 06dcee81462..022b789b641 100644 --- a/storage/spider/spd_db_mysql.cc +++ b/storage/spider/spd_db_mysql.cc @@ -5451,11 +5451,12 @@ int spider_db_mbase_util::print_item_func( tmp_str.mem_calc(); if (tmp_str.reserve(1)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); - tmp_ptr = tmp_str.c_ptr_quick(); + last_str = tmp_ptr = tmp_str.c_ptr_quick(); DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr)); while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_BINARY_STR))) tmp_ptr = tmp_ptr2 + 1; - last_str = tmp_ptr - 1; + if (tmp_ptr != last_str) + last_str = tmp_ptr - 1; last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN; break; } else if (!strncasecmp("cast_as_signed", func_name, func_name_length)) @@ -5573,11 +5574,12 @@ int spider_db_mbase_util::print_item_func( tmp_str.mem_calc(); if (tmp_str.reserve(1)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); - tmp_ptr = tmp_str.c_ptr_quick(); + last_str = tmp_ptr = tmp_str.c_ptr_quick(); DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr)); while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_DECIMAL_STR))) tmp_ptr = tmp_ptr2 + 1; - last_str = tmp_ptr - 1; + if (tmp_ptr != last_str) + last_str = tmp_ptr - 1; last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN; break; } else if (!strncasecmp("cast_as_datetime", func_name, @@ -5708,11 +5710,12 @@ int spider_db_mbase_util::print_item_func( tmp_str.mem_calc(); if (tmp_str.reserve(1)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); - tmp_ptr = tmp_str.c_ptr_quick(); + last_str = tmp_ptr = tmp_str.c_ptr_quick(); DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr)); - while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_CHAR_STR))) + while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_STR))) tmp_ptr = tmp_ptr2 + 1; - last_str = tmp_ptr - 1; + if (tmp_ptr != last_str) + last_str = tmp_ptr - 1; last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN; } break; From 03a5c683f930bdd6c044842232b254ba14b8f6b0 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Tue, 8 Oct 2024 11:46:52 +1100 Subject: [PATCH 031/121] MDEV-27650 Spider: remove #ifdef SPIDER_HAS_GROUP_BY_HANDLER --- storage/spider/ha_spider.cc | 6 ------ storage/spider/ha_spider.h | 2 -- storage/spider/spd_conn.cc | 8 -------- storage/spider/spd_db_conn.cc | 16 ---------------- storage/spider/spd_db_include.h | 8 -------- storage/spider/spd_db_mysql.cc | 6 ------ storage/spider/spd_db_mysql.h | 6 ------ storage/spider/spd_db_oracle.cc | 6 ------ storage/spider/spd_db_oracle.h | 6 ------ storage/spider/spd_group_by_handler.cc | 2 -- storage/spider/spd_group_by_handler.h | 2 -- storage/spider/spd_include.h | 2 -- storage/spider/spd_table.cc | 6 ------ 13 files changed, 76 deletions(-) diff --git a/storage/spider/ha_spider.cc b/storage/spider/ha_spider.cc index b4be3c2fd8e..2acf9a9d3af 100644 --- a/storage/spider/ha_spider.cc +++ b/storage/spider/ha_spider.cc @@ -87,9 +87,7 @@ ha_spider::ha_spider( sql_kinds = 0; error_mode = 0; use_spatial_index = FALSE; -#ifdef SPIDER_HAS_GROUP_BY_HANDLER use_fields = FALSE; -#endif dml_inited = FALSE; use_pre_call = FALSE; use_pre_action = FALSE; @@ -155,9 +153,7 @@ ha_spider::ha_spider( sql_kinds = 0; error_mode = 0; use_spatial_index = FALSE; -#ifdef SPIDER_HAS_GROUP_BY_HANDLER use_fields = FALSE; -#endif dml_inited = FALSE; use_pre_call = FALSE; use_pre_action = FALSE; @@ -1213,9 +1209,7 @@ int ha_spider::reset() result_list.set_split_read = FALSE; result_list.insert_dup_update_pushdown = FALSE; use_spatial_index = FALSE; -#ifdef SPIDER_HAS_GROUP_BY_HANDLER use_fields = FALSE; -#endif error_mode = 0; DBUG_RETURN(error_num); } diff --git a/storage/spider/ha_spider.h b/storage/spider/ha_spider.h index 446bbbc4d94..6d2e0e40c57 100644 --- a/storage/spider/ha_spider.h +++ b/storage/spider/ha_spider.h @@ -99,13 +99,11 @@ public: bool da_status; bool use_spatial_index; -#ifdef SPIDER_HAS_GROUP_BY_HANDLER uint idx_for_direct_join; bool use_fields; spider_fields *fields; SPIDER_LINK_IDX_CHAIN *link_idx_chain; SPIDER_LINK_IDX_CHAIN *result_link_idx_chain; -#endif /* for mrr */ bool mrr_with_cnt; diff --git a/storage/spider/spd_conn.cc b/storage/spider/spd_conn.cc index 8cb55e8415f..8b7193ed94a 100644 --- a/storage/spider/spd_conn.cc +++ b/storage/spider/spd_conn.cc @@ -1749,7 +1749,6 @@ int spider_set_conn_bg_param( if (result_list->bgs_phase > 0) { -#ifdef SPIDER_HAS_GROUP_BY_HANDLER if (spider->use_fields) { SPIDER_LINK_IDX_CHAIN *link_idx_chain; @@ -1761,7 +1760,6 @@ int spider_set_conn_bg_param( DBUG_RETURN(error_num); } } else { -#endif for ( roop_count = spider_conn_link_idx_next(share->link_statuses, spider->conn_link_idx, -1, share->link_count, @@ -1776,9 +1774,7 @@ int spider_set_conn_bg_param( if ((error_num = spider_create_conn_thread(spider->conns[roop_count]))) DBUG_RETURN(error_num); } -#ifdef SPIDER_HAS_GROUP_BY_HANDLER } -#endif } DBUG_RETURN(0); } @@ -2234,9 +2230,7 @@ int spider_bg_conn_search( conn->bg_target = spider; conn->link_idx = link_idx; conn->bg_discard_result = discard_result; -#ifdef SPIDER_HAS_GROUP_BY_HANDLER conn->link_idx_chain = spider->link_idx_chain; -#endif pthread_mutex_lock(&conn->bg_conn_sync_mutex); pthread_cond_signal(&conn->bg_conn_cond); pthread_mutex_unlock(&conn->bg_conn_mutex); @@ -2378,9 +2372,7 @@ int spider_bg_conn_search( conn->bg_target = spider; conn->link_idx = link_idx; conn->bg_discard_result = discard_result; -#ifdef SPIDER_HAS_GROUP_BY_HANDLER conn->link_idx_chain = spider->link_idx_chain; -#endif result_list->bgs_working = TRUE; conn->bg_search = TRUE; if (with_lock) diff --git a/storage/spider/spd_db_conn.cc b/storage/spider/spd_db_conn.cc index 8750e87237e..c4259968b68 100644 --- a/storage/spider/spd_db_conn.cc +++ b/storage/spider/spd_db_conn.cc @@ -2928,16 +2928,12 @@ int spider_db_fetch_table( DBUG_RETURN(error_num); } -#ifdef SPIDER_HAS_GROUP_BY_HANDLER if (!spider->use_fields) { -#endif if ((error_num = spider_db_append_match_fetch(spider, spider->ft_first, spider->ft_current, row))) DBUG_RETURN(error_num); -#ifdef SPIDER_HAS_GROUP_BY_HANDLER } -#endif for ( field = table->field; @@ -4521,10 +4517,8 @@ int spider_db_seek_next( (SPIDER_RESULT*) result_list->current); int roop_start = 0, roop_end = 1, roop_count, lock_mode, link_ok = 0; -#ifdef SPIDER_HAS_GROUP_BY_HANDLER if (!spider->use_fields) { -#endif lock_mode = spider_conn_lock_mode(spider); if (lock_mode) { @@ -4541,14 +4535,11 @@ int spider_db_seek_next( roop_start = link_idx; roop_end = link_idx + 1; } -#ifdef SPIDER_HAS_GROUP_BY_HANDLER } -#endif #ifndef WITHOUT_SPIDER_BG_SEARCH if (result_list->bgs_phase > 0) { -#ifdef SPIDER_HAS_GROUP_BY_HANDLER if (spider->use_fields) { SPIDER_LINK_IDX_CHAIN *link_idx_chain; @@ -4572,7 +4563,6 @@ int spider_db_seek_next( } } } else { -#endif for (roop_count = roop_start; roop_count < roop_end; roop_count = spider_conn_link_idx_next(share->link_statuses, spider->conn_link_idx, roop_count, share->link_count, @@ -4585,9 +4575,7 @@ int spider_db_seek_next( DBUG_RETURN(error_num); } } -#ifdef SPIDER_HAS_GROUP_BY_HANDLER } -#endif } else { #endif if (result_list->current == result_list->bgs_current) @@ -4639,7 +4627,6 @@ int spider_db_seek_next( } } -#ifdef SPIDER_HAS_GROUP_BY_HANDLER if (spider->use_fields) { SPIDER_LINK_IDX_CHAIN *link_idx_chain; @@ -4729,7 +4716,6 @@ int spider_db_seek_next( } } } else { -#endif for (roop_count = roop_start; roop_count < roop_end; roop_count = spider_conn_link_idx_next(share->link_statuses, spider->conn_link_idx, roop_count, share->link_count, @@ -4865,9 +4851,7 @@ int spider_db_seek_next( } } } -#ifdef SPIDER_HAS_GROUP_BY_HANDLER } -#endif } else { spider->connection_ids[link_idx] = conn->connection_id; pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); diff --git a/storage/spider/spd_db_include.h b/storage/spider/spd_db_include.h index 015b65b2674..eb7875ac056 100644 --- a/storage/spider/spd_db_include.h +++ b/storage/spider/spd_db_include.h @@ -44,8 +44,6 @@ #define SPIDER_ITEM_STRING_WITHOUT_SET_STR_WITH_COPY #define SPIDER_ITEM_STRING_WITHOUT_SET_STR_WITH_COPY_AND_THDPTR -#define SPIDER_HAS_GROUP_BY_HANDLER - #define SPIDER_ORDER_HAS_ENUM_ORDER #define SPIDER_ITEM_GEOFUNC_NAME_HAS_MBR @@ -776,7 +774,6 @@ public: spider_string *to, String *from ) = 0; -#ifdef SPIDER_HAS_GROUP_BY_HANDLER virtual int append_from_and_tables( ha_spider *spider, spider_fields *fields, @@ -790,7 +787,6 @@ public: virtual int append_having( spider_string *str ) = 0; -#endif virtual bool tables_on_different_db_are_joinable(); virtual bool socket_has_default_value(); virtual bool database_has_default_value(); @@ -1411,13 +1407,11 @@ public: virtual int reset_sql( ulong sql_type ) = 0; -#ifdef SPIDER_HAS_GROUP_BY_HANDLER virtual int set_sql_for_exec( ulong sql_type, int link_idx, SPIDER_LINK_IDX_CHAIN *link_idx_chain ) = 0; -#endif virtual int set_sql_for_exec( ulong sql_type, int link_idx @@ -1531,7 +1525,6 @@ public: int link_idx, ulong sql_type ) = 0; -#ifdef SPIDER_HAS_GROUP_BY_HANDLER virtual int append_from_and_tables_part( spider_fields *fields, ulong sql_type @@ -1574,7 +1567,6 @@ public: spider_fields *fields, ulong sql_type ) = 0; -#endif virtual bool check_direct_update( st_select_lex *select_lex, longlong select_limit, diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc index 022b789b641..7e10b796f25 100644 --- a/storage/spider/spd_db_mysql.cc +++ b/storage/spider/spd_db_mysql.cc @@ -6216,7 +6216,6 @@ int spider_db_mbase_util::append_escaped_util( DBUG_RETURN(0); } -#ifdef SPIDER_HAS_GROUP_BY_HANDLER /* Walk a TABLE_LIST, or format it to a string and append it. @@ -6500,7 +6499,6 @@ int spider_db_mbase_util::append_having( str->q_append(SPIDER_SQL_HAVING_STR, SPIDER_SQL_HAVING_LEN); DBUG_RETURN(0); } -#endif bool spider_db_mbase_util::append_charset_name_before_string() { @@ -12475,7 +12473,6 @@ int spider_mbase_handler::reset_sql( } -#ifdef SPIDER_HAS_GROUP_BY_HANDLER int spider_mbase_handler::set_sql_for_exec( ulong sql_type, int link_idx, @@ -12489,7 +12486,6 @@ int spider_mbase_handler::set_sql_for_exec( } DBUG_RETURN(0); } -#endif int spider_mbase_handler::set_sql_for_exec( ulong sql_type, @@ -13853,7 +13849,6 @@ int spider_mbase_handler::reset_union_table_name( DBUG_RETURN(0); } -#ifdef SPIDER_HAS_GROUP_BY_HANDLER int spider_mbase_handler::append_from_and_tables_part( spider_fields *fields, ulong sql_type @@ -14154,7 +14149,6 @@ int spider_mbase_handler::append_order_by( } DBUG_RETURN(0); } -#endif bool spider_mbase_handler::check_direct_update( st_select_lex *select_lex, diff --git a/storage/spider/spd_db_mysql.h b/storage/spider/spd_db_mysql.h index 7eeb5bed7fb..028a69e843b 100644 --- a/storage/spider/spd_db_mysql.h +++ b/storage/spider/spd_db_mysql.h @@ -158,7 +158,6 @@ public: spider_string *to, String *from ) override; -#ifdef SPIDER_HAS_GROUP_BY_HANDLER int append_tables_top_down_check( TABLE_LIST *table_list, TABLE_LIST **used_table_list, @@ -188,7 +187,6 @@ public: int append_having( spider_string *str ) override; -#endif bool append_charset_name_before_string() override; }; @@ -1348,13 +1346,11 @@ public: int reset_sql( ulong sql_type ) override; -#ifdef SPIDER_HAS_GROUP_BY_HANDLER int set_sql_for_exec( ulong sql_type, int link_idx, SPIDER_LINK_IDX_CHAIN *link_idx_chain ) override; -#endif int set_sql_for_exec( ulong sql_type, int link_idx @@ -1473,7 +1469,6 @@ public: int link_idx, ulong sql_type ) override; -#ifdef SPIDER_HAS_GROUP_BY_HANDLER int append_from_and_tables_part( spider_fields *fields, ulong sql_type @@ -1540,7 +1535,6 @@ public: bool use_fields, spider_fields *fields ); -#endif bool check_direct_update( st_select_lex *select_lex, longlong select_limit, diff --git a/storage/spider/spd_db_oracle.cc b/storage/spider/spd_db_oracle.cc index 455b52177dd..19295d40c5f 100644 --- a/storage/spider/spd_db_oracle.cc +++ b/storage/spider/spd_db_oracle.cc @@ -4304,7 +4304,6 @@ int spider_db_oracle_util::append_escaped_util( DBUG_RETURN(0); } -#ifdef SPIDER_HAS_GROUP_BY_HANDLER int spider_db_oracle_util::append_from_and_tables( ha_spider *spider, spider_fields *fields, @@ -4422,7 +4421,6 @@ int spider_db_oracle_util::append_having( str->q_append(SPIDER_SQL_HAVING_STR, SPIDER_SQL_HAVING_LEN); DBUG_RETURN(0); } -#endif spider_oracle_share::spider_oracle_share( st_spider_share *share @@ -10426,7 +10424,6 @@ bool spider_oracle_handler::need_lock_before_set_sql_for_exec( DBUG_RETURN(FALSE); } -#ifdef SPIDER_HAS_GROUP_BY_HANDLER int spider_oracle_handler::set_sql_for_exec( ulong sql_type, int link_idx, @@ -10471,7 +10468,6 @@ int spider_oracle_handler::set_sql_for_exec( } DBUG_RETURN(0); } -#endif int spider_oracle_handler::set_sql_for_exec( ulong sql_type, @@ -12304,7 +12300,6 @@ int spider_oracle_handler::reset_union_table_name( DBUG_RETURN(0); } -#ifdef SPIDER_HAS_GROUP_BY_HANDLER int spider_oracle_handler::append_from_and_tables_part( spider_fields *fields, ulong sql_type @@ -12633,7 +12628,6 @@ int spider_oracle_handler::append_order_by( } DBUG_RETURN(0); } -#endif spider_oracle_copy_table::spider_oracle_copy_table( spider_oracle_share *db_share diff --git a/storage/spider/spd_db_oracle.h b/storage/spider/spd_db_oracle.h index d47bc9f7ea6..5f7f4e8ff1f 100644 --- a/storage/spider/spd_db_oracle.h +++ b/storage/spider/spd_db_oracle.h @@ -144,7 +144,6 @@ public: spider_string *to, String *from ); -#ifdef SPIDER_HAS_GROUP_BY_HANDLER int append_from_and_tables( ha_spider *spider, spider_fields *fields, @@ -163,7 +162,6 @@ public: int append_having( spider_string *str ); -#endif }; class spider_db_oracle_row: public spider_db_row @@ -1264,13 +1262,11 @@ public: bool need_lock_before_set_sql_for_exec( ulong sql_type ); -#ifdef SPIDER_HAS_GROUP_BY_HANDLER int set_sql_for_exec( ulong sql_type, int link_idx, SPIDER_LINK_IDX_CHAIN *link_idx_chain ); -#endif int set_sql_for_exec( ulong sql_type, int link_idx @@ -1385,7 +1381,6 @@ public: int link_idx, ulong sql_type ); -#ifdef SPIDER_HAS_GROUP_BY_HANDLER int append_from_and_tables_part( spider_fields *fields, ulong sql_type @@ -1456,7 +1451,6 @@ public: bool use_fields, spider_fields *fields ); -#endif }; class spider_oracle_copy_table: public spider_db_copy_table diff --git a/storage/spider/spd_group_by_handler.cc b/storage/spider/spd_group_by_handler.cc index 481291ec6f0..2e4eb003371 100644 --- a/storage/spider/spd_group_by_handler.cc +++ b/storage/spider/spd_group_by_handler.cc @@ -975,7 +975,6 @@ int spider_fields::ping_table_mon_from_table( DBUG_RETURN(error_num); } -#ifdef SPIDER_HAS_GROUP_BY_HANDLER spider_group_by_handler::spider_group_by_handler( THD *thd_arg, Query *query_arg, @@ -1842,4 +1841,3 @@ skip_free_table_holder: spider_free(spider_current_trx, table_holder, MYF(0)); DBUG_RETURN(NULL); } -#endif diff --git a/storage/spider/spd_group_by_handler.h b/storage/spider/spd_group_by_handler.h index b3984951ec5..db100de92f2 100644 --- a/storage/spider/spd_group_by_handler.h +++ b/storage/spider/spd_group_by_handler.h @@ -13,7 +13,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifdef SPIDER_HAS_GROUP_BY_HANDLER class spider_group_by_handler: public group_by_handler { Query query; @@ -41,4 +40,3 @@ group_by_handler *spider_create_group_by_handler( THD *thd, Query *query ); -#endif diff --git a/storage/spider/spd_include.h b/storage/spider/spd_include.h index 7371c6da6f3..1643d1b350e 100644 --- a/storage/spider/spd_include.h +++ b/storage/spider/spd_include.h @@ -755,10 +755,8 @@ typedef struct st_spider_conn query_id_t connect_error_query_id; time_t connect_error_time; -#ifdef SPIDER_HAS_GROUP_BY_HANDLER SPIDER_CONN_HOLDER *conn_holder_for_direct_join; SPIDER_LINK_IDX_CHAIN *link_idx_chain; -#endif SPIDER_IP_PORT_CONN *ip_port_conn; pthread_mutex_t loop_check_mutex; diff --git a/storage/spider/spd_table.cc b/storage/spider/spd_table.cc index 36bac44f150..5711de586d8 100644 --- a/storage/spider/spd_table.cc +++ b/storage/spider/spd_table.cc @@ -6233,9 +6233,7 @@ int spider_db_init( spider_hton->create = spider_create_handler; spider_hton->drop_database = spider_drop_database; spider_hton->show_status = spider_show_status; -#ifdef SPIDER_HAS_GROUP_BY_HANDLER spider_hton->create_group_by = spider_create_group_by_handler; -#endif if (my_gethwaddr((uchar *) addr)) { @@ -7481,13 +7479,11 @@ longlong spider_split_read_param( DBUG_PRINT("info",("spider bulk_update_mode=%d", bulk_update_mode)); DBUG_PRINT("info",("spider support_bulk_update_sql=%s", spider->support_bulk_update_sql() ? "TRUE" : "FALSE")); -#ifdef SPIDER_HAS_GROUP_BY_HANDLER bool inserting = ( spider->wide_handler->sql_command == SQLCOM_INSERT || spider->wide_handler->sql_command == SQLCOM_INSERT_SELECT ); -#endif bool updating = ( spider->wide_handler->sql_command == SQLCOM_UPDATE || @@ -7508,12 +7504,10 @@ longlong spider_split_read_param( DBUG_PRINT("info",("spider replacing=%s", replacing ? "TRUE" : "FALSE")); TABLE *table = spider->get_table(); if ( -#ifdef SPIDER_HAS_GROUP_BY_HANDLER ( inserting && spider->use_fields ) || -#endif replacing || ( ( From 6080e3af19e00e27cffefe10ffa2980e89e055fa Mon Sep 17 00:00:00 2001 From: Nayuta Yanagisawa Date: Thu, 10 Feb 2022 15:36:44 +0900 Subject: [PATCH 032/121] MDEV-26912 Spider: Remove dead code related to Oracle OCI Remove the dead-code, in Spider, which is related to the Spider's Oracle OCI support. The code has been disabled for a long time and it is unlikely that the code will be enabled. --- storage/spider/CMakeLists.txt | 20 +- .../spider/oracle/include/deinit_child2_1.inc | 0 .../spider/oracle/include/deinit_child2_2.inc | 0 .../spider/oracle/include/deinit_child2_3.inc | 0 .../spider/oracle/include/deinit_child3_1.inc | 3 - .../spider/oracle/include/deinit_child3_2.inc | 3 - .../spider/oracle/include/deinit_child3_3.inc | 3 - .../spider/oracle/include/deinit_master_1.inc | 1 - .../spider/oracle/include/deinit_slave1_1.inc | 0 .../oracle/include/ha_deinit_child2_1.inc | 0 .../oracle/include/ha_deinit_child2_2.inc | 0 .../oracle/include/ha_deinit_child2_3.inc | 0 .../oracle/include/ha_deinit_child3_1.inc | 1 - .../oracle/include/ha_deinit_child3_2.inc | 1 - .../oracle/include/ha_deinit_child3_3.inc | 1 - .../oracle/include/ha_deinit_master_1.inc | 0 .../oracle/include/ha_init_child2_1.inc | 8 - .../oracle/include/ha_init_child2_2.inc | 4 - .../oracle/include/ha_init_child2_3.inc | 4 - .../oracle/include/ha_init_child3_1.inc | 140 - .../oracle/include/ha_init_child3_2.inc | 140 - .../oracle/include/ha_init_child3_3.inc | 140 - .../oracle/include/ha_init_master_1.inc | 109 - .../oracle/include/hs_deinit_child2_1.inc | 0 .../oracle/include/hs_deinit_child2_2.inc | 0 .../oracle/include/hs_deinit_child2_3.inc | 0 .../oracle/include/hs_deinit_master_1.inc | 0 .../oracle/include/hs_init_child2_1.inc | 24 - .../oracle/include/hs_init_child2_2.inc | 12 - .../oracle/include/hs_init_child2_3.inc | 0 .../oracle/include/hs_init_master_1.inc | 12 - .../spider/oracle/include/init_child2_1.inc | 192 - .../spider/oracle/include/init_child2_2.inc | 94 - .../spider/oracle/include/init_child2_3.inc | 15 - .../spider/oracle/include/init_child3_1.inc | 3 - .../spider/oracle/include/init_child3_2.inc | 3 - .../spider/oracle/include/init_child3_3.inc | 3 - .../spider/oracle/include/init_master_1.inc | 149 - .../spider/oracle/include/init_slave1_1.inc | 10 - .../spider/oracle/include/init_spider.inc | 105 - .../spider/mysql-test/spider/oracle/my.cnf | 146 - .../spider/oracle/r/basic_sql.result | 634 - .../spider/oracle/r/basic_sql_part.result | 121 - .../spider/oracle/r/direct_aggregate.result | 91 - .../oracle/r/direct_aggregate_part.result | 82 - .../spider/oracle/r/direct_update.result | 138 - .../spider/oracle/r/direct_update_part.result | 129 - .../spider/oracle/r/function.result | 149 - .../mysql-test/spider/oracle/r/ha.result | 240 - .../mysql-test/spider/oracle/r/ha_part.result | 262 - .../spider/oracle/r/spider3_fixes.result | 194 - .../spider/oracle/r/spider3_fixes_part.result | 192 - .../spider/oracle/r/spider_fixes.result | 552 - .../spider/oracle/r/spider_fixes_part.result | 199 - .../spider/oracle/r/vp_fixes.result | 80 - .../mysql-test/spider/oracle/t/basic_sql.test | 2701 ---- .../spider/oracle/t/basic_sql_part.test | 571 - .../spider/oracle/t/connect_child2_1.inc | 1 - .../spider/oracle/t/connect_child2_2.inc | 1 - .../spider/oracle/t/connect_child2_3.inc | 1 - .../spider/oracle/t/connect_child3_1.inc | 1 - .../spider/oracle/t/connect_child3_2.inc | 1 - .../spider/oracle/t/connect_child3_3.inc | 1 - .../spider/oracle/t/connect_master_1.inc | 1 - .../spider/oracle/t/connect_slave1_1.inc | 1 - .../spider/oracle/t/direct_aggregate.test | 181 - .../oracle/t/direct_aggregate_part.test | 194 - .../spider/oracle/t/direct_update.test | 198 - .../spider/oracle/t/direct_update_part.test | 211 - .../mysql-test/spider/oracle/t/function.test | 253 - .../spider/mysql-test/spider/oracle/t/ha.test | 882 - .../mysql-test/spider/oracle/t/ha_part.test | 1017 -- .../spider/oracle/t/ha_test_deinit.inc | 30 - .../spider/oracle/t/ha_test_init.inc | 30 - .../spider/oracle/t/have_engine.inc | 7 - .../mysql-test/spider/oracle/t/have_func.inc | 5 - .../spider/oracle/t/have_partition.inc | 7 - .../spider/oracle/t/have_trigger.inc | 2 - .../spider/oracle/t/hs_test_deinit.inc | 17 - .../spider/oracle/t/hs_test_init.inc | 17 - .../spider/oracle/t/slave_test_deinit.inc | 6 - .../spider/oracle/t/slave_test_init.inc | 44 - .../spider/oracle/t/spider3_fixes.test | 292 - .../spider/oracle/t/spider3_fixes_part.test | 345 - .../spider/oracle/t/spider_fixes.test | 1425 -- .../spider/oracle/t/spider_fixes_part.test | 645 - .../spider/oracle/t/test_deinit.inc | 37 - .../mysql-test/spider/oracle/t/test_init.inc | 74 - .../mysql-test/spider/oracle/t/vp_fixes.test | 335 - .../oracle2/include/deinit_child2_1.inc | 0 .../oracle2/include/deinit_child2_2.inc | 0 .../oracle2/include/deinit_child2_3.inc | 0 .../oracle2/include/deinit_child3_1.inc | 3 - .../oracle2/include/deinit_child3_2.inc | 3 - .../oracle2/include/deinit_child3_3.inc | 3 - .../oracle2/include/deinit_master_1.inc | 1 - .../oracle2/include/deinit_slave1_1.inc | 0 .../oracle2/include/ha_deinit_child2_1.inc | 0 .../oracle2/include/ha_deinit_child2_2.inc | 0 .../oracle2/include/ha_deinit_child2_3.inc | 0 .../oracle2/include/ha_deinit_child3_1.inc | 1 - .../oracle2/include/ha_deinit_child3_2.inc | 1 - .../oracle2/include/ha_deinit_child3_3.inc | 1 - .../oracle2/include/ha_deinit_master_1.inc | 0 .../oracle2/include/ha_init_child2_1.inc | 8 - .../oracle2/include/ha_init_child2_2.inc | 4 - .../oracle2/include/ha_init_child2_3.inc | 4 - .../oracle2/include/ha_init_child3_1.inc | 140 - .../oracle2/include/ha_init_child3_2.inc | 140 - .../oracle2/include/ha_init_child3_3.inc | 140 - .../oracle2/include/ha_init_master_1.inc | 109 - .../oracle2/include/hs_deinit_child2_1.inc | 0 .../oracle2/include/hs_deinit_child2_2.inc | 0 .../oracle2/include/hs_deinit_child2_3.inc | 0 .../oracle2/include/hs_deinit_master_1.inc | 0 .../oracle2/include/hs_init_child2_1.inc | 24 - .../oracle2/include/hs_init_child2_2.inc | 12 - .../oracle2/include/hs_init_child2_3.inc | 0 .../oracle2/include/hs_init_master_1.inc | 12 - .../spider/oracle2/include/init_child2_1.inc | 192 - .../spider/oracle2/include/init_child2_2.inc | 94 - .../spider/oracle2/include/init_child2_3.inc | 15 - .../spider/oracle2/include/init_child3_1.inc | 3 - .../spider/oracle2/include/init_child3_2.inc | 3 - .../spider/oracle2/include/init_child3_3.inc | 3 - .../spider/oracle2/include/init_master_1.inc | 150 - .../spider/oracle2/include/init_slave1_1.inc | 10 - .../spider/oracle2/include/init_spider.inc | 105 - .../spider/mysql-test/spider/oracle2/my.cnf | 146 - .../spider/oracle2/r/basic_sql.result | 634 - .../spider/oracle2/r/basic_sql_part.result | 121 - .../spider/oracle2/r/direct_aggregate.result | 91 - .../oracle2/r/direct_aggregate_part.result | 82 - .../spider/oracle2/r/direct_update.result | 138 - .../oracle2/r/direct_update_part.result | 129 - .../spider/oracle2/r/function.result | 149 - .../mysql-test/spider/oracle2/r/ha.result | 240 - .../spider/oracle2/r/ha_part.result | 262 - .../spider/oracle2/r/spider3_fixes.result | 210 - .../oracle2/r/spider3_fixes_part.result | 208 - .../spider/oracle2/r/spider_fixes.result | 556 - .../spider/oracle2/r/spider_fixes_part.result | 203 - .../spider/oracle2/r/vp_fixes.result | 80 - .../spider/oracle2/t/basic_sql.test | 2701 ---- .../spider/oracle2/t/basic_sql_part.test | 571 - .../spider/oracle2/t/connect_child2_1.inc | 1 - .../spider/oracle2/t/connect_child2_2.inc | 1 - .../spider/oracle2/t/connect_child2_3.inc | 1 - .../spider/oracle2/t/connect_child3_1.inc | 1 - .../spider/oracle2/t/connect_child3_2.inc | 1 - .../spider/oracle2/t/connect_child3_3.inc | 1 - .../spider/oracle2/t/connect_master_1.inc | 1 - .../spider/oracle2/t/connect_slave1_1.inc | 1 - .../spider/oracle2/t/direct_aggregate.test | 181 - .../oracle2/t/direct_aggregate_part.test | 194 - .../spider/oracle2/t/direct_update.test | 198 - .../spider/oracle2/t/direct_update_part.test | 211 - .../mysql-test/spider/oracle2/t/function.test | 253 - .../mysql-test/spider/oracle2/t/ha.test | 882 - .../mysql-test/spider/oracle2/t/ha_part.test | 1017 -- .../spider/oracle2/t/ha_test_deinit.inc | 30 - .../spider/oracle2/t/ha_test_init.inc | 30 - .../spider/oracle2/t/have_engine.inc | 7 - .../mysql-test/spider/oracle2/t/have_func.inc | 5 - .../spider/oracle2/t/have_partition.inc | 7 - .../spider/oracle2/t/have_trigger.inc | 2 - .../spider/oracle2/t/hs_test_deinit.inc | 17 - .../spider/oracle2/t/hs_test_init.inc | 17 - .../spider/oracle2/t/slave_test_deinit.inc | 6 - .../spider/oracle2/t/slave_test_init.inc | 44 - .../spider/oracle2/t/spider3_fixes.test | 292 - .../spider/oracle2/t/spider3_fixes_part.test | 345 - .../spider/oracle2/t/spider_fixes.test | 1425 -- .../spider/oracle2/t/spider_fixes_part.test | 645 - .../spider/oracle2/t/test_deinit.inc | 37 - .../mysql-test/spider/oracle2/t/test_init.inc | 74 - .../mysql-test/spider/oracle2/t/vp_fixes.test | 335 - storage/spider/spd_db_oracle.cc | 13404 ---------------- storage/spider/spd_db_oracle.h | 1543 -- storage/spider/spd_table.cc | 9 - 180 files changed, 1 insertion(+), 42862 deletions(-) delete mode 100644 storage/spider/mysql-test/spider/oracle/include/deinit_child2_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/deinit_child2_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/deinit_child2_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/deinit_child3_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/deinit_child3_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/deinit_child3_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/deinit_master_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/deinit_slave1_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/ha_deinit_child2_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/ha_deinit_child2_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/ha_deinit_child2_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/ha_deinit_child3_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/ha_deinit_child3_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/ha_deinit_child3_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/ha_deinit_master_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/ha_init_child2_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/ha_init_child2_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/ha_init_child2_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/ha_init_child3_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/ha_init_child3_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/ha_init_child3_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/ha_init_master_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/hs_deinit_child2_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/hs_deinit_child2_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/hs_deinit_child2_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/hs_deinit_master_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/hs_init_child2_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/hs_init_child2_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/hs_init_child2_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/hs_init_master_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/init_child2_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/init_child2_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/init_child2_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/init_child3_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/init_child3_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/init_child3_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/init_master_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/init_slave1_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/include/init_spider.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/my.cnf delete mode 100644 storage/spider/mysql-test/spider/oracle/r/basic_sql.result delete mode 100644 storage/spider/mysql-test/spider/oracle/r/basic_sql_part.result delete mode 100644 storage/spider/mysql-test/spider/oracle/r/direct_aggregate.result delete mode 100644 storage/spider/mysql-test/spider/oracle/r/direct_aggregate_part.result delete mode 100644 storage/spider/mysql-test/spider/oracle/r/direct_update.result delete mode 100644 storage/spider/mysql-test/spider/oracle/r/direct_update_part.result delete mode 100644 storage/spider/mysql-test/spider/oracle/r/function.result delete mode 100644 storage/spider/mysql-test/spider/oracle/r/ha.result delete mode 100644 storage/spider/mysql-test/spider/oracle/r/ha_part.result delete mode 100644 storage/spider/mysql-test/spider/oracle/r/spider3_fixes.result delete mode 100644 storage/spider/mysql-test/spider/oracle/r/spider3_fixes_part.result delete mode 100644 storage/spider/mysql-test/spider/oracle/r/spider_fixes.result delete mode 100644 storage/spider/mysql-test/spider/oracle/r/spider_fixes_part.result delete mode 100644 storage/spider/mysql-test/spider/oracle/r/vp_fixes.result delete mode 100644 storage/spider/mysql-test/spider/oracle/t/basic_sql.test delete mode 100644 storage/spider/mysql-test/spider/oracle/t/basic_sql_part.test delete mode 100644 storage/spider/mysql-test/spider/oracle/t/connect_child2_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/connect_child2_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/connect_child2_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/connect_child3_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/connect_child3_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/connect_child3_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/connect_master_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/connect_slave1_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/direct_aggregate.test delete mode 100644 storage/spider/mysql-test/spider/oracle/t/direct_aggregate_part.test delete mode 100644 storage/spider/mysql-test/spider/oracle/t/direct_update.test delete mode 100644 storage/spider/mysql-test/spider/oracle/t/direct_update_part.test delete mode 100644 storage/spider/mysql-test/spider/oracle/t/function.test delete mode 100644 storage/spider/mysql-test/spider/oracle/t/ha.test delete mode 100644 storage/spider/mysql-test/spider/oracle/t/ha_part.test delete mode 100644 storage/spider/mysql-test/spider/oracle/t/ha_test_deinit.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/ha_test_init.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/have_engine.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/have_func.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/have_partition.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/have_trigger.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/hs_test_deinit.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/hs_test_init.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/slave_test_deinit.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/slave_test_init.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/spider3_fixes.test delete mode 100644 storage/spider/mysql-test/spider/oracle/t/spider3_fixes_part.test delete mode 100644 storage/spider/mysql-test/spider/oracle/t/spider_fixes.test delete mode 100644 storage/spider/mysql-test/spider/oracle/t/spider_fixes_part.test delete mode 100644 storage/spider/mysql-test/spider/oracle/t/test_deinit.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/test_init.inc delete mode 100644 storage/spider/mysql-test/spider/oracle/t/vp_fixes.test delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/deinit_child2_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/deinit_child2_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/deinit_child2_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/deinit_child3_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/deinit_child3_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/deinit_child3_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/deinit_master_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/deinit_slave1_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child2_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child2_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child2_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child3_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child3_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child3_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/ha_deinit_master_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/ha_init_child2_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/ha_init_child2_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/ha_init_child2_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/ha_init_child3_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/ha_init_child3_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/ha_init_child3_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/ha_init_master_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/hs_deinit_child2_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/hs_deinit_child2_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/hs_deinit_child2_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/hs_deinit_master_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/hs_init_child2_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/hs_init_child2_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/hs_init_child2_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/hs_init_master_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/init_child2_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/init_child2_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/init_child2_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/init_child3_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/init_child3_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/init_child3_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/init_master_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/init_slave1_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/include/init_spider.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/my.cnf delete mode 100644 storage/spider/mysql-test/spider/oracle2/r/basic_sql.result delete mode 100644 storage/spider/mysql-test/spider/oracle2/r/basic_sql_part.result delete mode 100644 storage/spider/mysql-test/spider/oracle2/r/direct_aggregate.result delete mode 100644 storage/spider/mysql-test/spider/oracle2/r/direct_aggregate_part.result delete mode 100644 storage/spider/mysql-test/spider/oracle2/r/direct_update.result delete mode 100644 storage/spider/mysql-test/spider/oracle2/r/direct_update_part.result delete mode 100644 storage/spider/mysql-test/spider/oracle2/r/function.result delete mode 100644 storage/spider/mysql-test/spider/oracle2/r/ha.result delete mode 100644 storage/spider/mysql-test/spider/oracle2/r/ha_part.result delete mode 100644 storage/spider/mysql-test/spider/oracle2/r/spider3_fixes.result delete mode 100644 storage/spider/mysql-test/spider/oracle2/r/spider3_fixes_part.result delete mode 100644 storage/spider/mysql-test/spider/oracle2/r/spider_fixes.result delete mode 100644 storage/spider/mysql-test/spider/oracle2/r/spider_fixes_part.result delete mode 100644 storage/spider/mysql-test/spider/oracle2/r/vp_fixes.result delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/basic_sql.test delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/basic_sql_part.test delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/connect_child2_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/connect_child2_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/connect_child2_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/connect_child3_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/connect_child3_2.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/connect_child3_3.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/connect_master_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/connect_slave1_1.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/direct_aggregate.test delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/direct_aggregate_part.test delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/direct_update.test delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/direct_update_part.test delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/function.test delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/ha.test delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/ha_part.test delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/ha_test_deinit.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/ha_test_init.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/have_engine.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/have_func.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/have_partition.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/have_trigger.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/hs_test_deinit.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/hs_test_init.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/slave_test_deinit.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/slave_test_init.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/spider3_fixes.test delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/spider3_fixes_part.test delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/spider_fixes.test delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/spider_fixes_part.test delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/test_deinit.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/test_init.inc delete mode 100644 storage/spider/mysql-test/spider/oracle2/t/vp_fixes.test delete mode 100644 storage/spider/spd_db_oracle.cc delete mode 100644 storage/spider/spd_db_oracle.h diff --git a/storage/spider/CMakeLists.txt b/storage/spider/CMakeLists.txt index cde6de6142b..fc53295f5f7 100644 --- a/storage/spider/CMakeLists.txt +++ b/storage/spider/CMakeLists.txt @@ -14,17 +14,9 @@ SET(SPIDER_SOURCES spd_param.cc spd_sys_table.cc spd_trx.cc spd_db_conn.cc spd_conn.cc spd_table.cc spd_direct_sql.cc spd_udf.cc spd_ping_table.cc spd_copy_tables.cc spd_i_s.cc spd_malloc.cc ha_spider.cc spd_udf.def - spd_db_mysql.cc spd_db_oracle.cc spd_group_by_handler.cc spd_db_include.cc + spd_db_mysql.cc spd_group_by_handler.cc spd_db_include.cc ) -IF(DEFINED ENV{ORACLE_HOME}) - SET(ORACLE_HOME $ENV{ORACLE_HOME}) - FIND_PATH(ORACLE_INCLUDE_DIR oci.h PATHS ${ORACLE_HOME}/rdbms/public) - SET(ORACLE_OCI_LIB_NAME clntsh) - SET(ORACLE_LIB_DIR ${ORACLE_HOME}/lib) - FIND_LIBRARY(ORACLE_OCI_LIBRARY NAMES ${ORACLE_OCI_LIB_NAME} PATHS ${ORACLE_LIB_DIR}) -ENDIF() - IF(EXISTS ${PROJECT_SOURCE_DIR}/storage/mysql_storage_engine.cmake) SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX -DUSE_SYMDIR /Zi") @@ -55,16 +47,6 @@ ELSE() ENDIF() ENDIF() -IF(ORACLE_INCLUDE_DIR AND ORACLE_OCI_LIBRARY) - SET(SPIDER_WITH_ORACLE_OCI OFF CACHE BOOL "Spider is compiled with Oracle OCI library.") - IF(SPIDER_WITH_ORACLE_OCI) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_ORACLE_OCI -DLINUX -D_GNU_SOURCE -D_REENTRANT") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_ORACLE_OCI -DLINUX -D_GNU_SOURCE -D_REENTRANT") - INCLUDE_DIRECTORIES(${ORACLE_INCLUDE_DIR}) - TARGET_LINK_LIBRARIES (spider ${ORACLE_OCI_LIBRARY}) - ENDIF() -ENDIF() - IF(MSVC) IF (CMAKE_BUILD_TYPE STREQUAL "Debug") ADD_CUSTOM_COMMAND(TARGET spider diff --git a/storage/spider/mysql-test/spider/oracle/include/deinit_child2_1.inc b/storage/spider/mysql-test/spider/oracle/include/deinit_child2_1.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle/include/deinit_child2_2.inc b/storage/spider/mysql-test/spider/oracle/include/deinit_child2_2.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle/include/deinit_child2_3.inc b/storage/spider/mysql-test/spider/oracle/include/deinit_child2_3.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle/include/deinit_child3_1.inc b/storage/spider/mysql-test/spider/oracle/include/deinit_child3_1.inc deleted file mode 100644 index 74c8efa90aa..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/deinit_child3_1.inc +++ /dev/null @@ -1,3 +0,0 @@ ---let $TEST_ENGINE_TYPE= $CHILD3_1_ENGINE_TYPE ---let $INIT_TEST_ENGINE= $INIT_CHILD3_1_ENGINE ---source ../../include/deinit_engine.inc diff --git a/storage/spider/mysql-test/spider/oracle/include/deinit_child3_2.inc b/storage/spider/mysql-test/spider/oracle/include/deinit_child3_2.inc deleted file mode 100644 index f42a980ad23..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/deinit_child3_2.inc +++ /dev/null @@ -1,3 +0,0 @@ ---let $TEST_ENGINE_TYPE= $CHILD3_2_ENGINE_TYPE ---let $INIT_TEST_ENGINE= $INIT_CHILD3_2_ENGINE ---source ../../include/deinit_engine.inc diff --git a/storage/spider/mysql-test/spider/oracle/include/deinit_child3_3.inc b/storage/spider/mysql-test/spider/oracle/include/deinit_child3_3.inc deleted file mode 100644 index 0696fb991cf..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/deinit_child3_3.inc +++ /dev/null @@ -1,3 +0,0 @@ ---let $TEST_ENGINE_TYPE= $CHILD3_3_ENGINE_TYPE ---let $INIT_TEST_ENGINE= $INIT_CHILD3_3_ENGINE ---source ../../include/deinit_engine.inc diff --git a/storage/spider/mysql-test/spider/oracle/include/deinit_master_1.inc b/storage/spider/mysql-test/spider/oracle/include/deinit_master_1.inc deleted file mode 100644 index c19e376d10a..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/deinit_master_1.inc +++ /dev/null @@ -1 +0,0 @@ ---source ../../include/deinit_spider.inc diff --git a/storage/spider/mysql-test/spider/oracle/include/deinit_slave1_1.inc b/storage/spider/mysql-test/spider/oracle/include/deinit_slave1_1.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle/include/ha_deinit_child2_1.inc b/storage/spider/mysql-test/spider/oracle/include/ha_deinit_child2_1.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle/include/ha_deinit_child2_2.inc b/storage/spider/mysql-test/spider/oracle/include/ha_deinit_child2_2.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle/include/ha_deinit_child2_3.inc b/storage/spider/mysql-test/spider/oracle/include/ha_deinit_child2_3.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle/include/ha_deinit_child3_1.inc b/storage/spider/mysql-test/spider/oracle/include/ha_deinit_child3_1.inc deleted file mode 100644 index c19e376d10a..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/ha_deinit_child3_1.inc +++ /dev/null @@ -1 +0,0 @@ ---source ../../include/deinit_spider.inc diff --git a/storage/spider/mysql-test/spider/oracle/include/ha_deinit_child3_2.inc b/storage/spider/mysql-test/spider/oracle/include/ha_deinit_child3_2.inc deleted file mode 100644 index c19e376d10a..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/ha_deinit_child3_2.inc +++ /dev/null @@ -1 +0,0 @@ ---source ../../include/deinit_spider.inc diff --git a/storage/spider/mysql-test/spider/oracle/include/ha_deinit_child3_3.inc b/storage/spider/mysql-test/spider/oracle/include/ha_deinit_child3_3.inc deleted file mode 100644 index c19e376d10a..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/ha_deinit_child3_3.inc +++ /dev/null @@ -1 +0,0 @@ ---source ../../include/deinit_spider.inc diff --git a/storage/spider/mysql-test/spider/oracle/include/ha_deinit_master_1.inc b/storage/spider/mysql-test/spider/oracle/include/ha_deinit_master_1.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle/include/ha_init_child2_1.inc b/storage/spider/mysql-test/spider/oracle/include/ha_init_child2_1.inc deleted file mode 100644 index 2684829408d..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/ha_init_child2_1.inc +++ /dev/null @@ -1,8 +0,0 @@ -let $CHILD2_1_HA_AS_DROP_TABLES= - $CHILD2_1_DROP_TABLES; -let $CHILD2_1_HA_AS_CREATE_TABLES= - $CHILD2_1_CREATE_TABLES; -let $CHILD2_1_HA_AS_DROP_TABLES2= - $CHILD2_1_DROP_TABLES2; -let $CHILD2_1_HA_AS_CREATE_TABLES2= - $CHILD2_1_CREATE_TABLES2; diff --git a/storage/spider/mysql-test/spider/oracle/include/ha_init_child2_2.inc b/storage/spider/mysql-test/spider/oracle/include/ha_init_child2_2.inc deleted file mode 100644 index 205eaa6fe35..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/ha_init_child2_2.inc +++ /dev/null @@ -1,4 +0,0 @@ -let $CHILD2_2_HA_DROP_TABLES= - $CHILD2_2_DROP_TABLES; -let $CHILD2_2_HA_CREATE_TABLES= - $CHILD2_2_CREATE_TABLES; diff --git a/storage/spider/mysql-test/spider/oracle/include/ha_init_child2_3.inc b/storage/spider/mysql-test/spider/oracle/include/ha_init_child2_3.inc deleted file mode 100644 index 55cb858372c..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/ha_init_child2_3.inc +++ /dev/null @@ -1,4 +0,0 @@ -let $CHILD2_3_HA_DROP_TABLES= - $CHILD2_3_DROP_TABLES; -let $CHILD2_3_HA_CREATE_TABLES= - $CHILD2_3_CREATE_TABLES; diff --git a/storage/spider/mysql-test/spider/oracle/include/ha_init_child3_1.inc b/storage/spider/mysql-test/spider/oracle/include/ha_init_child3_1.inc deleted file mode 100644 index 8357f0bdbc2..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/ha_init_child3_1.inc +++ /dev/null @@ -1,140 +0,0 @@ ---let $CHILD3_1_ENGINE_TYPE=Spider ---let $CHILD3_1_ENGINE=ENGINE=Spider ---source ../include/init_spider.inc -eval INSERT INTO mysql.spider_link_mon_servers -(db_name, table_name, link_id, sid, server, scheme, host, port, socket, - username, password, ssl_ca, ssl_capath, ssl_cert, ssl_cipher, ssl_key, - ssl_verify_server_cert, default_file, default_group) VALUES -('%auto_test_local%', '%ta_l%', '%', $CHILD3_1_SERVER_ID, 's_3_1', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_2_SERVER_ID, 's_3_2', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_3_SERVER_ID, 's_3_3', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL); -let $CHILD3_1_CHECK_LINK_STATUS= - SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables - ORDER BY db_name, table_name, link_id; -let $CHILD3_1_CHECK_LINK_FAILED_LOG= - SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -let $CHILD3_1_SET_RECOVERY_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2", lst "0 2"'; -let $CHILD3_1_SET_OK_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2", lst "0 1"'; -let $CHILD3_1_SET_OK_STATUS_AS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2", lst "1 0"'; - -let $CHILD3_1_DROP_TABLES_HA_2_1= - DROP TABLE IF EXISTS ta_l; -if ($VERSION_COMPILE_OS_WIN) -{ - let $CHILD3_1_CREATE_TABLES_HA_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2"'; - let $CHILD3_1_CREATE_TABLES_HA_AS_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2"'; -} -if (!$VERSION_COMPILE_OS_WIN) -{ - let $CHILD3_1_CREATE_TABLES_HA_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2"'; - let $CHILD3_1_CREATE_TABLES_HA_AS_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2"'; -} -let $CHILD3_1_DROP_TABLES_HA_P_2_1= - DROP TABLE IF EXISTS ta_l2; -let $CHILD3_1_CREATE_TABLES_HA_P_2_1= - CREATE TABLE ta_l2 ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $CHILD3_1_CREATE_TABLES_HA_AS_P_2_1= - CREATE TABLE ta_l2 ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $CHILD3_1_SET_RECOVERY_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 2"' - ); -let $CHILD3_1_SET_OK_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 1"' - ); -let $CHILD3_1_SET_OK_STATUS_AS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "1 0"' - ); diff --git a/storage/spider/mysql-test/spider/oracle/include/ha_init_child3_2.inc b/storage/spider/mysql-test/spider/oracle/include/ha_init_child3_2.inc deleted file mode 100644 index 3ffcec24f51..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/ha_init_child3_2.inc +++ /dev/null @@ -1,140 +0,0 @@ ---let $CHILD3_2_ENGINE_TYPE=Spider ---let $CHILD3_2_ENGINE=ENGINE=Spider ---source ../include/init_spider.inc -eval INSERT INTO mysql.spider_link_mon_servers -(db_name, table_name, link_id, sid, server, scheme, host, port, socket, - username, password, ssl_ca, ssl_capath, ssl_cert, ssl_cipher, ssl_key, - ssl_verify_server_cert, default_file, default_group) VALUES -('%auto_test_local%', '%ta_l%', '%', $CHILD3_1_SERVER_ID, 's_3_1', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_2_SERVER_ID, 's_3_2', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_3_SERVER_ID, 's_3_3', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL); -let $CHILD3_2_CHECK_LINK_STATUS= - SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables - ORDER BY db_name, table_name, link_id; -let $CHILD3_2_CHECK_LINK_FAILED_LOG= - SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -let $CHILD3_2_SET_RECOVERY_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2", lst "0 2"'; -let $CHILD3_2_SET_OK_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2", lst "0 1"'; -let $CHILD3_2_SET_OK_STATUS_AS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2", lst "1 0"'; - -let $CHILD3_2_DROP_TABLES_HA_2_1= - DROP TABLE IF EXISTS ta_l; -if ($VERSION_COMPILE_OS_WIN) -{ - let $CHILD3_2_CREATE_TABLES_HA_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2"'; - let $CHILD3_2_CREATE_TABLES_HA_AS_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2"'; -} -if (!$VERSION_COMPILE_OS_WIN) -{ - let $CHILD3_2_CREATE_TABLES_HA_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2"'; - let $CHILD3_2_CREATE_TABLES_HA_AS_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2"'; -} -let $CHILD3_2_DROP_TABLES_HA_P_2_1= - DROP TABLE IF EXISTS ta_l2; -let $CHILD3_2_CREATE_TABLES_HA_P_2_1= - CREATE TABLE ta_l2 ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $CHILD3_2_CREATE_TABLES_HA_AS_P_2_1= - CREATE TABLE ta_l2 ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $CHILD3_2_SET_RECOVERY_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 2"' - ); -let $CHILD3_2_SET_OK_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 1"' - ); -let $CHILD3_2_SET_OK_STATUS_AS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "1 0"' - ); diff --git a/storage/spider/mysql-test/spider/oracle/include/ha_init_child3_3.inc b/storage/spider/mysql-test/spider/oracle/include/ha_init_child3_3.inc deleted file mode 100644 index 67bd00109f5..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/ha_init_child3_3.inc +++ /dev/null @@ -1,140 +0,0 @@ ---let $CHILD3_3_ENGINE_TYPE=Spider ---let $CHILD3_3_ENGINE=ENGINE=Spider ---source ../include/init_spider.inc -eval INSERT INTO mysql.spider_link_mon_servers -(db_name, table_name, link_id, sid, server, scheme, host, port, socket, - username, password, ssl_ca, ssl_capath, ssl_cert, ssl_cipher, ssl_key, - ssl_verify_server_cert, default_file, default_group) VALUES -('%auto_test_local%', '%ta_l%', '%', $CHILD3_1_SERVER_ID, 's_3_1', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_2_SERVER_ID, 's_3_2', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_3_SERVER_ID, 's_3_3', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL); -let $CHILD3_3_CHECK_LINK_STATUS= - SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables - ORDER BY db_name, table_name, link_id; -let $CHILD3_3_CHECK_LINK_FAILED_LOG= - SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -let $CHILD3_3_SET_RECOVERY_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2", lst "0 2"'; -let $CHILD3_3_SET_OK_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2", lst "0 1"'; -let $CHILD3_3_SET_OK_STATUS_AS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2", lst "1 0"'; - -let $CHILD3_3_DROP_TABLES_HA_2_1= - DROP TABLE IF EXISTS ta_l; -if ($VERSION_COMPILE_OS_WIN) -{ - let $CHILD3_3_CREATE_TABLES_HA_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2"'; - let $CHILD3_3_CREATE_TABLES_HA_AS_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2"'; -} -if (!$VERSION_COMPILE_OS_WIN) -{ - let $CHILD3_3_CREATE_TABLES_HA_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2"'; - let $CHILD3_3_CREATE_TABLES_HA_AS_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2"'; -} -let $CHILD3_3_DROP_TABLES_HA_P_2_1= - DROP TABLE IF EXISTS ta_l2; -let $CHILD3_3_CREATE_TABLES_HA_P_2_1= - CREATE TABLE ta_l2 ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $CHILD3_3_CREATE_TABLES_HA_AS_P_2_1= - CREATE TABLE ta_l2 ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $CHILD3_3_SET_RECOVERY_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 2"' - ); -let $CHILD3_3_SET_OK_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 1"' - ); -let $CHILD3_3_SET_OK_STATUS_AS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "1 0"' - ); diff --git a/storage/spider/mysql-test/spider/oracle/include/ha_init_master_1.inc b/storage/spider/mysql-test/spider/oracle/include/ha_init_master_1.inc deleted file mode 100644 index 8ace39ab641..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/ha_init_master_1.inc +++ /dev/null @@ -1,109 +0,0 @@ -eval INSERT INTO mysql.spider_link_mon_servers -(db_name, table_name, link_id, sid, server, scheme, host, port, socket, - username, password, ssl_ca, ssl_capath, ssl_cert, ssl_cipher, ssl_key, - ssl_verify_server_cert, default_file, default_group) VALUES -('%auto_test_local%', '%ta_l%', '%', $CHILD3_1_SERVER_ID, 's_3_1', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_2_SERVER_ID, 's_3_2', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_3_SERVER_ID, 's_3_3', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL); -let $MASTER_1_CHECK_LINK_STATUS= - SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables - ORDER BY db_name, table_name, link_id; -let $MASTER_1_CHECK_LINK_FAILED_LOG= - SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -let $MASTER_1_SET_RECOVERY_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "$ORACLE_HOST", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", msi "$CHILD3_1_SERVER_ID", mkd "2", - database "$ORACLE_DATABASE", lst "0 2"'; -let $MASTER_1_SET_OK_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "$ORACLE_HOST", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", msi "$CHILD3_1_SERVER_ID", mkd "2", - database "$ORACLE_DATABASE", lst "0 1"'; -let $MASTER_1_SET_OK_STATUS_AS_2_1= - ALTER TABLE ta_l - CONNECTION='host "$ORACLE_HOST", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "$ORACLE_DATABASE", lst "1 0"'; -let $MASTER_1_COPY_TABLES_2_1= - SELECT spider_copy_tables('ta_l', '0', '1'); - -if ($VERSION_COMPILE_OS_WIN) -{ - let $MASTER_1_COMMENT_HA_2_1= - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3", - wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", msi "$CHILD3_1_SERVER_ID", mkd "2", - database "$ORACLE_DATABASE"'; - let $MASTER_1_COMMENT_HA_AS_2_1= - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3", - wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "$ORACLE_DATABASE"'; -} -if (!$VERSION_COMPILE_OS_WIN) -{ - let $MASTER_1_COMMENT_HA_2_1= - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3", - wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", msi "$CHILD3_1_SERVER_ID", mkd "2", - database "$ORACLE_DATABASE"'; - let $MASTER_1_COMMENT_HA_AS_2_1= - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3", - wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "$ORACLE_DATABASE"'; -} -let $MASTER_1_COMMENT_HA_P_2_1= - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $MASTER_1_COMMENT_HA_AS_P_2_1= - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $MASTER_1_SET_RECOVERY_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 2"' - ); -let $MASTER_1_SET_OK_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 1"' - ); -let $MASTER_1_SET_OK_STATUS_AS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "1 0"' - ); -let $MASTER_1_COPY_TABLES_P_2_1= - SELECT spider_copy_tables('ta_l2#P#pt2', '0', '1'); -let $MASTER_1_CHECK_HA_STATUS= - SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -let $MASTER_1_CHANGE_HA_MON= - SELECT spider_flush_table_mon_cache(); diff --git a/storage/spider/mysql-test/spider/oracle/include/hs_deinit_child2_1.inc b/storage/spider/mysql-test/spider/oracle/include/hs_deinit_child2_1.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle/include/hs_deinit_child2_2.inc b/storage/spider/mysql-test/spider/oracle/include/hs_deinit_child2_2.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle/include/hs_deinit_child2_3.inc b/storage/spider/mysql-test/spider/oracle/include/hs_deinit_child2_3.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle/include/hs_deinit_master_1.inc b/storage/spider/mysql-test/spider/oracle/include/hs_deinit_master_1.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle/include/hs_init_child2_1.inc b/storage/spider/mysql-test/spider/oracle/include/hs_init_child2_1.inc deleted file mode 100644 index f3f92a61e6f..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/hs_init_child2_1.inc +++ /dev/null @@ -1,24 +0,0 @@ -let $CHILD2_1_HS_DROP_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "hs_r"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_HS_CREATE_TABLES= - SELECT spider_direct_sql('CREATE TABLE "hs_r" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - "d" INT DEFAULT 11, - CONSTRAINT "pk_s_2_1_hs_r" PRIMARY KEY("a") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_HS_SELECT_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\'), "d" FROM "hs_r" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_HS_DROP_TABLES2= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "hs_r2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_HS_CREATE_TABLES2= - SELECT spider_direct_sql('CREATE TABLE "hs_r2" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - "d" INT DEFAULT 11, - CONSTRAINT "pk_s_2_1_hs_r2" PRIMARY KEY("a") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_HS_SELECT_TABLES2= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\'), "d" FROM "hs_r2" ORDER BY "a"', '', 'srv "s_2_1"'); diff --git a/storage/spider/mysql-test/spider/oracle/include/hs_init_child2_2.inc b/storage/spider/mysql-test/spider/oracle/include/hs_init_child2_2.inc deleted file mode 100644 index 4bd8d49c17c..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/hs_init_child2_2.inc +++ /dev/null @@ -1,12 +0,0 @@ -let $CHILD2_2_HS_DROP_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "hs_r3"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_HS_CREATE_TABLES= - SELECT spider_direct_sql('CREATE TABLE "hs_r3" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - "d" INT DEFAULT 11, - CONSTRAINT "pk_s_2_2_hs_r3" PRIMARY KEY("a") - )', '', 'srv "s_2_2"'); -let $CHILD2_2_HS_SELECT_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\'), "d" FROM "hs_r3" ORDER BY "a"', '', 'srv "s_2_2"'); diff --git a/storage/spider/mysql-test/spider/oracle/include/hs_init_child2_3.inc b/storage/spider/mysql-test/spider/oracle/include/hs_init_child2_3.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle/include/hs_init_master_1.inc b/storage/spider/mysql-test/spider/oracle/include/hs_init_master_1.inc deleted file mode 100644 index 0ff5e2a10d9..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/hs_init_master_1.inc +++ /dev/null @@ -1,12 +0,0 @@ -let $MASTER_1_HS_COMMENT_TMP= - COMMENT=''; -let $MASTER_1_HS_COMMENT_2_1= - COMMENT='srv "s_2_1", table "hs_r", uhr "1", uhw "1", hrp "$CHILD2_1_HSRPORT", hwp "$CHILD2_1_HSWPORT"'; -let $MASTER_1_HS_COMMENT_P_2_1= - COMMENT='uhr "1", uhw "1"' - PARTITION BY RANGE(a) ( - PARTITION pt1 VALUES LESS THAN (4) - COMMENT='srv "s_2_1", table "hs_r2", hrp "$CHILD2_1_HSRPORT", hwp "$CHILD2_1_HSWPORT"', - PARTITION pt2 VALUES LESS THAN MAXVALUE - COMMENT='srv "s_2_2", table "hs_r3", hrp "$CHILD2_2_HSRPORT", hwp "$CHILD2_2_HSWPORT"' - ); diff --git a/storage/spider/mysql-test/spider/oracle/include/init_child2_1.inc b/storage/spider/mysql-test/spider/oracle/include/init_child2_1.inc deleted file mode 100644 index c24736eefca..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/init_child2_1.inc +++ /dev/null @@ -1,192 +0,0 @@ ---connection master_1 -SELECT spider_direct_sql('ALTER SESSION SET NLS_DATE_FORMAT=\'YYYY-MM-DD HH24:MI:SS\'', '', 'srv "s_2_1"'); -SELECT spider_direct_sql('ALTER SESSION SET NLS_TIME_FORMAT=\'HH24:MI:SSXFF\'', '', 'srv "s_2_1"'); -SELECT spider_direct_sql('ALTER SESSION SET NLS_TIMESTAMP_FORMAT=\'YYYY-MM-DD HH24:MI:SSXFF\'', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ta_r"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TABLES= - SELECT spider_direct_sql('CREATE TABLE "ta_r" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - CONSTRAINT "pk_s_2_1_ta_r" PRIMARY KEY("a") - )', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE INDEX "idx1" ON "ta_r"("b")', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\') FROM "ta_r" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TABLES2= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ta_r2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TABLES2= - SELECT spider_direct_sql('CREATE TABLE "ta_r2" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - CONSTRAINT "pk_s_2_1_ta_r2" PRIMARY KEY("a") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TABLES2= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\') FROM "ta_r2" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TABLES3= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ta_r_no_idx"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TABLES3= - SELECT spider_direct_sql('CREATE TABLE "ta_r_no_idx" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\') - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TABLES3= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\') FROM "ta_r_no_idx" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TABLES4= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ta_r_auto_inc"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TABLES4= - SELECT spider_direct_sql('CREATE TABLE "ta_r_auto_inc" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - CONSTRAINT "pk_s_2_1_ta_r_auto_inc" PRIMARY KEY("a") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TABLES4= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\') FROM "ta_r_auto_inc" - ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TABLES5= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "s_2_1_ta_r_int"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TABLES5= - SELECT spider_direct_sql('CREATE TABLE "s_2_1_ta_r_int" ( - "a" INT DEFAULT 3, - "b" INT DEFAULT 10, - "c" INT DEFAULT 11, - CONSTRAINT "pk_s_2_1_ta_r_int" PRIMARY KEY("a") - )', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE INDEX "idx1_s_2_1_ta_r_int" ON "s_2_1_ta_r_int"("b")', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE INDEX "idx2_s_2_1_ta_r_int" ON "s_2_1_ta_r_int"("c")', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TABLES5= - SELECT spider_direct_sql('SELECT "a", "b", "c" FROM "s_2_1_ta_r_int" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TABLES6= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ta_r_3"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TABLES6= - SELECT spider_direct_sql('CREATE TABLE "ta_r_3" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\') - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TABLES6= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\') FROM "ta_r_3" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_FT_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ft_r"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_FT_TABLES= - SELECT spider_direct_sql('CREATE TABLE "ft_r" ( - "a" INT DEFAULT 0, - "b" TEXT, - "c" TEXT, - "d" TEXT, - CONSTRAINT "pk_s_2_1_ft_r" PRIMARY KEY("a"), - FULLTEXT INDEX "ft_idx1"("b"), - FULLTEXT INDEX "ft_idx2"("c") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_FT_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", "c", "d" FROM "ft_r" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_FT_TABLES2= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ft_r2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_FT_TABLES2= - SELECT spider_direct_sql('CREATE TABLE "ft_r2" ( - "a" INT DEFAULT 0, - "b" TEXT, - "c" TEXT, - "d" TEXT, - CONSTRAINT "pk_s_2_1_ft_r2" PRIMARY KEY("a"), - FULLTEXT INDEX "ft_idx1"("b"), - FULLTEXT INDEX "ft_idx2"("c") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_FT_TABLES2= - SELECT spider_direct_sql('SELECT "a", "b", "c", "d" FROM "ft_r2" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_GM_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "gm_r"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_GM_TABLES= - SELECT spider_direct_sql('CREATE TABLE "gm_r" ( - "a" INT DEFAULT 0, - "b" GEOMETRY NOT NULL, - "c" GEOMETRY NOT NULL, - CONSTRAINT "pk_s_2_1_gm_r" PRIMARY KEY("a"), - SPATIAL INDEX "sp_idx1"("b"), - SPATIAL INDEX "sp_idx2"("c") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_GM_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", "c" FROM "gm_r" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_GM_TABLES2= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "gm_r2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_GM_TABLES2= - SELECT spider_direct_sql('CREATE TABLE "gm_r2" ( - "a" INT DEFAULT 0, - "b" GEOMETRY NOT NULL, - "c" GEOMETRY NOT NULL, - CONSTRAINT "pk_s_2_1_gm_r2" PRIMARY KEY("a"), - SPATIAL INDEX "sp_idx1"("b"), - SPATIAL INDEX "sp_idx2"("c") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_GM_TABLES2= - SELECT spider_direct_sql('SELECT "a", "b", "c" FROM "gm_r2" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_LOCK_TABLES1= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_LOCK_TABLES1= - SELECT spider_direct_sql('CREATE TABLE "t1_1" ( - "id" INT NOT NULL, - CONSTRAINT "pk_s_2_1_t1_1" PRIMARY KEY ("id") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_LOCK_TABLES2= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t2_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_LOCK_TABLES2= - SELECT spider_direct_sql('CREATE TABLE "t2_2" ( - "id" INT NOT NULL, - CONSTRAINT "pk_s_2_1_t2_2" PRIMARY KEY ("id") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_INCREMENT_TABLES1= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_INCREMENT_TABLES1= - SELECT spider_direct_sql('CREATE TABLE "t1_1" ( - "id" INT NOT NULL, - CONSTRAINT "pk_s_2_1_t1_1" PRIMARY KEY ("id") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_INCREMENT_TABLES1= - SELECT spider_direct_sql('SELECT "id" FROM "t1_1" ORDER BY "id"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TEXT_PK_TABLES1= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TEXT_PK_TABLES1= - SELECT spider_direct_sql('CREATE TABLE "t1" ( - "a" VARCHAR(255), - CONSTRAINT "pk_s_2_1_t1" PRIMARY KEY ("a") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TEXT_PK_TABLES1= - SELECT spider_direct_sql('SELECT "a" FROM "t1" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TEXT_KEY_TABLES1= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TEXT_KEY_TABLES1= - SELECT spider_direct_sql('CREATE TABLE "t1" ( - "a" VARCHAR(255), - "b" VARCHAR(255), - "c" VARCHAR(255), - CONSTRAINT "pk_s_2_1_t1" PRIMARY KEY ("c") - )', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE INDEX "idx1_t1" ON "t1"("a","b")', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE INDEX "idx2_t1" ON "t1"("b")', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TEXT_KEY_TABLES1= - SELECT spider_direct_sql('SELECT "a", "b", "c" FROM "t1" ORDER BY "c"', '', 'srv "s_2_1"'); -let $CHILD2_1_AUTO_INCREMENT_INCREMENT1= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_1"'); -let $CHILD2_1_AUTO_INCREMENT_INCREMENT2= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"'); -let $CHILD2_1_AUTO_INCREMENT_OFFSET1= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_1"'); -let $CHILD2_1_AUTO_INCREMENT_OFFSET2= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"'); diff --git a/storage/spider/mysql-test/spider/oracle/include/init_child2_2.inc b/storage/spider/mysql-test/spider/oracle/include/init_child2_2.inc deleted file mode 100644 index fd4497c0b59..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/init_child2_2.inc +++ /dev/null @@ -1,94 +0,0 @@ ---connection master_1 -SELECT spider_direct_sql('ALTER SESSION SET NLS_DATE_FORMAT=\'YYYY-MM-DD HH24:MI:SS\'', '', 'srv "s_2_2"'); -SELECT spider_direct_sql('ALTER SESSION SET NLS_TIME_FORMAT=\'HH24:MI:SSXFF\'', '', 'srv "s_2_2"'); -SELECT spider_direct_sql('ALTER SESSION SET NLS_TIMESTAMP_FORMAT=\'YYYY-MM-DD HH24:MI:SSXFF\'', '', 'srv "s_2_2"'); -let $CHILD2_2_DROP_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ta_r3"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_CREATE_TABLES= - SELECT spider_direct_sql('CREATE TABLE "ta_r3" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - CONSTRAINT "pk_s_2_2_ta_r3" PRIMARY KEY("a") - )', '', 'srv "s_2_2"'); -let $CHILD2_2_DROP_TABLES5= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "s_2_2_ta_r_int"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_CREATE_TABLES5= - SELECT spider_direct_sql('CREATE TABLE "s_2_2_ta_r_int" ( - "a" INT DEFAULT 3, - "b" INT DEFAULT 10, - "c" INT DEFAULT 11, - CONSTRAINT "pk_s_2_2_ta_r_int" PRIMARY KEY("a") - )', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE INDEX "idx1_s_2_2_ta_r_int" ON "s_2_2_ta_r_int"("b")', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE INDEX "idx2_s_2_2_ta_r_int" ON "s_2_2_ta_r_int"("c")', '', 'srv "s_2_2"'); -let $CHILD2_2_SELECT_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\') FROM "ta_r3" ORDER BY "a"', '', 'srv "s_2_2"'); -let $CHILD2_2_DROP_FT_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ft_r3"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_CREATE_FT_TABLES= - SELECT spider_direct_sql('CREATE TABLE "ft_r3" ( - "a" INT DEFAULT 0, - "b" TEXT, - "c" TEXT, - "d" TEXT, - CONSTRAINT "pk_s_2_2_ft_r3" PRIMARY KEY("a"), - FULLTEXT INDEX "ft_idx1"("b"), - FULLTEXT INDEX "ft_idx2"("c") - )', '', 'srv "s_2_2"'); -let $CHILD2_2_SELECT_FT_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", "c", "d" FROM "ft_r3" ORDER BY "a"', '', 'srv "s_2_2"'); -let $CHILD2_2_DROP_GM_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "gm_r3"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_CREATE_GM_TABLES= - SELECT spider_direct_sql('CREATE TABLE "gm_r3" ( - "a" INT DEFAULT 0, - "b" GEOMETRY NOT NULL, - "c" GEOMETRY NOT NULL, - CONSTRAINT "pk_s_2_2_gm_r3" PRIMARY KEY("a"), - SPATIAL INDEX "sp_idx1"("b"), - SPATIAL INDEX "sp_idx2"("c") - )', '', 'srv "s_2_2"'); -let $CHILD2_2_SELECT_GM_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", "c" FROM "gm_r3" ORDER BY "a"', '', 'srv "s_2_2"'); -let $CHILD2_2_DROP_LOCK_TABLES1= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_CREATE_LOCK_TABLES1= - SELECT spider_direct_sql('CREATE TABLE "t1_2" ( - "id" INT NOT NULL, - CONSTRAINT "pk_s_2_2_t1_2" PRIMARY KEY ("id") - )', '', 'srv "s_2_2"'); -let $CHILD2_2_DROP_LOCK_TABLES2= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t2_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_CREATE_LOCK_TABLES2= - SELECT spider_direct_sql('CREATE TABLE "t2_1" ( - "id" INT NOT NULL, - CONSTRAINT "pk_s_2_2_t2_1" PRIMARY KEY ("id") - )', '', 'srv "s_2_2"'); -let $CHILD2_2_DROP_INCREMENT_TABLES1= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_CREATE_INCREMENT_TABLES1= - SELECT spider_direct_sql('CREATE TABLE "t1_2" ( - "id" INT NOT NULL, - CONSTRAINT "pk_s_2_2_t1_2" PRIMARY KEY ("id") - )', '', 'srv "s_2_2"'); -let $CHILD2_2_SELECT_INCREMENT_TABLES1= - SELECT spider_direct_sql('SELECT "id" FROM "t1_2" ORDER BY "id"', '', 'srv "s_2_2"'); -let $CHILD2_2_AUTO_INCREMENT_INCREMENT1= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_2"'); -let $CHILD2_2_AUTO_INCREMENT_INCREMENT2= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"'); -let $CHILD2_2_AUTO_INCREMENT_OFFSET1= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_2"'); -let $CHILD2_2_AUTO_INCREMENT_OFFSET2= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"'); diff --git a/storage/spider/mysql-test/spider/oracle/include/init_child2_3.inc b/storage/spider/mysql-test/spider/oracle/include/init_child2_3.inc deleted file mode 100644 index e16dfeffd81..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/init_child2_3.inc +++ /dev/null @@ -1,15 +0,0 @@ ---connection master_1 -SELECT spider_direct_sql('ALTER SESSION SET NLS_DATE_FORMAT=\'YYYY-MM-DD HH24:MI:SS\'', '', 'srv "s_2_3"'); -SELECT spider_direct_sql('ALTER SESSION SET NLS_TIME_FORMAT=\'HH24:MI:SSXFF\'', '', 'srv "s_2_3"'); -SELECT spider_direct_sql('ALTER SESSION SET NLS_TIMESTAMP_FORMAT=\'YYYY-MM-DD HH24:MI:SSXFF\'', '', 'srv "s_2_3"'); -let $CHILD2_3_DROP_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ta_r4"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_3"'); -let $CHILD2_3_CREATE_TABLES= - SELECT spider_direct_sql('CREATE TABLE "ta_r4" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - CONSTRAINT "pk_s_2_3_ta_r4" PRIMARY KEY("a") - )', '', 'srv "s_2_3"'); -let $CHILD2_3_SELECT_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\') FROM "ta_r4" ORDER BY "a"', '', 'srv "s_2_3"'); diff --git a/storage/spider/mysql-test/spider/oracle/include/init_child3_1.inc b/storage/spider/mysql-test/spider/oracle/include/init_child3_1.inc deleted file mode 100644 index d2d308cbefe..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/init_child3_1.inc +++ /dev/null @@ -1,3 +0,0 @@ ---let $TEST_ENGINE_TYPE= $CHILD3_1_ENGINE_TYPE ---source ../../include/init_engine.inc ---let $INIT_CHILD3_1_ENGINE= $INIT_TEST_ENGINE diff --git a/storage/spider/mysql-test/spider/oracle/include/init_child3_2.inc b/storage/spider/mysql-test/spider/oracle/include/init_child3_2.inc deleted file mode 100644 index 3fbe1bd55bb..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/init_child3_2.inc +++ /dev/null @@ -1,3 +0,0 @@ ---let $TEST_ENGINE_TYPE= $CHILD3_2_ENGINE_TYPE ---source ../../include/init_engine.inc ---let $INIT_CHILD3_2_ENGINE= $INIT_TEST_ENGINE diff --git a/storage/spider/mysql-test/spider/oracle/include/init_child3_3.inc b/storage/spider/mysql-test/spider/oracle/include/init_child3_3.inc deleted file mode 100644 index 3c7aaa8af84..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/init_child3_3.inc +++ /dev/null @@ -1,3 +0,0 @@ ---let $TEST_ENGINE_TYPE= $CHILD3_3_ENGINE_TYPE ---source ../../include/init_engine.inc ---let $INIT_CHILD3_3_ENGINE= $INIT_TEST_ENGINE diff --git a/storage/spider/mysql-test/spider/oracle/include/init_master_1.inc b/storage/spider/mysql-test/spider/oracle/include/init_master_1.inc deleted file mode 100644 index 8e79b984364..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/init_master_1.inc +++ /dev/null @@ -1,149 +0,0 @@ ---source ../include/init_spider.inc -SET spider_direct_order_limit= 10000; -SET spider_init_sql_alloc_size= 1; -SET spider_conn_recycle_mode= 2; -let $MASTER_1_COMMENT_2_1= - COMMENT='database "$ORACLE_DATABASE", table "ta_r", wrapper "oracle", - pk_name "pk_s_2_1_ta_r"' - CONNECTION='host "$ORACLE_HOST", port "$ORACLE_PORT", user "$ORACLE_USER", - password "$ORACLE_PASSWORD"'; -let $MASTER_1_COMMENT2_2_1= - COMMENT='database "$ORACLE_DATABASE", table "ta_r_no_idx", wrapper "oracle", - pk_name "pk_s_2_1_ta_r_no_idx"' - CONNECTION='host "$ORACLE_HOST", port "$ORACLE_PORT", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", prt "2000000"'; -let $MASTER_1_COMMENT_P_2_1= - COMMENT='table "ta_r3"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1", table "ta_r2", - priority "1000", pk_name "pk_s_2_1_ta_r2"', - PARTITION pt2 COMMENT='srv "s_2_2", priority "1000001", - pk_name "pk_s_2_2_ta_r3"' - ); -let $MASTER_1_COMMENT2_P_2_1= - COMMENT='table "ta_r3"' - PARTITION BY RANGE(a) ( - PARTITION pt1 VALUES LESS THAN (4) COMMENT='srv "s_2_1", - table "ta_r2", priority "1000", pk_name "pk_s_2_1_ta_r2"', - PARTITION pt2 VALUES LESS THAN MAXVALUE - COMMENT='srv "s_2_2", priority "1000001", pk_name "pk_s_2_2_ta_r3"' - ); -let $MASTER_1_COMMENT3_2_1= - COMMENT='database "$ORACLE_DATABASE", table "ta_r_auto_inc", - wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", port "$ORACLE_PORT", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", pk_name "pk_s_2_1_ta_r_auto_inc"'; -let $MASTER_1_COMMENT3_P_2_1= - COMMENT='table "s_2_1_ta_r_int"' - PARTITION BY LIST(MOD(a, 2)) ( - PARTITION pt1 VALUES IN (0) - COMMENT='srv "s_2_1", priority "1000", pk_name "pk_s_2_1_ta_r_int"', - PARTITION pt2 VALUES IN (1) - COMMENT='srv "s_2_2", priority "1000001", pk_name "pk_s_2_2_ta_r_int", - table "s_2_2_ta_r_int"' - ); -let $MASTER_1_COMMENT4_2_1= - COMMENT='database "$ORACLE_DATABASE", table "s_2_1_ta_r_int", - wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", port "$ORACLE_PORT", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", pk_name "pk_s_2_1_ta_r_int"'; -let $MASTER_1_COMMENT5_2_1= - COMMENT='database "$ORACLE_DATABASE", table "ta_r_3", wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", port "$ORACLE_PORT", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", pk_name "pk_s_2_1_ta_r_3"'; -let $MASTER_1_COMMENT_FT_2_1= - COMMENT='database "$ORACLE_DATABASE", table "ft_r", wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", port "$ORACLE_PORT", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", pk_name "pk_s_2_1_ft_r"'; -let $MASTER_1_COMMENT2_FT_P_2_1= - COMMENT='table "ft_r3"' - PARTITION BY RANGE(a) ( - PARTITION pt1 VALUES LESS THAN (4) COMMENT='srv "s_2_1", - table "ft_r2", priority "1000", pk_name "pk_s_2_1_ft_r2"', - PARTITION pt2 VALUES LESS THAN MAXVALUE - COMMENT='srv "s_2_2", priority "1000001", pk_name "pk_s_2_2_ft_r3"' - ); -let $MASTER_1_COMMENT_GM_2_1= - COMMENT='srv "s_2_1", table "gm_r", pk_name "pk_s_2_1_gm_r"'; -let $MASTER_1_COMMENT2_GM_P_2_1= - COMMENT='table "gm_r3"' - PARTITION BY RANGE(a) ( - PARTITION pt1 VALUES LESS THAN (4) COMMENT='srv "s_2_1", - table "gm_r2", priority "1000", pk_name "pk_s_2_1_gm_r2"', - PARTITION pt2 VALUES LESS THAN MAXVALUE - COMMENT='srv "s_2_2", priority "1000001", pk_name "pk_s_2_2_gm_r3"' - ); -let $MASTER_1_COMMENT_LOCK1= - COMMENT 'tbl "t1_1 t1_2", srv "s_2_1 s_2_2", - pk_name "pk_s_2_1_t1_1 pk_s_2_2_t1_2"'; -let $MASTER_1_COMMENT_LOCK2= - COMMENT 'tbl "t2_1 t2_2", srv "s_2_2 s_2_1", - pk_name "pk_s_2_2_t2_1 pk_s_2_1_t2_2"'; -let $MASTER_1_COMMENT_INCREMENT1_1= - COMMENT 'aim "0", tbl "t1_1", srv "s_2_1", pk_name "pk_s_2_1_t1_1"'; -let $MASTER_1_COMMENT_INCREMENT1_P_1= - COMMENT 'aim "0"' - PARTITION BY LIST(MOD(id, 2)) ( - PARTITION pt1 VALUES IN (0) - COMMENT='tbl "t1_1", srv "s_2_1", pk_name "pk_s_2_1_t1_1"', - PARTITION pt2 VALUES IN (1) - COMMENT='tbl "t1_2", srv "s_2_2", pk_name "pk_s_2_2_t1_2"' - ); -let $MASTER_1_COMMENT_READONLY1_1= - COMMENT 'read_only_mode "1", tbl "t1_1", srv "s_2_1", - pk_name "pk_s_2_1_t1_1"'; -let $MASTER_1_COMMENT_ERROR_MODE1_1= - COMMENT 'erm "1", ewm "1", tbl "ter1_1", srv "s_2_1", - pk_name "pk_s_2_1_ter1_1"'; -let $MASTER_1_COMMENT_TEXT_PK1_1= - COMMENT 'tbl "t1", srv "s_2_1", pk_name "pk_s_2_1_t1"'; -let $MASTER_1_COMMENT_TEXT_KEY1_1= - COMMENT 'tbl "t1", srv "s_2_1", pk_name "pk_s_2_1_t1"'; -let $MASTER_1_CHECK_DIRECT_UPDATE_STATUS= - SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -let $MASTER_1_CHECK_DIRECT_DELETE_STATUS= - SHOW GLOBAL STATUS LIKE 'Spider_direct_delete%'; -let $MASTER_1_CHECK_DIRECT_ORDER_LIMIT_STATUS= - SHOW GLOBAL STATUS LIKE 'Spider_direct_order_limit%'; -let $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS= - SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -let $MASTER_1_AUTO_INCREMENT_INCREMENT1= - SET SESSION AUTO_INCREMENT_INCREMENT = 1 $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_2"'); -let $MASTER_1_AUTO_INCREMENT_INCREMENT2= - SET SESSION AUTO_INCREMENT_INCREMENT = 777 $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"'); -let $MASTER_1_AUTO_INCREMENT_OFFSET1= - SET SESSION AUTO_INCREMENT_OFFSET = 1 $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_2"'); -let $MASTER_1_AUTO_INCREMENT_OFFSET2= - SET SESSION AUTO_INCREMENT_OFFSET = 777 $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"'); -let $MASTER_1_AUTO_INCREMENT_OFFSET3= - SET SESSION AUTO_INCREMENT_OFFSET = 1; -let $MASTER_1_AUTO_INCREMENT_OFFSET4= - SET SESSION AUTO_INCREMENT_OFFSET = 777; diff --git a/storage/spider/mysql-test/spider/oracle/include/init_slave1_1.inc b/storage/spider/mysql-test/spider/oracle/include/init_slave1_1.inc deleted file mode 100644 index 73c3c6b9ef2..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/init_slave1_1.inc +++ /dev/null @@ -1,10 +0,0 @@ -let $SLAVE1_1_COMMENT_INCREMENT1_1= - COMMENT ''; -let $SLAVE1_1_COMMENT_INCREMENT1_P_1= - COMMENT '' - PARTITION BY LIST(MOD(id, 2)) ( - PARTITION pt1 VALUES IN (0) - COMMENT='', - PARTITION pt2 VALUES IN (1) - COMMENT='' - ); diff --git a/storage/spider/mysql-test/spider/oracle/include/init_spider.inc b/storage/spider/mysql-test/spider/oracle/include/init_spider.inc deleted file mode 100644 index ff9ac9aee29..00000000000 --- a/storage/spider/mysql-test/spider/oracle/include/init_spider.inc +++ /dev/null @@ -1,105 +0,0 @@ ---source ../../include/init_spider.inc -let $VERSION_COMPILE_OS_WIN= - `SELECT IF(@@version_compile_os like 'Win%', 1, 0)`; -if ($VERSION_COMPILE_OS_WIN) -{ - eval DROP SERVER s_2_1; - eval CREATE SERVER s_2_1 FOREIGN DATA WRAPPER oracle OPTIONS ( - HOST '$ORACLE_HOST', - DATABASE '$ORACLE_DATABASE', - USER '$ORACLE_USER', - PASSWORD '$ORACLE_PASSWORD', - PORT $ORACLE_PORT - ); - eval DROP SERVER s_2_2; - eval CREATE SERVER s_2_2 FOREIGN DATA WRAPPER oracle OPTIONS ( - HOST '$ORACLE_HOST', - DATABASE '$ORACLE_DATABASE', - USER '$ORACLE_USER', - PASSWORD '$ORACLE_PASSWORD', - PORT $ORACLE_PORT - ); - eval DROP SERVER s_2_3; - eval CREATE SERVER s_2_3 FOREIGN DATA WRAPPER oracle OPTIONS ( - HOST '$ORACLE_HOST', - DATABASE '$ORACLE_DATABASE', - USER '$ORACLE_USER', - PASSWORD '$ORACLE_PASSWORD', - PORT $ORACLE_PORT - ); - eval DROP SERVER s_3_1; - eval CREATE SERVER s_3_1 FOREIGN DATA WRAPPER mysql OPTIONS ( - HOST 'localhost', - DATABASE 'auto_test_local', - USER 'root', - PASSWORD '', - PORT $CHILD3_1_MYPORT - ); - eval DROP SERVER s_3_2; - eval CREATE SERVER s_3_2 FOREIGN DATA WRAPPER mysql OPTIONS ( - HOST 'localhost', - DATABASE 'auto_test_local', - USER 'root', - PASSWORD '', - PORT $CHILD3_2_MYPORT - ); - eval DROP SERVER s_3_3; - eval CREATE SERVER s_3_3 FOREIGN DATA WRAPPER mysql OPTIONS ( - HOST 'localhost', - DATABASE 'auto_test_local', - USER 'root', - PASSWORD '', - PORT $CHILD2_3_MYPORT - ); -} -if (!$VERSION_COMPILE_OS_WIN) -{ - eval DROP SERVER s_2_1; - eval CREATE SERVER s_2_1 FOREIGN DATA WRAPPER oracle OPTIONS ( - HOST '$ORACLE_HOST', - DATABASE '$ORACLE_DATABASE', - USER '$ORACLE_USER', - PASSWORD '$ORACLE_PASSWORD', - PORT $ORACLE_PORT - ); - eval DROP SERVER s_2_2; - eval CREATE SERVER s_2_2 FOREIGN DATA WRAPPER oracle OPTIONS ( - HOST '$ORACLE_HOST', - DATABASE '$ORACLE_DATABASE', - USER '$ORACLE_USER', - PASSWORD '$ORACLE_PASSWORD', - PORT $ORACLE_PORT - ); - eval DROP SERVER s_2_3; - eval CREATE SERVER s_2_3 FOREIGN DATA WRAPPER oracle OPTIONS ( - HOST '$ORACLE_HOST', - DATABASE '$ORACLE_DATABASE', - USER '$ORACLE_USER', - PASSWORD '$ORACLE_PASSWORD', - PORT $ORACLE_PORT - ); - eval DROP SERVER s_3_1; - eval CREATE SERVER s_3_1 FOREIGN DATA WRAPPER mysql OPTIONS ( - HOST 'localhost', - DATABASE 'auto_test_local', - USER 'root', - PASSWORD '', - SOCKET '$CHILD3_1_MYSOCK' - ); - eval DROP SERVER s_3_2; - eval CREATE SERVER s_3_2 FOREIGN DATA WRAPPER mysql OPTIONS ( - HOST 'localhost', - DATABASE 'auto_test_local', - USER 'root', - PASSWORD '', - SOCKET '$CHILD3_2_MYSOCK' - ); - eval DROP SERVER s_3_3; - eval CREATE SERVER s_3_3 FOREIGN DATA WRAPPER mysql OPTIONS ( - HOST 'localhost', - DATABASE 'auto_test_local', - USER 'root', - PASSWORD '', - SOCKET '$CHILD3_3_MYSOCK' - ); -} diff --git a/storage/spider/mysql-test/spider/oracle/my.cnf b/storage/spider/mysql-test/spider/oracle/my.cnf deleted file mode 100644 index efa05c8e8b0..00000000000 --- a/storage/spider/mysql-test/spider/oracle/my.cnf +++ /dev/null @@ -1,146 +0,0 @@ -# Use default setting for mysqld processes -!include include/default_mysqld.cnf - -[mysqld.1.1] -log-bin= master-bin -loose_handlersocket_port= 20000 -loose_handlersocket_port_wr= 20001 -loose_handlersocket_threads= 2 -loose_handlersocket_threads_wr= 1 -loose_handlersocket_support_merge_table= 0 -loose_handlersocket_direct_update_mode= 2 -loose_handlersocket_unlimited_boundary= 65536 -loose_handlersocket_bulk_insert= 0 -loose_handlersocket_bulk_insert_timeout= 0 -loose_handlersocket_general_log= 1 -loose_handlersocket_timeout= 30 -loose_handlersocket_close_table_interval=2 -open_files_limit= 4096 -loose_partition= 1 - -[mysqld.3.1] -loose_partition= 1 - -[mysqld.3.2] -loose_partition= 1 - -[mysqld.3.3] -loose_partition= 1 - -[mysqld.4.1] -loose_partition= 1 - - -[ENV] -USE_GEOMETRY_TEST= 0 -USE_FULLTEXT_TEST= 0 -USE_HA_TEST= 1 -USE_GENERAL_LOG= 1 -USE_REPLICATION= 0 -MASTER_1_MYPORT= @mysqld.1.1.port -MASTER_1_HSRPORT= 20000 -MASTER_1_HSWPORT= 20001 -MASTER_1_MYSOCK= @mysqld.1.1.socket -MASTER_1_ENGINE_TYPE= Spider -#MASTER_1_ENGINE_TYPE= MyISAM -MASTER_1_ENGINE= ENGINE=Spider -MASTER_1_CHARSET= DEFAULT CHARSET=utf8 -MASTER_1_ENGINE2= ENGINE=MyISAM -MASTER_1_CHARSET2= DEFAULT CHARSET=utf8 -MASTER_1_CHARSET3= DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci -SLAVE1_1_MYPORT= @mysqld.4.1.port -SLAVE1_1_MYSOCK= @mysqld.4.1.socket -SLAVE1_1_ENGINE_TYPE= MyISAM -SLAVE1_1_ENGINE= ENGINE=MyISAM -SLAVE1_1_CHARSET= DEFAULT CHARSET=utf8 -USE_CHILD_GROUP2= 1 -OUTPUT_CHILD_GROUP2= 0 -CHILD2_1_MYPORT= @mysqld.1.1.port -CHILD2_1_MYSOCK= @mysqld.1.1.socket -CHILD2_1_ENGINE_TYPE= InnoDB -CHILD2_1_ENGINE= ENGINE=InnoDB -CHILD2_1_CHARSET= DEFAULT CHARSET=utf8 -CHILD2_1_CHARSET2= DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci -CHILD2_2_MYPORT= @mysqld.1.1.port -CHILD2_2_MYSOCK= @mysqld.1.1.socket -CHILD2_2_ENGINE_TYPE= InnoDB -CHILD2_2_ENGINE= ENGINE=InnoDB -CHILD2_2_CHARSET= DEFAULT CHARSET=utf8 -CHILD2_3_MYPORT= @mysqld.1.1.port -CHILD2_3_MYSOCK= @mysqld.1.1.socket -CHILD2_3_ENGINE_TYPE= InnoDB -CHILD2_3_ENGINE= ENGINE=InnoDB -CHILD2_3_CHARSET= DEFAULT CHARSET=utf8 -CHILD2_1_FT_MYPORT= @mysqld.1.1.port -CHILD2_1_FT_MYSOCK= @mysqld.1.1.socket -CHILD2_1_FT_ENGINE_TYPE= MyISAM -CHILD2_1_FT_ENGINE= ENGINE=MyISAM -CHILD2_1_FT_CHARSET= DEFAULT CHARSET=utf8 -CHILD2_2_FT_MYPORT= @mysqld.1.1.port -CHILD2_2_FT_MYSOCK= @mysqld.1.1.socket -CHILD2_2_FT_ENGINE_TYPE= MyISAM -CHILD2_2_FT_ENGINE= ENGINE=MyISAM -CHILD2_2_FT_CHARSET= DEFAULT CHARSET=utf8 -CHILD2_1_GM_MYPORT= @mysqld.1.1.port -CHILD2_1_GM_MYSOCK= @mysqld.1.1.socket -CHILD2_1_GM_ENGINE_TYPE= MyISAM -CHILD2_1_GM_ENGINE= ENGINE=MyISAM -CHILD2_1_GM_CHARSET= DEFAULT CHARSET=utf8 -CHILD2_2_GM_MYPORT= @mysqld.1.1.port -CHILD2_2_GM_MYSOCK= @mysqld.1.1.socket -CHILD2_2_GM_ENGINE_TYPE= MyISAM -CHILD2_2_GM_ENGINE= ENGINE=MyISAM -CHILD2_2_GM_CHARSET= DEFAULT CHARSET=utf8 -USE_CHILD_GROUP3= 1 -OUTPUT_CHILD_GROUP3= 0 -CHILD3_1_MYPORT= @mysqld.3.1.port -CHILD3_1_MYSOCK= @mysqld.3.1.socket -CHILD3_1_ENGINE_TYPE= InnoDB -CHILD3_1_ENGINE= ENGINE=InnoDB -CHILD3_1_CHARSET= DEFAULT CHARSET=utf8 -CHILD3_2_MYPORT= @mysqld.3.2.port -CHILD3_2_MYSOCK= @mysqld.3.2.socket -CHILD3_2_ENGINE_TYPE= InnoDB -CHILD3_2_ENGINE= ENGINE=InnoDB -CHILD3_2_CHARSET= DEFAULT CHARSET=utf8 -CHILD3_3_MYPORT= @mysqld.3.3.port -CHILD3_3_MYSOCK= @mysqld.3.3.socket -CHILD3_3_ENGINE_TYPE= InnoDB -CHILD3_3_ENGINE= ENGINE=InnoDB -CHILD3_3_CHARSET= DEFAULT CHARSET=utf8 -ORACLE_HOST= xe -ORACLE_PORT= 1521 -ORACLE_USER= system -ORACLE_PASSWORD= oracle -ORACLE_DATABASE= SYSTEM - -STR_SEMICOLON= ; - -#The followings are set in include/init_xxx.inc files -# MASTER_1_COMMENT_2_1 -# MASTER_1_COMMENT2_2_1 -# MASTER_1_COMMENT3_2_1 -# MASTER_1_COMMENT4_2_1 -# MASTER_1_COMMENT5_2_1 -# MASTER_1_COMMENT_P_2_1 -# CHILD2_1_DROP_TABLES -# CHILD2_1_CREATE_TABLES -# CHILD2_1_SELECT_TABLES -# CHILD2_1_DROP_TABLES2 -# CHILD2_1_CREATE_TABLES2 -# CHILD2_1_SELECT_TABLES2 -# CHILD2_1_DROP_TABLES3 -# CHILD2_1_CREATE_TABLES3 -# CHILD2_1_SELECT_TABLES3 -# CHILD2_1_DROP_TABLES4 -# CHILD2_1_CREATE_TABLES4 -# CHILD2_1_SELECT_TABLES4 -# CHILD2_1_DROP_TABLES5 -# CHILD2_1_CREATE_TABLES5 -# CHILD2_1_SELECT_TABLES5 -# CHILD2_1_DROP_TABLES6 -# CHILD2_1_CREATE_TABLES6 -# CHILD2_1_SELECT_TABLES6 -# CHILD2_2_DROP_TABLES -# CHILD2_2_CREATE_TABLES -# CHILD2_2_SELECT_TABLES diff --git a/storage/spider/mysql-test/spider/oracle/r/basic_sql.result b/storage/spider/mysql-test/spider/oracle/r/basic_sql.result deleted file mode 100644 index 1e9fe78acea..00000000000 --- a/storage/spider/mysql-test/spider/oracle/r/basic_sql.result +++ /dev/null @@ -1,634 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -create table select test -DROP TABLE IF EXISTS tb_l; -CREATE TABLE tb_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2 -INSERT INTO tb_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -SELECT a, b, c FROM tb_l -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -create table ignore select test -DROP TABLE IF EXISTS ta_l; -DROP TABLE IF EXISTS tb_l; -CREATE TABLE tb_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2 -INSERT INTO tb_l (a, b, c) VALUES -(1, 'f', '2008-07-01 10:21:39'), -(2, 'g', '2000-02-01 00:00:00'), -(3, 'j', '2007-05-04 20:03:11'), -(4, 'i', '2003-10-30 05:01:03'), -(5, 'h', '2001-10-31 23:59:59'); -CREATE TABLE ta_l ( -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -IGNORE SELECT a, b, c FROM tb_l -Warnings: -Warning 1062 Duplicate entry '1' for key 'PRIMARY' -Warning 1062 Duplicate entry '2' for key 'PRIMARY' -Warning 1062 Duplicate entry '3' for key 'PRIMARY' -Warning 1062 Duplicate entry '4' for key 'PRIMARY' -Warning 1062 Duplicate entry '5' for key 'PRIMARY' -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -create table ignore select test -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -REPLACE SELECT a, b, c FROM tb_l -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -create no index table -DROP TABLE IF EXISTS ta_l_no_idx; -CREATE TABLE ta_l_no_idx -MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT2_2_1 -SELECT a, b, c FROM tb_l -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l_no_idx ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select table -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select table shared mode -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a -LOCK IN SHARE MODE; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select table for update -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a -FOR UPDATE; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select table join -SELECT a.a, a.b, date_format(b.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a, tb_l b -WHERE a.a = b.a ORDER BY a.a; -a b date_format(b.c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select table straight_join -SELECT STRAIGHT_JOIN a.a, a.b, date_format(b.c, '%Y-%m-%d %H:%i:%s') -FROM ta_l a, tb_l b WHERE a.a = b.a ORDER BY a.a; -a b date_format(b.c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select sql_small_result -SELECT SQL_SMALL_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select sql_big_result -SELECT SQL_BIG_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select sql_buffer_result -SELECT SQL_BUFFER_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select sql_cache -SELECT SQL_CACHE a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select sql_no_cache -SELECT SQL_NO_CACHE a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select sql_calc_found_rows -SELECT SQL_CALC_FOUND_ROWS a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a LIMIT 4; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -SELECT found_rows(); -found_rows() -5 - -select high_priority -SELECT HIGH_PRIORITY a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select distinct -SELECT DISTINCT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select count -SELECT count(*) FROM ta_l ORDER BY a; -count(*) -5 - -select table join not use index -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM tb_l a WHERE -EXISTS (SELECT * FROM ta_l b WHERE b.b = a.b) ORDER BY a.a; -a b date_format(a.c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select using pushdown -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a WHERE -a.b = 'g' ORDER BY a.a; -a b date_format(a.c, '%Y-%m-%d %H:%i:%s') -2 g 2000-02-01 00:00:00 - -select using index and pushdown -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a WHERE -a.a > 0 AND a.b = 'g' ORDER BY a.a; -a b date_format(a.c, '%Y-%m-%d %H:%i:%s') -2 g 2000-02-01 00:00:00 - -insert -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 e 2008-01-01 23:59:59 - -insert select -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) SELECT a, b, c FROM tb_l; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -insert select a -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES ((SELECT a FROM tb_l ORDER BY a LIMIT 1), -'e', '2008-01-01 23:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 - -insert low_priority -TRUNCATE TABLE ta_l; -INSERT LOW_PRIORITY INTO ta_l (a, b, c) values (2, 'e', '2008-01-01 23:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 e 2008-01-01 23:59:59 - -insert high_priority -TRUNCATE TABLE ta_l; -INSERT HIGH_PRIORITY INTO ta_l (a, b, c) VALUES (2, 'e', -'2008-01-01 23:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 e 2008-01-01 23:59:59 - -insert ignore -INSERT IGNORE INTO ta_l (a, b, c) VALUES (2, 'd', '2009-02-02 01:01:01'); -Warnings: -Warning 1062 Duplicate entry '2' for key 'PRIMARY' -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 e 2008-01-01 23:59:59 - -insert update (insert) -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59') ON DUPLICATE -KEY UPDATE b = 'f', c = '2005-08-08 11:11:11'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 e 2008-01-01 23:59:59 - -insert update (update) -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59') ON DUPLICATE -KEY UPDATE b = 'f', c = '2005-08-08 11:11:11'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 f 2005-08-08 11:11:11 - -replace -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59'); -REPLACE INTO ta_l (a, b, c) VALUES (2, 'f', '2008-02-02 02:02:02'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 f 2008-02-02 02:02:02 - -replace select -REPLACE INTO ta_l (a, b, c) SELECT a, b, c FROM tb_l; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -replace select a -REPLACE INTO ta_l (a, b, c) VALUES ((SELECT a FROM tb_l ORDER BY a LIMIT 1), -'e', '2008-01-01 23:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -replace low_priority -REPLACE LOW_PRIORITY INTO ta_l (a, b, c) VALUES (3, 'g', -'2009-03-03 03:03:03'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 -2 g 2000-02-01 00:00:00 -3 g 2009-03-03 03:03:03 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -update -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'); -UPDATE ta_l SET b = 'f', c = '2008-02-02 02:02:02' WHERE a = 2; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 -2 f 2008-02-02 02:02:02 - -update select -UPDATE ta_l SET b = 'g', c = '2009-03-03 03:03:03' WHERE a IN (SELECT a FROM -tb_l); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 g 2009-03-03 03:03:03 -2 g 2009-03-03 03:03:03 - -update select a -UPDATE ta_l SET b = 'h', c = '2010-04-04 04:04:04' WHERE a = (SELECT a FROM -tb_l ORDER BY a LIMIT 1); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 h 2010-04-04 04:04:04 -2 g 2009-03-03 03:03:03 - -update join -UPDATE ta_l a, tb_l b SET a.b = b.b, a.c = b.c WHERE a.a = b.a; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 - -update join a -UPDATE ta_l a, tb_l b SET a.b = 'g', a.c = '2009-03-03 03:03:03' WHERE -a.a = b.a; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 g 2009-03-03 03:03:03 -2 g 2009-03-03 03:03:03 - -update low_priority -UPDATE LOW_PRIORITY ta_l SET b = 'f', c = '2008-02-02 02:02:02' WHERE a = 2; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 g 2009-03-03 03:03:03 -2 f 2008-02-02 02:02:02 - -update ignore -UPDATE IGNORE ta_l SET a = 1, b = 'g', c = '2009-03-03 03:03:03' WHERE a = 2; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 g 2009-03-03 03:03:03 -2 f 2008-02-02 02:02:02 - -update pushdown -update ta_l set b = 'j', c = '2009-03-03 03:03:03' where b = 'f'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 g 2009-03-03 03:03:03 -2 j 2009-03-03 03:03:03 - -update index pushdown -UPDATE ta_l SET b = 'g', c = '2009-03-03 03:03:03' WHERE a > 0 AND b = 'j'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 g 2009-03-03 03:03:03 -2 g 2009-03-03 03:03:03 - -delete -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE FROM ta_l WHERE a = 2; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 -3 e 2008-01-01 23:59:59 -4 e 2008-01-01 23:59:59 -5 e 2008-01-01 23:59:59 -6 e 2008-01-01 23:59:59 -7 e 2008-01-01 23:59:59 -8 e 2008-01-01 23:59:59 -9 e 2008-01-01 23:59:59 -10 j 2008-01-01 23:59:59 - -delete all -DELETE FROM ta_l; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') - -delete select -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE FROM ta_l WHERE a IN (SELECT a FROM tb_l); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -6 e 2008-01-01 23:59:59 -7 e 2008-01-01 23:59:59 -8 e 2008-01-01 23:59:59 -9 e 2008-01-01 23:59:59 -10 j 2008-01-01 23:59:59 - -delete select a -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE FROM ta_l WHERE a = (SELECT a FROM tb_l ORDER BY a LIMIT 1); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 e 2008-01-01 23:59:59 -3 e 2008-01-01 23:59:59 -4 e 2008-01-01 23:59:59 -5 e 2008-01-01 23:59:59 -6 e 2008-01-01 23:59:59 -7 e 2008-01-01 23:59:59 -8 e 2008-01-01 23:59:59 -9 e 2008-01-01 23:59:59 -10 j 2008-01-01 23:59:59 - -delete join -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE a FROM ta_l a, (SELECT a FROM tb_l ORDER BY a) b WHERE a.a = b.a; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -6 e 2008-01-01 23:59:59 -7 e 2008-01-01 23:59:59 -8 e 2008-01-01 23:59:59 -9 e 2008-01-01 23:59:59 -10 j 2008-01-01 23:59:59 - -delete low_priority -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE LOW_PRIORITY FROM ta_l WHERE a = 2; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 -3 e 2008-01-01 23:59:59 -4 e 2008-01-01 23:59:59 -5 e 2008-01-01 23:59:59 -6 e 2008-01-01 23:59:59 -7 e 2008-01-01 23:59:59 -8 e 2008-01-01 23:59:59 -9 e 2008-01-01 23:59:59 -10 j 2008-01-01 23:59:59 - -delete ignore -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE IGNORE FROM ta_l WHERE a = 2; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 -3 e 2008-01-01 23:59:59 -4 e 2008-01-01 23:59:59 -5 e 2008-01-01 23:59:59 -6 e 2008-01-01 23:59:59 -7 e 2008-01-01 23:59:59 -8 e 2008-01-01 23:59:59 -9 e 2008-01-01 23:59:59 -10 j 2008-01-01 23:59:59 - -delete quick -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE QUICK FROM ta_l WHERE a = 2; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 -3 e 2008-01-01 23:59:59 -4 e 2008-01-01 23:59:59 -5 e 2008-01-01 23:59:59 -6 e 2008-01-01 23:59:59 -7 e 2008-01-01 23:59:59 -8 e 2008-01-01 23:59:59 -9 e 2008-01-01 23:59:59 -10 j 2008-01-01 23:59:59 - -delete pushdown -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE FROM ta_l WHERE b = 'e'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -10 j 2008-01-01 23:59:59 - -delete index pushdown -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE FROM ta_l WHERE a > 0 AND b = 'e'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -10 j 2008-01-01 23:59:59 - -truncate -TRUNCATE TABLE ta_l; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle/r/basic_sql_part.result b/storage/spider/mysql-test/spider/oracle/r/basic_sql_part.result deleted file mode 100644 index 9e1201c17c9..00000000000 --- a/storage/spider/mysql-test/spider/oracle/r/basic_sql_part.result +++ /dev/null @@ -1,121 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 -DROP TABLE IF EXISTS tb_l; -CREATE TABLE tb_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2 -INSERT INTO tb_l (a, b, c) VALUES -(1, 'f', '2008-07-01 10:21:39'), -(2, 'g', '2000-02-01 00:00:00'), -(3, 'j', '2007-05-04 20:03:11'), -(4, 'i', '2003-10-30 05:01:03'), -(5, 'h', '2001-10-31 23:59:59'); - -create table with partition and select test -CREATE TABLE ta_l2 ( -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_COMMENT_P_2_1 -SELECT a, b, c FROM tb_l -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select partition using pushdown -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 a WHERE -a.b = 'g' ORDER BY a.a; -a b date_format(a.c, '%Y-%m-%d %H:%i:%s') -2 g 2000-02-01 00:00:00 - -select partition using index pushdown -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 a WHERE -a.a > 0 AND a.b = 'g' ORDER BY a.a; -a b date_format(a.c, '%Y-%m-%d %H:%i:%s') -2 g 2000-02-01 00:00:00 - -update partition pushdown -UPDATE ta_l2 SET b = 'e', c = '2009-03-03 03:03:03' WHERE b = 'j'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 e 2009-03-03 03:03:03 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -update partition index pushdown -UPDATE ta_l2 SET b = 'j', c = '2009-03-03 03:03:03' WHERE a > 0 AND b = 'e'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2009-03-03 03:03:03 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -delete partition pushdown -TRUNCATE TABLE ta_l2; -INSERT INTO ta_l2 SELECT a, b, c FROM tb_l; -DELETE FROM ta_l2 WHERE b = 'g'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -delete partition index pushdown -TRUNCATE TABLE ta_l2; -INSERT INTO ta_l2 SELECT a, b, c FROM tb_l; -DELETE FROM ta_l2 WHERE a > 0 AND b = 'g'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle/r/direct_aggregate.result b/storage/spider/mysql-test/spider/oracle/r/direct_aggregate.result deleted file mode 100644 index fe5752cff65..00000000000 --- a/storage/spider/mysql-test/spider/oracle/r/direct_aggregate.result +++ /dev/null @@ -1,91 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -create table select test -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -INSERT INTO ta_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); - -direct_aggregating test -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 0 -SELECT COUNT(*) FROM ta_l; -COUNT(*) -5 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 1 -SELECT MAX(a) FROM ta_l; -MAX(a) -5 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 1 -SELECT MIN(a) FROM ta_l; -MIN(a) -1 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 1 -SELECT MAX(a) FROM ta_l WHERE a < 5; -MAX(a) -4 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 1 -SELECT MIN(a) FROM ta_l WHERE a > 1; -MIN(a) -2 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 1 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle/r/direct_aggregate_part.result b/storage/spider/mysql-test/spider/oracle/r/direct_aggregate_part.result deleted file mode 100644 index 9bde4a1746a..00000000000 --- a/storage/spider/mysql-test/spider/oracle/r/direct_aggregate_part.result +++ /dev/null @@ -1,82 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -with partition test -CREATE TABLE ta_l2 ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 0 -SELECT COUNT(*) FROM ta_l2; -COUNT(*) -5 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 2 -SELECT MAX(a) FROM ta_l2; -MAX(a) -5 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 2 -SELECT MIN(a) FROM ta_l2; -MIN(a) -1 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 2 -SELECT MAX(a) FROM ta_l2 WHERE a < 5; -MAX(a) -4 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 2 -SELECT MIN(a) FROM ta_l2 WHERE a > 1; -MIN(a) -2 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 2 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle/r/direct_update.result b/storage/spider/mysql-test/spider/oracle/r/direct_update.result deleted file mode 100644 index 3dc39d5f630..00000000000 --- a/storage/spider/mysql-test/spider/oracle/r/direct_update.result +++ /dev/null @@ -1,138 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -create table select test -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -INSERT INTO ta_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); - -direct_updating test -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 -update all rows with function -UPDATE ta_l SET c = ADDDATE(c, 1); -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 e 2007-06-05 20:03:11 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -update by primary key -UPDATE ta_l SET b = 'x' WHERE a = 3; -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 x 2007-06-05 20:03:11 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -update by a column without index -UPDATE ta_l SET c = '2011-10-17' WHERE b = 'x'; -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 x 2011-10-17 00:00:00 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -update by primary key with order and limit -UPDATE ta_l SET c = ADDDATE(c, 1) WHERE a < 4 ORDER BY b DESC LIMIT 1; -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 x 2011-10-18 00:00:00 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -delete by primary key with order and limit -DELETE FROM ta_l WHERE a < 4 ORDER BY c LIMIT 1; -SHOW GLOBAL STATUS LIKE 'Spider_direct_delete%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -3 x 2011-10-18 00:00:00 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -delete by a column without index -DELETE FROM ta_l WHERE b = 'c'; -SHOW GLOBAL STATUS LIKE 'Spider_direct_delete%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -3 x 2011-10-18 00:00:00 -4 d 2003-12-01 05:01:03 -delete by primary key -DELETE FROM ta_l WHERE a = 3; -SHOW GLOBAL STATUS LIKE 'Spider_direct_delete%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -4 d 2003-12-01 05:01:03 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle/r/direct_update_part.result b/storage/spider/mysql-test/spider/oracle/r/direct_update_part.result deleted file mode 100644 index 8a22c40a0da..00000000000 --- a/storage/spider/mysql-test/spider/oracle/r/direct_update_part.result +++ /dev/null @@ -1,129 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -with partition test -CREATE TABLE ta_l2 ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1 -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 -update all rows with function -UPDATE ta_l2 SET c = ADDDATE(c, 1); -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 e 2007-06-05 20:03:11 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -update by primary key -UPDATE ta_l2 SET b = 'x' WHERE a = 3; -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 x 2007-06-05 20:03:11 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -update by a column without index -UPDATE ta_l2 SET c = '2011-10-17' WHERE b = 'x'; -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 x 2011-10-17 00:00:00 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -update by primary key with order and limit -UPDATE ta_l2 SET c = ADDDATE(c, 1) WHERE a < 4 ORDER BY b DESC LIMIT 1; -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 x 2011-10-18 00:00:00 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -delete by primary key with order and limit -DELETE FROM ta_l2 WHERE a < 4 ORDER BY c LIMIT 1; -SHOW GLOBAL STATUS LIKE 'Spider_direct_delete%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -3 x 2011-10-18 00:00:00 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -delete by a column without index -DELETE FROM ta_l2 WHERE b = 'c'; -SHOW GLOBAL STATUS LIKE 'Spider_direct_delete%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -3 x 2011-10-18 00:00:00 -4 d 2003-12-01 05:01:03 -delete by primary key -DELETE FROM ta_l2 WHERE a = 3; -SHOW GLOBAL STATUS LIKE 'Spider_direct_delete%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -4 d 2003-12-01 05:01:03 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle/r/function.result b/storage/spider/mysql-test/spider/oracle/r/function.result deleted file mode 100644 index 764c774514b..00000000000 --- a/storage/spider/mysql-test/spider/oracle/r/function.result +++ /dev/null @@ -1,149 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -in() -CREATE TABLE t1 ( -a VARCHAR(255), -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET3 MASTER_1_COMMENT_TEXT_PK1_1 -insert into t1 values ('1'); -insert into t1 select a + 1 from t1; -insert into t1 select a + 2 from t1; -insert into t1 select a + 4 from t1; -insert into t1 select a + 8 from t1; -insert into t1 select a + 16 from t1; -insert into t1 select a + 32 from t1; -insert into t1 select a + 64 from t1; -insert into t1 select a + 128 from t1; -insert into t1 select a + 256 from t1; -insert into t1 select a + 512 from t1; -flush tables; -select a from t1 where a in ('15', '120'); -a -120 -15 - -date_sub() -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -INSERT INTO ta_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 YEAR); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-08-01 10:21:39 -2 b 1999-01-01 00:00:00 -3 e 2006-06-04 20:03:11 -4 d 2002-11-30 05:01:03 -5 c 2000-12-31 23:59:59 -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 QUARTER); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-11-01 10:21:39 -2 b 1999-04-01 00:00:00 -3 e 2006-09-04 20:03:11 -4 d 2003-02-28 05:01:03 -5 c 2001-03-31 23:59:59 -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 MONTH); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-10-01 10:21:39 -2 b 1999-03-01 00:00:00 -3 e 2006-08-04 20:03:11 -4 d 2003-01-28 05:01:03 -5 c 2001-02-28 23:59:59 -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 WEEK); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-10-08 10:21:39 -2 b 1999-03-08 00:00:00 -3 e 2006-08-11 20:03:11 -4 d 2003-02-04 05:01:03 -5 c 2001-03-07 23:59:59 -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 DAY); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-10-07 10:21:39 -2 b 1999-03-07 00:00:00 -3 e 2006-08-10 20:03:11 -4 d 2003-02-03 05:01:03 -5 c 2001-03-06 23:59:59 -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 HOUR); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-10-07 11:21:39 -2 b 1999-03-07 01:00:00 -3 e 2006-08-10 21:03:11 -4 d 2003-02-03 06:01:03 -5 c 2001-03-07 00:59:59 -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 MINUTE); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-10-07 11:20:39 -2 b 1999-03-07 00:59:00 -3 e 2006-08-10 21:02:11 -4 d 2003-02-03 06:00:03 -5 c 2001-03-07 00:58:59 -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 SECOND); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-10-07 11:20:40 -2 b 1999-03-07 00:59:01 -3 e 2006-08-10 21:02:12 -4 d 2003-02-03 06:00:04 -5 c 2001-03-07 00:59:00 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle/r/ha.result b/storage/spider/mysql-test/spider/oracle/r/ha.result deleted file mode 100644 index 8ca64dec6df..00000000000 --- a/storage/spider/mysql-test/spider/oracle/r/ha.result +++ /dev/null @@ -1,240 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; -DROP DATABASE IF EXISTS auto_test_remote3; -CREATE DATABASE auto_test_remote3; -USE auto_test_remote3; -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; - -test select 1 -SELECT 1; -1 -1 - -create table test -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_2_1 -INSERT INTO ta_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); - -select test -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -fail-over test -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 0 -Spider_mon_table_cache_version_req 1 -INSERT INTO ta_l (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -ERROR HY000: Table 'SYSTEM.ta_r3' get a problem -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l 0 1 -auto_test_local ta_l 1 3 -SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -db_name table_name link_id -auto_test_local ta_l 1 -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 1 -Spider_mon_table_cache_version_req 1 -INSERT INTO ta_l (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 -6 e 2011-05-05 20:04:05 - -recovery test -ALTER TABLE ta_l -CONNECTION='host "xe", user "system", - password "oracle", msi "2", mkd "2", - database "SYSTEM", lst "0 2"'; -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l 0 1 -auto_test_local ta_l 1 2 -SELECT spider_copy_tables('ta_l', '0', '1'); -spider_copy_tables('ta_l', '0', '1') -1 -ALTER TABLE ta_l -CONNECTION='host "xe", user "system", - password "oracle", msi "2", mkd "2", - database "SYSTEM", lst "0 1"'; -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l 0 1 -auto_test_local ta_l 1 1 -INSERT INTO ta_l (a, b, c) VALUES -(8, 'g', '2011-05-05 21:33:30'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 -6 e 2011-05-05 20:04:05 -8 g 2011-05-05 21:33:30 -DROP TABLE ta_l; -SELECT spider_flush_table_mon_cache(); -spider_flush_table_mon_cache() -1 - -active standby test -create table test -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_AS_2_1 -INSERT INTO ta_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); - -select test -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -fail-over test -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 1 -Spider_mon_table_cache_version_req 2 -INSERT INTO ta_l (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -ERROR HY000: Table 'SYSTEM.ta_r' get a problem -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l 0 3 -auto_test_local ta_l 1 1 -SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -db_name table_name link_id -auto_test_local ta_l 1 -auto_test_local ta_l 0 -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 2 -Spider_mon_table_cache_version_req 2 -INSERT INTO ta_l (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -6 e 2011-05-05 20:04:05 - -recovery test -ALTER TABLE ta_l -CONNECTION='host "xe", user "system", - password "oracle", msi "2", mkd "2", alc "1", - database "SYSTEM", lst "1 0"'; -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l 0 1 -auto_test_local ta_l 1 1 -INSERT INTO ta_l (a, b, c) VALUES -(8, 'g', '2011-05-05 21:33:30'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -8 g 2011-05-05 21:33:30 -DROP TABLE ta_l; -SELECT spider_flush_table_mon_cache(); -spider_flush_table_mon_cache() -1 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -DROP DATABASE IF EXISTS auto_test_remote3; -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle/r/ha_part.result b/storage/spider/mysql-test/spider/oracle/r/ha_part.result deleted file mode 100644 index e11b6f695e0..00000000000 --- a/storage/spider/mysql-test/spider/oracle/r/ha_part.result +++ /dev/null @@ -1,262 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; -DROP DATABASE IF EXISTS auto_test_remote3; -CREATE DATABASE auto_test_remote3; -USE auto_test_remote3; -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; - -test select 1 -SELECT 1; -1 -1 - -create table with partition test -DROP TABLE IF EXISTS ta_l2; -CREATE TABLE ta_l2 ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_P_2_1 -INSERT INTO ta_l2 (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); - -select test -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -fail-over test -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 0 -Spider_mon_table_cache_version_req 1 -INSERT INTO ta_l2 (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -ERROR HY000: Table 'SYSTEM.ta_r4' get a problem -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l2#P#pt1 0 1 -auto_test_local ta_l2#P#pt1 1 1 -auto_test_local ta_l2#P#pt2 0 1 -auto_test_local ta_l2#P#pt2 1 3 -SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -db_name table_name link_id -auto_test_local ta_l2#P#pt2 1 -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 1 -Spider_mon_table_cache_version_req 1 -INSERT INTO ta_l2 (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 -6 e 2011-05-05 20:04:05 - -recovery test -ALTER TABLE ta_l2 -PARTITION BY KEY(a) ( -PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', -PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 2"' - ); -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l2#P#pt1 0 1 -auto_test_local ta_l2#P#pt1 1 1 -auto_test_local ta_l2#P#pt2 0 1 -auto_test_local ta_l2#P#pt2 1 2 -SELECT spider_copy_tables('ta_l2#P#pt2', '0', '1'); -spider_copy_tables('ta_l2#P#pt2', '0', '1') -1 -ALTER TABLE ta_l2 -PARTITION BY KEY(a) ( -PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', -PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 1"' - ); -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l2#P#pt1 0 1 -auto_test_local ta_l2#P#pt1 1 1 -auto_test_local ta_l2#P#pt2 0 1 -auto_test_local ta_l2#P#pt2 1 1 -INSERT INTO ta_l2 (a, b, c) VALUES -(8, 'g', '2011-05-05 21:33:30'), -(9, 'h', '2011-05-05 22:32:10'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 -6 e 2011-05-05 20:04:05 -8 g 2011-05-05 21:33:30 -9 h 2011-05-05 22:32:10 -DROP TABLE ta_l2; - -create table with partition test -DROP TABLE IF EXISTS ta_l2; -CREATE TABLE ta_l2 ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_AS_P_2_1 -INSERT INTO ta_l2 (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); - -select test -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -fail-over test -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 1 -Spider_mon_table_cache_version_req 1 -INSERT INTO ta_l2 (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -ERROR HY000: Table 'SYSTEM.ta_r2' get a problem -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l2#P#pt1 0 1 -auto_test_local ta_l2#P#pt1 1 1 -auto_test_local ta_l2#P#pt2 0 3 -auto_test_local ta_l2#P#pt2 1 1 -SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -db_name table_name link_id -auto_test_local ta_l2#P#pt2 1 -auto_test_local ta_l2#P#pt2 0 -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 1 -Spider_mon_table_cache_version_req 1 -INSERT INTO ta_l2 (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -3 e 2007-06-04 20:03:11 -5 c 2001-12-31 23:59:59 -6 e 2011-05-05 20:04:05 - -recovery test -ALTER TABLE ta_l2 -PARTITION BY KEY(a) ( -PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', -PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "1 0"' - ); -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l2#P#pt1 0 1 -auto_test_local ta_l2#P#pt1 1 1 -auto_test_local ta_l2#P#pt2 0 1 -auto_test_local ta_l2#P#pt2 1 1 -INSERT INTO ta_l2 (a, b, c) VALUES -(8, 'g', '2011-05-05 21:33:30'), -(9, 'h', '2011-05-05 22:32:10'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -3 e 2007-06-04 20:03:11 -5 c 2001-12-31 23:59:59 -8 g 2011-05-05 21:33:30 -9 h 2011-05-05 22:32:10 -DROP TABLE ta_l2; - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -DROP DATABASE IF EXISTS auto_test_remote3; -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle/r/spider3_fixes.result b/storage/spider/mysql-test/spider/oracle/r/spider3_fixes.result deleted file mode 100644 index 418f8bb31a8..00000000000 --- a/storage/spider/mysql-test/spider/oracle/r/spider3_fixes.result +++ /dev/null @@ -1,194 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for slave1_1 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -3.1 -auto_increment -DROP TABLE IF EXISTS t1, t2; -CREATE TABLE t1 ( -id int(11) NOT NULL AUTO_INCREMENT, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1 -CREATE TABLE t2 ( -id int(11) NOT NULL AUTO_INCREMENT, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1 -MASTER_1_AUTO_INCREMENT_INCREMENT2 -MASTER_1_AUTO_INCREMENT_OFFSET2 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -777 -SELECT MAX(id) FROM t1; -MAX(id) -777 -INSERT INTO t2 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -1554 -SELECT MAX(id) FROM t2; -MAX(id) -1554 -MASTER_1_AUTO_INCREMENT_OFFSET3 -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -1555 -SELECT MAX(id) FROM t1; -MAX(id) -1555 -MASTER_1_AUTO_INCREMENT_OFFSET4 -INSERT INTO t2 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -2331 -SELECT MAX(id) FROM t2; -MAX(id) -2331 -MASTER_1_AUTO_INCREMENT_OFFSET3 -INSERT INTO t1 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -2332 -SELECT id FROM t1 ORDER BY id; -id -777 -1554 -1555 -2331 -2332 -3109 -3886 -4663 -MASTER_1_AUTO_INCREMENT_OFFSET4 -INSERT INTO t2 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -5439 -SELECT id FROM t2 ORDER BY id; -id -777 -1554 -1555 -2331 -2332 -3109 -3886 -4663 -5439 -6216 -6993 -7770 -TRUNCATE TABLE t1; -TRUNCATE TABLE t2; -INSERT INTO t1 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -777 -SELECT id FROM t1 ORDER BY id; -id -777 -1554 -2331 -3108 -INSERT INTO t2 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -3885 -SELECT id FROM t2 ORDER BY id; -id -777 -1554 -2331 -3108 -3885 -4662 -5439 -6216 -SET INSERT_ID=5000; -MASTER_1_AUTO_INCREMENT_OFFSET3 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -5000 -SELECT MAX(id) FROM t1; -MAX(id) -6216 -MASTER_1_AUTO_INCREMENT_OFFSET4 -INSERT INTO t2 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -6993 -SELECT MAX(id) FROM t2; -MAX(id) -6993 -INSERT INTO t1 (id) VALUES (10000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -6993 -SELECT MAX(id) FROM t1; -MAX(id) -10000 -INSERT INTO t2 (id) VALUES (1000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -6993 -SELECT MAX(id) FROM t2; -MAX(id) -10000 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for slave1_1 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle/r/spider3_fixes_part.result b/storage/spider/mysql-test/spider/oracle/r/spider3_fixes_part.result deleted file mode 100644 index accb4607027..00000000000 --- a/storage/spider/mysql-test/spider/oracle/r/spider3_fixes_part.result +++ /dev/null @@ -1,192 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for slave1_1 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 -auto_increment with partition -DROP TABLE IF EXISTS t1, t2; -CREATE TABLE t1 ( -id int(11) NOT NULL AUTO_INCREMENT, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1 -CREATE TABLE t2 ( -id int(11) NOT NULL AUTO_INCREMENT, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1 -MASTER_1_AUTO_INCREMENT_INCREMENT2 -MASTER_1_AUTO_INCREMENT_OFFSET2 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -777 -SELECT MAX(id) FROM t1; -MAX(id) -777 -INSERT INTO t2 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -1554 -SELECT MAX(id) FROM t2; -MAX(id) -1554 -MASTER_1_AUTO_INCREMENT_OFFSET3 -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -778 -SELECT MAX(id) FROM t1; -MAX(id) -1554 -MASTER_1_AUTO_INCREMENT_OFFSET4 -INSERT INTO t2 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -2331 -SELECT MAX(id) FROM t2; -MAX(id) -2331 -MASTER_1_AUTO_INCREMENT_OFFSET3 -INSERT INTO t1 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -1555 -SELECT id FROM t1 ORDER BY id; -id -777 -778 -1554 -1555 -2331 -2332 -3109 -3886 -MASTER_1_AUTO_INCREMENT_OFFSET4 -INSERT INTO t2 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -3108 -SELECT id FROM t2 ORDER BY id; -id -777 -778 -1554 -1555 -2331 -2332 -3108 -3109 -3885 -3886 -4662 -5439 -TRUNCATE TABLE t1; -TRUNCATE TABLE t2; -INSERT INTO t1 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -777 -SELECT id FROM t1 ORDER BY id; -id -777 -1554 -2331 -3108 -INSERT INTO t2 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -3885 -SELECT id FROM t2 ORDER BY id; -id -777 -1554 -2331 -3108 -3885 -4662 -5439 -6216 -SET INSERT_ID=5000; -MASTER_1_AUTO_INCREMENT_OFFSET3 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -5000 -SELECT MAX(id) FROM t1; -MAX(id) -6216 -MASTER_1_AUTO_INCREMENT_OFFSET4 -INSERT INTO t2 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -6993 -SELECT MAX(id) FROM t2; -MAX(id) -6993 -INSERT INTO t1 (id) VALUES (10000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -6993 -SELECT MAX(id) FROM t1; -MAX(id) -10000 -INSERT INTO t2 (id) VALUES (1000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -6993 -SELECT MAX(id) FROM t2; -MAX(id) -10000 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for slave1_1 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle/r/spider_fixes.result b/storage/spider/mysql-test/spider/oracle/r/spider_fixes.result deleted file mode 100644 index 85efde74061..00000000000 --- a/storage/spider/mysql-test/spider/oracle/r/spider_fixes.result +++ /dev/null @@ -1,552 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for slave1_1 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -create table and insert -DROP TABLE IF EXISTS tb_l; -CREATE TABLE tb_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2 -INSERT INTO tb_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -INSERT INTO ta_l SELECT a, b, c FROM tb_l; - -2.13 -select table with "order by desc" and "<" -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -WHERE a < 5 ORDER BY a DESC LIMIT 3; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -4 d 2003-11-30 05:01:03 -3 e 2007-06-04 20:03:11 -2 b 2000-01-01 00:00:00 - -select table with "order by desc" and "<=" -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -WHERE a <= 5 ORDER BY a DESC LIMIT 3; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -5 c 2001-12-31 23:59:59 -4 d 2003-11-30 05:01:03 -3 e 2007-06-04 20:03:11 - -2.14 -update table with range scan and split_read -UPDATE ta_l SET c = '2000-02-02 00:00:00' WHERE a > 1; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-02-02 00:00:00 -3 e 2000-02-02 00:00:00 -4 d 2000-02-02 00:00:00 -5 c 2000-02-02 00:00:00 - -2.15 -select table with range scan -TRUNCATE TABLE ta_l; -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -a int(11) NOT NULL DEFAULT '0', -b char(1) DEFAULT NULL, -c datetime DEFAULT NULL, -PRIMARY KEY (a, b, c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT5_2_1 -INSERT INTO ta_l SELECT a, b, c FROM tb_l; -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b >= 'b' -AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b > 'b' -AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a >= 4 AND b = 'd' -AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a > 4 AND b = 'c' -AND c = '2001-12-31 23:59:59'; -a b c -5 c 2001-12-31 23:59:59 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b <= 'd' -AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b < 'e' -AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a <= 4 AND b = 'b' -AND c = '2000-01-01 00:00:00'; -a b c -2 b 2000-01-01 00:00:00 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a < 4 AND b = 'b' -AND c = '2000-01-01 00:00:00'; -a b c -2 b 2000-01-01 00:00:00 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b >= 'b' -AND b <= 'd' AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b > 'b' -AND b < 'e' AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a <= 4 AND a >= 1 -AND b >= 'b' AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a < 4 AND a > 1 -AND b >= 'b' AND c = '2000-01-01 00:00:00'; -a b c -2 b 2000-01-01 00:00:00 - -2.16 -auto_increment insert with trigger -CREATE TABLE ta_l_auto_inc ( -a INT AUTO_INCREMENT, -b CHAR(1) DEFAULT 'c', -c DATETIME DEFAULT '1999-10-10 10:10:10', -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT3_2_1 -CREATE TABLE tc_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2 -CREATE TRIGGER ins_ta_l_auto_inc AFTER INSERT ON ta_l_auto_inc FOR EACH ROW BEGIN INSERT INTO tc_l (a, b, c) VALUES (NEW.a, NEW.b, NEW.c); END;; -INSERT INTO ta_l_auto_inc (a, b, c) VALUES -(NULL, 's', '2008-12-31 20:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM tc_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 s 2008-12-31 20:59:59 - -2.17 -engine-condition-pushdown with "or" and joining -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l WHERE a = 1 OR a IN (SELECT a FROM tb_l); -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -2.23 -index merge -CREATE TABLE ta_l_int ( -a INT AUTO_INCREMENT, -b INT DEFAULT 10, -c INT DEFAULT 11, -PRIMARY KEY(a), -KEY idx1(b), -KEY idx2(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1 -INSERT INTO ta_l_int (a, b, c) VALUES (1, 2, 3); -INSERT INTO ta_l_int (a, b, c) SELECT a + 1, b + 1, c + 1 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 2, b + 2, c + 2 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 4, b + 4, c + 4 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 8, b + 8, c + 8 FROM ta_l_int; -SELECT a, b, c FROM ta_l_int force index(primary, idx1, idx2) -WHERE a = 5 OR b = 5 OR c = 5 ORDER BY a; -a b c -3 4 5 -4 5 6 -5 6 7 - -2.24 -index scan update without PK -DROP TABLE IF EXISTS ta_l_int; -CREATE TABLE ta_l_int ( -a INT NOT NULL, -b INT DEFAULT 10, -c INT DEFAULT 11, -KEY idx1(b), -KEY idx2(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1 -SELECT a, b, c FROM ta_l_int ORDER BY a; -a b c -1 2 3 -2 3 4 -3 4 5 -4 5 6 -5 6 7 -6 7 8 -7 8 9 -8 9 10 -9 10 11 -10 11 12 -11 12 13 -12 13 14 -13 14 15 -14 15 16 -15 16 17 -16 17 18 -INSERT INTO ta_l_int (a, b, c) VALUES (0, 2, 3); -INSERT INTO ta_l_int (a, b, c) VALUES (18, 2, 3); -UPDATE ta_l_int SET c = 4 WHERE b = 2; -SELECT a, b, c FROM ta_l_int ORDER BY a; -a b c -0 2 4 -1 2 4 -2 3 4 -3 4 5 -4 5 6 -5 6 7 -6 7 8 -7 8 9 -8 9 10 -9 10 11 -10 11 12 -11 12 13 -12 13 14 -13 14 15 -14 15 16 -15 16 17 -16 17 18 -18 2 4 - -2.25 -direct order limit -SHOW GLOBAL STATUS LIKE 'Spider_direct_order_limit%'; -Variable_name Value -Spider_direct_order_limit 0 -SELECT a, b, c FROM ta_l_int ORDER BY a LIMIT 3; -a b c -1 2 4 -2 3 4 -3 4 5 -SHOW GLOBAL STATUS LIKE 'Spider_direct_order_limit%'; -Variable_name Value -Spider_direct_order_limit 0 - -2.26 -lock tables -DROP TABLE IF EXISTS t1; -DROP TABLE IF EXISTS t2; -CREATE TABLE t1 ( -id int(11) NOT NULL, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_LOCK1 -CREATE TABLE t2 ( -id int(11) NOT NULL, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_LOCK2 -LOCK TABLES t1 READ, t2 READ; -UNLOCK TABLES; - -auto_increment -DROP TABLE IF EXISTS t1; -CREATE TABLE t1 ( -id int(11) NOT NULL AUTO_INCREMENT, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1 -MASTER_1_AUTO_INCREMENT_INCREMENT2 -MASTER_1_AUTO_INCREMENT_OFFSET2 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -777 -SELECT MAX(id) FROM t1; -MAX(id) -777 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -1554 -SELECT MAX(id) FROM t1; -MAX(id) -1554 -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -2331 -SELECT MAX(id) FROM t1; -MAX(id) -2331 -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -3108 -SELECT MAX(id) FROM t1; -MAX(id) -3108 -INSERT INTO t1 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -3885 -SELECT id FROM t1 ORDER BY id; -id -777 -1554 -2331 -3108 -3885 -4662 -5439 -6216 -SET INSERT_ID=5000; -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -5000 -SELECT MAX(id) FROM t1; -MAX(id) -6216 -INSERT INTO t1 (id) VALUES (10000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -5000 -SELECT MAX(id) FROM t1; -MAX(id) -10000 -INSERT INTO t1 (id) VALUES (1000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -5000 -SELECT MAX(id) FROM t1; -MAX(id) -10000 - -read only -DROP TABLE IF EXISTS t1; -CREATE TABLE t1 ( -id int(11) NOT NULL, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_READONLY1_1 -SELECT id FROM t1 ORDER BY id; -id -777 -1000 -1554 -2331 -3108 -3885 -4662 -5000 -5439 -6216 -10000 -INSERT INTO t1 (id) VALUES (1); -ERROR HY000: Table 'auto_test_local.t1' is read only -UPDATE t1 SET id = 4 WHERE id = 777; -ERROR HY000: Table 'auto_test_local.t1' is read only -DELETE FROM t1 WHERE id = 777; -ERROR HY000: Table 'auto_test_local.t1' is read only -DELETE FROM t1; -ERROR HY000: Table 'auto_test_local.t1' is read only -TRUNCATE t1; -ERROR HY000: Table 'auto_test_local.t1' is read only - -2.27 -error mode -DROP TABLE IF EXISTS t1; -CREATE TABLE t1 ( -id int(11) NOT NULL, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_ERROR_MODE1_1 -SELECT id FROM t1 ORDER BY id; -id -Warnings: -Error 12712 Error from Oracle -1 942 ORA-00942: ??????????????? - -Error 12712 Oracle error -Error 12712 Error from Oracle -1 942 ORA-00942: ??????????????? - -Error 12712 Oracle error -INSERT INTO t1 (id) VALUES (1); -Warnings: -Error 12712 Error from Oracle -1 942 ORA-00942: ??????????????? - -Error 12712 Oracle error -DELETE FROM t1; -Warnings: -Error 12712 Error from Oracle -1 942 ORA-00942: ??????????????? - -Error 12712 Oracle error -TRUNCATE t1; -Warnings: -Error 12712 Error from Oracle -1 942 ORA-00942: ??????????????? - -Error 12712 Oracle error - -3.0 -is null -DROP TABLE IF EXISTS t1; -CREATE TABLE t1 ( -a VARCHAR(255), -b VARCHAR(255), -c VARCHAR(255), -KEY idx1(a,b), -KEY idx2(b), -PRIMARY KEY(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_TEXT_KEY1_1 -insert into t1 values (null, null, '2048'); -insert into t1 values ('1', '1', '1'); -insert into t1 select a + 1, b + 1, c + 1 from t1; -insert into t1 select a + 2, b + 2, c + 2 from t1; -insert into t1 select a + 4, b + 4, c + 4 from t1; -insert into t1 select a + 8, b + 8, c + 8 from t1; -insert into t1 select a + 16, b + 16, c + 16 from t1; -insert into t1 select a + 32, b + 32, c + 32 from t1; -insert into t1 select a + 64, b + 64, c + 64 from t1; -insert into t1 select a + 128, b + 128, c + 128 from t1; -insert into t1 select a + 256, b + 256, c + 256 from t1; -insert into t1 select a + 512, b + 512, c + 512 from t1; -flush tables; -select a from t1 where a is null order by a limit 30; -a -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -select b from t1 where b is null order by b limit 30; -b -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL - -direct_order_limit -TRUNCATE TABLE t1; -insert into t1 values ('1', '1', '1'); -insert into t1 select a + 1, b + 1, c + 1 from t1; -insert into t1 select a + 2, b + 2, c + 2 from t1; -insert into t1 select a + 4, b + 4, c + 4 from t1; -insert into t1 select a + 8, b + 8, c + 8 from t1; -insert into t1 select a + 16, b + 16, c + 16 from t1; -insert into t1 select a, b + 32, c + 32 from t1; -insert into t1 select a, b + 64, c + 64 from t1; -insert into t1 select a, b + 128, c + 128 from t1; -flush tables; -select a, b, c from t1 where a = '10' and b <> '100' order by c desc limit 5; -a b c -10 74 74 -10 42 42 -10 234 234 -10 202 202 -10 170 170 -select a, c from t1 where a = '10' order by b desc limit 5; -a c -10 74 -10 42 -10 234 -10 202 -10 170 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for slave1_1 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle/r/spider_fixes_part.result b/storage/spider/mysql-test/spider/oracle/r/spider_fixes_part.result deleted file mode 100644 index 9abe8558416..00000000000 --- a/storage/spider/mysql-test/spider/oracle/r/spider_fixes_part.result +++ /dev/null @@ -1,199 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for slave1_1 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 -DROP TABLE IF EXISTS tb_l; -CREATE TABLE tb_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2 -INSERT INTO tb_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); - -2.17 -partition with sort -CREATE TABLE ta_l2 ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1 -INSERT INTO ta_l2 SELECT a, b, c FROM tb_l; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 WHERE a > 1 -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -2.23 -partition update with moving partition -DROP TABLE IF EXISTS ta_l2; -CREATE TABLE ta_l2 ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1 -INSERT INTO ta_l2 (a, b, c) VALUES (3, 'B', '2010-09-26 00:00:00'); -UPDATE ta_l2 SET a = 4 WHERE a = 3; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -4 B 2010-09-26 00:00:00 -index merge with partition -DROP TABLE IF EXISTS ta_l_int; -CREATE TABLE ta_l_int ( -a INT AUTO_INCREMENT, -b INT DEFAULT 10, -c INT DEFAULT 11, -PRIMARY KEY(a), -KEY idx1(b), -KEY idx2(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT3_P_2_1 -INSERT INTO ta_l_int (a, b, c) VALUES (1, 2, 3); -INSERT INTO ta_l_int (a, b, c) SELECT a + 1, b + 1, c + 1 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 2, b + 2, c + 2 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 4, b + 4, c + 4 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 8, b + 8, c + 8 FROM ta_l_int; -SELECT a, b, c FROM ta_l_int force index(primary, idx1, idx2) -WHERE a = 5 OR b = 5 OR c = 5 ORDER BY a; -a b c -3 4 5 -4 5 6 -5 6 7 - -2.26 -auto_increment with partition -DROP TABLE IF EXISTS t1; -CREATE TABLE t1 ( -id int(11) NOT NULL AUTO_INCREMENT, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1 -MASTER_1_AUTO_INCREMENT_INCREMENT2 -MASTER_1_AUTO_INCREMENT_OFFSET2 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -777 -SELECT MAX(id) FROM t1; -MAX(id) -777 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -1554 -SELECT MAX(id) FROM t1; -MAX(id) -1554 -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -2331 -SELECT MAX(id) FROM t1; -MAX(id) -2331 -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -3108 -SELECT MAX(id) FROM t1; -MAX(id) -3108 -INSERT INTO t1 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -3885 -SELECT id FROM t1 ORDER BY id; -id -777 -1554 -2331 -3108 -3885 -4662 -5439 -6216 -SET INSERT_ID=5000; -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -5000 -SELECT MAX(id) FROM t1; -MAX(id) -6216 -INSERT INTO t1 (id) VALUES (10000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -5000 -SELECT MAX(id) FROM t1; -MAX(id) -10000 -INSERT INTO t1 (id) VALUES (1000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -5000 -SELECT MAX(id) FROM t1; -MAX(id) -10000 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for slave1_1 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle/r/vp_fixes.result b/storage/spider/mysql-test/spider/oracle/r/vp_fixes.result deleted file mode 100644 index 15dd29aa4d3..00000000000 --- a/storage/spider/mysql-test/spider/oracle/r/vp_fixes.result +++ /dev/null @@ -1,80 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -create table and insert -DROP TABLE IF EXISTS tb_l; -CREATE TABLE tb_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2 -INSERT INTO tb_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -INSERT INTO ta_l SELECT a, b, c FROM tb_l; - -0.9 -create different primary key table -CREATE TABLE ta_l_int ( -a INT DEFAULT 10, -b INT AUTO_INCREMENT, -c INT DEFAULT 11, -PRIMARY KEY(b) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1 -INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3); -create un-correspond primary key table -DROP TABLE IF EXISTS ta_l_int; -CREATE TABLE ta_l_int ( -a INT DEFAULT 10, -b INT DEFAULT 12, -c INT DEFAULT 11, -PRIMARY KEY(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1 -INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3); - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle/t/basic_sql.test b/storage/spider/mysql-test/spider/oracle/t/basic_sql.test deleted file mode 100644 index 6421198fa95..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/basic_sql.test +++ /dev/null @@ -1,2701 +0,0 @@ -# This test tests by executing basic SQL ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo create table select test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS tb_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2; -eval CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2; ---enable_query_log -INSERT INTO tb_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -SELECT a, b, c FROM tb_l; -if ($MASTER_1_MERGE) -{ - --error ER_WRONG_OBJECT - eval CREATE TABLE ta_l ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1 - SELECT a, b, c FROM tb_l; - eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; - INSERT INTO ta_l SELECT a, b, c FROM tb_l; -} -if (!$MASTER_1_MERGE) -{ - eval CREATE TABLE ta_l ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1 - SELECT a, b, c FROM tb_l; -} ---enable_query_log -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo create table ignore select test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l; -DROP TABLE IF EXISTS tb_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2; -eval CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2; ---enable_query_log -INSERT INTO tb_l (a, b, c) VALUES - (1, 'f', '2008-07-01 10:21:39'), - (2, 'g', '2000-02-01 00:00:00'), - (3, 'j', '2007-05-04 20:03:11'), - (4, 'i', '2003-10-30 05:01:03'), - (5, 'h', '2001-10-31 23:59:59'); ---disable_query_log -echo CREATE TABLE ta_l ( - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -IGNORE SELECT a, b, c FROM tb_l; -if ($MASTER_1_MERGE) -{ - --error ER_WRONG_OBJECT - eval CREATE TABLE ta_l ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1 - IGNORE SELECT a, b, c FROM tb_l; - eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; - INSERT IGNORE INTO ta_l SELECT a, b, c FROM tb_l; -} -if (!$MASTER_1_MERGE) -{ - eval CREATE TABLE ta_l ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1 - IGNORE SELECT a, b, c FROM tb_l; -} ---enable_query_log -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo create table ignore select test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -REPLACE SELECT a, b, c FROM tb_l; -if ($MASTER_1_MERGE) -{ - --error ER_WRONG_OBJECT - eval CREATE TABLE ta_l ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1 - REPLACE SELECT a, b, c FROM tb_l; - eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; - REPLACE INTO ta_l SELECT a, b, c FROM tb_l; -} -if (!$MASTER_1_MERGE) -{ - eval CREATE TABLE ta_l ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1 - REPLACE SELECT a, b, c FROM tb_l; -} ---enable_query_log -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%replace %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo create no index table -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES3; - echo CHILD2_1_CREATE_TABLES3; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES3; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES3; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l_no_idx; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l_no_idx -MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT2_2_1 -SELECT a, b, c FROM tb_l; -if ($MASTER_1_NEEDPK) -{ - --error ER_REQUIRES_PRIMARY_KEY - eval CREATE TABLE ta_l_no_idx - $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT2_2_1 - SELECT a, b, c FROM tb_l; - eval CREATE TABLE ta_l_no_idx ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT2_2_1; - INSERT INTO ta_l_no_idx SELECT a, b, c FROM tb_l; -} -if (!$MASTER_1_NEEDPK) -{ - if ($MASTER_1_MERGE) - { - --error ER_WRONG_OBJECT - eval CREATE TABLE ta_l_no_idx - $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT2_2_1 - SELECT a, b, c FROM tb_l; - eval CREATE TABLE ta_l_no_idx ( - a INT, - b CHAR(1), - c DATETIME - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT2_2_1; - INSERT INTO ta_l_no_idx SELECT a, b, c FROM tb_l; - } - if (!$MASTER_1_MERGE) - { - eval CREATE TABLE ta_l_no_idx - $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT2_2_1 - SELECT a, b, c FROM tb_l; - } -} ---enable_query_log -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_TABLES3; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l_no_idx ORDER BY a; - ---echo ---echo select table -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select table shared mode -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a -LOCK IN SHARE MODE; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select table for update -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a -FOR UPDATE; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select table join -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a.a, a.b, date_format(b.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a, tb_l b -WHERE a.a = b.a ORDER BY a.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select table straight_join -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT STRAIGHT_JOIN a.a, a.b, date_format(b.c, '%Y-%m-%d %H:%i:%s') -FROM ta_l a, tb_l b WHERE a.a = b.a ORDER BY a.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select sql_small_result -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT SQL_SMALL_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select sql_big_result -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT SQL_BIG_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select sql_buffer_result -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT SQL_BUFFER_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select sql_cache -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT SQL_CACHE a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select sql_no_cache -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT SQL_NO_CACHE a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select sql_calc_found_rows -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT SQL_CALC_FOUND_ROWS a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a LIMIT 4; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_ps2_protocol -SELECT found_rows(); ---enable_ps2_protocol - ---echo ---echo select high_priority -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT HIGH_PRIORITY a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select distinct -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT DISTINCT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select count -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT count(*) FROM ta_l ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select table join not use index -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM tb_l a WHERE -EXISTS (SELECT * FROM ta_l b WHERE b.b = a.b) ORDER BY a.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select using pushdown -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a WHERE -a.b = 'g' ORDER BY a.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select using index and pushdown -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a WHERE -a.a > 0 AND a.b = 'g' ORDER BY a.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo insert ---connection master_1 -TRUNCATE TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo insert select ---connection master_1 -TRUNCATE TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT INTO ta_l (a, b, c) SELECT a, b, c FROM tb_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo insert select a ---connection master_1 -TRUNCATE TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT INTO ta_l (a, b, c) VALUES ((SELECT a FROM tb_l ORDER BY a LIMIT 1), -'e', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo insert low_priority ---connection master_1 -TRUNCATE TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT LOW_PRIORITY INTO ta_l (a, b, c) values (2, 'e', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo insert high_priority ---connection master_1 -TRUNCATE TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT HIGH_PRIORITY INTO ta_l (a, b, c) VALUES (2, 'e', -'2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo insert ignore -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT IGNORE INTO ta_l (a, b, c) VALUES (2, 'd', '2009-02-02 01:01:01'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo insert update (insert) ---connection master_1 -TRUNCATE TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59') ON DUPLICATE -KEY UPDATE b = 'f', c = '2005-08-08 11:11:11'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%update %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo insert update (update) -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59') ON DUPLICATE -KEY UPDATE b = 'f', c = '2005-08-08 11:11:11'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%update %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo replace ---connection master_1 -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -REPLACE INTO ta_l (a, b, c) VALUES (2, 'f', '2008-02-02 02:02:02'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'replace %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo replace select -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -REPLACE INTO ta_l (a, b, c) SELECT a, b, c FROM tb_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'replace %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo replace select a -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -REPLACE INTO ta_l (a, b, c) VALUES ((SELECT a FROM tb_l ORDER BY a LIMIT 1), -'e', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'replace %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo replace low_priority -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -REPLACE LOW_PRIORITY INTO ta_l (a, b, c) VALUES (3, 'g', -'2009-03-03 03:03:03'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'replace %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l SET b = 'f', c = '2008-02-02 02:02:02' WHERE a = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update select -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l SET b = 'g', c = '2009-03-03 03:03:03' WHERE a IN (SELECT a FROM -tb_l); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update select a -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l SET b = 'h', c = '2010-04-04 04:04:04' WHERE a = (SELECT a FROM -tb_l ORDER BY a LIMIT 1); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update join -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l a, tb_l b SET a.b = b.b, a.c = b.c WHERE a.a = b.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update join a -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l a, tb_l b SET a.b = 'g', a.c = '2009-03-03 03:03:03' WHERE -a.a = b.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update low_priority -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE LOW_PRIORITY ta_l SET b = 'f', c = '2008-02-02 02:02:02' WHERE a = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update ignore -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE IGNORE ta_l SET a = 1, b = 'g', c = '2009-03-03 03:03:03' WHERE a = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update pushdown -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -update ta_l set b = 'j', c = '2009-03-03 03:03:03' where b = 'f'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update index pushdown -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l SET b = 'g', c = '2009-03-03 03:03:03' WHERE a > 0 AND b = 'j'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE FROM ta_l WHERE a = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete all -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE FROM ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete select -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE FROM ta_l WHERE a IN (SELECT a FROM tb_l); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete select a -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE FROM ta_l WHERE a = (SELECT a FROM tb_l ORDER BY a LIMIT 1); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete join -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE a FROM ta_l a, (SELECT a FROM tb_l ORDER BY a) b WHERE a.a = b.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete low_priority -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE LOW_PRIORITY FROM ta_l WHERE a = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete ignore -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE IGNORE FROM ta_l WHERE a = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete quick -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE QUICK FROM ta_l WHERE a = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete pushdown -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE FROM ta_l WHERE b = 'e'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete index pushdown -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE FROM ta_l WHERE a > 0 AND b = 'e'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo truncate -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -TRUNCATE TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE 'truncate %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle/t/basic_sql_part.test b/storage/spider/mysql-test/spider/oracle/t/basic_sql_part.test deleted file mode 100644 index e1638642ab7..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/basic_sql_part.test +++ /dev/null @@ -1,571 +0,0 @@ -# This test tests by executing basic SQL ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log -if (!$HAVE_PARTITION) -{ - --disable_query_log - --disable_result_log - --source test_deinit.inc - --enable_result_log - --enable_query_log - --enable_warnings - skip Test requires partitioning; -} - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS tb_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2; -eval CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2; ---enable_query_log -INSERT INTO tb_l (a, b, c) VALUES - (1, 'f', '2008-07-01 10:21:39'), - (2, 'g', '2000-02-01 00:00:00'), - (3, 'j', '2007-05-04 20:03:11'), - (4, 'i', '2003-10-30 05:01:03'), - (5, 'h', '2001-10-31 23:59:59'); - ---echo ---echo create table with partition and select test -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES2; - echo CHILD2_1_CREATE_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - --disable_query_log - echo CREATE TABLE ta_l2 ( - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_COMMENT_P_2_1 - SELECT a, b, c FROM tb_l; - if ($MASTER_1_MERGE) - { - --error ER_WRONG_OBJECT - eval CREATE TABLE ta_l2 ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_COMMENT_P_2_1 - SELECT a, b, c FROM tb_l; - eval CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_COMMENT_P_2_1; - INSERT INTO ta_l2 SELECT a, b, c FROM tb_l; - } - if (!$MASTER_1_MERGE) - { - eval CREATE TABLE ta_l2 ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_COMMENT_P_2_1 - SELECT a, b, c FROM tb_l; - } - --enable_query_log - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -} - ---echo ---echo select partition using pushdown -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 a WHERE - a.b = 'g' ORDER BY a.a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - ---echo ---echo select partition using index pushdown -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 a WHERE - a.a > 0 AND a.b = 'g' ORDER BY a.a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - ---echo ---echo update partition pushdown -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - UPDATE ta_l2 SET b = 'e', c = '2009-03-03 03:03:03' WHERE b = 'j'; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -} - ---echo ---echo update partition index pushdown -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - UPDATE ta_l2 SET b = 'j', c = '2009-03-03 03:03:03' WHERE a > 0 AND b = 'e'; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -} - ---echo ---echo delete partition pushdown -if ($HAVE_PARTITION) -{ - TRUNCATE TABLE ta_l2; - INSERT INTO ta_l2 SELECT a, b, c FROM tb_l; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - DELETE FROM ta_l2 WHERE b = 'g'; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -} - ---echo ---echo delete partition index pushdown -if ($HAVE_PARTITION) -{ - TRUNCATE TABLE ta_l2; - INSERT INTO ta_l2 SELECT a, b, c FROM tb_l; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - DELETE FROM ta_l2 WHERE a > 0 AND b = 'g'; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -} - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle/t/connect_child2_1.inc b/storage/spider/mysql-test/spider/oracle/t/connect_child2_1.inc deleted file mode 100644 index cd9b0c9ca9b..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/connect_child2_1.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (child2_1, localhost, root, , , $CHILD2_1_MYPORT, $CHILD2_1_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle/t/connect_child2_2.inc b/storage/spider/mysql-test/spider/oracle/t/connect_child2_2.inc deleted file mode 100644 index e145f66b630..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/connect_child2_2.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (child2_2, localhost, root, , , $CHILD2_2_MYPORT, $CHILD2_2_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle/t/connect_child2_3.inc b/storage/spider/mysql-test/spider/oracle/t/connect_child2_3.inc deleted file mode 100644 index d356348d8ea..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/connect_child2_3.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (child2_3, localhost, root, , , $CHILD2_3_MYPORT, $CHILD2_3_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle/t/connect_child3_1.inc b/storage/spider/mysql-test/spider/oracle/t/connect_child3_1.inc deleted file mode 100644 index 03e5c188c89..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/connect_child3_1.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (child3_1, localhost, root, , , $CHILD3_1_MYPORT, $CHILD3_1_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle/t/connect_child3_2.inc b/storage/spider/mysql-test/spider/oracle/t/connect_child3_2.inc deleted file mode 100644 index d62a7ada824..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/connect_child3_2.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (child3_2, localhost, root, , , $CHILD3_2_MYPORT, $CHILD3_2_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle/t/connect_child3_3.inc b/storage/spider/mysql-test/spider/oracle/t/connect_child3_3.inc deleted file mode 100644 index fb49f5bfdac..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/connect_child3_3.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (child3_3, localhost, root, , , $CHILD3_3_MYPORT, $CHILD3_3_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle/t/connect_master_1.inc b/storage/spider/mysql-test/spider/oracle/t/connect_master_1.inc deleted file mode 100644 index 0c129ce5775..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/connect_master_1.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (master_1, localhost, root, , , $MASTER_1_MYPORT, $MASTER_1_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle/t/connect_slave1_1.inc b/storage/spider/mysql-test/spider/oracle/t/connect_slave1_1.inc deleted file mode 100644 index 45a822743e0..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/connect_slave1_1.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (slave1_1, localhost, root, , , $SLAVE1_1_MYPORT, $SLAVE1_1_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle/t/direct_aggregate.test b/storage/spider/mysql-test/spider/oracle/t/direct_aggregate.test deleted file mode 100644 index ca96d4bd41f..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/direct_aggregate.test +++ /dev/null @@ -1,181 +0,0 @@ ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo create table select test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1; -eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; ---enable_query_log -INSERT INTO ta_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - ---echo ---echo direct_aggregating test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_ps2_protocol -eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; -SELECT COUNT(*) FROM ta_l; -eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; -SELECT MAX(a) FROM ta_l; -eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; -SELECT MIN(a) FROM ta_l; -eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; -SELECT MAX(a) FROM ta_l WHERE a < 5; -eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; -SELECT MIN(a) FROM ta_l WHERE a > 1; -eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; ---enable_ps2_protocol -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%handler %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle/t/direct_aggregate_part.test b/storage/spider/mysql-test/spider/oracle/t/direct_aggregate_part.test deleted file mode 100644 index d6d4623afc5..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/direct_aggregate_part.test +++ /dev/null @@ -1,194 +0,0 @@ ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log -if (!$HAVE_PARTITION) -{ - --disable_query_log - --disable_result_log - --source test_deinit.inc - --enable_result_log - --enable_query_log - --enable_warnings - skip Test requires partitioning; -} - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo with partition test -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES2; - echo CHILD2_1_CREATE_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - --disable_query_log - echo CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1; - eval CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_COMMENT2_P_2_1; - INSERT INTO ta_l2 (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - --enable_query_log - --disable_ps2_protocol - eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; - SELECT COUNT(*) FROM ta_l2; - eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; - SELECT MAX(a) FROM ta_l2; - eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; - SELECT MIN(a) FROM ta_l2; - eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; - SELECT MAX(a) FROM ta_l2 WHERE a < 5; - eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; - SELECT MIN(a) FROM ta_l2 WHERE a > 1; - eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; - --enable_ps2_protocol - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%handler %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%handler %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle/t/direct_update.test b/storage/spider/mysql-test/spider/oracle/t/direct_update.test deleted file mode 100644 index e0901062201..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/direct_update.test +++ /dev/null @@ -1,198 +0,0 @@ ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo create table select test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1; -eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; ---enable_query_log -INSERT INTO ta_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - ---echo ---echo direct_updating test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; ---echo update all rows with function -UPDATE ta_l SET c = ADDDATE(c, 1); -eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; ---echo update by primary key -UPDATE ta_l SET b = 'x' WHERE a = 3; -eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; ---echo update by a column without index -UPDATE ta_l SET c = '2011-10-17' WHERE b = 'x'; -eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; ---echo update by primary key with order and limit -UPDATE ta_l SET c = ADDDATE(c, 1) WHERE a < 4 ORDER BY b DESC LIMIT 1; -eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; ---echo delete by primary key with order and limit -DELETE FROM ta_l WHERE a < 4 ORDER BY c LIMIT 1; -eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; ---echo delete by a column without index -DELETE FROM ta_l WHERE b = 'c'; -eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; ---echo delete by primary key -DELETE FROM ta_l WHERE a = 3; -eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%handler %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle/t/direct_update_part.test b/storage/spider/mysql-test/spider/oracle/t/direct_update_part.test deleted file mode 100644 index 95e2e2ab0d5..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/direct_update_part.test +++ /dev/null @@ -1,211 +0,0 @@ ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log -if (!$HAVE_PARTITION) -{ - --disable_query_log - --disable_result_log - --source test_deinit.inc - --enable_result_log - --enable_query_log - --enable_warnings - skip Test requires partitioning; -} - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo with partition test -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES2; - echo CHILD2_1_CREATE_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - --disable_query_log - echo CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1; - eval CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_COMMENT2_P_2_1; - INSERT INTO ta_l2 (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - --enable_query_log - eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - --echo update all rows with function - UPDATE ta_l2 SET c = ADDDATE(c, 1); - eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - --echo update by primary key - UPDATE ta_l2 SET b = 'x' WHERE a = 3; - eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - --echo update by a column without index - UPDATE ta_l2 SET c = '2011-10-17' WHERE b = 'x'; - eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - --echo update by primary key with order and limit - UPDATE ta_l2 SET c = ADDDATE(c, 1) WHERE a < 4 ORDER BY b DESC LIMIT 1; - eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - --echo delete by primary key with order and limit - DELETE FROM ta_l2 WHERE a < 4 ORDER BY c LIMIT 1; - eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - --echo delete by a column without index - DELETE FROM ta_l2 WHERE b = 'c'; - eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - --echo delete by primary key - DELETE FROM ta_l2 WHERE a = 3; - eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%handler %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%handler %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle/t/function.test b/storage/spider/mysql-test/spider/oracle/t/function.test deleted file mode 100644 index ec2eeab9c94..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/function.test +++ /dev/null @@ -1,253 +0,0 @@ -# This test tests for using functions ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo in() -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_result_log - } - --disable_query_log - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_1_DROP_TEXT_PK_TABLES1; - echo CHILD2_1_CREATE_TEXT_PK_TABLES1; - } - --disable_warnings - eval $CHILD2_1_DROP_TEXT_PK_TABLES1; - --enable_warnings - eval $CHILD2_1_CREATE_TEXT_PK_TABLES1; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } -} ---connection master_1 ---disable_query_log -echo CREATE TABLE t1 ( - a VARCHAR(255), - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET3 MASTER_1_COMMENT_TEXT_PK1_1; -eval CREATE TABLE t1 ( - a VARCHAR(255), - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET3 $MASTER_1_COMMENT_TEXT_PK1_1; ---enable_query_log -insert into t1 values ('1'); -insert into t1 select a + 1 from t1; -insert into t1 select a + 2 from t1; -insert into t1 select a + 4 from t1; -insert into t1 select a + 8 from t1; -insert into t1 select a + 16 from t1; -insert into t1 select a + 32 from t1; -insert into t1 select a + 64 from t1; -insert into t1 select a + 128 from t1; -insert into t1 select a + 256 from t1; -insert into t1 select a + 512 from t1; -flush tables; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -select a from t1 where a in ('15', '120'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TEXT_PK_TABLES1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo date_sub() -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1; -eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; ---enable_query_log -INSERT INTO ta_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 YEAR); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 QUARTER); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 MONTH); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 WEEK); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 DAY); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 HOUR); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 MINUTE); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 SECOND); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle/t/ha.test b/storage/spider/mysql-test/spider/oracle/t/ha.test deleted file mode 100644 index 00dcf776836..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/ha.test +++ /dev/null @@ -1,882 +0,0 @@ -# This test tests for ha features -if ($USE_HA_TEST) -{ ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---source ha_test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; - --connection child2_3 - DROP DATABASE IF EXISTS auto_test_remote3; - CREATE DATABASE auto_test_remote3; - USE auto_test_remote3; -} -if ($USE_CHILD_GROUP3) -{ - --connection child3_1 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; - --connection child3_2 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; - --connection child3_3 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - --connection child2_3 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - SELECT 1; - --connection child3_2 - SELECT 1; - --connection child3_3 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo create table test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_2_1; - --enable_warnings - eval $CHILD3_1_CREATE_TABLES_HA_2_1; - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_2_1; - --enable_warnings - eval $CHILD3_2_CREATE_TABLES_HA_2_1; - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_2_1; - --enable_warnings - eval $CHILD3_3_CREATE_TABLES_HA_2_1; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_2_1; -eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_HA_2_1; ---enable_query_log -INSERT INTO ta_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - ---echo ---echo select test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo fail-over test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_HA_DROP_TABLES; - } - --disable_warnings - eval $CHILD2_2_HA_DROP_TABLES; - --enable_warnings - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -eval $MASTER_1_CHECK_HA_STATUS; ---error 12511 -INSERT INTO ta_l (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); -eval $MASTER_1_CHECK_LINK_STATUS; -eval $MASTER_1_CHECK_LINK_FAILED_LOG; -eval $MASTER_1_CHECK_HA_STATUS; -INSERT INTO ta_l (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_CHECK_LINK_STATUS; - eval $CHILD3_1_CHECK_LINK_FAILED_LOG; - --connection child3_2 - eval $CHILD3_2_CHECK_LINK_STATUS; - eval $CHILD3_2_CHECK_LINK_FAILED_LOG; - --connection child3_3 - eval $CHILD3_3_CHECK_LINK_STATUS; - eval $CHILD3_3_CHECK_LINK_FAILED_LOG; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo recovery test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_HA_CREATE_TABLES; - } - eval $CHILD2_2_HA_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_SET_RECOVERY_STATUS_2_1; - eval $CHILD3_1_CHECK_LINK_STATUS; - --connection child3_2 - eval $CHILD3_2_SET_RECOVERY_STATUS_2_1; - eval $CHILD3_2_CHECK_LINK_STATUS; - --connection child3_3 - eval $CHILD3_3_SET_RECOVERY_STATUS_2_1; - eval $CHILD3_3_CHECK_LINK_STATUS; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -eval $MASTER_1_SET_RECOVERY_STATUS_2_1; -eval $MASTER_1_CHECK_LINK_STATUS; -eval $MASTER_1_COPY_TABLES_2_1; -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_SET_OK_STATUS_2_1; - eval $CHILD3_1_CHECK_LINK_STATUS; - --connection child3_2 - eval $CHILD3_2_SET_OK_STATUS_2_1; - eval $CHILD3_2_CHECK_LINK_STATUS; - --connection child3_3 - eval $CHILD3_3_SET_OK_STATUS_2_1; - eval $CHILD3_3_CHECK_LINK_STATUS; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -eval $MASTER_1_SET_OK_STATUS_2_1; -eval $MASTER_1_CHECK_LINK_STATUS; -INSERT INTO ta_l (a, b, c) VALUES - (8, 'g', '2011-05-05 21:33:30'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -DROP TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_2_1; - --enable_warnings - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_2_1; - --enable_warnings - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_2_1; - --enable_warnings - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} - ---connection master_1 ---disable_ps2_protocol -eval $MASTER_1_CHANGE_HA_MON; ---enable_ps2_protocol - ---echo ---echo active standby test ---echo create table test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_2_1; - --enable_warnings - eval $CHILD3_1_CREATE_TABLES_HA_AS_2_1; - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_2_1; - --enable_warnings - eval $CHILD3_2_CREATE_TABLES_HA_AS_2_1; - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_2_1; - --enable_warnings - eval $CHILD3_3_CREATE_TABLES_HA_AS_2_1; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_AS_2_1; -eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_HA_AS_2_1; ---enable_query_log -INSERT INTO ta_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - ---echo ---echo select test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo fail-over test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_HA_AS_DROP_TABLES; - } - --disable_warnings - eval $CHILD2_1_HA_AS_DROP_TABLES; - --enable_warnings - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -eval $MASTER_1_CHECK_HA_STATUS; ---error 12511 -INSERT INTO ta_l (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); -eval $MASTER_1_CHECK_LINK_STATUS; -eval $MASTER_1_CHECK_LINK_FAILED_LOG; -eval $MASTER_1_CHECK_HA_STATUS; -INSERT INTO ta_l (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_CHECK_LINK_STATUS; - eval $CHILD3_1_CHECK_LINK_FAILED_LOG; - --connection child3_2 - eval $CHILD3_2_CHECK_LINK_STATUS; - eval $CHILD3_2_CHECK_LINK_FAILED_LOG; - --connection child3_3 - eval $CHILD3_3_CHECK_LINK_STATUS; - eval $CHILD3_3_CHECK_LINK_FAILED_LOG; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo recovery test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_HA_AS_CREATE_TABLES; - } - eval $CHILD2_1_HA_AS_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_SET_OK_STATUS_AS_2_1; - eval $CHILD3_1_CHECK_LINK_STATUS; - --connection child3_2 - eval $CHILD3_2_SET_OK_STATUS_AS_2_1; - eval $CHILD3_2_CHECK_LINK_STATUS; - --connection child3_3 - eval $CHILD3_3_SET_OK_STATUS_AS_2_1; - eval $CHILD3_3_CHECK_LINK_STATUS; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -eval $MASTER_1_SET_OK_STATUS_AS_2_1; -eval $MASTER_1_CHECK_LINK_STATUS; -INSERT INTO ta_l (a, b, c) VALUES - (8, 'g', '2011-05-05 21:33:30'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -DROP TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_2_1; - --enable_warnings - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_2_1; - --enable_warnings - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_2_1; - --enable_warnings - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} - ---connection master_1 ---disable_ps2_protocol -eval $MASTER_1_CHANGE_HA_MON; ---enable_ps2_protocol - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - --connection child2_3 - DROP DATABASE IF EXISTS auto_test_remote3; -} -if ($USE_CHILD_GROUP3) -{ - --connection child3_1 - DROP DATABASE IF EXISTS auto_test_local; - --connection child3_2 - DROP DATABASE IF EXISTS auto_test_local; - --connection child3_3 - DROP DATABASE IF EXISTS auto_test_local; -} ---disable_query_log ---disable_result_log ---source ha_test_deinit.inc ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings -} ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle/t/ha_part.test b/storage/spider/mysql-test/spider/oracle/t/ha_part.test deleted file mode 100644 index 72ddcfd1f10..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/ha_part.test +++ /dev/null @@ -1,1017 +0,0 @@ -# This test tests for ha features -if ($USE_HA_TEST) -{ ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---source ha_test_init.inc ---enable_result_log ---enable_query_log -if (!$HAVE_PARTITION) -{ - --disable_query_log - --disable_result_log - --source ha_test_deinit.inc - --source test_deinit.inc - --enable_result_log - --enable_query_log - --enable_warnings - skip Test requires partitioning; -} - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; - --connection child2_3 - DROP DATABASE IF EXISTS auto_test_remote3; - CREATE DATABASE auto_test_remote3; - USE auto_test_remote3; -} -if ($USE_CHILD_GROUP3) -{ - --connection child3_1 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; - --connection child3_2 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; - --connection child3_3 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - --connection child2_3 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - SELECT 1; - --connection child3_2 - SELECT 1; - --connection child3_3 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} - -if ($HAVE_PARTITION) -{ - --echo - --echo create table with partition test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_DROP_TABLES2; - echo CHILD2_1_CREATE_TABLES; - echo CHILD2_1_CREATE_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - eval $CHILD2_1_DROP_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - eval $CHILD2_1_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_3_DROP_TABLES; - echo CHILD2_3_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_3_DROP_TABLES; - --enable_warnings - eval $CHILD2_3_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_P_2_1; - --enable_warnings - eval $CHILD3_1_CREATE_TABLES_HA_P_2_1; - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_P_2_1; - --enable_warnings - eval $CHILD3_2_CREATE_TABLES_HA_P_2_1; - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_P_2_1; - --enable_warnings - eval $CHILD3_3_CREATE_TABLES_HA_P_2_1; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - --disable_warnings - DROP TABLE IF EXISTS ta_l2; - --enable_warnings - --disable_query_log - echo CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_P_2_1; - eval CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_HA_P_2_1; - --enable_query_log - INSERT INTO ta_l2 (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - - --echo - --echo select test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - eval $CHILD2_1_SELECT_TABLES2; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_3 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_3_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - - --echo - --echo fail-over test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_3_HA_DROP_TABLES; - } - --disable_warnings - eval $CHILD2_3_HA_DROP_TABLES; - --enable_warnings - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - eval $MASTER_1_CHECK_HA_STATUS; - --error 12511 - INSERT INTO ta_l2 (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); - eval $MASTER_1_CHECK_LINK_STATUS; - eval $MASTER_1_CHECK_LINK_FAILED_LOG; - eval $MASTER_1_CHECK_HA_STATUS; - INSERT INTO ta_l2 (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - eval $CHILD2_1_SELECT_TABLES2; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_CHECK_LINK_STATUS; - eval $CHILD3_1_CHECK_LINK_FAILED_LOG; - --connection child3_2 - eval $CHILD3_2_CHECK_LINK_STATUS; - eval $CHILD3_2_CHECK_LINK_FAILED_LOG; - --connection child3_3 - eval $CHILD3_3_CHECK_LINK_STATUS; - eval $CHILD3_3_CHECK_LINK_FAILED_LOG; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } - - --echo - --echo recovery test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_3_HA_CREATE_TABLES; - } - eval $CHILD2_3_HA_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_SET_RECOVERY_STATUS_P_2_1; - eval $CHILD3_1_CHECK_LINK_STATUS; - --connection child3_2 - eval $CHILD3_2_SET_RECOVERY_STATUS_P_2_1; - eval $CHILD3_2_CHECK_LINK_STATUS; - --connection child3_3 - eval $CHILD3_3_SET_RECOVERY_STATUS_P_2_1; - eval $CHILD3_3_CHECK_LINK_STATUS; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - eval $MASTER_1_SET_RECOVERY_STATUS_P_2_1; - eval $MASTER_1_CHECK_LINK_STATUS; - eval $MASTER_1_COPY_TABLES_P_2_1; - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_SET_OK_STATUS_P_2_1; - eval $CHILD3_1_CHECK_LINK_STATUS; - --connection child3_2 - eval $CHILD3_2_SET_OK_STATUS_P_2_1; - eval $CHILD3_2_CHECK_LINK_STATUS; - --connection child3_3 - eval $CHILD3_3_SET_OK_STATUS_P_2_1; - eval $CHILD3_3_CHECK_LINK_STATUS; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - eval $MASTER_1_SET_OK_STATUS_P_2_1; - eval $MASTER_1_CHECK_LINK_STATUS; - INSERT INTO ta_l2 (a, b, c) VALUES - (8, 'g', '2011-05-05 21:33:30'), - (9, 'h', '2011-05-05 22:32:10'); - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - DROP TABLE ta_l2; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - eval $CHILD2_1_SELECT_TABLES2; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_3 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_3_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_P_2_1; - --enable_warnings - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_P_2_1; - --enable_warnings - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_P_2_1; - --enable_warnings - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } -} - -if ($HAVE_PARTITION) -{ - --echo - --echo create table with partition test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_DROP_TABLES2; - echo CHILD2_1_CREATE_TABLES; - echo CHILD2_1_CREATE_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - eval $CHILD2_1_DROP_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - eval $CHILD2_1_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_3_DROP_TABLES; - echo CHILD2_3_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_3_DROP_TABLES; - --enable_warnings - eval $CHILD2_3_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_P_2_1; - --enable_warnings - eval $CHILD3_1_CREATE_TABLES_HA_AS_P_2_1; - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_P_2_1; - --enable_warnings - eval $CHILD3_2_CREATE_TABLES_HA_AS_P_2_1; - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_P_2_1; - --enable_warnings - eval $CHILD3_3_CREATE_TABLES_HA_AS_P_2_1; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - --disable_warnings - DROP TABLE IF EXISTS ta_l2; - --enable_warnings - --disable_query_log - echo CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_AS_P_2_1; - eval CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_HA_AS_P_2_1; - --enable_query_log - INSERT INTO ta_l2 (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - - --echo - --echo select test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - eval $CHILD2_1_SELECT_TABLES2; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_3 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_3_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - - --echo - --echo fail-over test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_HA_AS_DROP_TABLES2; - } - --disable_warnings - eval $CHILD2_1_HA_AS_DROP_TABLES2; - --enable_warnings - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - eval $MASTER_1_CHECK_HA_STATUS; - --error 12511 - INSERT INTO ta_l2 (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); - eval $MASTER_1_CHECK_LINK_STATUS; - eval $MASTER_1_CHECK_LINK_FAILED_LOG; - eval $MASTER_1_CHECK_HA_STATUS; - INSERT INTO ta_l2 (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_3 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_3_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_CHECK_LINK_STATUS; - eval $CHILD3_1_CHECK_LINK_FAILED_LOG; - --connection child3_2 - eval $CHILD3_2_CHECK_LINK_STATUS; - eval $CHILD3_2_CHECK_LINK_FAILED_LOG; - --connection child3_3 - eval $CHILD3_3_CHECK_LINK_STATUS; - eval $CHILD3_3_CHECK_LINK_FAILED_LOG; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } - - --echo - --echo recovery test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_HA_AS_CREATE_TABLES2; - } - eval $CHILD2_1_HA_AS_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_SET_OK_STATUS_AS_P_2_1; - eval $CHILD3_1_CHECK_LINK_STATUS; - --connection child3_2 - eval $CHILD3_2_SET_OK_STATUS_AS_P_2_1; - eval $CHILD3_2_CHECK_LINK_STATUS; - --connection child3_3 - eval $CHILD3_3_SET_OK_STATUS_AS_P_2_1; - eval $CHILD3_3_CHECK_LINK_STATUS; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - eval $MASTER_1_SET_OK_STATUS_AS_P_2_1; - eval $MASTER_1_CHECK_LINK_STATUS; - INSERT INTO ta_l2 (a, b, c) VALUES - (8, 'g', '2011-05-05 21:33:30'), - (9, 'h', '2011-05-05 22:32:10'); - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - DROP TABLE ta_l2; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - eval $CHILD2_1_SELECT_TABLES2; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_3 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_3_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_P_2_1; - --enable_warnings - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_P_2_1; - --enable_warnings - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_P_2_1; - --enable_warnings - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } -} - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - --connection child2_3 - DROP DATABASE IF EXISTS auto_test_remote3; -} -if ($USE_CHILD_GROUP3) -{ - --connection child3_1 - DROP DATABASE IF EXISTS auto_test_local; - --connection child3_2 - DROP DATABASE IF EXISTS auto_test_local; - --connection child3_3 - DROP DATABASE IF EXISTS auto_test_local; -} ---disable_query_log ---disable_result_log ---source ha_test_deinit.inc ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings -} ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle/t/ha_test_deinit.inc b/storage/spider/mysql-test/spider/oracle/t/ha_test_deinit.inc deleted file mode 100644 index 53d0409d066..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/ha_test_deinit.inc +++ /dev/null @@ -1,30 +0,0 @@ -# get connection and exist engine test ---echo for master_1 ---connection master_1 ---source ../include/ha_deinit_master_1.inc ---echo for child2 -if ($USE_CHILD_GROUP2) -{ - --echo child2_1 - --connection child2_1 - --source ../include/ha_deinit_child2_1.inc - --echo child2_2 - --connection child2_2 - --source ../include/ha_deinit_child2_2.inc - --echo child2_3 - --connection child2_3 - --source ../include/ha_deinit_child2_3.inc -} ---echo for child3 -if ($USE_CHILD_GROUP3) -{ - --echo child3_1 - --connection child3_1 - --source ../include/ha_deinit_child3_1.inc - --echo child3_2 - --connection child3_2 - --source ../include/ha_deinit_child3_2.inc - --echo child3_3 - --connection child3_3 - --source ../include/ha_deinit_child3_3.inc -} diff --git a/storage/spider/mysql-test/spider/oracle/t/ha_test_init.inc b/storage/spider/mysql-test/spider/oracle/t/ha_test_init.inc deleted file mode 100644 index 70576ab16dc..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/ha_test_init.inc +++ /dev/null @@ -1,30 +0,0 @@ -# get connection and exist engine test ---echo for master_1 ---connection master_1 ---source ../include/ha_init_master_1.inc ---echo for child2 -if ($USE_CHILD_GROUP2) -{ - --echo child2_1 - --connection child2_1 - --source ../include/ha_init_child2_1.inc - --echo child2_2 - --connection child2_2 - --source ../include/ha_init_child2_2.inc - --echo child2_3 - --connection child2_3 - --source ../include/ha_init_child2_3.inc -} ---echo for child3 -if ($USE_CHILD_GROUP3) -{ - --echo child3_1 - --connection child3_1 - --source ../include/ha_init_child3_1.inc - --echo child3_2 - --connection child3_2 - --source ../include/ha_init_child3_2.inc - --echo child3_3 - --connection child3_3 - --source ../include/ha_init_child3_3.inc -} diff --git a/storage/spider/mysql-test/spider/oracle/t/have_engine.inc b/storage/spider/mysql-test/spider/oracle/t/have_engine.inc deleted file mode 100644 index 64bef7499cb..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/have_engine.inc +++ /dev/null @@ -1,7 +0,0 @@ -if (!`SELECT count(*) FROM information_schema.engines WHERE - (support = 'YES' OR support = 'DEFAULT') AND - engine = '$TEST_ENGINE_TYPE'`) -{ - SELECT engine, support FROM information_schema.engines; - --let $SKIP_REASON= "Need $TEST_ENGINE_TYPE engine" -} diff --git a/storage/spider/mysql-test/spider/oracle/t/have_func.inc b/storage/spider/mysql-test/spider/oracle/t/have_func.inc deleted file mode 100644 index e0823e73fc8..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/have_func.inc +++ /dev/null @@ -1,5 +0,0 @@ -if (!`SELECT count(*) FROM mysql.func WHERE name = '$TEST_FUNC_NAME'`) -{ - SELECT name FROM mysql.func; - --let $SKIP_REASON= "Need $TEST_FUNC_NAME function" -} diff --git a/storage/spider/mysql-test/spider/oracle/t/have_partition.inc b/storage/spider/mysql-test/spider/oracle/t/have_partition.inc deleted file mode 100644 index b6e699475db..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/have_partition.inc +++ /dev/null @@ -1,7 +0,0 @@ -let $HAVE_PARTITION= 0; -if (`SELECT count(*) FROM information_schema.plugins WHERE - plugin_status = 'ACTIVE' AND - plugin_name = 'partition'`) -{ - let $HAVE_PARTITION= 1; -} diff --git a/storage/spider/mysql-test/spider/oracle/t/have_trigger.inc b/storage/spider/mysql-test/spider/oracle/t/have_trigger.inc deleted file mode 100644 index 32de484b388..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/have_trigger.inc +++ /dev/null @@ -1,2 +0,0 @@ -let $HAVE_TRIGGER= `SELECT COUNT(*) FROM information_schema.tables - WHERE TABLE_SCHEMA = 'information_schema' AND TABLE_NAME = 'TRIGGERS'`; diff --git a/storage/spider/mysql-test/spider/oracle/t/hs_test_deinit.inc b/storage/spider/mysql-test/spider/oracle/t/hs_test_deinit.inc deleted file mode 100644 index 7ec2e981fd2..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/hs_test_deinit.inc +++ /dev/null @@ -1,17 +0,0 @@ -# get connection and exist engine test ---echo for master_1 ---connection master_1 ---source ../include/hs_deinit_master_1.inc ---echo for child2 -if ($USE_CHILD_GROUP2) -{ - --echo child2_1 - --connection child2_1 - --source ../include/hs_deinit_child2_1.inc - --echo child2_2 - --connection child2_2 - --source ../include/hs_deinit_child2_2.inc - --echo child2_3 - --connection child2_3 - --source ../include/hs_deinit_child2_3.inc -} diff --git a/storage/spider/mysql-test/spider/oracle/t/hs_test_init.inc b/storage/spider/mysql-test/spider/oracle/t/hs_test_init.inc deleted file mode 100644 index 831bf479524..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/hs_test_init.inc +++ /dev/null @@ -1,17 +0,0 @@ -# get connection and exist engine test ---echo for master_1 ---connection master_1 ---source ../include/hs_init_master_1.inc ---echo for child2 -if ($USE_CHILD_GROUP2) -{ - --echo child2_1 - --connection child2_1 - --source ../include/hs_init_child2_1.inc - --echo child2_2 - --connection child2_2 - --source ../include/hs_init_child2_2.inc - --echo child2_3 - --connection child2_3 - --source ../include/hs_init_child2_3.inc -} diff --git a/storage/spider/mysql-test/spider/oracle/t/slave_test_deinit.inc b/storage/spider/mysql-test/spider/oracle/t/slave_test_deinit.inc deleted file mode 100644 index e9d99b7a960..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/slave_test_deinit.inc +++ /dev/null @@ -1,6 +0,0 @@ -# get connection and exist engine test ---echo for slave1_1 ---connection slave1_1 -STOP SLAVE; ---source ../include/deinit_slave1_1.inc ---disconnect slave1_1 diff --git a/storage/spider/mysql-test/spider/oracle/t/slave_test_init.inc b/storage/spider/mysql-test/spider/oracle/t/slave_test_init.inc deleted file mode 100644 index 739d88970c5..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/slave_test_init.inc +++ /dev/null @@ -1,44 +0,0 @@ -# get connection and exist engine test ---echo for slave1_1 ---source connect_slave1_1.inc ---connection slave1_1 -SET SESSION sql_log_bin= 0; ---let $SLAVE1_1_SERVER_ID=`SELECT @@global.server_id` ---let $TEST_ENGINE_TYPE= $SLAVE1_1_ENGINE_TYPE ---source have_partition.inc ---source have_trigger.inc ---source ../include/init_slave1_1.inc ---source have_engine.inc ---let $SLAVE1_1_SLAVE_STATUS=`SHOW SLAVE STATUS` -if (!$SLAVE1_1_SLAVE_STATUS) -{ - eval CHANGE MASTER TO - MASTER_HOST = '127.0.0.1', - MASTER_USER = 'root', - MASTER_PASSWORD = '', - MASTER_PORT = $MASTER_1_MYPORT - ; -} -START SLAVE; ---connection master_1 -call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); ---connection slave1_1 -call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); - --connection child2_2 - call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); - --connection child2_3 - call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); -} -if ($USE_CHILD_GROUP3) -{ - --connection child3_1 - call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); - --connection child3_2 - call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); - --connection child3_3 - call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); -} diff --git a/storage/spider/mysql-test/spider/oracle/t/spider3_fixes.test b/storage/spider/mysql-test/spider/oracle/t/spider3_fixes.test deleted file mode 100644 index 13fa6f5fa39..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/spider3_fixes.test +++ /dev/null @@ -1,292 +0,0 @@ -# This test tests for Spider 3.0's bug fixes -source include/have_log_bin.inc; ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---source slave_test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - - ---echo ---echo 3.1 ---echo auto_increment -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_INCREMENT_TABLES1; - echo CHILD2_1_CREATE_INCREMENT_TABLES1; - echo CHILD2_1_AUTO_INCREMENT_INCREMENT2; - echo CHILD2_1_AUTO_INCREMENT_OFFSET2; - } - --disable_warnings - eval $CHILD2_1_DROP_INCREMENT_TABLES1; - --enable_warnings - eval $CHILD2_1_CREATE_INCREMENT_TABLES1; - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT2; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -if ($USE_REPLICATION) -{ - save_master_pos; - --connection slave1_1 - sync_with_master; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log -} ---disable_warnings -DROP TABLE IF EXISTS t1, t2; ---enable_warnings ---disable_query_log -echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1; -echo CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1; -echo MASTER_1_AUTO_INCREMENT_INCREMENT2; -echo MASTER_1_AUTO_INCREMENT_OFFSET2; -eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_1; -eval CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_1; -eval $MASTER_1_AUTO_INCREMENT_INCREMENT2; -eval $MASTER_1_AUTO_INCREMENT_OFFSET2; -if ($USE_REPLICATION) -{ - SET SESSION sql_log_bin= 1; - --connection slave1_1 - --disable_warnings - DROP TABLE IF EXISTS t1, t2; - --enable_warnings - echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_1; - echo CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_1; - eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_1; - eval CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_1; - --connection master_1 -} ---enable_query_log -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t2 () VALUES (); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t2; ---disable_query_log -echo MASTER_1_AUTO_INCREMENT_OFFSET3; -eval $MASTER_1_AUTO_INCREMENT_OFFSET3; ---enable_query_log -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; ---disable_query_log -echo MASTER_1_AUTO_INCREMENT_OFFSET4; -eval $MASTER_1_AUTO_INCREMENT_OFFSET4; ---enable_query_log -INSERT INTO t2 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t2; ---disable_query_log -echo MASTER_1_AUTO_INCREMENT_OFFSET3; -eval $MASTER_1_AUTO_INCREMENT_OFFSET3; ---enable_query_log -INSERT INTO t1 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -SELECT id FROM t1 ORDER BY id; ---disable_query_log -echo MASTER_1_AUTO_INCREMENT_OFFSET4; -eval $MASTER_1_AUTO_INCREMENT_OFFSET4; ---enable_query_log -INSERT INTO t2 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -SELECT id FROM t2 ORDER BY id; -TRUNCATE TABLE t1; -TRUNCATE TABLE t2; -INSERT INTO t1 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -SELECT id FROM t1 ORDER BY id; -INSERT INTO t2 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -SELECT id FROM t2 ORDER BY id; -SET INSERT_ID=5000; ---disable_query_log -echo MASTER_1_AUTO_INCREMENT_OFFSET3; -eval $MASTER_1_AUTO_INCREMENT_OFFSET3; ---enable_query_log -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; ---disable_query_log -echo MASTER_1_AUTO_INCREMENT_OFFSET4; -eval $MASTER_1_AUTO_INCREMENT_OFFSET4; ---enable_query_log -INSERT INTO t2 () VALUES (); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t2; -INSERT INTO t1 (id) VALUES (10000); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t2 (id) VALUES (1000); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t2; -if ($USE_REPLICATION) -{ - save_master_pos; - --connection slave1_1 - sync_with_master; - SELECT id FROM t1 ORDER BY id; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log -} -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_INCREMENT_TABLES1; - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_AUTO_INCREMENT_INCREMENT1; - echo CHILD2_1_AUTO_INCREMENT_OFFSET1; - } - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT1; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET1; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source slave_test_deinit.inc ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle/t/spider3_fixes_part.test b/storage/spider/mysql-test/spider/oracle/t/spider3_fixes_part.test deleted file mode 100644 index 3288c490a46..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/spider3_fixes_part.test +++ /dev/null @@ -1,345 +0,0 @@ -# This test tests for Spider 3.0's bug fixes -source include/have_log_bin.inc; ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---source slave_test_init.inc ---enable_result_log ---enable_query_log -if (!$HAVE_PARTITION) -{ - --disable_query_log - --disable_result_log - --source slave_test_deinit.inc - --source test_deinit.inc - --enable_result_log - --enable_query_log - --enable_warnings - skip Test requires partitioning; -} - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - - ---echo auto_increment with partition -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_INCREMENT_TABLES1; - echo CHILD2_1_CREATE_INCREMENT_TABLES1; - echo CHILD2_1_AUTO_INCREMENT_INCREMENT2; - echo CHILD2_1_AUTO_INCREMENT_OFFSET2; - } - --disable_warnings - eval $CHILD2_1_DROP_INCREMENT_TABLES1; - --enable_warnings - eval $CHILD2_1_CREATE_INCREMENT_TABLES1; - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT2; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_INCREMENT_TABLES1; - echo CHILD2_2_CREATE_INCREMENT_TABLES1; - echo CHILD2_2_AUTO_INCREMENT_INCREMENT2; - echo CHILD2_2_AUTO_INCREMENT_OFFSET2; - } - --disable_warnings - eval $CHILD2_2_DROP_INCREMENT_TABLES1; - --enable_warnings - eval $CHILD2_2_CREATE_INCREMENT_TABLES1; - eval $CHILD2_2_AUTO_INCREMENT_INCREMENT2; - eval $CHILD2_2_AUTO_INCREMENT_OFFSET2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - if ($USE_REPLICATION) - { - save_master_pos; - --connection slave1_1 - sync_with_master; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log - } - --disable_warnings - DROP TABLE IF EXISTS t1, t2; - --enable_warnings - --disable_query_log - echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1; - echo CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1; - echo MASTER_1_AUTO_INCREMENT_INCREMENT2; - echo MASTER_1_AUTO_INCREMENT_OFFSET2; - eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_P_1; - eval CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_P_1; - eval $MASTER_1_AUTO_INCREMENT_INCREMENT2; - eval $MASTER_1_AUTO_INCREMENT_OFFSET2; - if ($USE_REPLICATION) - { - SET SESSION sql_log_bin= 1; - --connection slave1_1 - --disable_warnings - DROP TABLE IF EXISTS t1, t2; - --enable_warnings - echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_P_1; - echo CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_P_1; - eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_P_1; - eval CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_P_1; - --connection master_1 - } - --enable_query_log - INSERT INTO t1 () VALUES (); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t2 () VALUES (); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t2; - --disable_query_log - echo MASTER_1_AUTO_INCREMENT_OFFSET3; - eval $MASTER_1_AUTO_INCREMENT_OFFSET3; - --enable_query_log - INSERT INTO t1 (id) VALUES (null); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - --disable_query_log - echo MASTER_1_AUTO_INCREMENT_OFFSET4; - eval $MASTER_1_AUTO_INCREMENT_OFFSET4; - --enable_query_log - INSERT INTO t2 (id) VALUES (null); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t2; - --disable_query_log - echo MASTER_1_AUTO_INCREMENT_OFFSET3; - eval $MASTER_1_AUTO_INCREMENT_OFFSET3; - --enable_query_log - INSERT INTO t1 () VALUES (),(),(),(); - SELECT LAST_INSERT_ID(); - SELECT id FROM t1 ORDER BY id; - --disable_query_log - echo MASTER_1_AUTO_INCREMENT_OFFSET4; - eval $MASTER_1_AUTO_INCREMENT_OFFSET4; - --enable_query_log - INSERT INTO t2 () VALUES (),(),(),(); - SELECT LAST_INSERT_ID(); - SELECT id FROM t2 ORDER BY id; - TRUNCATE TABLE t1; - TRUNCATE TABLE t2; - INSERT INTO t1 () VALUES (),(),(),(); - SELECT LAST_INSERT_ID(); - SELECT id FROM t1 ORDER BY id; - INSERT INTO t2 () VALUES (),(),(),(); - SELECT LAST_INSERT_ID(); - SELECT id FROM t2 ORDER BY id; - SET INSERT_ID=5000; - --disable_query_log - echo MASTER_1_AUTO_INCREMENT_OFFSET3; - eval $MASTER_1_AUTO_INCREMENT_OFFSET3; - --enable_query_log - INSERT INTO t1 () VALUES (); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - --disable_query_log - echo MASTER_1_AUTO_INCREMENT_OFFSET4; - eval $MASTER_1_AUTO_INCREMENT_OFFSET4; - --enable_query_log - INSERT INTO t2 () VALUES (); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t2; - INSERT INTO t1 (id) VALUES (10000); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t2 (id) VALUES (1000); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t2; - if ($USE_REPLICATION) - { - save_master_pos; - --connection slave1_1 - sync_with_master; - SELECT id FROM t1 ORDER BY id; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log - } - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_INCREMENT_TABLES1; - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_AUTO_INCREMENT_INCREMENT1; - echo CHILD2_1_AUTO_INCREMENT_OFFSET1; - } - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT1; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET1; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_2_SELECT_INCREMENT_TABLES1; - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_AUTO_INCREMENT_INCREMENT1; - echo CHILD2_2_AUTO_INCREMENT_OFFSET1; - } - eval $CHILD2_2_AUTO_INCREMENT_INCREMENT1; - eval $CHILD2_2_AUTO_INCREMENT_OFFSET1; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source slave_test_deinit.inc ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle/t/spider_fixes.test b/storage/spider/mysql-test/spider/oracle/t/spider_fixes.test deleted file mode 100644 index cfca9a04e6b..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/spider_fixes.test +++ /dev/null @@ -1,1425 +0,0 @@ -# This test tests for Spider's bug fixes -source include/have_log_bin.inc; ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---source slave_test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo create table and insert -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS tb_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2; -eval CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2; ---enable_query_log -INSERT INTO tb_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1; -eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; ---enable_query_log -INSERT INTO ta_l SELECT a, b, c FROM tb_l; - ---echo ---echo 2.13 ---echo select table with "order by desc" and "<" -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_ps2_protocol -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -WHERE a < 5 ORDER BY a DESC LIMIT 3; ---enable_ps2_protocol -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select table with "order by desc" and "<=" -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_ps2_protocol -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -WHERE a <= 5 ORDER BY a DESC LIMIT 3; ---enable_ps2_protocol -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo 2.14 ---echo update table with range scan and split_read -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l SET c = '2000-02-02 00:00:00' WHERE a > 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo 2.15 ---echo select table with range scan -TRUNCATE TABLE ta_l; ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES6; - echo CHILD2_1_CREATE_TABLES6; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES6; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES6; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } -} ---connection master_1 ---disable_query_log -echo CREATE TABLE ta_l ( - a int(11) NOT NULL DEFAULT '0', - b char(1) DEFAULT NULL, - c datetime DEFAULT NULL, - PRIMARY KEY (a, b, c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT5_2_1; -eval CREATE TABLE ta_l ( - a int(11) NOT NULL DEFAULT '0', - b char(1) DEFAULT NULL, - c datetime DEFAULT NULL, - PRIMARY KEY (a, b, c) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT5_2_1; ---enable_query_log -INSERT INTO ta_l SELECT a, b, c FROM tb_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b >= 'b' -AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b > 'b' -AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a >= 4 AND b = 'd' -AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a > 4 AND b = 'c' -AND c = '2001-12-31 23:59:59'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b <= 'd' -AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b < 'e' -AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a <= 4 AND b = 'b' -AND c = '2000-01-01 00:00:00'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a < 4 AND b = 'b' -AND c = '2000-01-01 00:00:00'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b >= 'b' -AND b <= 'd' AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b > 'b' -AND b < 'e' AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a <= 4 AND a >= 1 -AND b >= 'b' AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a < 4 AND a > 1 -AND b >= 'b' AND c = '2000-01-01 00:00:00'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo 2.16 ---echo auto_increment insert with trigger -if ($HAVE_TRIGGER) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_result_log - } - --disable_query_log - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_1_DROP_TABLES4; - echo CHILD2_1_CREATE_TABLES4; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES4; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES4; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } - } - --connection master_1 - --disable_query_log - echo CREATE TABLE ta_l_auto_inc ( - a INT AUTO_INCREMENT, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT3_2_1; - eval CREATE TABLE ta_l_auto_inc ( - a INT AUTO_INCREMENT, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT3_2_1; - echo CREATE TABLE tc_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) MASTER_1_ENGINE2 MASTER_1_CHARSET2; - eval CREATE TABLE tc_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2; - --enable_query_log - --eval CREATE TRIGGER ins_ta_l_auto_inc AFTER INSERT ON ta_l_auto_inc FOR EACH ROW BEGIN INSERT INTO tc_l (a, b, c) VALUES (NEW.a, NEW.b, NEW.c); END; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - INSERT INTO ta_l_auto_inc (a, b, c) VALUES - (NULL, 's', '2008-12-31 20:59:59'); - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_TABLES4; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM tc_l ORDER BY a; -} - ---echo ---echo 2.17 ---echo engine-condition-pushdown with "or" and joining -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l WHERE a = 1 OR a IN (SELECT a FROM tb_l); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo 2.23 ---echo index merge -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_result_log - } - --disable_query_log - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_1_DROP_TABLES5; - echo CHILD2_1_CREATE_TABLES5; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES5; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES5; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } -} ---connection master_1 ---disable_query_log -echo CREATE TABLE ta_l_int ( - a INT AUTO_INCREMENT, - b INT DEFAULT 10, - c INT DEFAULT 11, - PRIMARY KEY(a), - KEY idx1(b), - KEY idx2(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1; -eval CREATE TABLE ta_l_int ( - a INT AUTO_INCREMENT, - b INT DEFAULT 10, - c INT DEFAULT 11, - PRIMARY KEY(a), - KEY idx1(b), - KEY idx2(c) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1; ---enable_query_log -INSERT INTO ta_l_int (a, b, c) VALUES (1, 2, 3); -INSERT INTO ta_l_int (a, b, c) SELECT a + 1, b + 1, c + 1 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 2, b + 2, c + 2 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 4, b + 4, c + 4 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 8, b + 8, c + 8 FROM ta_l_int; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l_int force index(primary, idx1, idx2) -WHERE a = 5 OR b = 5 OR c = 5 ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo 2.24 ---echo index scan update without PK ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l_int; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l_int ( - a INT NOT NULL, - b INT DEFAULT 10, - c INT DEFAULT 11, - KEY idx1(b), - KEY idx2(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1; -if ($MASTER_1_NEEDPK) -{ - --error ER_REQUIRES_PRIMARY_KEY - eval CREATE TABLE ta_l_int ( - a INT NOT NULL, - b INT DEFAULT 10, - c INT DEFAULT 11, - KEY idx1(b), - KEY idx2(c) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1; - eval CREATE TABLE ta_l_int ( - a INT NOT NULL, - b INT DEFAULT 10, - c INT DEFAULT 11, - PRIMARY KEY(a), - KEY idx1(b), - KEY idx2(c) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1; -} -if (!$MASTER_1_NEEDPK) -{ - eval CREATE TABLE ta_l_int ( - a INT NOT NULL, - b INT DEFAULT 10, - c INT DEFAULT 11, - KEY idx1(b), - KEY idx2(c) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1; -} ---enable_query_log -SELECT a, b, c FROM ta_l_int ORDER BY a; -INSERT INTO ta_l_int (a, b, c) VALUES (0, 2, 3); -INSERT INTO ta_l_int (a, b, c) VALUES (18, 2, 3); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l_int SET c = 4 WHERE b = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%update %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l_int ORDER BY a; - - ---echo ---echo 2.25 ---echo direct order limit ---connection master_1 -eval $MASTER_1_CHECK_DIRECT_ORDER_LIMIT_STATUS; ---disable_ps2_protocol -SELECT a, b, c FROM ta_l_int ORDER BY a LIMIT 3; ---enable_ps2_protocol -eval $MASTER_1_CHECK_DIRECT_ORDER_LIMIT_STATUS; - - ---echo ---echo 2.26 ---echo lock tables -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_LOCK_TABLES1; - echo CHILD2_1_DROP_LOCK_TABLES2; - echo CHILD2_1_CREATE_LOCK_TABLES1; - echo CHILD2_1_CREATE_LOCK_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_LOCK_TABLES1; - eval $CHILD2_1_DROP_LOCK_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_LOCK_TABLES1; - eval $CHILD2_1_CREATE_LOCK_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_LOCK_TABLES1; - echo CHILD2_2_DROP_LOCK_TABLES2; - echo CHILD2_2_CREATE_LOCK_TABLES1; - echo CHILD2_2_CREATE_LOCK_TABLES2; - } - --disable_warnings - eval $CHILD2_2_DROP_LOCK_TABLES1; - eval $CHILD2_2_DROP_LOCK_TABLES2; - --enable_warnings - eval $CHILD2_2_CREATE_LOCK_TABLES1; - eval $CHILD2_2_CREATE_LOCK_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS t1; -DROP TABLE IF EXISTS t2; ---enable_warnings ---disable_query_log -echo CREATE TABLE t1 ( - id int(11) NOT NULL, - PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_LOCK1; -eval CREATE TABLE t1 ( - id int(11) NOT NULL, - PRIMARY KEY (id) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_LOCK1; -echo CREATE TABLE t2 ( - id int(11) NOT NULL, - PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_LOCK2; -eval CREATE TABLE t2 ( - id int(11) NOT NULL, - PRIMARY KEY (id) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_LOCK2; ---enable_query_log -LOCK TABLES t1 READ, t2 READ; -UNLOCK TABLES; - - ---echo ---echo auto_increment -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_INCREMENT_TABLES1; - echo CHILD2_1_CREATE_INCREMENT_TABLES1; - echo CHILD2_1_AUTO_INCREMENT_INCREMENT2; - echo CHILD2_1_AUTO_INCREMENT_OFFSET2; - } - --disable_warnings - eval $CHILD2_1_DROP_INCREMENT_TABLES1; - --enable_warnings - eval $CHILD2_1_CREATE_INCREMENT_TABLES1; - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT2; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -if ($USE_REPLICATION) -{ - save_master_pos; - --connection slave1_1 - sync_with_master; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log -} ---disable_warnings -DROP TABLE IF EXISTS t1; ---enable_warnings ---disable_query_log -echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1; -echo MASTER_1_AUTO_INCREMENT_INCREMENT2; -echo MASTER_1_AUTO_INCREMENT_OFFSET2; -eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_1; -eval $MASTER_1_AUTO_INCREMENT_INCREMENT2; -eval $MASTER_1_AUTO_INCREMENT_OFFSET2; -if ($USE_REPLICATION) -{ - SET SESSION sql_log_bin= 1; - --connection slave1_1 - --disable_warnings - DROP TABLE IF EXISTS t1; - --enable_warnings - echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_1; - eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_1; - --connection master_1 -} ---enable_query_log -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t1 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -SELECT id FROM t1 ORDER BY id; -SET INSERT_ID=5000; -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t1 (id) VALUES (10000); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t1 (id) VALUES (1000); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -if ($USE_REPLICATION) -{ - save_master_pos; - --connection slave1_1 - sync_with_master; - SELECT id FROM t1 ORDER BY id; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log -} -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_INCREMENT_TABLES1; - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_AUTO_INCREMENT_INCREMENT1; - echo CHILD2_1_AUTO_INCREMENT_OFFSET1; - } - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT1; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET1; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - - ---echo ---echo read only -let $MASTER_1_ENGINE_IS_SPIDER= - `SELECT IF('$MASTER_1_ENGINE_TYPE' = 'Spider' OR - '$MASTER_1_HIDDEN_ENGINE_TYPE' = 'Spider', 1, 0)`; -if ($MASTER_1_ENGINE_IS_SPIDER) -{ - --connection master_1 - --disable_warnings - DROP TABLE IF EXISTS t1; - --enable_warnings - --disable_query_log - echo CREATE TABLE t1 ( - id int(11) NOT NULL, - PRIMARY KEY (id) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_READONLY1_1; - eval CREATE TABLE t1 ( - id int(11) NOT NULL, - PRIMARY KEY (id) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_READONLY1_1; - --let $MIN_VAL= `SELECT MIN(id) FROM t1` - --enable_query_log - SELECT id FROM t1 ORDER BY id; - --error 12518 - INSERT INTO t1 (id) VALUES (1); - --error 12518 - eval UPDATE t1 SET id = 4 WHERE id = $MIN_VAL; - --error 12518 - eval DELETE FROM t1 WHERE id = $MIN_VAL; - --error 12518 - DELETE FROM t1; - --error 12518 - TRUNCATE t1; -} -if (!$MASTER_1_ENGINE_IS_SPIDER) -{ - --echo skipped -} - - ---echo ---echo 2.27 ---echo error mode -if ($MASTER_1_ENGINE_IS_SPIDER) -{ - --connection master_1 - --disable_warnings - DROP TABLE IF EXISTS t1; - --enable_warnings - --disable_query_log - echo CREATE TABLE t1 ( - id int(11) NOT NULL, - PRIMARY KEY (id) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_ERROR_MODE1_1; - eval CREATE TABLE t1 ( - id int(11) NOT NULL, - PRIMARY KEY (id) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_ERROR_MODE1_1; - --enable_query_log - SELECT id FROM t1 ORDER BY id; - INSERT INTO t1 (id) VALUES (1); - DELETE FROM t1; - TRUNCATE t1; -} -if (!$MASTER_1_ENGINE_IS_SPIDER) -{ - --echo skipped -} - - ---echo ---echo 3.0 ---echo is null -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_result_log - } - --disable_query_log - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_1_DROP_TEXT_KEY_TABLES1; - echo CHILD2_1_CREATE_TEXT_KEY_TABLES1; - } - --disable_warnings - eval $CHILD2_1_DROP_TEXT_KEY_TABLES1; - --enable_warnings - eval $CHILD2_1_CREATE_TEXT_KEY_TABLES1; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS t1; ---enable_warnings ---disable_query_log -echo CREATE TABLE t1 ( - a VARCHAR(255), - b VARCHAR(255), - c VARCHAR(255), - KEY idx1(a,b), - KEY idx2(b), - PRIMARY KEY(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_TEXT_KEY1_1; -eval CREATE TABLE t1 ( - a VARCHAR(255), - b VARCHAR(255), - c VARCHAR(255), - KEY idx1(a,b), - KEY idx2(b), - PRIMARY KEY(c) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_TEXT_KEY1_1; ---enable_query_log -insert into t1 values (null, null, '2048'); -insert into t1 values ('1', '1', '1'); -insert into t1 select a + 1, b + 1, c + 1 from t1; -insert into t1 select a + 2, b + 2, c + 2 from t1; -insert into t1 select a + 4, b + 4, c + 4 from t1; -insert into t1 select a + 8, b + 8, c + 8 from t1; -insert into t1 select a + 16, b + 16, c + 16 from t1; -insert into t1 select a + 32, b + 32, c + 32 from t1; -insert into t1 select a + 64, b + 64, c + 64 from t1; -insert into t1 select a + 128, b + 128, c + 128 from t1; -insert into t1 select a + 256, b + 256, c + 256 from t1; -insert into t1 select a + 512, b + 512, c + 512 from t1; -flush tables; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -select a from t1 where a is null order by a limit 30; -select b from t1 where b is null order by b limit 30; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TEXT_PK_TABLES1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - - ---echo ---echo direct_order_limit ---connection master_1 -TRUNCATE TABLE t1; -insert into t1 values ('1', '1', '1'); -insert into t1 select a + 1, b + 1, c + 1 from t1; -insert into t1 select a + 2, b + 2, c + 2 from t1; -insert into t1 select a + 4, b + 4, c + 4 from t1; -insert into t1 select a + 8, b + 8, c + 8 from t1; -insert into t1 select a + 16, b + 16, c + 16 from t1; -insert into t1 select a, b + 32, c + 32 from t1; -insert into t1 select a, b + 64, c + 64 from t1; -insert into t1 select a, b + 128, c + 128 from t1; -flush tables; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -select a, b, c from t1 where a = '10' and b <> '100' order by c desc limit 5; -select a, c from t1 where a = '10' order by b desc limit 5; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TEXT_PK_TABLES1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source slave_test_deinit.inc ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle/t/spider_fixes_part.test b/storage/spider/mysql-test/spider/oracle/t/spider_fixes_part.test deleted file mode 100644 index ef5a8026c02..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/spider_fixes_part.test +++ /dev/null @@ -1,645 +0,0 @@ -# This test tests for Spider's bug fixes -source include/have_log_bin.inc; ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---source slave_test_init.inc ---enable_result_log ---enable_query_log -if (!$HAVE_PARTITION) -{ - --disable_query_log - --disable_result_log - --source slave_test_deinit.inc - --source test_deinit.inc - --enable_result_log - --enable_query_log - --enable_warnings - skip Test requires partitioning; -} - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS tb_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2; -eval CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2; ---enable_query_log -INSERT INTO tb_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - ---echo ---echo 2.17 ---echo partition with sort -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES2; - echo CHILD2_1_CREATE_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - --disable_query_log - echo CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1; - eval CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_COMMENT2_P_2_1; - --enable_query_log - INSERT INTO ta_l2 SELECT a, b, c FROM tb_l; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 WHERE a > 1 - ORDER BY a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - ---echo ---echo 2.23 ---echo partition update with moving partition -if ($HAVE_PARTITION) -{ - --connection master_1 - --disable_warnings - DROP TABLE IF EXISTS ta_l2; - --enable_warnings - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES2; - echo CHILD2_1_CREATE_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - --disable_query_log - echo CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1; - eval CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_COMMENT2_P_2_1; - --enable_query_log - INSERT INTO ta_l2 (a, b, c) VALUES (3, 'B', '2010-09-26 00:00:00'); - UPDATE ta_l2 SET a = 4 WHERE a = 3; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%update %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%delete %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%update %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%delete %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - ---echo index merge with partition -if ($HAVE_PARTITION) -{ - --connection master_1 - --disable_warnings - DROP TABLE IF EXISTS ta_l_int; - --enable_warnings - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_result_log - } - --disable_query_log - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_2_DROP_TABLES5; - echo CHILD2_2_CREATE_TABLES5; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES5; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES5; - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_1_DROP_TABLES5; - echo CHILD2_1_CREATE_TABLES5; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES5; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES5; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } - } - --connection master_1 - --disable_query_log - echo CREATE TABLE ta_l_int ( - a INT AUTO_INCREMENT, - b INT DEFAULT 10, - c INT DEFAULT 11, - PRIMARY KEY(a), - KEY idx1(b), - KEY idx2(c) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT3_P_2_1; - eval CREATE TABLE ta_l_int ( - a INT AUTO_INCREMENT, - b INT DEFAULT 10, - c INT DEFAULT 11, - PRIMARY KEY(a), - KEY idx1(b), - KEY idx2(c) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT3_P_2_1; - --enable_query_log - INSERT INTO ta_l_int (a, b, c) VALUES (1, 2, 3); - INSERT INTO ta_l_int (a, b, c) SELECT a + 1, b + 1, c + 1 FROM ta_l_int; - INSERT INTO ta_l_int (a, b, c) SELECT a + 2, b + 2, c + 2 FROM ta_l_int; - INSERT INTO ta_l_int (a, b, c) SELECT a + 4, b + 4, c + 4 FROM ta_l_int; - INSERT INTO ta_l_int (a, b, c) SELECT a + 8, b + 8, c + 8 FROM ta_l_int; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, c FROM ta_l_int force index(primary, idx1, idx2) - WHERE a = 5 OR b = 5 OR c = 5 ORDER BY a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - - ---echo ---echo 2.26 ---echo auto_increment with partition -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_INCREMENT_TABLES1; - echo CHILD2_1_CREATE_INCREMENT_TABLES1; - echo CHILD2_1_AUTO_INCREMENT_INCREMENT2; - echo CHILD2_1_AUTO_INCREMENT_OFFSET2; - } - --disable_warnings - eval $CHILD2_1_DROP_INCREMENT_TABLES1; - --enable_warnings - eval $CHILD2_1_CREATE_INCREMENT_TABLES1; - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT2; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_INCREMENT_TABLES1; - echo CHILD2_2_CREATE_INCREMENT_TABLES1; - echo CHILD2_2_AUTO_INCREMENT_INCREMENT2; - echo CHILD2_2_AUTO_INCREMENT_OFFSET2; - } - --disable_warnings - eval $CHILD2_2_DROP_INCREMENT_TABLES1; - --enable_warnings - eval $CHILD2_2_CREATE_INCREMENT_TABLES1; - eval $CHILD2_2_AUTO_INCREMENT_INCREMENT2; - eval $CHILD2_2_AUTO_INCREMENT_OFFSET2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - if ($USE_REPLICATION) - { - save_master_pos; - --connection slave1_1 - sync_with_master; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log - } - --disable_warnings - DROP TABLE IF EXISTS t1; - --enable_warnings - --disable_query_log - echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1; - echo MASTER_1_AUTO_INCREMENT_INCREMENT2; - echo MASTER_1_AUTO_INCREMENT_OFFSET2; - eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_P_1; - eval $MASTER_1_AUTO_INCREMENT_INCREMENT2; - eval $MASTER_1_AUTO_INCREMENT_OFFSET2; - if ($USE_REPLICATION) - { - SET SESSION sql_log_bin= 1; - --connection slave1_1 - --disable_warnings - DROP TABLE IF EXISTS t1; - --enable_warnings - echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_P_1; - eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_P_1; - --connection master_1 - } - --enable_query_log - INSERT INTO t1 () VALUES (); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t1 () VALUES (); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t1 (id) VALUES (null); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t1 (id) VALUES (null); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t1 () VALUES (),(),(),(); - SELECT LAST_INSERT_ID(); - SELECT id FROM t1 ORDER BY id; - SET INSERT_ID=5000; - INSERT INTO t1 () VALUES (); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t1 (id) VALUES (10000); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t1 (id) VALUES (1000); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - if ($USE_REPLICATION) - { - save_master_pos; - --connection slave1_1 - sync_with_master; - SELECT id FROM t1 ORDER BY id; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log - } - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_INCREMENT_TABLES1; - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_AUTO_INCREMENT_INCREMENT1; - echo CHILD2_1_AUTO_INCREMENT_OFFSET1; - } - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT1; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET1; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_2_SELECT_INCREMENT_TABLES1; - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_AUTO_INCREMENT_INCREMENT1; - echo CHILD2_2_AUTO_INCREMENT_OFFSET1; - } - eval $CHILD2_2_AUTO_INCREMENT_INCREMENT1; - eval $CHILD2_2_AUTO_INCREMENT_OFFSET1; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source slave_test_deinit.inc ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle/t/test_deinit.inc b/storage/spider/mysql-test/spider/oracle/t/test_deinit.inc deleted file mode 100644 index 989bde26d3c..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/test_deinit.inc +++ /dev/null @@ -1,37 +0,0 @@ -# get connection and exist engine test ---echo for master_1 ---connection master_1 ---source ../include/deinit_master_1.inc ---disconnect master_1 ---echo for child2 -if ($USE_CHILD_GROUP2) -{ - --echo child2_1 - --connection child2_1 - --source ../include/deinit_child2_1.inc - --disconnect child2_1 - --echo child2_2 - --connection child2_2 - --source ../include/deinit_child2_2.inc - --disconnect child2_2 - --echo child2_3 - --connection child2_3 - --source ../include/deinit_child2_3.inc - --disconnect child2_3 -} ---echo for child3 -if ($USE_CHILD_GROUP3) -{ - --echo child3_1 - --connection child3_1 - --source ../include/deinit_child3_1.inc - --disconnect child3_1 - --echo child3_2 - --connection child3_2 - --source ../include/deinit_child3_2.inc - --disconnect child3_2 - --echo child3_3 - --connection child3_3 - --source ../include/deinit_child3_3.inc - --disconnect child3_3 -} diff --git a/storage/spider/mysql-test/spider/oracle/t/test_init.inc b/storage/spider/mysql-test/spider/oracle/t/test_init.inc deleted file mode 100644 index f2cd6c0269f..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/test_init.inc +++ /dev/null @@ -1,74 +0,0 @@ -# get connection and exist engine test ---echo for master_1 ---source connect_master_1.inc ---connection master_1 -CALL mtr.add_suppression("unknown variable"); -SET SESSION sql_log_bin= 0; ---let $MASTER_1_SERVER_ID=`SELECT @@global.server_id` ---let $TEST_ENGINE_TYPE= $MASTER_1_ENGINE_TYPE ---source have_partition.inc ---source have_trigger.inc ---source ../include/init_master_1.inc ---source have_engine.inc ---echo for child2 -if ($USE_CHILD_GROUP2) -{ - --echo child2_1 - --source connect_child2_1.inc - --connection child2_1 - CALL mtr.add_suppression("unknown variable *"); - SET SESSION sql_log_bin= 0; - --let $CHILD2_1_SERVER_ID=`SELECT @@global.server_id` - --let $TEST_ENGINE_TYPE= $CHILD2_1_ENGINE_TYPE - --source ../include/init_child2_1.inc - --source have_engine.inc - --echo child2_2 - --source connect_child2_2.inc - --connection child2_2 - CALL mtr.add_suppression("unknown variable *"); - SET SESSION sql_log_bin= 0; - --let $CHILD2_2_SERVER_ID=`SELECT @@global.server_id` - --let $TEST_ENGINE_TYPE= $CHILD2_2_ENGINE_TYPE - --source ../include/init_child2_2.inc - --source have_engine.inc - --echo child2_3 - --source connect_child2_3.inc - --connection child2_3 - CALL mtr.add_suppression("unknown variable *"); - SET SESSION sql_log_bin= 0; - --let $CHILD2_3_SERVER_ID=`SELECT @@global.server_id` - --let $TEST_ENGINE_TYPE= $CHILD2_3_ENGINE_TYPE - --source ../include/init_child2_3.inc - --source have_engine.inc -} ---echo for child3 -if ($USE_CHILD_GROUP3) -{ - --echo child3_1 - --source connect_child3_1.inc - --connection child3_1 - CALL mtr.add_suppression("unknown variable *"); - SET SESSION sql_log_bin= 0; - --let $CHILD3_1_SERVER_ID=`SELECT @@global.server_id` - --let $TEST_ENGINE_TYPE= $CHILD3_1_ENGINE_TYPE - --source ../include/init_child3_1.inc - --source have_engine.inc - --echo child3_2 - --source connect_child3_2.inc - --connection child3_2 - CALL mtr.add_suppression("unknown variable *"); - SET SESSION sql_log_bin= 0; - --let $CHILD3_2_SERVER_ID=`SELECT @@global.server_id` - --let $TEST_ENGINE_TYPE= $CHILD3_2_ENGINE_TYPE - --source ../include/init_child3_2.inc - --source have_engine.inc - --echo child3_3 - --source connect_child3_3.inc - --connection child3_3 - CALL mtr.add_suppression("unknown variable *"); - SET SESSION sql_log_bin= 0; - --let $CHILD3_3_SERVER_ID=`SELECT @@global.server_id` - --let $TEST_ENGINE_TYPE= $CHILD3_3_ENGINE_TYPE - --source ../include/init_child3_3.inc - --source have_engine.inc -} diff --git a/storage/spider/mysql-test/spider/oracle/t/vp_fixes.test b/storage/spider/mysql-test/spider/oracle/t/vp_fixes.test deleted file mode 100644 index 90380227040..00000000000 --- a/storage/spider/mysql-test/spider/oracle/t/vp_fixes.test +++ /dev/null @@ -1,335 +0,0 @@ -# This test tests for VP's bug fixes ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo create table and insert -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS tb_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2; -eval CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2; ---enable_query_log -INSERT INTO tb_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1; -eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; ---enable_query_log -INSERT INTO ta_l SELECT a, b, c FROM tb_l; - ---echo ---echo 0.9 ---echo create different primary key table -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_result_log - } - --disable_query_log - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_1_DROP_TABLES5; - echo CHILD2_1_CREATE_TABLES5; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES5; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES5; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } -} ---connection master_1 ---disable_query_log -echo CREATE TABLE ta_l_int ( - a INT DEFAULT 10, - b INT AUTO_INCREMENT, - c INT DEFAULT 11, - PRIMARY KEY(b) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1; -eval CREATE TABLE ta_l_int ( - a INT DEFAULT 10, - b INT AUTO_INCREMENT, - c INT DEFAULT 11, - PRIMARY KEY(b) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1; ---enable_query_log -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---let $MASTER_1_IS_VP= `SELECT IF('$MASTER_1_ENGINE_TYPE' = 'VP', 1, 0)` -if ($MASTER_1_IS_VP) -{ - --error 14514 - INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3); -} -if (!$MASTER_1_IS_VP) -{ - INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3); - --disable_query_log - --disable_result_log - TRUNCATE TABLE ta_l_int; - --enable_query_log - --enable_result_log -} -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_TABLES5; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo create un-correspond primary key table ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l_int; ---enable_warnings -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_result_log - } - --disable_query_log - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_1_DROP_TABLES5; - echo CHILD2_1_CREATE_TABLES5; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES5; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES5; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } -} ---connection master_1 ---disable_query_log -echo CREATE TABLE ta_l_int ( - a INT DEFAULT 10, - b INT DEFAULT 12, - c INT DEFAULT 11, - PRIMARY KEY(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1; -eval CREATE TABLE ta_l_int ( - a INT DEFAULT 10, - b INT DEFAULT 12, - c INT DEFAULT 11, - PRIMARY KEY(c) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1; ---enable_query_log -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -if ($MASTER_1_IS_VP) -{ - --error 14514 - INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3); -} -if (!$MASTER_1_IS_VP) -{ - INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3); - --disable_query_log - --disable_result_log - TRUNCATE TABLE ta_l_int; - --enable_query_log - --enable_result_log -} -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_TABLES5; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle2/include/deinit_child2_1.inc b/storage/spider/mysql-test/spider/oracle2/include/deinit_child2_1.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle2/include/deinit_child2_2.inc b/storage/spider/mysql-test/spider/oracle2/include/deinit_child2_2.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle2/include/deinit_child2_3.inc b/storage/spider/mysql-test/spider/oracle2/include/deinit_child2_3.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle2/include/deinit_child3_1.inc b/storage/spider/mysql-test/spider/oracle2/include/deinit_child3_1.inc deleted file mode 100644 index 74c8efa90aa..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/deinit_child3_1.inc +++ /dev/null @@ -1,3 +0,0 @@ ---let $TEST_ENGINE_TYPE= $CHILD3_1_ENGINE_TYPE ---let $INIT_TEST_ENGINE= $INIT_CHILD3_1_ENGINE ---source ../../include/deinit_engine.inc diff --git a/storage/spider/mysql-test/spider/oracle2/include/deinit_child3_2.inc b/storage/spider/mysql-test/spider/oracle2/include/deinit_child3_2.inc deleted file mode 100644 index f42a980ad23..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/deinit_child3_2.inc +++ /dev/null @@ -1,3 +0,0 @@ ---let $TEST_ENGINE_TYPE= $CHILD3_2_ENGINE_TYPE ---let $INIT_TEST_ENGINE= $INIT_CHILD3_2_ENGINE ---source ../../include/deinit_engine.inc diff --git a/storage/spider/mysql-test/spider/oracle2/include/deinit_child3_3.inc b/storage/spider/mysql-test/spider/oracle2/include/deinit_child3_3.inc deleted file mode 100644 index 0696fb991cf..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/deinit_child3_3.inc +++ /dev/null @@ -1,3 +0,0 @@ ---let $TEST_ENGINE_TYPE= $CHILD3_3_ENGINE_TYPE ---let $INIT_TEST_ENGINE= $INIT_CHILD3_3_ENGINE ---source ../../include/deinit_engine.inc diff --git a/storage/spider/mysql-test/spider/oracle2/include/deinit_master_1.inc b/storage/spider/mysql-test/spider/oracle2/include/deinit_master_1.inc deleted file mode 100644 index c19e376d10a..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/deinit_master_1.inc +++ /dev/null @@ -1 +0,0 @@ ---source ../../include/deinit_spider.inc diff --git a/storage/spider/mysql-test/spider/oracle2/include/deinit_slave1_1.inc b/storage/spider/mysql-test/spider/oracle2/include/deinit_slave1_1.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child2_1.inc b/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child2_1.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child2_2.inc b/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child2_2.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child2_3.inc b/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child2_3.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child3_1.inc b/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child3_1.inc deleted file mode 100644 index c19e376d10a..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child3_1.inc +++ /dev/null @@ -1 +0,0 @@ ---source ../../include/deinit_spider.inc diff --git a/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child3_2.inc b/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child3_2.inc deleted file mode 100644 index c19e376d10a..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child3_2.inc +++ /dev/null @@ -1 +0,0 @@ ---source ../../include/deinit_spider.inc diff --git a/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child3_3.inc b/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child3_3.inc deleted file mode 100644 index c19e376d10a..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_child3_3.inc +++ /dev/null @@ -1 +0,0 @@ ---source ../../include/deinit_spider.inc diff --git a/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_master_1.inc b/storage/spider/mysql-test/spider/oracle2/include/ha_deinit_master_1.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle2/include/ha_init_child2_1.inc b/storage/spider/mysql-test/spider/oracle2/include/ha_init_child2_1.inc deleted file mode 100644 index 2684829408d..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/ha_init_child2_1.inc +++ /dev/null @@ -1,8 +0,0 @@ -let $CHILD2_1_HA_AS_DROP_TABLES= - $CHILD2_1_DROP_TABLES; -let $CHILD2_1_HA_AS_CREATE_TABLES= - $CHILD2_1_CREATE_TABLES; -let $CHILD2_1_HA_AS_DROP_TABLES2= - $CHILD2_1_DROP_TABLES2; -let $CHILD2_1_HA_AS_CREATE_TABLES2= - $CHILD2_1_CREATE_TABLES2; diff --git a/storage/spider/mysql-test/spider/oracle2/include/ha_init_child2_2.inc b/storage/spider/mysql-test/spider/oracle2/include/ha_init_child2_2.inc deleted file mode 100644 index 205eaa6fe35..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/ha_init_child2_2.inc +++ /dev/null @@ -1,4 +0,0 @@ -let $CHILD2_2_HA_DROP_TABLES= - $CHILD2_2_DROP_TABLES; -let $CHILD2_2_HA_CREATE_TABLES= - $CHILD2_2_CREATE_TABLES; diff --git a/storage/spider/mysql-test/spider/oracle2/include/ha_init_child2_3.inc b/storage/spider/mysql-test/spider/oracle2/include/ha_init_child2_3.inc deleted file mode 100644 index 55cb858372c..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/ha_init_child2_3.inc +++ /dev/null @@ -1,4 +0,0 @@ -let $CHILD2_3_HA_DROP_TABLES= - $CHILD2_3_DROP_TABLES; -let $CHILD2_3_HA_CREATE_TABLES= - $CHILD2_3_CREATE_TABLES; diff --git a/storage/spider/mysql-test/spider/oracle2/include/ha_init_child3_1.inc b/storage/spider/mysql-test/spider/oracle2/include/ha_init_child3_1.inc deleted file mode 100644 index 8357f0bdbc2..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/ha_init_child3_1.inc +++ /dev/null @@ -1,140 +0,0 @@ ---let $CHILD3_1_ENGINE_TYPE=Spider ---let $CHILD3_1_ENGINE=ENGINE=Spider ---source ../include/init_spider.inc -eval INSERT INTO mysql.spider_link_mon_servers -(db_name, table_name, link_id, sid, server, scheme, host, port, socket, - username, password, ssl_ca, ssl_capath, ssl_cert, ssl_cipher, ssl_key, - ssl_verify_server_cert, default_file, default_group) VALUES -('%auto_test_local%', '%ta_l%', '%', $CHILD3_1_SERVER_ID, 's_3_1', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_2_SERVER_ID, 's_3_2', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_3_SERVER_ID, 's_3_3', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL); -let $CHILD3_1_CHECK_LINK_STATUS= - SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables - ORDER BY db_name, table_name, link_id; -let $CHILD3_1_CHECK_LINK_FAILED_LOG= - SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -let $CHILD3_1_SET_RECOVERY_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2", lst "0 2"'; -let $CHILD3_1_SET_OK_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2", lst "0 1"'; -let $CHILD3_1_SET_OK_STATUS_AS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2", lst "1 0"'; - -let $CHILD3_1_DROP_TABLES_HA_2_1= - DROP TABLE IF EXISTS ta_l; -if ($VERSION_COMPILE_OS_WIN) -{ - let $CHILD3_1_CREATE_TABLES_HA_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2"'; - let $CHILD3_1_CREATE_TABLES_HA_AS_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2"'; -} -if (!$VERSION_COMPILE_OS_WIN) -{ - let $CHILD3_1_CREATE_TABLES_HA_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2"'; - let $CHILD3_1_CREATE_TABLES_HA_AS_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2"'; -} -let $CHILD3_1_DROP_TABLES_HA_P_2_1= - DROP TABLE IF EXISTS ta_l2; -let $CHILD3_1_CREATE_TABLES_HA_P_2_1= - CREATE TABLE ta_l2 ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $CHILD3_1_CREATE_TABLES_HA_AS_P_2_1= - CREATE TABLE ta_l2 ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $CHILD3_1_SET_RECOVERY_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 2"' - ); -let $CHILD3_1_SET_OK_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 1"' - ); -let $CHILD3_1_SET_OK_STATUS_AS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "1 0"' - ); diff --git a/storage/spider/mysql-test/spider/oracle2/include/ha_init_child3_2.inc b/storage/spider/mysql-test/spider/oracle2/include/ha_init_child3_2.inc deleted file mode 100644 index 3ffcec24f51..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/ha_init_child3_2.inc +++ /dev/null @@ -1,140 +0,0 @@ ---let $CHILD3_2_ENGINE_TYPE=Spider ---let $CHILD3_2_ENGINE=ENGINE=Spider ---source ../include/init_spider.inc -eval INSERT INTO mysql.spider_link_mon_servers -(db_name, table_name, link_id, sid, server, scheme, host, port, socket, - username, password, ssl_ca, ssl_capath, ssl_cert, ssl_cipher, ssl_key, - ssl_verify_server_cert, default_file, default_group) VALUES -('%auto_test_local%', '%ta_l%', '%', $CHILD3_1_SERVER_ID, 's_3_1', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_2_SERVER_ID, 's_3_2', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_3_SERVER_ID, 's_3_3', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL); -let $CHILD3_2_CHECK_LINK_STATUS= - SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables - ORDER BY db_name, table_name, link_id; -let $CHILD3_2_CHECK_LINK_FAILED_LOG= - SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -let $CHILD3_2_SET_RECOVERY_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2", lst "0 2"'; -let $CHILD3_2_SET_OK_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2", lst "0 1"'; -let $CHILD3_2_SET_OK_STATUS_AS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2", lst "1 0"'; - -let $CHILD3_2_DROP_TABLES_HA_2_1= - DROP TABLE IF EXISTS ta_l; -if ($VERSION_COMPILE_OS_WIN) -{ - let $CHILD3_2_CREATE_TABLES_HA_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2"'; - let $CHILD3_2_CREATE_TABLES_HA_AS_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2"'; -} -if (!$VERSION_COMPILE_OS_WIN) -{ - let $CHILD3_2_CREATE_TABLES_HA_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2"'; - let $CHILD3_2_CREATE_TABLES_HA_AS_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2"'; -} -let $CHILD3_2_DROP_TABLES_HA_P_2_1= - DROP TABLE IF EXISTS ta_l2; -let $CHILD3_2_CREATE_TABLES_HA_P_2_1= - CREATE TABLE ta_l2 ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $CHILD3_2_CREATE_TABLES_HA_AS_P_2_1= - CREATE TABLE ta_l2 ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $CHILD3_2_SET_RECOVERY_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 2"' - ); -let $CHILD3_2_SET_OK_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 1"' - ); -let $CHILD3_2_SET_OK_STATUS_AS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "1 0"' - ); diff --git a/storage/spider/mysql-test/spider/oracle2/include/ha_init_child3_3.inc b/storage/spider/mysql-test/spider/oracle2/include/ha_init_child3_3.inc deleted file mode 100644 index 67bd00109f5..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/ha_init_child3_3.inc +++ /dev/null @@ -1,140 +0,0 @@ ---let $CHILD3_3_ENGINE_TYPE=Spider ---let $CHILD3_3_ENGINE=ENGINE=Spider ---source ../include/init_spider.inc -eval INSERT INTO mysql.spider_link_mon_servers -(db_name, table_name, link_id, sid, server, scheme, host, port, socket, - username, password, ssl_ca, ssl_capath, ssl_cert, ssl_cipher, ssl_key, - ssl_verify_server_cert, default_file, default_group) VALUES -('%auto_test_local%', '%ta_l%', '%', $CHILD3_1_SERVER_ID, 's_3_1', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_2_SERVER_ID, 's_3_2', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_3_SERVER_ID, 's_3_3', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL); -let $CHILD3_3_CHECK_LINK_STATUS= - SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables - ORDER BY db_name, table_name, link_id; -let $CHILD3_3_CHECK_LINK_FAILED_LOG= - SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -let $CHILD3_3_SET_RECOVERY_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2", lst "0 2"'; -let $CHILD3_3_SET_OK_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2", lst "0 1"'; -let $CHILD3_3_SET_OK_STATUS_AS_2_1= - ALTER TABLE ta_l - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2", lst "1 0"'; - -let $CHILD3_3_DROP_TABLES_HA_2_1= - DROP TABLE IF EXISTS ta_l; -if ($VERSION_COMPILE_OS_WIN) -{ - let $CHILD3_3_CREATE_TABLES_HA_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2"'; - let $CHILD3_3_CREATE_TABLES_HA_AS_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2"'; -} -if (!$VERSION_COMPILE_OS_WIN) -{ - let $CHILD3_3_CREATE_TABLES_HA_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", - database "auto_test_remote auto_test_remote2"'; - let $CHILD3_3_CREATE_TABLES_HA_AS_2_1= - CREATE TABLE ta_l ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"' - CONNECTION='host "localhost", user "root", password "", - msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "auto_test_remote auto_test_remote2"'; -} -let $CHILD3_3_DROP_TABLES_HA_P_2_1= - DROP TABLE IF EXISTS ta_l2; -let $CHILD3_3_CREATE_TABLES_HA_P_2_1= - CREATE TABLE ta_l2 ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $CHILD3_3_CREATE_TABLES_HA_AS_P_2_1= - CREATE TABLE ta_l2 ( - a INT DEFAULT 10, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $CHILD3_3_SET_RECOVERY_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 2"' - ); -let $CHILD3_3_SET_OK_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 1"' - ); -let $CHILD3_3_SET_OK_STATUS_AS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "1 0"' - ); diff --git a/storage/spider/mysql-test/spider/oracle2/include/ha_init_master_1.inc b/storage/spider/mysql-test/spider/oracle2/include/ha_init_master_1.inc deleted file mode 100644 index 8ace39ab641..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/ha_init_master_1.inc +++ /dev/null @@ -1,109 +0,0 @@ -eval INSERT INTO mysql.spider_link_mon_servers -(db_name, table_name, link_id, sid, server, scheme, host, port, socket, - username, password, ssl_ca, ssl_capath, ssl_cert, ssl_cipher, ssl_key, - ssl_verify_server_cert, default_file, default_group) VALUES -('%auto_test_local%', '%ta_l%', '%', $CHILD3_1_SERVER_ID, 's_3_1', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_2_SERVER_ID, 's_3_2', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL), -('%auto_test_local%', '%ta_l%', '%', $CHILD3_3_SERVER_ID, 's_3_3', NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL); -let $MASTER_1_CHECK_LINK_STATUS= - SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables - ORDER BY db_name, table_name, link_id; -let $MASTER_1_CHECK_LINK_FAILED_LOG= - SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -let $MASTER_1_SET_RECOVERY_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "$ORACLE_HOST", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", msi "$CHILD3_1_SERVER_ID", mkd "2", - database "$ORACLE_DATABASE", lst "0 2"'; -let $MASTER_1_SET_OK_STATUS_2_1= - ALTER TABLE ta_l - CONNECTION='host "$ORACLE_HOST", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", msi "$CHILD3_1_SERVER_ID", mkd "2", - database "$ORACLE_DATABASE", lst "0 1"'; -let $MASTER_1_SET_OK_STATUS_AS_2_1= - ALTER TABLE ta_l - CONNECTION='host "$ORACLE_HOST", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "$ORACLE_DATABASE", lst "1 0"'; -let $MASTER_1_COPY_TABLES_2_1= - SELECT spider_copy_tables('ta_l', '0', '1'); - -if ($VERSION_COMPILE_OS_WIN) -{ - let $MASTER_1_COMMENT_HA_2_1= - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3", - wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", msi "$CHILD3_1_SERVER_ID", mkd "2", - database "$ORACLE_DATABASE"'; - let $MASTER_1_COMMENT_HA_AS_2_1= - COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3", - wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "$ORACLE_DATABASE"'; -} -if (!$VERSION_COMPILE_OS_WIN) -{ - let $MASTER_1_COMMENT_HA_2_1= - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3", - wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", msi "$CHILD3_1_SERVER_ID", mkd "2", - database "$ORACLE_DATABASE"'; - let $MASTER_1_COMMENT_HA_AS_2_1= - COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3", - wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1", - database "$ORACLE_DATABASE"'; -} -let $MASTER_1_COMMENT_HA_P_2_1= - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $MASTER_1_COMMENT_HA_AS_P_2_1= - COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001"' - ); -let $MASTER_1_SET_RECOVERY_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 2"' - ); -let $MASTER_1_SET_OK_STATUS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 1"' - ); -let $MASTER_1_SET_OK_STATUS_AS_P_2_1= - ALTER TABLE ta_l2 - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', - PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "1 0"' - ); -let $MASTER_1_COPY_TABLES_P_2_1= - SELECT spider_copy_tables('ta_l2#P#pt2', '0', '1'); -let $MASTER_1_CHECK_HA_STATUS= - SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -let $MASTER_1_CHANGE_HA_MON= - SELECT spider_flush_table_mon_cache(); diff --git a/storage/spider/mysql-test/spider/oracle2/include/hs_deinit_child2_1.inc b/storage/spider/mysql-test/spider/oracle2/include/hs_deinit_child2_1.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle2/include/hs_deinit_child2_2.inc b/storage/spider/mysql-test/spider/oracle2/include/hs_deinit_child2_2.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle2/include/hs_deinit_child2_3.inc b/storage/spider/mysql-test/spider/oracle2/include/hs_deinit_child2_3.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle2/include/hs_deinit_master_1.inc b/storage/spider/mysql-test/spider/oracle2/include/hs_deinit_master_1.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle2/include/hs_init_child2_1.inc b/storage/spider/mysql-test/spider/oracle2/include/hs_init_child2_1.inc deleted file mode 100644 index f3f92a61e6f..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/hs_init_child2_1.inc +++ /dev/null @@ -1,24 +0,0 @@ -let $CHILD2_1_HS_DROP_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "hs_r"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_HS_CREATE_TABLES= - SELECT spider_direct_sql('CREATE TABLE "hs_r" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - "d" INT DEFAULT 11, - CONSTRAINT "pk_s_2_1_hs_r" PRIMARY KEY("a") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_HS_SELECT_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\'), "d" FROM "hs_r" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_HS_DROP_TABLES2= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "hs_r2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_HS_CREATE_TABLES2= - SELECT spider_direct_sql('CREATE TABLE "hs_r2" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - "d" INT DEFAULT 11, - CONSTRAINT "pk_s_2_1_hs_r2" PRIMARY KEY("a") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_HS_SELECT_TABLES2= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\'), "d" FROM "hs_r2" ORDER BY "a"', '', 'srv "s_2_1"'); diff --git a/storage/spider/mysql-test/spider/oracle2/include/hs_init_child2_2.inc b/storage/spider/mysql-test/spider/oracle2/include/hs_init_child2_2.inc deleted file mode 100644 index 4bd8d49c17c..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/hs_init_child2_2.inc +++ /dev/null @@ -1,12 +0,0 @@ -let $CHILD2_2_HS_DROP_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "hs_r3"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_HS_CREATE_TABLES= - SELECT spider_direct_sql('CREATE TABLE "hs_r3" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - "d" INT DEFAULT 11, - CONSTRAINT "pk_s_2_2_hs_r3" PRIMARY KEY("a") - )', '', 'srv "s_2_2"'); -let $CHILD2_2_HS_SELECT_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\'), "d" FROM "hs_r3" ORDER BY "a"', '', 'srv "s_2_2"'); diff --git a/storage/spider/mysql-test/spider/oracle2/include/hs_init_child2_3.inc b/storage/spider/mysql-test/spider/oracle2/include/hs_init_child2_3.inc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/storage/spider/mysql-test/spider/oracle2/include/hs_init_master_1.inc b/storage/spider/mysql-test/spider/oracle2/include/hs_init_master_1.inc deleted file mode 100644 index 0ff5e2a10d9..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/hs_init_master_1.inc +++ /dev/null @@ -1,12 +0,0 @@ -let $MASTER_1_HS_COMMENT_TMP= - COMMENT=''; -let $MASTER_1_HS_COMMENT_2_1= - COMMENT='srv "s_2_1", table "hs_r", uhr "1", uhw "1", hrp "$CHILD2_1_HSRPORT", hwp "$CHILD2_1_HSWPORT"'; -let $MASTER_1_HS_COMMENT_P_2_1= - COMMENT='uhr "1", uhw "1"' - PARTITION BY RANGE(a) ( - PARTITION pt1 VALUES LESS THAN (4) - COMMENT='srv "s_2_1", table "hs_r2", hrp "$CHILD2_1_HSRPORT", hwp "$CHILD2_1_HSWPORT"', - PARTITION pt2 VALUES LESS THAN MAXVALUE - COMMENT='srv "s_2_2", table "hs_r3", hrp "$CHILD2_2_HSRPORT", hwp "$CHILD2_2_HSWPORT"' - ); diff --git a/storage/spider/mysql-test/spider/oracle2/include/init_child2_1.inc b/storage/spider/mysql-test/spider/oracle2/include/init_child2_1.inc deleted file mode 100644 index c24736eefca..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/init_child2_1.inc +++ /dev/null @@ -1,192 +0,0 @@ ---connection master_1 -SELECT spider_direct_sql('ALTER SESSION SET NLS_DATE_FORMAT=\'YYYY-MM-DD HH24:MI:SS\'', '', 'srv "s_2_1"'); -SELECT spider_direct_sql('ALTER SESSION SET NLS_TIME_FORMAT=\'HH24:MI:SSXFF\'', '', 'srv "s_2_1"'); -SELECT spider_direct_sql('ALTER SESSION SET NLS_TIMESTAMP_FORMAT=\'YYYY-MM-DD HH24:MI:SSXFF\'', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ta_r"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TABLES= - SELECT spider_direct_sql('CREATE TABLE "ta_r" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - CONSTRAINT "pk_s_2_1_ta_r" PRIMARY KEY("a") - )', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE INDEX "idx1" ON "ta_r"("b")', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\') FROM "ta_r" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TABLES2= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ta_r2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TABLES2= - SELECT spider_direct_sql('CREATE TABLE "ta_r2" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - CONSTRAINT "pk_s_2_1_ta_r2" PRIMARY KEY("a") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TABLES2= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\') FROM "ta_r2" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TABLES3= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ta_r_no_idx"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TABLES3= - SELECT spider_direct_sql('CREATE TABLE "ta_r_no_idx" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\') - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TABLES3= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\') FROM "ta_r_no_idx" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TABLES4= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ta_r_auto_inc"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TABLES4= - SELECT spider_direct_sql('CREATE TABLE "ta_r_auto_inc" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - CONSTRAINT "pk_s_2_1_ta_r_auto_inc" PRIMARY KEY("a") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TABLES4= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\') FROM "ta_r_auto_inc" - ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TABLES5= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "s_2_1_ta_r_int"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TABLES5= - SELECT spider_direct_sql('CREATE TABLE "s_2_1_ta_r_int" ( - "a" INT DEFAULT 3, - "b" INT DEFAULT 10, - "c" INT DEFAULT 11, - CONSTRAINT "pk_s_2_1_ta_r_int" PRIMARY KEY("a") - )', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE INDEX "idx1_s_2_1_ta_r_int" ON "s_2_1_ta_r_int"("b")', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE INDEX "idx2_s_2_1_ta_r_int" ON "s_2_1_ta_r_int"("c")', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TABLES5= - SELECT spider_direct_sql('SELECT "a", "b", "c" FROM "s_2_1_ta_r_int" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TABLES6= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ta_r_3"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TABLES6= - SELECT spider_direct_sql('CREATE TABLE "ta_r_3" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\') - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TABLES6= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\') FROM "ta_r_3" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_FT_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ft_r"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_FT_TABLES= - SELECT spider_direct_sql('CREATE TABLE "ft_r" ( - "a" INT DEFAULT 0, - "b" TEXT, - "c" TEXT, - "d" TEXT, - CONSTRAINT "pk_s_2_1_ft_r" PRIMARY KEY("a"), - FULLTEXT INDEX "ft_idx1"("b"), - FULLTEXT INDEX "ft_idx2"("c") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_FT_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", "c", "d" FROM "ft_r" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_FT_TABLES2= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ft_r2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_FT_TABLES2= - SELECT spider_direct_sql('CREATE TABLE "ft_r2" ( - "a" INT DEFAULT 0, - "b" TEXT, - "c" TEXT, - "d" TEXT, - CONSTRAINT "pk_s_2_1_ft_r2" PRIMARY KEY("a"), - FULLTEXT INDEX "ft_idx1"("b"), - FULLTEXT INDEX "ft_idx2"("c") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_FT_TABLES2= - SELECT spider_direct_sql('SELECT "a", "b", "c", "d" FROM "ft_r2" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_GM_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "gm_r"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_GM_TABLES= - SELECT spider_direct_sql('CREATE TABLE "gm_r" ( - "a" INT DEFAULT 0, - "b" GEOMETRY NOT NULL, - "c" GEOMETRY NOT NULL, - CONSTRAINT "pk_s_2_1_gm_r" PRIMARY KEY("a"), - SPATIAL INDEX "sp_idx1"("b"), - SPATIAL INDEX "sp_idx2"("c") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_GM_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", "c" FROM "gm_r" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_GM_TABLES2= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "gm_r2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_GM_TABLES2= - SELECT spider_direct_sql('CREATE TABLE "gm_r2" ( - "a" INT DEFAULT 0, - "b" GEOMETRY NOT NULL, - "c" GEOMETRY NOT NULL, - CONSTRAINT "pk_s_2_1_gm_r2" PRIMARY KEY("a"), - SPATIAL INDEX "sp_idx1"("b"), - SPATIAL INDEX "sp_idx2"("c") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_GM_TABLES2= - SELECT spider_direct_sql('SELECT "a", "b", "c" FROM "gm_r2" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_LOCK_TABLES1= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_LOCK_TABLES1= - SELECT spider_direct_sql('CREATE TABLE "t1_1" ( - "id" INT NOT NULL, - CONSTRAINT "pk_s_2_1_t1_1" PRIMARY KEY ("id") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_LOCK_TABLES2= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t2_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_LOCK_TABLES2= - SELECT spider_direct_sql('CREATE TABLE "t2_2" ( - "id" INT NOT NULL, - CONSTRAINT "pk_s_2_1_t2_2" PRIMARY KEY ("id") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_INCREMENT_TABLES1= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_INCREMENT_TABLES1= - SELECT spider_direct_sql('CREATE TABLE "t1_1" ( - "id" INT NOT NULL, - CONSTRAINT "pk_s_2_1_t1_1" PRIMARY KEY ("id") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_INCREMENT_TABLES1= - SELECT spider_direct_sql('SELECT "id" FROM "t1_1" ORDER BY "id"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TEXT_PK_TABLES1= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TEXT_PK_TABLES1= - SELECT spider_direct_sql('CREATE TABLE "t1" ( - "a" VARCHAR(255), - CONSTRAINT "pk_s_2_1_t1" PRIMARY KEY ("a") - )', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TEXT_PK_TABLES1= - SELECT spider_direct_sql('SELECT "a" FROM "t1" ORDER BY "a"', '', 'srv "s_2_1"'); -let $CHILD2_1_DROP_TEXT_KEY_TABLES1= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"'); -let $CHILD2_1_CREATE_TEXT_KEY_TABLES1= - SELECT spider_direct_sql('CREATE TABLE "t1" ( - "a" VARCHAR(255), - "b" VARCHAR(255), - "c" VARCHAR(255), - CONSTRAINT "pk_s_2_1_t1" PRIMARY KEY ("c") - )', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE INDEX "idx1_t1" ON "t1"("a","b")', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE INDEX "idx2_t1" ON "t1"("b")', '', 'srv "s_2_1"'); -let $CHILD2_1_SELECT_TEXT_KEY_TABLES1= - SELECT spider_direct_sql('SELECT "a", "b", "c" FROM "t1" ORDER BY "c"', '', 'srv "s_2_1"'); -let $CHILD2_1_AUTO_INCREMENT_INCREMENT1= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_1"'); -let $CHILD2_1_AUTO_INCREMENT_INCREMENT2= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"'); -let $CHILD2_1_AUTO_INCREMENT_OFFSET1= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_1"'); -let $CHILD2_1_AUTO_INCREMENT_OFFSET2= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"'); diff --git a/storage/spider/mysql-test/spider/oracle2/include/init_child2_2.inc b/storage/spider/mysql-test/spider/oracle2/include/init_child2_2.inc deleted file mode 100644 index fd4497c0b59..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/init_child2_2.inc +++ /dev/null @@ -1,94 +0,0 @@ ---connection master_1 -SELECT spider_direct_sql('ALTER SESSION SET NLS_DATE_FORMAT=\'YYYY-MM-DD HH24:MI:SS\'', '', 'srv "s_2_2"'); -SELECT spider_direct_sql('ALTER SESSION SET NLS_TIME_FORMAT=\'HH24:MI:SSXFF\'', '', 'srv "s_2_2"'); -SELECT spider_direct_sql('ALTER SESSION SET NLS_TIMESTAMP_FORMAT=\'YYYY-MM-DD HH24:MI:SSXFF\'', '', 'srv "s_2_2"'); -let $CHILD2_2_DROP_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ta_r3"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_CREATE_TABLES= - SELECT spider_direct_sql('CREATE TABLE "ta_r3" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - CONSTRAINT "pk_s_2_2_ta_r3" PRIMARY KEY("a") - )', '', 'srv "s_2_2"'); -let $CHILD2_2_DROP_TABLES5= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "s_2_2_ta_r_int"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_CREATE_TABLES5= - SELECT spider_direct_sql('CREATE TABLE "s_2_2_ta_r_int" ( - "a" INT DEFAULT 3, - "b" INT DEFAULT 10, - "c" INT DEFAULT 11, - CONSTRAINT "pk_s_2_2_ta_r_int" PRIMARY KEY("a") - )', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE INDEX "idx1_s_2_2_ta_r_int" ON "s_2_2_ta_r_int"("b")', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE INDEX "idx2_s_2_2_ta_r_int" ON "s_2_2_ta_r_int"("c")', '', 'srv "s_2_2"'); -let $CHILD2_2_SELECT_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\') FROM "ta_r3" ORDER BY "a"', '', 'srv "s_2_2"'); -let $CHILD2_2_DROP_FT_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ft_r3"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_CREATE_FT_TABLES= - SELECT spider_direct_sql('CREATE TABLE "ft_r3" ( - "a" INT DEFAULT 0, - "b" TEXT, - "c" TEXT, - "d" TEXT, - CONSTRAINT "pk_s_2_2_ft_r3" PRIMARY KEY("a"), - FULLTEXT INDEX "ft_idx1"("b"), - FULLTEXT INDEX "ft_idx2"("c") - )', '', 'srv "s_2_2"'); -let $CHILD2_2_SELECT_FT_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", "c", "d" FROM "ft_r3" ORDER BY "a"', '', 'srv "s_2_2"'); -let $CHILD2_2_DROP_GM_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "gm_r3"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_CREATE_GM_TABLES= - SELECT spider_direct_sql('CREATE TABLE "gm_r3" ( - "a" INT DEFAULT 0, - "b" GEOMETRY NOT NULL, - "c" GEOMETRY NOT NULL, - CONSTRAINT "pk_s_2_2_gm_r3" PRIMARY KEY("a"), - SPATIAL INDEX "sp_idx1"("b"), - SPATIAL INDEX "sp_idx2"("c") - )', '', 'srv "s_2_2"'); -let $CHILD2_2_SELECT_GM_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", "c" FROM "gm_r3" ORDER BY "a"', '', 'srv "s_2_2"'); -let $CHILD2_2_DROP_LOCK_TABLES1= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_CREATE_LOCK_TABLES1= - SELECT spider_direct_sql('CREATE TABLE "t1_2" ( - "id" INT NOT NULL, - CONSTRAINT "pk_s_2_2_t1_2" PRIMARY KEY ("id") - )', '', 'srv "s_2_2"'); -let $CHILD2_2_DROP_LOCK_TABLES2= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t2_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_CREATE_LOCK_TABLES2= - SELECT spider_direct_sql('CREATE TABLE "t2_1" ( - "id" INT NOT NULL, - CONSTRAINT "pk_s_2_2_t2_1" PRIMARY KEY ("id") - )', '', 'srv "s_2_2"'); -let $CHILD2_2_DROP_INCREMENT_TABLES1= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"'); -let $CHILD2_2_CREATE_INCREMENT_TABLES1= - SELECT spider_direct_sql('CREATE TABLE "t1_2" ( - "id" INT NOT NULL, - CONSTRAINT "pk_s_2_2_t1_2" PRIMARY KEY ("id") - )', '', 'srv "s_2_2"'); -let $CHILD2_2_SELECT_INCREMENT_TABLES1= - SELECT spider_direct_sql('SELECT "id" FROM "t1_2" ORDER BY "id"', '', 'srv "s_2_2"'); -let $CHILD2_2_AUTO_INCREMENT_INCREMENT1= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_2"'); -let $CHILD2_2_AUTO_INCREMENT_INCREMENT2= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"'); -let $CHILD2_2_AUTO_INCREMENT_OFFSET1= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_2"'); -let $CHILD2_2_AUTO_INCREMENT_OFFSET2= - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"'); diff --git a/storage/spider/mysql-test/spider/oracle2/include/init_child2_3.inc b/storage/spider/mysql-test/spider/oracle2/include/init_child2_3.inc deleted file mode 100644 index e16dfeffd81..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/init_child2_3.inc +++ /dev/null @@ -1,15 +0,0 @@ ---connection master_1 -SELECT spider_direct_sql('ALTER SESSION SET NLS_DATE_FORMAT=\'YYYY-MM-DD HH24:MI:SS\'', '', 'srv "s_2_3"'); -SELECT spider_direct_sql('ALTER SESSION SET NLS_TIME_FORMAT=\'HH24:MI:SSXFF\'', '', 'srv "s_2_3"'); -SELECT spider_direct_sql('ALTER SESSION SET NLS_TIMESTAMP_FORMAT=\'YYYY-MM-DD HH24:MI:SSXFF\'', '', 'srv "s_2_3"'); -let $CHILD2_3_DROP_TABLES= - SELECT spider_direct_sql('begin execute immediate \'DROP TABLE "ta_r4"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_3"'); -let $CHILD2_3_CREATE_TABLES= - SELECT spider_direct_sql('CREATE TABLE "ta_r4" ( - "a" INT DEFAULT 10, - "b" CHAR(1) DEFAULT \'c\', - "c" DATE DEFAULT TO_DATE(\'1999-10-10 10:10:10\', \'YYYY-MM-DD HH24:MI:SS\'), - CONSTRAINT "pk_s_2_3_ta_r4" PRIMARY KEY("a") - )', '', 'srv "s_2_3"'); -let $CHILD2_3_SELECT_TABLES= - SELECT spider_direct_sql('SELECT "a", "b", TO_CHAR("c", \'YYYY-MM-DD HH24:MI:SS\') FROM "ta_r4" ORDER BY "a"', '', 'srv "s_2_3"'); diff --git a/storage/spider/mysql-test/spider/oracle2/include/init_child3_1.inc b/storage/spider/mysql-test/spider/oracle2/include/init_child3_1.inc deleted file mode 100644 index d2d308cbefe..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/init_child3_1.inc +++ /dev/null @@ -1,3 +0,0 @@ ---let $TEST_ENGINE_TYPE= $CHILD3_1_ENGINE_TYPE ---source ../../include/init_engine.inc ---let $INIT_CHILD3_1_ENGINE= $INIT_TEST_ENGINE diff --git a/storage/spider/mysql-test/spider/oracle2/include/init_child3_2.inc b/storage/spider/mysql-test/spider/oracle2/include/init_child3_2.inc deleted file mode 100644 index 3fbe1bd55bb..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/init_child3_2.inc +++ /dev/null @@ -1,3 +0,0 @@ ---let $TEST_ENGINE_TYPE= $CHILD3_2_ENGINE_TYPE ---source ../../include/init_engine.inc ---let $INIT_CHILD3_2_ENGINE= $INIT_TEST_ENGINE diff --git a/storage/spider/mysql-test/spider/oracle2/include/init_child3_3.inc b/storage/spider/mysql-test/spider/oracle2/include/init_child3_3.inc deleted file mode 100644 index 3c7aaa8af84..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/init_child3_3.inc +++ /dev/null @@ -1,3 +0,0 @@ ---let $TEST_ENGINE_TYPE= $CHILD3_3_ENGINE_TYPE ---source ../../include/init_engine.inc ---let $INIT_CHILD3_3_ENGINE= $INIT_TEST_ENGINE diff --git a/storage/spider/mysql-test/spider/oracle2/include/init_master_1.inc b/storage/spider/mysql-test/spider/oracle2/include/init_master_1.inc deleted file mode 100644 index 00c6f544992..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/init_master_1.inc +++ /dev/null @@ -1,150 +0,0 @@ ---source ../include/init_spider.inc -SET spider_direct_order_limit= 10000; -SET spider_init_sql_alloc_size= 1; -SET spider_conn_recycle_mode= 2; -let $MASTER_1_COMMENT_2_1= - COMMENT='database "$ORACLE_DATABASE", table "ta_r", wrapper "oracle", - pk_name "pk_s_2_1_ta_r"' - CONNECTION='host "$ORACLE_HOST", port "$ORACLE_PORT", user "$ORACLE_USER", - password "$ORACLE_PASSWORD"'; -let $MASTER_1_COMMENT2_2_1= - COMMENT='database "$ORACLE_DATABASE", table "ta_r_no_idx", wrapper "oracle", - pk_name "pk_s_2_1_ta_r_no_idx"' - CONNECTION='host "$ORACLE_HOST", port "$ORACLE_PORT", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", prt "2000000"'; -let $MASTER_1_COMMENT_P_2_1= - COMMENT='table "ta_r3"' - PARTITION BY KEY(a) ( - PARTITION pt1 COMMENT='srv "s_2_1", table "ta_r2", - priority "1000", pk_name "pk_s_2_1_ta_r2"', - PARTITION pt2 COMMENT='srv "s_2_2", priority "1000001", - pk_name "pk_s_2_2_ta_r3"' - ); -let $MASTER_1_COMMENT2_P_2_1= - COMMENT='table "ta_r3"' - PARTITION BY RANGE(a) ( - PARTITION pt1 VALUES LESS THAN (4) COMMENT='srv "s_2_1", - table "ta_r2", priority "1000", pk_name "pk_s_2_1_ta_r2"', - PARTITION pt2 VALUES LESS THAN MAXVALUE - COMMENT='srv "s_2_2", priority "1000001", pk_name "pk_s_2_2_ta_r3"' - ); -let $MASTER_1_COMMENT3_2_1= - COMMENT='database "$ORACLE_DATABASE", table "ta_r_auto_inc", - wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", port "$ORACLE_PORT", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", pk_name "pk_s_2_1_ta_r_auto_inc"'; -let $MASTER_1_COMMENT3_P_2_1= - COMMENT='table "s_2_1_ta_r_int"' - PARTITION BY LIST(MOD(a, 2)) ( - PARTITION pt1 VALUES IN (0) - COMMENT='srv "s_2_1", priority "1000", pk_name "pk_s_2_1_ta_r_int"', - PARTITION pt2 VALUES IN (1) - COMMENT='srv "s_2_2", priority "1000001", pk_name "pk_s_2_2_ta_r_int", - table "s_2_2_ta_r_int"' - ); -let $MASTER_1_COMMENT4_2_1= - COMMENT='database "$ORACLE_DATABASE", table "s_2_1_ta_r_int", - wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", port "$ORACLE_PORT", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", pk_name "pk_s_2_1_ta_r_int"'; -let $MASTER_1_COMMENT5_2_1= - COMMENT='database "$ORACLE_DATABASE", table "ta_r_3", wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", port "$ORACLE_PORT", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", pk_name "pk_s_2_1_ta_r_3"'; -let $MASTER_1_COMMENT_FT_2_1= - COMMENT='database "$ORACLE_DATABASE", table "ft_r", wrapper "oracle"' - CONNECTION='host "$ORACLE_HOST", port "$ORACLE_PORT", user "$ORACLE_USER", - password "$ORACLE_PASSWORD", pk_name "pk_s_2_1_ft_r"'; -let $MASTER_1_COMMENT2_FT_P_2_1= - COMMENT='table "ft_r3"' - PARTITION BY RANGE(a) ( - PARTITION pt1 VALUES LESS THAN (4) COMMENT='srv "s_2_1", - table "ft_r2", priority "1000", pk_name "pk_s_2_1_ft_r2"', - PARTITION pt2 VALUES LESS THAN MAXVALUE - COMMENT='srv "s_2_2", priority "1000001", pk_name "pk_s_2_2_ft_r3"' - ); -let $MASTER_1_COMMENT_GM_2_1= - COMMENT='srv "s_2_1", table "gm_r", pk_name "pk_s_2_1_gm_r"'; -let $MASTER_1_COMMENT2_GM_P_2_1= - COMMENT='table "gm_r3"' - PARTITION BY RANGE(a) ( - PARTITION pt1 VALUES LESS THAN (4) COMMENT='srv "s_2_1", - table "gm_r2", priority "1000", pk_name "pk_s_2_1_gm_r2"', - PARTITION pt2 VALUES LESS THAN MAXVALUE - COMMENT='srv "s_2_2", priority "1000001", pk_name "pk_s_2_2_gm_r3"' - ); -let $MASTER_1_COMMENT_LOCK1= - COMMENT 'tbl "t1_1 t1_2", srv "s_2_1 s_2_2", - pk_name "pk_s_2_1_t1_1 pk_s_2_2_t1_2"'; -let $MASTER_1_COMMENT_LOCK2= - COMMENT 'tbl "t2_1 t2_2", srv "s_2_2 s_2_1", - pk_name "pk_s_2_2_t2_1 pk_s_2_1_t2_2"'; -let $MASTER_1_COMMENT_INCREMENT1_1= - COMMENT 'aim "2", sqn "seq_t1_1", tbl "t1_1", srv "s_2_1", - pk_name "pk_s_2_1_t1_1"'; -let $MASTER_1_COMMENT_INCREMENT1_P_1= - COMMENT 'aim "2"' - PARTITION BY LIST(MOD(id, 2)) ( - PARTITION pt1 VALUES IN (0) - COMMENT='sqn "seq_t1_1", tbl "t1_1", srv "s_2_1", pk_name "pk_s_2_1_t1_1"', - PARTITION pt2 VALUES IN (1) - COMMENT='sqn "seq_t1_2", tbl "t1_2", srv "s_2_2", pk_name "pk_s_2_2_t1_2"' - ); -let $MASTER_1_COMMENT_READONLY1_1= - COMMENT 'read_only_mode "1", tbl "t1_1", srv "s_2_1", - pk_name "pk_s_2_1_t1_1"'; -let $MASTER_1_COMMENT_ERROR_MODE1_1= - COMMENT 'erm "1", ewm "1", tbl "ter1_1", srv "s_2_1", - pk_name "pk_s_2_1_ter1_1"'; -let $MASTER_1_COMMENT_TEXT_PK1_1= - COMMENT 'tbl "t1", srv "s_2_1", pk_name "pk_s_2_1_t1"'; -let $MASTER_1_COMMENT_TEXT_KEY1_1= - COMMENT 'tbl "t1", srv "s_2_1", pk_name "pk_s_2_1_t1"'; -let $MASTER_1_CHECK_DIRECT_UPDATE_STATUS= - SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -let $MASTER_1_CHECK_DIRECT_DELETE_STATUS= - SHOW GLOBAL STATUS LIKE 'Spider_direct_delete%'; -let $MASTER_1_CHECK_DIRECT_ORDER_LIMIT_STATUS= - SHOW GLOBAL STATUS LIKE 'Spider_direct_order_limit%'; -let $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS= - SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -let $MASTER_1_AUTO_INCREMENT_INCREMENT1= - SET SESSION AUTO_INCREMENT_INCREMENT = 1 $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_2"'); -let $MASTER_1_AUTO_INCREMENT_INCREMENT2= - SET SESSION AUTO_INCREMENT_INCREMENT = 777 $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"'); -let $MASTER_1_AUTO_INCREMENT_OFFSET1= - SET SESSION AUTO_INCREMENT_OFFSET = 1 $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 1 INCREMENT BY 1', '', 'srv "s_2_2"'); -let $MASTER_1_AUTO_INCREMENT_OFFSET2= - SET SESSION AUTO_INCREMENT_OFFSET = 777 $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') - $STR_SEMICOLON - SELECT spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'$STR_SEMICOLON exception when others then null$STR_SEMICOLON end$STR_SEMICOLON', '', 'srv "s_2_2"') - $STR_SEMICOLON - SELECT spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"'); -let $MASTER_1_AUTO_INCREMENT_OFFSET3= - SET SESSION AUTO_INCREMENT_OFFSET = 1; -let $MASTER_1_AUTO_INCREMENT_OFFSET4= - SET SESSION AUTO_INCREMENT_OFFSET = 777; diff --git a/storage/spider/mysql-test/spider/oracle2/include/init_slave1_1.inc b/storage/spider/mysql-test/spider/oracle2/include/init_slave1_1.inc deleted file mode 100644 index 73c3c6b9ef2..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/init_slave1_1.inc +++ /dev/null @@ -1,10 +0,0 @@ -let $SLAVE1_1_COMMENT_INCREMENT1_1= - COMMENT ''; -let $SLAVE1_1_COMMENT_INCREMENT1_P_1= - COMMENT '' - PARTITION BY LIST(MOD(id, 2)) ( - PARTITION pt1 VALUES IN (0) - COMMENT='', - PARTITION pt2 VALUES IN (1) - COMMENT='' - ); diff --git a/storage/spider/mysql-test/spider/oracle2/include/init_spider.inc b/storage/spider/mysql-test/spider/oracle2/include/init_spider.inc deleted file mode 100644 index ff9ac9aee29..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/include/init_spider.inc +++ /dev/null @@ -1,105 +0,0 @@ ---source ../../include/init_spider.inc -let $VERSION_COMPILE_OS_WIN= - `SELECT IF(@@version_compile_os like 'Win%', 1, 0)`; -if ($VERSION_COMPILE_OS_WIN) -{ - eval DROP SERVER s_2_1; - eval CREATE SERVER s_2_1 FOREIGN DATA WRAPPER oracle OPTIONS ( - HOST '$ORACLE_HOST', - DATABASE '$ORACLE_DATABASE', - USER '$ORACLE_USER', - PASSWORD '$ORACLE_PASSWORD', - PORT $ORACLE_PORT - ); - eval DROP SERVER s_2_2; - eval CREATE SERVER s_2_2 FOREIGN DATA WRAPPER oracle OPTIONS ( - HOST '$ORACLE_HOST', - DATABASE '$ORACLE_DATABASE', - USER '$ORACLE_USER', - PASSWORD '$ORACLE_PASSWORD', - PORT $ORACLE_PORT - ); - eval DROP SERVER s_2_3; - eval CREATE SERVER s_2_3 FOREIGN DATA WRAPPER oracle OPTIONS ( - HOST '$ORACLE_HOST', - DATABASE '$ORACLE_DATABASE', - USER '$ORACLE_USER', - PASSWORD '$ORACLE_PASSWORD', - PORT $ORACLE_PORT - ); - eval DROP SERVER s_3_1; - eval CREATE SERVER s_3_1 FOREIGN DATA WRAPPER mysql OPTIONS ( - HOST 'localhost', - DATABASE 'auto_test_local', - USER 'root', - PASSWORD '', - PORT $CHILD3_1_MYPORT - ); - eval DROP SERVER s_3_2; - eval CREATE SERVER s_3_2 FOREIGN DATA WRAPPER mysql OPTIONS ( - HOST 'localhost', - DATABASE 'auto_test_local', - USER 'root', - PASSWORD '', - PORT $CHILD3_2_MYPORT - ); - eval DROP SERVER s_3_3; - eval CREATE SERVER s_3_3 FOREIGN DATA WRAPPER mysql OPTIONS ( - HOST 'localhost', - DATABASE 'auto_test_local', - USER 'root', - PASSWORD '', - PORT $CHILD2_3_MYPORT - ); -} -if (!$VERSION_COMPILE_OS_WIN) -{ - eval DROP SERVER s_2_1; - eval CREATE SERVER s_2_1 FOREIGN DATA WRAPPER oracle OPTIONS ( - HOST '$ORACLE_HOST', - DATABASE '$ORACLE_DATABASE', - USER '$ORACLE_USER', - PASSWORD '$ORACLE_PASSWORD', - PORT $ORACLE_PORT - ); - eval DROP SERVER s_2_2; - eval CREATE SERVER s_2_2 FOREIGN DATA WRAPPER oracle OPTIONS ( - HOST '$ORACLE_HOST', - DATABASE '$ORACLE_DATABASE', - USER '$ORACLE_USER', - PASSWORD '$ORACLE_PASSWORD', - PORT $ORACLE_PORT - ); - eval DROP SERVER s_2_3; - eval CREATE SERVER s_2_3 FOREIGN DATA WRAPPER oracle OPTIONS ( - HOST '$ORACLE_HOST', - DATABASE '$ORACLE_DATABASE', - USER '$ORACLE_USER', - PASSWORD '$ORACLE_PASSWORD', - PORT $ORACLE_PORT - ); - eval DROP SERVER s_3_1; - eval CREATE SERVER s_3_1 FOREIGN DATA WRAPPER mysql OPTIONS ( - HOST 'localhost', - DATABASE 'auto_test_local', - USER 'root', - PASSWORD '', - SOCKET '$CHILD3_1_MYSOCK' - ); - eval DROP SERVER s_3_2; - eval CREATE SERVER s_3_2 FOREIGN DATA WRAPPER mysql OPTIONS ( - HOST 'localhost', - DATABASE 'auto_test_local', - USER 'root', - PASSWORD '', - SOCKET '$CHILD3_2_MYSOCK' - ); - eval DROP SERVER s_3_3; - eval CREATE SERVER s_3_3 FOREIGN DATA WRAPPER mysql OPTIONS ( - HOST 'localhost', - DATABASE 'auto_test_local', - USER 'root', - PASSWORD '', - SOCKET '$CHILD3_3_MYSOCK' - ); -} diff --git a/storage/spider/mysql-test/spider/oracle2/my.cnf b/storage/spider/mysql-test/spider/oracle2/my.cnf deleted file mode 100644 index efa05c8e8b0..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/my.cnf +++ /dev/null @@ -1,146 +0,0 @@ -# Use default setting for mysqld processes -!include include/default_mysqld.cnf - -[mysqld.1.1] -log-bin= master-bin -loose_handlersocket_port= 20000 -loose_handlersocket_port_wr= 20001 -loose_handlersocket_threads= 2 -loose_handlersocket_threads_wr= 1 -loose_handlersocket_support_merge_table= 0 -loose_handlersocket_direct_update_mode= 2 -loose_handlersocket_unlimited_boundary= 65536 -loose_handlersocket_bulk_insert= 0 -loose_handlersocket_bulk_insert_timeout= 0 -loose_handlersocket_general_log= 1 -loose_handlersocket_timeout= 30 -loose_handlersocket_close_table_interval=2 -open_files_limit= 4096 -loose_partition= 1 - -[mysqld.3.1] -loose_partition= 1 - -[mysqld.3.2] -loose_partition= 1 - -[mysqld.3.3] -loose_partition= 1 - -[mysqld.4.1] -loose_partition= 1 - - -[ENV] -USE_GEOMETRY_TEST= 0 -USE_FULLTEXT_TEST= 0 -USE_HA_TEST= 1 -USE_GENERAL_LOG= 1 -USE_REPLICATION= 0 -MASTER_1_MYPORT= @mysqld.1.1.port -MASTER_1_HSRPORT= 20000 -MASTER_1_HSWPORT= 20001 -MASTER_1_MYSOCK= @mysqld.1.1.socket -MASTER_1_ENGINE_TYPE= Spider -#MASTER_1_ENGINE_TYPE= MyISAM -MASTER_1_ENGINE= ENGINE=Spider -MASTER_1_CHARSET= DEFAULT CHARSET=utf8 -MASTER_1_ENGINE2= ENGINE=MyISAM -MASTER_1_CHARSET2= DEFAULT CHARSET=utf8 -MASTER_1_CHARSET3= DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci -SLAVE1_1_MYPORT= @mysqld.4.1.port -SLAVE1_1_MYSOCK= @mysqld.4.1.socket -SLAVE1_1_ENGINE_TYPE= MyISAM -SLAVE1_1_ENGINE= ENGINE=MyISAM -SLAVE1_1_CHARSET= DEFAULT CHARSET=utf8 -USE_CHILD_GROUP2= 1 -OUTPUT_CHILD_GROUP2= 0 -CHILD2_1_MYPORT= @mysqld.1.1.port -CHILD2_1_MYSOCK= @mysqld.1.1.socket -CHILD2_1_ENGINE_TYPE= InnoDB -CHILD2_1_ENGINE= ENGINE=InnoDB -CHILD2_1_CHARSET= DEFAULT CHARSET=utf8 -CHILD2_1_CHARSET2= DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci -CHILD2_2_MYPORT= @mysqld.1.1.port -CHILD2_2_MYSOCK= @mysqld.1.1.socket -CHILD2_2_ENGINE_TYPE= InnoDB -CHILD2_2_ENGINE= ENGINE=InnoDB -CHILD2_2_CHARSET= DEFAULT CHARSET=utf8 -CHILD2_3_MYPORT= @mysqld.1.1.port -CHILD2_3_MYSOCK= @mysqld.1.1.socket -CHILD2_3_ENGINE_TYPE= InnoDB -CHILD2_3_ENGINE= ENGINE=InnoDB -CHILD2_3_CHARSET= DEFAULT CHARSET=utf8 -CHILD2_1_FT_MYPORT= @mysqld.1.1.port -CHILD2_1_FT_MYSOCK= @mysqld.1.1.socket -CHILD2_1_FT_ENGINE_TYPE= MyISAM -CHILD2_1_FT_ENGINE= ENGINE=MyISAM -CHILD2_1_FT_CHARSET= DEFAULT CHARSET=utf8 -CHILD2_2_FT_MYPORT= @mysqld.1.1.port -CHILD2_2_FT_MYSOCK= @mysqld.1.1.socket -CHILD2_2_FT_ENGINE_TYPE= MyISAM -CHILD2_2_FT_ENGINE= ENGINE=MyISAM -CHILD2_2_FT_CHARSET= DEFAULT CHARSET=utf8 -CHILD2_1_GM_MYPORT= @mysqld.1.1.port -CHILD2_1_GM_MYSOCK= @mysqld.1.1.socket -CHILD2_1_GM_ENGINE_TYPE= MyISAM -CHILD2_1_GM_ENGINE= ENGINE=MyISAM -CHILD2_1_GM_CHARSET= DEFAULT CHARSET=utf8 -CHILD2_2_GM_MYPORT= @mysqld.1.1.port -CHILD2_2_GM_MYSOCK= @mysqld.1.1.socket -CHILD2_2_GM_ENGINE_TYPE= MyISAM -CHILD2_2_GM_ENGINE= ENGINE=MyISAM -CHILD2_2_GM_CHARSET= DEFAULT CHARSET=utf8 -USE_CHILD_GROUP3= 1 -OUTPUT_CHILD_GROUP3= 0 -CHILD3_1_MYPORT= @mysqld.3.1.port -CHILD3_1_MYSOCK= @mysqld.3.1.socket -CHILD3_1_ENGINE_TYPE= InnoDB -CHILD3_1_ENGINE= ENGINE=InnoDB -CHILD3_1_CHARSET= DEFAULT CHARSET=utf8 -CHILD3_2_MYPORT= @mysqld.3.2.port -CHILD3_2_MYSOCK= @mysqld.3.2.socket -CHILD3_2_ENGINE_TYPE= InnoDB -CHILD3_2_ENGINE= ENGINE=InnoDB -CHILD3_2_CHARSET= DEFAULT CHARSET=utf8 -CHILD3_3_MYPORT= @mysqld.3.3.port -CHILD3_3_MYSOCK= @mysqld.3.3.socket -CHILD3_3_ENGINE_TYPE= InnoDB -CHILD3_3_ENGINE= ENGINE=InnoDB -CHILD3_3_CHARSET= DEFAULT CHARSET=utf8 -ORACLE_HOST= xe -ORACLE_PORT= 1521 -ORACLE_USER= system -ORACLE_PASSWORD= oracle -ORACLE_DATABASE= SYSTEM - -STR_SEMICOLON= ; - -#The followings are set in include/init_xxx.inc files -# MASTER_1_COMMENT_2_1 -# MASTER_1_COMMENT2_2_1 -# MASTER_1_COMMENT3_2_1 -# MASTER_1_COMMENT4_2_1 -# MASTER_1_COMMENT5_2_1 -# MASTER_1_COMMENT_P_2_1 -# CHILD2_1_DROP_TABLES -# CHILD2_1_CREATE_TABLES -# CHILD2_1_SELECT_TABLES -# CHILD2_1_DROP_TABLES2 -# CHILD2_1_CREATE_TABLES2 -# CHILD2_1_SELECT_TABLES2 -# CHILD2_1_DROP_TABLES3 -# CHILD2_1_CREATE_TABLES3 -# CHILD2_1_SELECT_TABLES3 -# CHILD2_1_DROP_TABLES4 -# CHILD2_1_CREATE_TABLES4 -# CHILD2_1_SELECT_TABLES4 -# CHILD2_1_DROP_TABLES5 -# CHILD2_1_CREATE_TABLES5 -# CHILD2_1_SELECT_TABLES5 -# CHILD2_1_DROP_TABLES6 -# CHILD2_1_CREATE_TABLES6 -# CHILD2_1_SELECT_TABLES6 -# CHILD2_2_DROP_TABLES -# CHILD2_2_CREATE_TABLES -# CHILD2_2_SELECT_TABLES diff --git a/storage/spider/mysql-test/spider/oracle2/r/basic_sql.result b/storage/spider/mysql-test/spider/oracle2/r/basic_sql.result deleted file mode 100644 index 1e9fe78acea..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/r/basic_sql.result +++ /dev/null @@ -1,634 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -create table select test -DROP TABLE IF EXISTS tb_l; -CREATE TABLE tb_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2 -INSERT INTO tb_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -SELECT a, b, c FROM tb_l -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -create table ignore select test -DROP TABLE IF EXISTS ta_l; -DROP TABLE IF EXISTS tb_l; -CREATE TABLE tb_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2 -INSERT INTO tb_l (a, b, c) VALUES -(1, 'f', '2008-07-01 10:21:39'), -(2, 'g', '2000-02-01 00:00:00'), -(3, 'j', '2007-05-04 20:03:11'), -(4, 'i', '2003-10-30 05:01:03'), -(5, 'h', '2001-10-31 23:59:59'); -CREATE TABLE ta_l ( -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -IGNORE SELECT a, b, c FROM tb_l -Warnings: -Warning 1062 Duplicate entry '1' for key 'PRIMARY' -Warning 1062 Duplicate entry '2' for key 'PRIMARY' -Warning 1062 Duplicate entry '3' for key 'PRIMARY' -Warning 1062 Duplicate entry '4' for key 'PRIMARY' -Warning 1062 Duplicate entry '5' for key 'PRIMARY' -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -create table ignore select test -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -REPLACE SELECT a, b, c FROM tb_l -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -create no index table -DROP TABLE IF EXISTS ta_l_no_idx; -CREATE TABLE ta_l_no_idx -MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT2_2_1 -SELECT a, b, c FROM tb_l -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l_no_idx ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select table -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select table shared mode -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a -LOCK IN SHARE MODE; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select table for update -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a -FOR UPDATE; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select table join -SELECT a.a, a.b, date_format(b.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a, tb_l b -WHERE a.a = b.a ORDER BY a.a; -a b date_format(b.c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select table straight_join -SELECT STRAIGHT_JOIN a.a, a.b, date_format(b.c, '%Y-%m-%d %H:%i:%s') -FROM ta_l a, tb_l b WHERE a.a = b.a ORDER BY a.a; -a b date_format(b.c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select sql_small_result -SELECT SQL_SMALL_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select sql_big_result -SELECT SQL_BIG_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select sql_buffer_result -SELECT SQL_BUFFER_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select sql_cache -SELECT SQL_CACHE a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select sql_no_cache -SELECT SQL_NO_CACHE a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select sql_calc_found_rows -SELECT SQL_CALC_FOUND_ROWS a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a LIMIT 4; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -SELECT found_rows(); -found_rows() -5 - -select high_priority -SELECT HIGH_PRIORITY a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select distinct -SELECT DISTINCT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select count -SELECT count(*) FROM ta_l ORDER BY a; -count(*) -5 - -select table join not use index -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM tb_l a WHERE -EXISTS (SELECT * FROM ta_l b WHERE b.b = a.b) ORDER BY a.a; -a b date_format(a.c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select using pushdown -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a WHERE -a.b = 'g' ORDER BY a.a; -a b date_format(a.c, '%Y-%m-%d %H:%i:%s') -2 g 2000-02-01 00:00:00 - -select using index and pushdown -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a WHERE -a.a > 0 AND a.b = 'g' ORDER BY a.a; -a b date_format(a.c, '%Y-%m-%d %H:%i:%s') -2 g 2000-02-01 00:00:00 - -insert -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 e 2008-01-01 23:59:59 - -insert select -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) SELECT a, b, c FROM tb_l; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -insert select a -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES ((SELECT a FROM tb_l ORDER BY a LIMIT 1), -'e', '2008-01-01 23:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 - -insert low_priority -TRUNCATE TABLE ta_l; -INSERT LOW_PRIORITY INTO ta_l (a, b, c) values (2, 'e', '2008-01-01 23:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 e 2008-01-01 23:59:59 - -insert high_priority -TRUNCATE TABLE ta_l; -INSERT HIGH_PRIORITY INTO ta_l (a, b, c) VALUES (2, 'e', -'2008-01-01 23:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 e 2008-01-01 23:59:59 - -insert ignore -INSERT IGNORE INTO ta_l (a, b, c) VALUES (2, 'd', '2009-02-02 01:01:01'); -Warnings: -Warning 1062 Duplicate entry '2' for key 'PRIMARY' -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 e 2008-01-01 23:59:59 - -insert update (insert) -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59') ON DUPLICATE -KEY UPDATE b = 'f', c = '2005-08-08 11:11:11'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 e 2008-01-01 23:59:59 - -insert update (update) -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59') ON DUPLICATE -KEY UPDATE b = 'f', c = '2005-08-08 11:11:11'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 f 2005-08-08 11:11:11 - -replace -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59'); -REPLACE INTO ta_l (a, b, c) VALUES (2, 'f', '2008-02-02 02:02:02'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 f 2008-02-02 02:02:02 - -replace select -REPLACE INTO ta_l (a, b, c) SELECT a, b, c FROM tb_l; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -replace select a -REPLACE INTO ta_l (a, b, c) VALUES ((SELECT a FROM tb_l ORDER BY a LIMIT 1), -'e', '2008-01-01 23:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -replace low_priority -REPLACE LOW_PRIORITY INTO ta_l (a, b, c) VALUES (3, 'g', -'2009-03-03 03:03:03'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 -2 g 2000-02-01 00:00:00 -3 g 2009-03-03 03:03:03 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -update -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'); -UPDATE ta_l SET b = 'f', c = '2008-02-02 02:02:02' WHERE a = 2; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 -2 f 2008-02-02 02:02:02 - -update select -UPDATE ta_l SET b = 'g', c = '2009-03-03 03:03:03' WHERE a IN (SELECT a FROM -tb_l); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 g 2009-03-03 03:03:03 -2 g 2009-03-03 03:03:03 - -update select a -UPDATE ta_l SET b = 'h', c = '2010-04-04 04:04:04' WHERE a = (SELECT a FROM -tb_l ORDER BY a LIMIT 1); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 h 2010-04-04 04:04:04 -2 g 2009-03-03 03:03:03 - -update join -UPDATE ta_l a, tb_l b SET a.b = b.b, a.c = b.c WHERE a.a = b.a; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 - -update join a -UPDATE ta_l a, tb_l b SET a.b = 'g', a.c = '2009-03-03 03:03:03' WHERE -a.a = b.a; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 g 2009-03-03 03:03:03 -2 g 2009-03-03 03:03:03 - -update low_priority -UPDATE LOW_PRIORITY ta_l SET b = 'f', c = '2008-02-02 02:02:02' WHERE a = 2; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 g 2009-03-03 03:03:03 -2 f 2008-02-02 02:02:02 - -update ignore -UPDATE IGNORE ta_l SET a = 1, b = 'g', c = '2009-03-03 03:03:03' WHERE a = 2; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 g 2009-03-03 03:03:03 -2 f 2008-02-02 02:02:02 - -update pushdown -update ta_l set b = 'j', c = '2009-03-03 03:03:03' where b = 'f'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 g 2009-03-03 03:03:03 -2 j 2009-03-03 03:03:03 - -update index pushdown -UPDATE ta_l SET b = 'g', c = '2009-03-03 03:03:03' WHERE a > 0 AND b = 'j'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 g 2009-03-03 03:03:03 -2 g 2009-03-03 03:03:03 - -delete -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE FROM ta_l WHERE a = 2; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 -3 e 2008-01-01 23:59:59 -4 e 2008-01-01 23:59:59 -5 e 2008-01-01 23:59:59 -6 e 2008-01-01 23:59:59 -7 e 2008-01-01 23:59:59 -8 e 2008-01-01 23:59:59 -9 e 2008-01-01 23:59:59 -10 j 2008-01-01 23:59:59 - -delete all -DELETE FROM ta_l; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') - -delete select -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE FROM ta_l WHERE a IN (SELECT a FROM tb_l); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -6 e 2008-01-01 23:59:59 -7 e 2008-01-01 23:59:59 -8 e 2008-01-01 23:59:59 -9 e 2008-01-01 23:59:59 -10 j 2008-01-01 23:59:59 - -delete select a -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE FROM ta_l WHERE a = (SELECT a FROM tb_l ORDER BY a LIMIT 1); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 e 2008-01-01 23:59:59 -3 e 2008-01-01 23:59:59 -4 e 2008-01-01 23:59:59 -5 e 2008-01-01 23:59:59 -6 e 2008-01-01 23:59:59 -7 e 2008-01-01 23:59:59 -8 e 2008-01-01 23:59:59 -9 e 2008-01-01 23:59:59 -10 j 2008-01-01 23:59:59 - -delete join -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE a FROM ta_l a, (SELECT a FROM tb_l ORDER BY a) b WHERE a.a = b.a; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -6 e 2008-01-01 23:59:59 -7 e 2008-01-01 23:59:59 -8 e 2008-01-01 23:59:59 -9 e 2008-01-01 23:59:59 -10 j 2008-01-01 23:59:59 - -delete low_priority -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE LOW_PRIORITY FROM ta_l WHERE a = 2; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 -3 e 2008-01-01 23:59:59 -4 e 2008-01-01 23:59:59 -5 e 2008-01-01 23:59:59 -6 e 2008-01-01 23:59:59 -7 e 2008-01-01 23:59:59 -8 e 2008-01-01 23:59:59 -9 e 2008-01-01 23:59:59 -10 j 2008-01-01 23:59:59 - -delete ignore -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE IGNORE FROM ta_l WHERE a = 2; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 -3 e 2008-01-01 23:59:59 -4 e 2008-01-01 23:59:59 -5 e 2008-01-01 23:59:59 -6 e 2008-01-01 23:59:59 -7 e 2008-01-01 23:59:59 -8 e 2008-01-01 23:59:59 -9 e 2008-01-01 23:59:59 -10 j 2008-01-01 23:59:59 - -delete quick -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE QUICK FROM ta_l WHERE a = 2; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 e 2008-01-01 23:59:59 -3 e 2008-01-01 23:59:59 -4 e 2008-01-01 23:59:59 -5 e 2008-01-01 23:59:59 -6 e 2008-01-01 23:59:59 -7 e 2008-01-01 23:59:59 -8 e 2008-01-01 23:59:59 -9 e 2008-01-01 23:59:59 -10 j 2008-01-01 23:59:59 - -delete pushdown -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE FROM ta_l WHERE b = 'e'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -10 j 2008-01-01 23:59:59 - -delete index pushdown -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -DELETE FROM ta_l WHERE a > 0 AND b = 'e'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -10 j 2008-01-01 23:59:59 - -truncate -TRUNCATE TABLE ta_l; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle2/r/basic_sql_part.result b/storage/spider/mysql-test/spider/oracle2/r/basic_sql_part.result deleted file mode 100644 index 9e1201c17c9..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/r/basic_sql_part.result +++ /dev/null @@ -1,121 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 -DROP TABLE IF EXISTS tb_l; -CREATE TABLE tb_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2 -INSERT INTO tb_l (a, b, c) VALUES -(1, 'f', '2008-07-01 10:21:39'), -(2, 'g', '2000-02-01 00:00:00'), -(3, 'j', '2007-05-04 20:03:11'), -(4, 'i', '2003-10-30 05:01:03'), -(5, 'h', '2001-10-31 23:59:59'); - -create table with partition and select test -CREATE TABLE ta_l2 ( -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_COMMENT_P_2_1 -SELECT a, b, c FROM tb_l -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -select partition using pushdown -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 a WHERE -a.b = 'g' ORDER BY a.a; -a b date_format(a.c, '%Y-%m-%d %H:%i:%s') -2 g 2000-02-01 00:00:00 - -select partition using index pushdown -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 a WHERE -a.a > 0 AND a.b = 'g' ORDER BY a.a; -a b date_format(a.c, '%Y-%m-%d %H:%i:%s') -2 g 2000-02-01 00:00:00 - -update partition pushdown -UPDATE ta_l2 SET b = 'e', c = '2009-03-03 03:03:03' WHERE b = 'j'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 e 2009-03-03 03:03:03 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -update partition index pushdown -UPDATE ta_l2 SET b = 'j', c = '2009-03-03 03:03:03' WHERE a > 0 AND b = 'e'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -2 g 2000-02-01 00:00:00 -3 j 2009-03-03 03:03:03 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -delete partition pushdown -TRUNCATE TABLE ta_l2; -INSERT INTO ta_l2 SELECT a, b, c FROM tb_l; -DELETE FROM ta_l2 WHERE b = 'g'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -delete partition index pushdown -TRUNCATE TABLE ta_l2; -INSERT INTO ta_l2 SELECT a, b, c FROM tb_l; -DELETE FROM ta_l2 WHERE a > 0 AND b = 'g'; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 f 2008-07-01 10:21:39 -3 j 2007-05-04 20:03:11 -4 i 2003-10-30 05:01:03 -5 h 2001-10-31 23:59:59 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle2/r/direct_aggregate.result b/storage/spider/mysql-test/spider/oracle2/r/direct_aggregate.result deleted file mode 100644 index fe5752cff65..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/r/direct_aggregate.result +++ /dev/null @@ -1,91 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -create table select test -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -INSERT INTO ta_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); - -direct_aggregating test -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 0 -SELECT COUNT(*) FROM ta_l; -COUNT(*) -5 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 1 -SELECT MAX(a) FROM ta_l; -MAX(a) -5 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 1 -SELECT MIN(a) FROM ta_l; -MIN(a) -1 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 1 -SELECT MAX(a) FROM ta_l WHERE a < 5; -MAX(a) -4 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 1 -SELECT MIN(a) FROM ta_l WHERE a > 1; -MIN(a) -2 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 1 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle2/r/direct_aggregate_part.result b/storage/spider/mysql-test/spider/oracle2/r/direct_aggregate_part.result deleted file mode 100644 index 9bde4a1746a..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/r/direct_aggregate_part.result +++ /dev/null @@ -1,82 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -with partition test -CREATE TABLE ta_l2 ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 0 -SELECT COUNT(*) FROM ta_l2; -COUNT(*) -5 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 2 -SELECT MAX(a) FROM ta_l2; -MAX(a) -5 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 2 -SELECT MIN(a) FROM ta_l2; -MIN(a) -1 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 2 -SELECT MAX(a) FROM ta_l2 WHERE a < 5; -MAX(a) -4 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 2 -SELECT MIN(a) FROM ta_l2 WHERE a > 1; -MIN(a) -2 -SHOW GLOBAL STATUS LIKE 'Spider_direct_aggregate%'; -Variable_name Value -Spider_direct_aggregate 2 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle2/r/direct_update.result b/storage/spider/mysql-test/spider/oracle2/r/direct_update.result deleted file mode 100644 index 3dc39d5f630..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/r/direct_update.result +++ /dev/null @@ -1,138 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -create table select test -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -INSERT INTO ta_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); - -direct_updating test -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 -update all rows with function -UPDATE ta_l SET c = ADDDATE(c, 1); -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 e 2007-06-05 20:03:11 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -update by primary key -UPDATE ta_l SET b = 'x' WHERE a = 3; -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 x 2007-06-05 20:03:11 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -update by a column without index -UPDATE ta_l SET c = '2011-10-17' WHERE b = 'x'; -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 x 2011-10-17 00:00:00 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -update by primary key with order and limit -UPDATE ta_l SET c = ADDDATE(c, 1) WHERE a < 4 ORDER BY b DESC LIMIT 1; -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 x 2011-10-18 00:00:00 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -delete by primary key with order and limit -DELETE FROM ta_l WHERE a < 4 ORDER BY c LIMIT 1; -SHOW GLOBAL STATUS LIKE 'Spider_direct_delete%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -3 x 2011-10-18 00:00:00 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -delete by a column without index -DELETE FROM ta_l WHERE b = 'c'; -SHOW GLOBAL STATUS LIKE 'Spider_direct_delete%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -3 x 2011-10-18 00:00:00 -4 d 2003-12-01 05:01:03 -delete by primary key -DELETE FROM ta_l WHERE a = 3; -SHOW GLOBAL STATUS LIKE 'Spider_direct_delete%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -4 d 2003-12-01 05:01:03 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle2/r/direct_update_part.result b/storage/spider/mysql-test/spider/oracle2/r/direct_update_part.result deleted file mode 100644 index 8a22c40a0da..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/r/direct_update_part.result +++ /dev/null @@ -1,129 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -with partition test -CREATE TABLE ta_l2 ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1 -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 -update all rows with function -UPDATE ta_l2 SET c = ADDDATE(c, 1); -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 e 2007-06-05 20:03:11 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -update by primary key -UPDATE ta_l2 SET b = 'x' WHERE a = 3; -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 x 2007-06-05 20:03:11 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -update by a column without index -UPDATE ta_l2 SET c = '2011-10-17' WHERE b = 'x'; -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 x 2011-10-17 00:00:00 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -update by primary key with order and limit -UPDATE ta_l2 SET c = ADDDATE(c, 1) WHERE a < 4 ORDER BY b DESC LIMIT 1; -SHOW GLOBAL STATUS LIKE 'Spider_direct_update%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -2 b 2000-01-02 00:00:00 -3 x 2011-10-18 00:00:00 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -delete by primary key with order and limit -DELETE FROM ta_l2 WHERE a < 4 ORDER BY c LIMIT 1; -SHOW GLOBAL STATUS LIKE 'Spider_direct_delete%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -3 x 2011-10-18 00:00:00 -4 d 2003-12-01 05:01:03 -5 c 2002-01-01 23:59:59 -delete by a column without index -DELETE FROM ta_l2 WHERE b = 'c'; -SHOW GLOBAL STATUS LIKE 'Spider_direct_delete%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -3 x 2011-10-18 00:00:00 -4 d 2003-12-01 05:01:03 -delete by primary key -DELETE FROM ta_l2 WHERE a = 3; -SHOW GLOBAL STATUS LIKE 'Spider_direct_delete%'; -Variable_name Value -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-02 10:21:39 -4 d 2003-12-01 05:01:03 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle2/r/function.result b/storage/spider/mysql-test/spider/oracle2/r/function.result deleted file mode 100644 index 764c774514b..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/r/function.result +++ /dev/null @@ -1,149 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -in() -CREATE TABLE t1 ( -a VARCHAR(255), -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET3 MASTER_1_COMMENT_TEXT_PK1_1 -insert into t1 values ('1'); -insert into t1 select a + 1 from t1; -insert into t1 select a + 2 from t1; -insert into t1 select a + 4 from t1; -insert into t1 select a + 8 from t1; -insert into t1 select a + 16 from t1; -insert into t1 select a + 32 from t1; -insert into t1 select a + 64 from t1; -insert into t1 select a + 128 from t1; -insert into t1 select a + 256 from t1; -insert into t1 select a + 512 from t1; -flush tables; -select a from t1 where a in ('15', '120'); -a -120 -15 - -date_sub() -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -INSERT INTO ta_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 YEAR); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-08-01 10:21:39 -2 b 1999-01-01 00:00:00 -3 e 2006-06-04 20:03:11 -4 d 2002-11-30 05:01:03 -5 c 2000-12-31 23:59:59 -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 QUARTER); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-11-01 10:21:39 -2 b 1999-04-01 00:00:00 -3 e 2006-09-04 20:03:11 -4 d 2003-02-28 05:01:03 -5 c 2001-03-31 23:59:59 -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 MONTH); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-10-01 10:21:39 -2 b 1999-03-01 00:00:00 -3 e 2006-08-04 20:03:11 -4 d 2003-01-28 05:01:03 -5 c 2001-02-28 23:59:59 -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 WEEK); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-10-08 10:21:39 -2 b 1999-03-08 00:00:00 -3 e 2006-08-11 20:03:11 -4 d 2003-02-04 05:01:03 -5 c 2001-03-07 23:59:59 -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 DAY); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-10-07 10:21:39 -2 b 1999-03-07 00:00:00 -3 e 2006-08-10 20:03:11 -4 d 2003-02-03 05:01:03 -5 c 2001-03-06 23:59:59 -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 HOUR); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-10-07 11:21:39 -2 b 1999-03-07 01:00:00 -3 e 2006-08-10 21:03:11 -4 d 2003-02-03 06:01:03 -5 c 2001-03-07 00:59:59 -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 MINUTE); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-10-07 11:20:39 -2 b 1999-03-07 00:59:00 -3 e 2006-08-10 21:02:11 -4 d 2003-02-03 06:00:03 -5 c 2001-03-07 00:58:59 -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 SECOND); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2007-10-07 11:20:40 -2 b 1999-03-07 00:59:01 -3 e 2006-08-10 21:02:12 -4 d 2003-02-03 06:00:04 -5 c 2001-03-07 00:59:00 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle2/r/ha.result b/storage/spider/mysql-test/spider/oracle2/r/ha.result deleted file mode 100644 index 8ca64dec6df..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/r/ha.result +++ /dev/null @@ -1,240 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; -DROP DATABASE IF EXISTS auto_test_remote3; -CREATE DATABASE auto_test_remote3; -USE auto_test_remote3; -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; - -test select 1 -SELECT 1; -1 -1 - -create table test -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_2_1 -INSERT INTO ta_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); - -select test -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -fail-over test -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 0 -Spider_mon_table_cache_version_req 1 -INSERT INTO ta_l (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -ERROR HY000: Table 'SYSTEM.ta_r3' get a problem -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l 0 1 -auto_test_local ta_l 1 3 -SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -db_name table_name link_id -auto_test_local ta_l 1 -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 1 -Spider_mon_table_cache_version_req 1 -INSERT INTO ta_l (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 -6 e 2011-05-05 20:04:05 - -recovery test -ALTER TABLE ta_l -CONNECTION='host "xe", user "system", - password "oracle", msi "2", mkd "2", - database "SYSTEM", lst "0 2"'; -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l 0 1 -auto_test_local ta_l 1 2 -SELECT spider_copy_tables('ta_l', '0', '1'); -spider_copy_tables('ta_l', '0', '1') -1 -ALTER TABLE ta_l -CONNECTION='host "xe", user "system", - password "oracle", msi "2", mkd "2", - database "SYSTEM", lst "0 1"'; -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l 0 1 -auto_test_local ta_l 1 1 -INSERT INTO ta_l (a, b, c) VALUES -(8, 'g', '2011-05-05 21:33:30'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 -6 e 2011-05-05 20:04:05 -8 g 2011-05-05 21:33:30 -DROP TABLE ta_l; -SELECT spider_flush_table_mon_cache(); -spider_flush_table_mon_cache() -1 - -active standby test -create table test -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_AS_2_1 -INSERT INTO ta_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); - -select test -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -fail-over test -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 1 -Spider_mon_table_cache_version_req 2 -INSERT INTO ta_l (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -ERROR HY000: Table 'SYSTEM.ta_r' get a problem -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l 0 3 -auto_test_local ta_l 1 1 -SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -db_name table_name link_id -auto_test_local ta_l 1 -auto_test_local ta_l 0 -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 2 -Spider_mon_table_cache_version_req 2 -INSERT INTO ta_l (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -6 e 2011-05-05 20:04:05 - -recovery test -ALTER TABLE ta_l -CONNECTION='host "xe", user "system", - password "oracle", msi "2", mkd "2", alc "1", - database "SYSTEM", lst "1 0"'; -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l 0 1 -auto_test_local ta_l 1 1 -INSERT INTO ta_l (a, b, c) VALUES -(8, 'g', '2011-05-05 21:33:30'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -8 g 2011-05-05 21:33:30 -DROP TABLE ta_l; -SELECT spider_flush_table_mon_cache(); -spider_flush_table_mon_cache() -1 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -DROP DATABASE IF EXISTS auto_test_remote3; -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle2/r/ha_part.result b/storage/spider/mysql-test/spider/oracle2/r/ha_part.result deleted file mode 100644 index e11b6f695e0..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/r/ha_part.result +++ /dev/null @@ -1,262 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; -DROP DATABASE IF EXISTS auto_test_remote3; -CREATE DATABASE auto_test_remote3; -USE auto_test_remote3; -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; - -test select 1 -SELECT 1; -1 -1 - -create table with partition test -DROP TABLE IF EXISTS ta_l2; -CREATE TABLE ta_l2 ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_P_2_1 -INSERT INTO ta_l2 (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); - -select test -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -fail-over test -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 0 -Spider_mon_table_cache_version_req 1 -INSERT INTO ta_l2 (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -ERROR HY000: Table 'SYSTEM.ta_r4' get a problem -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l2#P#pt1 0 1 -auto_test_local ta_l2#P#pt1 1 1 -auto_test_local ta_l2#P#pt2 0 1 -auto_test_local ta_l2#P#pt2 1 3 -SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -db_name table_name link_id -auto_test_local ta_l2#P#pt2 1 -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 1 -Spider_mon_table_cache_version_req 1 -INSERT INTO ta_l2 (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 -6 e 2011-05-05 20:04:05 - -recovery test -ALTER TABLE ta_l2 -PARTITION BY KEY(a) ( -PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', -PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 2"' - ); -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l2#P#pt1 0 1 -auto_test_local ta_l2#P#pt1 1 1 -auto_test_local ta_l2#P#pt2 0 1 -auto_test_local ta_l2#P#pt2 1 2 -SELECT spider_copy_tables('ta_l2#P#pt2', '0', '1'); -spider_copy_tables('ta_l2#P#pt2', '0', '1') -1 -ALTER TABLE ta_l2 -PARTITION BY KEY(a) ( -PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', -PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "0 1"' - ); -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l2#P#pt1 0 1 -auto_test_local ta_l2#P#pt1 1 1 -auto_test_local ta_l2#P#pt2 0 1 -auto_test_local ta_l2#P#pt2 1 1 -INSERT INTO ta_l2 (a, b, c) VALUES -(8, 'g', '2011-05-05 21:33:30'), -(9, 'h', '2011-05-05 22:32:10'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 -6 e 2011-05-05 20:04:05 -8 g 2011-05-05 21:33:30 -9 h 2011-05-05 22:32:10 -DROP TABLE ta_l2; - -create table with partition test -DROP TABLE IF EXISTS ta_l2; -CREATE TABLE ta_l2 ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_AS_P_2_1 -INSERT INTO ta_l2 (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); - -select test -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -fail-over test -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 1 -Spider_mon_table_cache_version_req 1 -INSERT INTO ta_l2 (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -ERROR HY000: Table 'SYSTEM.ta_r2' get a problem -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l2#P#pt1 0 1 -auto_test_local ta_l2#P#pt1 1 1 -auto_test_local ta_l2#P#pt2 0 3 -auto_test_local ta_l2#P#pt2 1 1 -SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log; -db_name table_name link_id -auto_test_local ta_l2#P#pt2 1 -auto_test_local ta_l2#P#pt2 0 -SHOW GLOBAL STATUS LIKE 'Spider_mon_table_cache_version%'; -Variable_name Value -Spider_mon_table_cache_version 1 -Spider_mon_table_cache_version_req 1 -INSERT INTO ta_l2 (a, b, c) VALUES -(6, 'e', '2011-05-05 20:04:05'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -3 e 2007-06-04 20:03:11 -5 c 2001-12-31 23:59:59 -6 e 2011-05-05 20:04:05 - -recovery test -ALTER TABLE ta_l2 -PARTITION BY KEY(a) ( -PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3", - priority "1000"', -PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4", - priority "1000001", lst "1 0"' - ); -SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables -ORDER BY db_name, table_name, link_id; -db_name table_name link_id link_status -auto_test_local ta_l2#P#pt1 0 1 -auto_test_local ta_l2#P#pt1 1 1 -auto_test_local ta_l2#P#pt2 0 1 -auto_test_local ta_l2#P#pt2 1 1 -INSERT INTO ta_l2 (a, b, c) VALUES -(8, 'g', '2011-05-05 21:33:30'), -(9, 'h', '2011-05-05 22:32:10'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -3 e 2007-06-04 20:03:11 -5 c 2001-12-31 23:59:59 -8 g 2011-05-05 21:33:30 -9 h 2011-05-05 22:32:10 -DROP TABLE ta_l2; - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -DROP DATABASE IF EXISTS auto_test_remote3; -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_local; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle2/r/spider3_fixes.result b/storage/spider/mysql-test/spider/oracle2/r/spider3_fixes.result deleted file mode 100644 index dd6c8715648..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/r/spider3_fixes.result +++ /dev/null @@ -1,210 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for slave1_1 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -3.1 -auto_increment -DROP TABLE IF EXISTS t1, t2; -CREATE TABLE t1 ( -id int(11) NOT NULL AUTO_INCREMENT, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1 -CREATE TABLE t2 ( -id int(11) NOT NULL AUTO_INCREMENT, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1 -MASTER_1_AUTO_INCREMENT_INCREMENT2 -MASTER_1_AUTO_INCREMENT_OFFSET2 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -2 -SELECT MAX(id) FROM t1; -MAX(id) -2 -INSERT INTO t2 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -6 -SELECT MAX(id) FROM t2; -MAX(id) -6 -MASTER_1_AUTO_INCREMENT_OFFSET3 -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -10 -SELECT MAX(id) FROM t1; -MAX(id) -10 -MASTER_1_AUTO_INCREMENT_OFFSET4 -INSERT INTO t2 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -14 -SELECT MAX(id) FROM t2; -MAX(id) -14 -MASTER_1_AUTO_INCREMENT_OFFSET3 -INSERT INTO t1 () VALUES (),(),(),(); -Warnings: -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -18 -SELECT id FROM t1 ORDER BY id; -id -2 -6 -10 -14 -18 -22 -26 -30 -MASTER_1_AUTO_INCREMENT_OFFSET4 -INSERT INTO t2 () VALUES (),(),(),(); -Warnings: -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -34 -SELECT id FROM t2 ORDER BY id; -id -2 -6 -10 -14 -18 -22 -26 -30 -34 -38 -42 -46 -TRUNCATE TABLE t1; -TRUNCATE TABLE t2; -INSERT INTO t1 () VALUES (),(),(),(); -Warnings: -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -50 -SELECT id FROM t1 ORDER BY id; -id -50 -54 -58 -62 -INSERT INTO t2 () VALUES (),(),(),(); -Warnings: -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -66 -SELECT id FROM t2 ORDER BY id; -id -50 -54 -58 -62 -66 -70 -74 -78 -SET INSERT_ID=5000; -MASTER_1_AUTO_INCREMENT_OFFSET3 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -82 -SELECT MAX(id) FROM t1; -MAX(id) -82 -MASTER_1_AUTO_INCREMENT_OFFSET4 -INSERT INTO t2 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -86 -SELECT MAX(id) FROM t2; -MAX(id) -86 -INSERT INTO t1 (id) VALUES (10000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -90 -SELECT MAX(id) FROM t1; -MAX(id) -90 -INSERT INTO t2 (id) VALUES (1000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -94 -SELECT MAX(id) FROM t2; -MAX(id) -94 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for slave1_1 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle2/r/spider3_fixes_part.result b/storage/spider/mysql-test/spider/oracle2/r/spider3_fixes_part.result deleted file mode 100644 index 38875214eb8..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/r/spider3_fixes_part.result +++ /dev/null @@ -1,208 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for slave1_1 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 -auto_increment with partition -DROP TABLE IF EXISTS t1, t2; -CREATE TABLE t1 ( -id int(11) NOT NULL AUTO_INCREMENT, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1 -CREATE TABLE t2 ( -id int(11) NOT NULL AUTO_INCREMENT, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1 -MASTER_1_AUTO_INCREMENT_INCREMENT2 -MASTER_1_AUTO_INCREMENT_OFFSET2 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -3 -SELECT MAX(id) FROM t1; -MAX(id) -3 -INSERT INTO t2 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -7 -SELECT MAX(id) FROM t2; -MAX(id) -7 -MASTER_1_AUTO_INCREMENT_OFFSET3 -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -2 -SELECT MAX(id) FROM t1; -MAX(id) -7 -MASTER_1_AUTO_INCREMENT_OFFSET4 -INSERT INTO t2 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -6 -SELECT MAX(id) FROM t2; -MAX(id) -7 -MASTER_1_AUTO_INCREMENT_OFFSET3 -INSERT INTO t1 () VALUES (),(),(),(); -Warnings: -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -10 -SELECT id FROM t1 ORDER BY id; -id -2 -3 -6 -7 -10 -11 -14 -15 -MASTER_1_AUTO_INCREMENT_OFFSET4 -INSERT INTO t2 () VALUES (),(),(),(); -Warnings: -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -18 -SELECT id FROM t2 ORDER BY id; -id -2 -3 -6 -7 -10 -11 -14 -15 -18 -19 -22 -23 -TRUNCATE TABLE t1; -TRUNCATE TABLE t2; -INSERT INTO t1 () VALUES (),(),(),(); -Warnings: -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -26 -SELECT id FROM t1 ORDER BY id; -id -26 -27 -30 -31 -INSERT INTO t2 () VALUES (),(),(),(); -Warnings: -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -34 -SELECT id FROM t2 ORDER BY id; -id -26 -27 -30 -31 -34 -35 -38 -39 -SET INSERT_ID=5000; -MASTER_1_AUTO_INCREMENT_OFFSET3 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -42 -SELECT MAX(id) FROM t1; -MAX(id) -42 -MASTER_1_AUTO_INCREMENT_OFFSET4 -INSERT INTO t2 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -43 -SELECT MAX(id) FROM t2; -MAX(id) -43 -INSERT INTO t1 (id) VALUES (10000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -46 -SELECT MAX(id) FROM t1; -MAX(id) -46 -INSERT INTO t2 (id) VALUES (1000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -50 -SELECT MAX(id) FROM t2; -MAX(id) -50 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for slave1_1 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle2/r/spider_fixes.result b/storage/spider/mysql-test/spider/oracle2/r/spider_fixes.result deleted file mode 100644 index 5a41603c746..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/r/spider_fixes.result +++ /dev/null @@ -1,556 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for slave1_1 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -create table and insert -DROP TABLE IF EXISTS tb_l; -CREATE TABLE tb_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2 -INSERT INTO tb_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -INSERT INTO ta_l SELECT a, b, c FROM tb_l; - -2.13 -select table with "order by desc" and "<" -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -WHERE a < 5 ORDER BY a DESC LIMIT 3; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -4 d 2003-11-30 05:01:03 -3 e 2007-06-04 20:03:11 -2 b 2000-01-01 00:00:00 - -select table with "order by desc" and "<=" -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -WHERE a <= 5 ORDER BY a DESC LIMIT 3; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -5 c 2001-12-31 23:59:59 -4 d 2003-11-30 05:01:03 -3 e 2007-06-04 20:03:11 - -2.14 -update table with range scan and split_read -UPDATE ta_l SET c = '2000-02-02 00:00:00' WHERE a > 1; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-02-02 00:00:00 -3 e 2000-02-02 00:00:00 -4 d 2000-02-02 00:00:00 -5 c 2000-02-02 00:00:00 - -2.15 -select table with range scan -TRUNCATE TABLE ta_l; -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -a int(11) NOT NULL DEFAULT '0', -b char(1) DEFAULT NULL, -c datetime DEFAULT NULL, -PRIMARY KEY (a, b, c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT5_2_1 -INSERT INTO ta_l SELECT a, b, c FROM tb_l; -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b >= 'b' -AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b > 'b' -AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a >= 4 AND b = 'd' -AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a > 4 AND b = 'c' -AND c = '2001-12-31 23:59:59'; -a b c -5 c 2001-12-31 23:59:59 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b <= 'd' -AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b < 'e' -AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a <= 4 AND b = 'b' -AND c = '2000-01-01 00:00:00'; -a b c -2 b 2000-01-01 00:00:00 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a < 4 AND b = 'b' -AND c = '2000-01-01 00:00:00'; -a b c -2 b 2000-01-01 00:00:00 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b >= 'b' -AND b <= 'd' AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b > 'b' -AND b < 'e' AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a <= 4 AND a >= 1 -AND b >= 'b' AND c = '2003-11-30 05:01:03'; -a b c -4 d 2003-11-30 05:01:03 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a < 4 AND a > 1 -AND b >= 'b' AND c = '2000-01-01 00:00:00'; -a b c -2 b 2000-01-01 00:00:00 - -2.16 -auto_increment insert with trigger -CREATE TABLE ta_l_auto_inc ( -a INT AUTO_INCREMENT, -b CHAR(1) DEFAULT 'c', -c DATETIME DEFAULT '1999-10-10 10:10:10', -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT3_2_1 -CREATE TABLE tc_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2 -CREATE TRIGGER ins_ta_l_auto_inc AFTER INSERT ON ta_l_auto_inc FOR EACH ROW BEGIN INSERT INTO tc_l (a, b, c) VALUES (NEW.a, NEW.b, NEW.c); END;; -INSERT INTO ta_l_auto_inc (a, b, c) VALUES -(NULL, 's', '2008-12-31 20:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM tc_l ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 s 2008-12-31 20:59:59 - -2.17 -engine-condition-pushdown with "or" and joining -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l WHERE a = 1 OR a IN (SELECT a FROM tb_l); -a b date_format(c, '%Y-%m-%d %H:%i:%s') -1 a 2008-08-01 10:21:39 -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -2.23 -index merge -CREATE TABLE ta_l_int ( -a INT AUTO_INCREMENT, -b INT DEFAULT 10, -c INT DEFAULT 11, -PRIMARY KEY(a), -KEY idx1(b), -KEY idx2(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1 -INSERT INTO ta_l_int (a, b, c) VALUES (1, 2, 3); -INSERT INTO ta_l_int (a, b, c) SELECT a + 1, b + 1, c + 1 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 2, b + 2, c + 2 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 4, b + 4, c + 4 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 8, b + 8, c + 8 FROM ta_l_int; -SELECT a, b, c FROM ta_l_int force index(primary, idx1, idx2) -WHERE a = 5 OR b = 5 OR c = 5 ORDER BY a; -a b c -3 4 5 -4 5 6 -5 6 7 - -2.24 -index scan update without PK -DROP TABLE IF EXISTS ta_l_int; -CREATE TABLE ta_l_int ( -a INT NOT NULL, -b INT DEFAULT 10, -c INT DEFAULT 11, -KEY idx1(b), -KEY idx2(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1 -SELECT a, b, c FROM ta_l_int ORDER BY a; -a b c -1 2 3 -2 3 4 -3 4 5 -4 5 6 -5 6 7 -6 7 8 -7 8 9 -8 9 10 -9 10 11 -10 11 12 -11 12 13 -12 13 14 -13 14 15 -14 15 16 -15 16 17 -16 17 18 -INSERT INTO ta_l_int (a, b, c) VALUES (0, 2, 3); -INSERT INTO ta_l_int (a, b, c) VALUES (18, 2, 3); -UPDATE ta_l_int SET c = 4 WHERE b = 2; -SELECT a, b, c FROM ta_l_int ORDER BY a; -a b c -0 2 4 -1 2 4 -2 3 4 -3 4 5 -4 5 6 -5 6 7 -6 7 8 -7 8 9 -8 9 10 -9 10 11 -10 11 12 -11 12 13 -12 13 14 -13 14 15 -14 15 16 -15 16 17 -16 17 18 -18 2 4 - -2.25 -direct order limit -SHOW GLOBAL STATUS LIKE 'Spider_direct_order_limit%'; -Variable_name Value -Spider_direct_order_limit 0 -SELECT a, b, c FROM ta_l_int ORDER BY a LIMIT 3; -a b c -1 2 4 -2 3 4 -3 4 5 -SHOW GLOBAL STATUS LIKE 'Spider_direct_order_limit%'; -Variable_name Value -Spider_direct_order_limit 0 - -2.26 -lock tables -DROP TABLE IF EXISTS t1; -DROP TABLE IF EXISTS t2; -CREATE TABLE t1 ( -id int(11) NOT NULL, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_LOCK1 -CREATE TABLE t2 ( -id int(11) NOT NULL, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_LOCK2 -LOCK TABLES t1 READ, t2 READ; -UNLOCK TABLES; - -auto_increment -DROP TABLE IF EXISTS t1; -CREATE TABLE t1 ( -id int(11) NOT NULL AUTO_INCREMENT, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1 -MASTER_1_AUTO_INCREMENT_INCREMENT2 -MASTER_1_AUTO_INCREMENT_OFFSET2 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -2 -SELECT MAX(id) FROM t1; -MAX(id) -2 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -6 -SELECT MAX(id) FROM t1; -MAX(id) -6 -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -10 -SELECT MAX(id) FROM t1; -MAX(id) -10 -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -14 -SELECT MAX(id) FROM t1; -MAX(id) -14 -INSERT INTO t1 () VALUES (),(),(),(); -Warnings: -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -18 -SELECT id FROM t1 ORDER BY id; -id -2 -6 -10 -14 -18 -22 -26 -30 -SET INSERT_ID=5000; -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -34 -SELECT MAX(id) FROM t1; -MAX(id) -34 -INSERT INTO t1 (id) VALUES (10000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -38 -SELECT MAX(id) FROM t1; -MAX(id) -38 -INSERT INTO t1 (id) VALUES (1000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -42 -SELECT MAX(id) FROM t1; -MAX(id) -42 - -read only -DROP TABLE IF EXISTS t1; -CREATE TABLE t1 ( -id int(11) NOT NULL, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_READONLY1_1 -SELECT id FROM t1 ORDER BY id; -id -2 -6 -10 -14 -18 -22 -26 -30 -34 -38 -42 -INSERT INTO t1 (id) VALUES (1); -ERROR HY000: Table 'auto_test_local.t1' is read only -UPDATE t1 SET id = 4 WHERE id = 2; -ERROR HY000: Table 'auto_test_local.t1' is read only -DELETE FROM t1 WHERE id = 2; -ERROR HY000: Table 'auto_test_local.t1' is read only -DELETE FROM t1; -ERROR HY000: Table 'auto_test_local.t1' is read only -TRUNCATE t1; -ERROR HY000: Table 'auto_test_local.t1' is read only - -2.27 -error mode -DROP TABLE IF EXISTS t1; -CREATE TABLE t1 ( -id int(11) NOT NULL, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_ERROR_MODE1_1 -SELECT id FROM t1 ORDER BY id; -id -Warnings: -Error 12712 Error from Oracle -1 942 ORA-00942: ??????????????? - -Error 12712 Oracle error -Error 12712 Error from Oracle -1 942 ORA-00942: ??????????????? - -Error 12712 Oracle error -INSERT INTO t1 (id) VALUES (1); -Warnings: -Error 12712 Error from Oracle -1 942 ORA-00942: ??????????????? - -Error 12712 Oracle error -DELETE FROM t1; -Warnings: -Error 12712 Error from Oracle -1 942 ORA-00942: ??????????????? - -Error 12712 Oracle error -TRUNCATE t1; -Warnings: -Error 12712 Error from Oracle -1 942 ORA-00942: ??????????????? - -Error 12712 Oracle error - -3.0 -is null -DROP TABLE IF EXISTS t1; -CREATE TABLE t1 ( -a VARCHAR(255), -b VARCHAR(255), -c VARCHAR(255), -KEY idx1(a,b), -KEY idx2(b), -PRIMARY KEY(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_TEXT_KEY1_1 -insert into t1 values (null, null, '2048'); -insert into t1 values ('1', '1', '1'); -insert into t1 select a + 1, b + 1, c + 1 from t1; -insert into t1 select a + 2, b + 2, c + 2 from t1; -insert into t1 select a + 4, b + 4, c + 4 from t1; -insert into t1 select a + 8, b + 8, c + 8 from t1; -insert into t1 select a + 16, b + 16, c + 16 from t1; -insert into t1 select a + 32, b + 32, c + 32 from t1; -insert into t1 select a + 64, b + 64, c + 64 from t1; -insert into t1 select a + 128, b + 128, c + 128 from t1; -insert into t1 select a + 256, b + 256, c + 256 from t1; -insert into t1 select a + 512, b + 512, c + 512 from t1; -flush tables; -select a from t1 where a is null order by a limit 30; -a -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -select b from t1 where b is null order by b limit 30; -b -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL - -direct_order_limit -TRUNCATE TABLE t1; -insert into t1 values ('1', '1', '1'); -insert into t1 select a + 1, b + 1, c + 1 from t1; -insert into t1 select a + 2, b + 2, c + 2 from t1; -insert into t1 select a + 4, b + 4, c + 4 from t1; -insert into t1 select a + 8, b + 8, c + 8 from t1; -insert into t1 select a + 16, b + 16, c + 16 from t1; -insert into t1 select a, b + 32, c + 32 from t1; -insert into t1 select a, b + 64, c + 64 from t1; -insert into t1 select a, b + 128, c + 128 from t1; -flush tables; -select a, b, c from t1 where a = '10' and b <> '100' order by c desc limit 5; -a b c -10 74 74 -10 42 42 -10 234 234 -10 202 202 -10 170 170 -select a, c from t1 where a = '10' order by b desc limit 5; -a c -10 74 -10 42 -10 234 -10 202 -10 170 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for slave1_1 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle2/r/spider_fixes_part.result b/storage/spider/mysql-test/spider/oracle2/r/spider_fixes_part.result deleted file mode 100644 index 20a5ca1812b..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/r/spider_fixes_part.result +++ /dev/null @@ -1,203 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 -for slave1_1 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 -DROP TABLE IF EXISTS tb_l; -CREATE TABLE tb_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2 -INSERT INTO tb_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); - -2.17 -partition with sort -CREATE TABLE ta_l2 ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1 -INSERT INTO ta_l2 SELECT a, b, c FROM tb_l; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 WHERE a > 1 -ORDER BY a; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -2 b 2000-01-01 00:00:00 -3 e 2007-06-04 20:03:11 -4 d 2003-11-30 05:01:03 -5 c 2001-12-31 23:59:59 - -2.23 -partition update with moving partition -DROP TABLE IF EXISTS ta_l2; -CREATE TABLE ta_l2 ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1 -INSERT INTO ta_l2 (a, b, c) VALUES (3, 'B', '2010-09-26 00:00:00'); -UPDATE ta_l2 SET a = 4 WHERE a = 3; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2; -a b date_format(c, '%Y-%m-%d %H:%i:%s') -4 B 2010-09-26 00:00:00 -index merge with partition -DROP TABLE IF EXISTS ta_l_int; -CREATE TABLE ta_l_int ( -a INT AUTO_INCREMENT, -b INT DEFAULT 10, -c INT DEFAULT 11, -PRIMARY KEY(a), -KEY idx1(b), -KEY idx2(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT3_P_2_1 -INSERT INTO ta_l_int (a, b, c) VALUES (1, 2, 3); -INSERT INTO ta_l_int (a, b, c) SELECT a + 1, b + 1, c + 1 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 2, b + 2, c + 2 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 4, b + 4, c + 4 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 8, b + 8, c + 8 FROM ta_l_int; -SELECT a, b, c FROM ta_l_int force index(primary, idx1, idx2) -WHERE a = 5 OR b = 5 OR c = 5 ORDER BY a; -a b c -3 4 5 -4 5 6 -5 6 7 - -2.26 -auto_increment with partition -DROP TABLE IF EXISTS t1; -CREATE TABLE t1 ( -id int(11) NOT NULL AUTO_INCREMENT, -PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1 -MASTER_1_AUTO_INCREMENT_INCREMENT2 -MASTER_1_AUTO_INCREMENT_OFFSET2 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_1"\'; exception when others then null; end;', '', 'srv "s_2_1"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_1" START WITH 2 INCREMENT BY 4', '', 'srv "s_2_1"') -1 -spider_direct_sql('begin execute immediate \'DROP SEQUENCE "seq_t1_2"\'; exception when others then null; end;', '', 'srv "s_2_2"') -1 -spider_direct_sql('CREATE SEQUENCE "seq_t1_2" START WITH 3 INCREMENT BY 4', '', 'srv "s_2_2"') -1 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -3 -SELECT MAX(id) FROM t1; -MAX(id) -3 -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -2 -SELECT MAX(id) FROM t1; -MAX(id) -3 -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -7 -SELECT MAX(id) FROM t1; -MAX(id) -7 -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -6 -SELECT MAX(id) FROM t1; -MAX(id) -7 -INSERT INTO t1 () VALUES (),(),(),(); -Warnings: -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -10 -SELECT id FROM t1 ORDER BY id; -id -2 -3 -6 -7 -10 -11 -14 -15 -SET INSERT_ID=5000; -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -18 -SELECT MAX(id) FROM t1; -MAX(id) -18 -INSERT INTO t1 (id) VALUES (10000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -22 -SELECT MAX(id) FROM t1; -MAX(id) -22 -INSERT INTO t1 (id) VALUES (1000); -SELECT LAST_INSERT_ID(); -LAST_INSERT_ID() -26 -SELECT MAX(id) FROM t1; -MAX(id) -26 - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for slave1_1 -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle2/r/vp_fixes.result b/storage/spider/mysql-test/spider/oracle2/r/vp_fixes.result deleted file mode 100644 index 15dd29aa4d3..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/r/vp_fixes.result +++ /dev/null @@ -1,80 +0,0 @@ -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -drop and create databases -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -CREATE DATABASE auto_test_remote; -USE auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -CREATE DATABASE auto_test_remote2; -USE auto_test_remote2; - -test select 1 -SELECT 1; -1 -1 - -create table and insert -DROP TABLE IF EXISTS tb_l; -CREATE TABLE tb_l ( -a INT, -b CHAR(1), -c DATETIME, -PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2 -INSERT INTO tb_l (a, b, c) VALUES -(1, 'a', '2008-08-01 10:21:39'), -(2, 'b', '2000-01-01 00:00:00'), -(3, 'e', '2007-06-04 20:03:11'), -(4, 'd', '2003-11-30 05:01:03'), -(5, 'c', '2001-12-31 23:59:59'); -DROP TABLE IF EXISTS ta_l; -CREATE TABLE ta_l ( -PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -INSERT INTO ta_l SELECT a, b, c FROM tb_l; - -0.9 -create different primary key table -CREATE TABLE ta_l_int ( -a INT DEFAULT 10, -b INT AUTO_INCREMENT, -c INT DEFAULT 11, -PRIMARY KEY(b) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1 -INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3); -create un-correspond primary key table -DROP TABLE IF EXISTS ta_l_int; -CREATE TABLE ta_l_int ( -a INT DEFAULT 10, -b INT DEFAULT 12, -c INT DEFAULT 11, -PRIMARY KEY(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1 -INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3); - -deinit -DROP DATABASE IF EXISTS auto_test_local; -DROP DATABASE IF EXISTS auto_test_remote; -DROP DATABASE IF EXISTS auto_test_remote2; -for master_1 -for child2 -child2_1 -child2_2 -child2_3 -for child3 -child3_1 -child3_2 -child3_3 - -end of test diff --git a/storage/spider/mysql-test/spider/oracle2/t/basic_sql.test b/storage/spider/mysql-test/spider/oracle2/t/basic_sql.test deleted file mode 100644 index 6421198fa95..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/basic_sql.test +++ /dev/null @@ -1,2701 +0,0 @@ -# This test tests by executing basic SQL ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo create table select test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS tb_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2; -eval CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2; ---enable_query_log -INSERT INTO tb_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -SELECT a, b, c FROM tb_l; -if ($MASTER_1_MERGE) -{ - --error ER_WRONG_OBJECT - eval CREATE TABLE ta_l ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1 - SELECT a, b, c FROM tb_l; - eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; - INSERT INTO ta_l SELECT a, b, c FROM tb_l; -} -if (!$MASTER_1_MERGE) -{ - eval CREATE TABLE ta_l ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1 - SELECT a, b, c FROM tb_l; -} ---enable_query_log -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo create table ignore select test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l; -DROP TABLE IF EXISTS tb_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2; -eval CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2; ---enable_query_log -INSERT INTO tb_l (a, b, c) VALUES - (1, 'f', '2008-07-01 10:21:39'), - (2, 'g', '2000-02-01 00:00:00'), - (3, 'j', '2007-05-04 20:03:11'), - (4, 'i', '2003-10-30 05:01:03'), - (5, 'h', '2001-10-31 23:59:59'); ---disable_query_log -echo CREATE TABLE ta_l ( - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -IGNORE SELECT a, b, c FROM tb_l; -if ($MASTER_1_MERGE) -{ - --error ER_WRONG_OBJECT - eval CREATE TABLE ta_l ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1 - IGNORE SELECT a, b, c FROM tb_l; - eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; - INSERT IGNORE INTO ta_l SELECT a, b, c FROM tb_l; -} -if (!$MASTER_1_MERGE) -{ - eval CREATE TABLE ta_l ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1 - IGNORE SELECT a, b, c FROM tb_l; -} ---enable_query_log -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo create table ignore select test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1 -REPLACE SELECT a, b, c FROM tb_l; -if ($MASTER_1_MERGE) -{ - --error ER_WRONG_OBJECT - eval CREATE TABLE ta_l ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1 - REPLACE SELECT a, b, c FROM tb_l; - eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; - REPLACE INTO ta_l SELECT a, b, c FROM tb_l; -} -if (!$MASTER_1_MERGE) -{ - eval CREATE TABLE ta_l ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1 - REPLACE SELECT a, b, c FROM tb_l; -} ---enable_query_log -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%replace %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo create no index table -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES3; - echo CHILD2_1_CREATE_TABLES3; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES3; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES3; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l_no_idx; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l_no_idx -MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT2_2_1 -SELECT a, b, c FROM tb_l; -if ($MASTER_1_NEEDPK) -{ - --error ER_REQUIRES_PRIMARY_KEY - eval CREATE TABLE ta_l_no_idx - $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT2_2_1 - SELECT a, b, c FROM tb_l; - eval CREATE TABLE ta_l_no_idx ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT2_2_1; - INSERT INTO ta_l_no_idx SELECT a, b, c FROM tb_l; -} -if (!$MASTER_1_NEEDPK) -{ - if ($MASTER_1_MERGE) - { - --error ER_WRONG_OBJECT - eval CREATE TABLE ta_l_no_idx - $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT2_2_1 - SELECT a, b, c FROM tb_l; - eval CREATE TABLE ta_l_no_idx ( - a INT, - b CHAR(1), - c DATETIME - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT2_2_1; - INSERT INTO ta_l_no_idx SELECT a, b, c FROM tb_l; - } - if (!$MASTER_1_MERGE) - { - eval CREATE TABLE ta_l_no_idx - $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT2_2_1 - SELECT a, b, c FROM tb_l; - } -} ---enable_query_log -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_TABLES3; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l_no_idx ORDER BY a; - ---echo ---echo select table -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select table shared mode -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a -LOCK IN SHARE MODE; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select table for update -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a -FOR UPDATE; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select table join -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a.a, a.b, date_format(b.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a, tb_l b -WHERE a.a = b.a ORDER BY a.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select table straight_join -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT STRAIGHT_JOIN a.a, a.b, date_format(b.c, '%Y-%m-%d %H:%i:%s') -FROM ta_l a, tb_l b WHERE a.a = b.a ORDER BY a.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select sql_small_result -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT SQL_SMALL_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select sql_big_result -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT SQL_BIG_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select sql_buffer_result -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT SQL_BUFFER_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select sql_cache -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT SQL_CACHE a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select sql_no_cache -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT SQL_NO_CACHE a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select sql_calc_found_rows -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT SQL_CALC_FOUND_ROWS a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a LIMIT 4; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_ps2_protocol -SELECT found_rows(); ---enable_ps2_protocol - ---echo ---echo select high_priority -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT HIGH_PRIORITY a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select distinct -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT DISTINCT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select count -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT count(*) FROM ta_l ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select table join not use index -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM tb_l a WHERE -EXISTS (SELECT * FROM ta_l b WHERE b.b = a.b) ORDER BY a.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select using pushdown -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a WHERE -a.b = 'g' ORDER BY a.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select using index and pushdown -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a WHERE -a.a > 0 AND a.b = 'g' ORDER BY a.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo insert ---connection master_1 -TRUNCATE TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo insert select ---connection master_1 -TRUNCATE TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT INTO ta_l (a, b, c) SELECT a, b, c FROM tb_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo insert select a ---connection master_1 -TRUNCATE TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT INTO ta_l (a, b, c) VALUES ((SELECT a FROM tb_l ORDER BY a LIMIT 1), -'e', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo insert low_priority ---connection master_1 -TRUNCATE TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT LOW_PRIORITY INTO ta_l (a, b, c) values (2, 'e', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo insert high_priority ---connection master_1 -TRUNCATE TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT HIGH_PRIORITY INTO ta_l (a, b, c) VALUES (2, 'e', -'2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo insert ignore -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT IGNORE INTO ta_l (a, b, c) VALUES (2, 'd', '2009-02-02 01:01:01'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo insert update (insert) ---connection master_1 -TRUNCATE TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59') ON DUPLICATE -KEY UPDATE b = 'f', c = '2005-08-08 11:11:11'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%update %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo insert update (update) -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59') ON DUPLICATE -KEY UPDATE b = 'f', c = '2005-08-08 11:11:11'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%update %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo replace ---connection master_1 -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -REPLACE INTO ta_l (a, b, c) VALUES (2, 'f', '2008-02-02 02:02:02'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'replace %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo replace select -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -REPLACE INTO ta_l (a, b, c) SELECT a, b, c FROM tb_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'replace %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo replace select a -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -REPLACE INTO ta_l (a, b, c) VALUES ((SELECT a FROM tb_l ORDER BY a LIMIT 1), -'e', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'replace %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo replace low_priority -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -REPLACE LOW_PRIORITY INTO ta_l (a, b, c) VALUES (3, 'g', -'2009-03-03 03:03:03'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'replace %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l SET b = 'f', c = '2008-02-02 02:02:02' WHERE a = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update select -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l SET b = 'g', c = '2009-03-03 03:03:03' WHERE a IN (SELECT a FROM -tb_l); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update select a -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l SET b = 'h', c = '2010-04-04 04:04:04' WHERE a = (SELECT a FROM -tb_l ORDER BY a LIMIT 1); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update join -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l a, tb_l b SET a.b = b.b, a.c = b.c WHERE a.a = b.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update join a -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l a, tb_l b SET a.b = 'g', a.c = '2009-03-03 03:03:03' WHERE -a.a = b.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update low_priority -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE LOW_PRIORITY ta_l SET b = 'f', c = '2008-02-02 02:02:02' WHERE a = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update ignore -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE IGNORE ta_l SET a = 1, b = 'g', c = '2009-03-03 03:03:03' WHERE a = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update pushdown -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -update ta_l set b = 'j', c = '2009-03-03 03:03:03' where b = 'f'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo update index pushdown -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l SET b = 'g', c = '2009-03-03 03:03:03' WHERE a > 0 AND b = 'j'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE FROM ta_l WHERE a = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete all -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE FROM ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete select -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE FROM ta_l WHERE a IN (SELECT a FROM tb_l); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete select a -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE FROM ta_l WHERE a = (SELECT a FROM tb_l ORDER BY a LIMIT 1); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete join -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE a FROM ta_l a, (SELECT a FROM tb_l ORDER BY a) b WHERE a.a = b.a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete low_priority -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE LOW_PRIORITY FROM ta_l WHERE a = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete ignore -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE IGNORE FROM ta_l WHERE a = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete quick -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE QUICK FROM ta_l WHERE a = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete pushdown -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE FROM ta_l WHERE b = 'e'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo delete index pushdown -TRUNCATE TABLE ta_l; -INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'), -(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'), -(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'), -(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'), -(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'), -(10, 'j', '2008-01-01 23:59:59'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -DELETE FROM ta_l WHERE a > 0 AND b = 'e'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo truncate -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -TRUNCATE TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE 'truncate %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle2/t/basic_sql_part.test b/storage/spider/mysql-test/spider/oracle2/t/basic_sql_part.test deleted file mode 100644 index e1638642ab7..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/basic_sql_part.test +++ /dev/null @@ -1,571 +0,0 @@ -# This test tests by executing basic SQL ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log -if (!$HAVE_PARTITION) -{ - --disable_query_log - --disable_result_log - --source test_deinit.inc - --enable_result_log - --enable_query_log - --enable_warnings - skip Test requires partitioning; -} - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS tb_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2; -eval CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2; ---enable_query_log -INSERT INTO tb_l (a, b, c) VALUES - (1, 'f', '2008-07-01 10:21:39'), - (2, 'g', '2000-02-01 00:00:00'), - (3, 'j', '2007-05-04 20:03:11'), - (4, 'i', '2003-10-30 05:01:03'), - (5, 'h', '2001-10-31 23:59:59'); - ---echo ---echo create table with partition and select test -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES2; - echo CHILD2_1_CREATE_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - --disable_query_log - echo CREATE TABLE ta_l2 ( - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_COMMENT_P_2_1 - SELECT a, b, c FROM tb_l; - if ($MASTER_1_MERGE) - { - --error ER_WRONG_OBJECT - eval CREATE TABLE ta_l2 ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_COMMENT_P_2_1 - SELECT a, b, c FROM tb_l; - eval CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_COMMENT_P_2_1; - INSERT INTO ta_l2 SELECT a, b, c FROM tb_l; - } - if (!$MASTER_1_MERGE) - { - eval CREATE TABLE ta_l2 ( - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_COMMENT_P_2_1 - SELECT a, b, c FROM tb_l; - } - --enable_query_log - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -} - ---echo ---echo select partition using pushdown -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 a WHERE - a.b = 'g' ORDER BY a.a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - ---echo ---echo select partition using index pushdown -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 a WHERE - a.a > 0 AND a.b = 'g' ORDER BY a.a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - ---echo ---echo update partition pushdown -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - UPDATE ta_l2 SET b = 'e', c = '2009-03-03 03:03:03' WHERE b = 'j'; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -} - ---echo ---echo update partition index pushdown -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - UPDATE ta_l2 SET b = 'j', c = '2009-03-03 03:03:03' WHERE a > 0 AND b = 'e'; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'update %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -} - ---echo ---echo delete partition pushdown -if ($HAVE_PARTITION) -{ - TRUNCATE TABLE ta_l2; - INSERT INTO ta_l2 SELECT a, b, c FROM tb_l; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - DELETE FROM ta_l2 WHERE b = 'g'; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -} - ---echo ---echo delete partition index pushdown -if ($HAVE_PARTITION) -{ - TRUNCATE TABLE ta_l2; - INSERT INTO ta_l2 SELECT a, b, c FROM tb_l; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - DELETE FROM ta_l2 WHERE a > 0 AND b = 'g'; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE 'delete %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; -} - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle2/t/connect_child2_1.inc b/storage/spider/mysql-test/spider/oracle2/t/connect_child2_1.inc deleted file mode 100644 index cd9b0c9ca9b..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/connect_child2_1.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (child2_1, localhost, root, , , $CHILD2_1_MYPORT, $CHILD2_1_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle2/t/connect_child2_2.inc b/storage/spider/mysql-test/spider/oracle2/t/connect_child2_2.inc deleted file mode 100644 index e145f66b630..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/connect_child2_2.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (child2_2, localhost, root, , , $CHILD2_2_MYPORT, $CHILD2_2_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle2/t/connect_child2_3.inc b/storage/spider/mysql-test/spider/oracle2/t/connect_child2_3.inc deleted file mode 100644 index d356348d8ea..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/connect_child2_3.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (child2_3, localhost, root, , , $CHILD2_3_MYPORT, $CHILD2_3_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle2/t/connect_child3_1.inc b/storage/spider/mysql-test/spider/oracle2/t/connect_child3_1.inc deleted file mode 100644 index 03e5c188c89..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/connect_child3_1.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (child3_1, localhost, root, , , $CHILD3_1_MYPORT, $CHILD3_1_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle2/t/connect_child3_2.inc b/storage/spider/mysql-test/spider/oracle2/t/connect_child3_2.inc deleted file mode 100644 index d62a7ada824..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/connect_child3_2.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (child3_2, localhost, root, , , $CHILD3_2_MYPORT, $CHILD3_2_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle2/t/connect_child3_3.inc b/storage/spider/mysql-test/spider/oracle2/t/connect_child3_3.inc deleted file mode 100644 index fb49f5bfdac..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/connect_child3_3.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (child3_3, localhost, root, , , $CHILD3_3_MYPORT, $CHILD3_3_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle2/t/connect_master_1.inc b/storage/spider/mysql-test/spider/oracle2/t/connect_master_1.inc deleted file mode 100644 index 0c129ce5775..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/connect_master_1.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (master_1, localhost, root, , , $MASTER_1_MYPORT, $MASTER_1_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle2/t/connect_slave1_1.inc b/storage/spider/mysql-test/spider/oracle2/t/connect_slave1_1.inc deleted file mode 100644 index 45a822743e0..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/connect_slave1_1.inc +++ /dev/null @@ -1 +0,0 @@ ---connect (slave1_1, localhost, root, , , $SLAVE1_1_MYPORT, $SLAVE1_1_MYSOCK) diff --git a/storage/spider/mysql-test/spider/oracle2/t/direct_aggregate.test b/storage/spider/mysql-test/spider/oracle2/t/direct_aggregate.test deleted file mode 100644 index ca96d4bd41f..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/direct_aggregate.test +++ /dev/null @@ -1,181 +0,0 @@ ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo create table select test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1; -eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; ---enable_query_log -INSERT INTO ta_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - ---echo ---echo direct_aggregating test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_ps2_protocol -eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; -SELECT COUNT(*) FROM ta_l; -eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; -SELECT MAX(a) FROM ta_l; -eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; -SELECT MIN(a) FROM ta_l; -eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; -SELECT MAX(a) FROM ta_l WHERE a < 5; -eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; -SELECT MIN(a) FROM ta_l WHERE a > 1; -eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; ---enable_ps2_protocol -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%handler %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle2/t/direct_aggregate_part.test b/storage/spider/mysql-test/spider/oracle2/t/direct_aggregate_part.test deleted file mode 100644 index d6d4623afc5..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/direct_aggregate_part.test +++ /dev/null @@ -1,194 +0,0 @@ ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log -if (!$HAVE_PARTITION) -{ - --disable_query_log - --disable_result_log - --source test_deinit.inc - --enable_result_log - --enable_query_log - --enable_warnings - skip Test requires partitioning; -} - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo with partition test -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES2; - echo CHILD2_1_CREATE_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - --disable_query_log - echo CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1; - eval CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_COMMENT2_P_2_1; - INSERT INTO ta_l2 (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - --enable_query_log - --disable_ps2_protocol - eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; - SELECT COUNT(*) FROM ta_l2; - eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; - SELECT MAX(a) FROM ta_l2; - eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; - SELECT MIN(a) FROM ta_l2; - eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; - SELECT MAX(a) FROM ta_l2 WHERE a < 5; - eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; - SELECT MIN(a) FROM ta_l2 WHERE a > 1; - eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS; - --enable_ps2_protocol - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%handler %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%handler %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle2/t/direct_update.test b/storage/spider/mysql-test/spider/oracle2/t/direct_update.test deleted file mode 100644 index e0901062201..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/direct_update.test +++ /dev/null @@ -1,198 +0,0 @@ ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo create table select test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1; -eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; ---enable_query_log -INSERT INTO ta_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - ---echo ---echo direct_updating test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; ---echo update all rows with function -UPDATE ta_l SET c = ADDDATE(c, 1); -eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; ---echo update by primary key -UPDATE ta_l SET b = 'x' WHERE a = 3; -eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; ---echo update by a column without index -UPDATE ta_l SET c = '2011-10-17' WHERE b = 'x'; -eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; ---echo update by primary key with order and limit -UPDATE ta_l SET c = ADDDATE(c, 1) WHERE a < 4 ORDER BY b DESC LIMIT 1; -eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; ---echo delete by primary key with order and limit -DELETE FROM ta_l WHERE a < 4 ORDER BY c LIMIT 1; -eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; ---echo delete by a column without index -DELETE FROM ta_l WHERE b = 'c'; -eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; ---echo delete by primary key -DELETE FROM ta_l WHERE a = 3; -eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS; -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%handler %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle2/t/direct_update_part.test b/storage/spider/mysql-test/spider/oracle2/t/direct_update_part.test deleted file mode 100644 index 95e2e2ab0d5..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/direct_update_part.test +++ /dev/null @@ -1,211 +0,0 @@ ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log -if (!$HAVE_PARTITION) -{ - --disable_query_log - --disable_result_log - --source test_deinit.inc - --enable_result_log - --enable_query_log - --enable_warnings - skip Test requires partitioning; -} - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo with partition test -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES2; - echo CHILD2_1_CREATE_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - --disable_query_log - echo CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1; - eval CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_COMMENT2_P_2_1; - INSERT INTO ta_l2 (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - --enable_query_log - eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - --echo update all rows with function - UPDATE ta_l2 SET c = ADDDATE(c, 1); - eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - --echo update by primary key - UPDATE ta_l2 SET b = 'x' WHERE a = 3; - eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - --echo update by a column without index - UPDATE ta_l2 SET c = '2011-10-17' WHERE b = 'x'; - eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - --echo update by primary key with order and limit - UPDATE ta_l2 SET c = ADDDATE(c, 1) WHERE a < 4 ORDER BY b DESC LIMIT 1; - eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - --echo delete by primary key with order and limit - DELETE FROM ta_l2 WHERE a < 4 ORDER BY c LIMIT 1; - eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - --echo delete by a column without index - DELETE FROM ta_l2 WHERE b = 'c'; - eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - --echo delete by primary key - DELETE FROM ta_l2 WHERE a = 3; - eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%handler %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%handler %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle2/t/function.test b/storage/spider/mysql-test/spider/oracle2/t/function.test deleted file mode 100644 index ec2eeab9c94..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/function.test +++ /dev/null @@ -1,253 +0,0 @@ -# This test tests for using functions ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo in() -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_result_log - } - --disable_query_log - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_1_DROP_TEXT_PK_TABLES1; - echo CHILD2_1_CREATE_TEXT_PK_TABLES1; - } - --disable_warnings - eval $CHILD2_1_DROP_TEXT_PK_TABLES1; - --enable_warnings - eval $CHILD2_1_CREATE_TEXT_PK_TABLES1; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } -} ---connection master_1 ---disable_query_log -echo CREATE TABLE t1 ( - a VARCHAR(255), - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET3 MASTER_1_COMMENT_TEXT_PK1_1; -eval CREATE TABLE t1 ( - a VARCHAR(255), - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET3 $MASTER_1_COMMENT_TEXT_PK1_1; ---enable_query_log -insert into t1 values ('1'); -insert into t1 select a + 1 from t1; -insert into t1 select a + 2 from t1; -insert into t1 select a + 4 from t1; -insert into t1 select a + 8 from t1; -insert into t1 select a + 16 from t1; -insert into t1 select a + 32 from t1; -insert into t1 select a + 64 from t1; -insert into t1 select a + 128 from t1; -insert into t1 select a + 256 from t1; -insert into t1 select a + 512 from t1; -flush tables; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -select a from t1 where a in ('15', '120'); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TEXT_PK_TABLES1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo date_sub() -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1; -eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; ---enable_query_log -INSERT INTO ta_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 YEAR); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 QUARTER); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 MONTH); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 WEEK); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 DAY); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 HOUR); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 MINUTE); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 SECOND); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%update %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle2/t/ha.test b/storage/spider/mysql-test/spider/oracle2/t/ha.test deleted file mode 100644 index 00dcf776836..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/ha.test +++ /dev/null @@ -1,882 +0,0 @@ -# This test tests for ha features -if ($USE_HA_TEST) -{ ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---source ha_test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; - --connection child2_3 - DROP DATABASE IF EXISTS auto_test_remote3; - CREATE DATABASE auto_test_remote3; - USE auto_test_remote3; -} -if ($USE_CHILD_GROUP3) -{ - --connection child3_1 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; - --connection child3_2 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; - --connection child3_3 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - --connection child2_3 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - SELECT 1; - --connection child3_2 - SELECT 1; - --connection child3_3 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo create table test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_2_1; - --enable_warnings - eval $CHILD3_1_CREATE_TABLES_HA_2_1; - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_2_1; - --enable_warnings - eval $CHILD3_2_CREATE_TABLES_HA_2_1; - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_2_1; - --enable_warnings - eval $CHILD3_3_CREATE_TABLES_HA_2_1; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_2_1; -eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_HA_2_1; ---enable_query_log -INSERT INTO ta_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - ---echo ---echo select test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo fail-over test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_HA_DROP_TABLES; - } - --disable_warnings - eval $CHILD2_2_HA_DROP_TABLES; - --enable_warnings - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -eval $MASTER_1_CHECK_HA_STATUS; ---error 12511 -INSERT INTO ta_l (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); -eval $MASTER_1_CHECK_LINK_STATUS; -eval $MASTER_1_CHECK_LINK_FAILED_LOG; -eval $MASTER_1_CHECK_HA_STATUS; -INSERT INTO ta_l (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_CHECK_LINK_STATUS; - eval $CHILD3_1_CHECK_LINK_FAILED_LOG; - --connection child3_2 - eval $CHILD3_2_CHECK_LINK_STATUS; - eval $CHILD3_2_CHECK_LINK_FAILED_LOG; - --connection child3_3 - eval $CHILD3_3_CHECK_LINK_STATUS; - eval $CHILD3_3_CHECK_LINK_FAILED_LOG; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo recovery test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_HA_CREATE_TABLES; - } - eval $CHILD2_2_HA_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_SET_RECOVERY_STATUS_2_1; - eval $CHILD3_1_CHECK_LINK_STATUS; - --connection child3_2 - eval $CHILD3_2_SET_RECOVERY_STATUS_2_1; - eval $CHILD3_2_CHECK_LINK_STATUS; - --connection child3_3 - eval $CHILD3_3_SET_RECOVERY_STATUS_2_1; - eval $CHILD3_3_CHECK_LINK_STATUS; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -eval $MASTER_1_SET_RECOVERY_STATUS_2_1; -eval $MASTER_1_CHECK_LINK_STATUS; -eval $MASTER_1_COPY_TABLES_2_1; -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_SET_OK_STATUS_2_1; - eval $CHILD3_1_CHECK_LINK_STATUS; - --connection child3_2 - eval $CHILD3_2_SET_OK_STATUS_2_1; - eval $CHILD3_2_CHECK_LINK_STATUS; - --connection child3_3 - eval $CHILD3_3_SET_OK_STATUS_2_1; - eval $CHILD3_3_CHECK_LINK_STATUS; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -eval $MASTER_1_SET_OK_STATUS_2_1; -eval $MASTER_1_CHECK_LINK_STATUS; -INSERT INTO ta_l (a, b, c) VALUES - (8, 'g', '2011-05-05 21:33:30'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -DROP TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_2_1; - --enable_warnings - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_2_1; - --enable_warnings - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_2_1; - --enable_warnings - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} - ---connection master_1 ---disable_ps2_protocol -eval $MASTER_1_CHANGE_HA_MON; ---enable_ps2_protocol - ---echo ---echo active standby test ---echo create table test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_2_1; - --enable_warnings - eval $CHILD3_1_CREATE_TABLES_HA_AS_2_1; - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_2_1; - --enable_warnings - eval $CHILD3_2_CREATE_TABLES_HA_AS_2_1; - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_2_1; - --enable_warnings - eval $CHILD3_3_CREATE_TABLES_HA_AS_2_1; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_AS_2_1; -eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_HA_AS_2_1; ---enable_query_log -INSERT INTO ta_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - ---echo ---echo select test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo fail-over test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_HA_AS_DROP_TABLES; - } - --disable_warnings - eval $CHILD2_1_HA_AS_DROP_TABLES; - --enable_warnings - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -eval $MASTER_1_CHECK_HA_STATUS; ---error 12511 -INSERT INTO ta_l (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); -eval $MASTER_1_CHECK_LINK_STATUS; -eval $MASTER_1_CHECK_LINK_FAILED_LOG; -eval $MASTER_1_CHECK_HA_STATUS; -INSERT INTO ta_l (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_CHECK_LINK_STATUS; - eval $CHILD3_1_CHECK_LINK_FAILED_LOG; - --connection child3_2 - eval $CHILD3_2_CHECK_LINK_STATUS; - eval $CHILD3_2_CHECK_LINK_FAILED_LOG; - --connection child3_3 - eval $CHILD3_3_CHECK_LINK_STATUS; - eval $CHILD3_3_CHECK_LINK_FAILED_LOG; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo recovery test -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_HA_AS_CREATE_TABLES; - } - eval $CHILD2_1_HA_AS_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_SET_OK_STATUS_AS_2_1; - eval $CHILD3_1_CHECK_LINK_STATUS; - --connection child3_2 - eval $CHILD3_2_SET_OK_STATUS_AS_2_1; - eval $CHILD3_2_CHECK_LINK_STATUS; - --connection child3_3 - eval $CHILD3_3_SET_OK_STATUS_AS_2_1; - eval $CHILD3_3_CHECK_LINK_STATUS; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -eval $MASTER_1_SET_OK_STATUS_AS_2_1; -eval $MASTER_1_CHECK_LINK_STATUS; -INSERT INTO ta_l (a, b, c) VALUES - (8, 'g', '2011-05-05 21:33:30'); -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; -DROP TABLE ta_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_2_1; - --enable_warnings - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_2_1; - --enable_warnings - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_2_1; - --enable_warnings - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} - ---connection master_1 ---disable_ps2_protocol -eval $MASTER_1_CHANGE_HA_MON; ---enable_ps2_protocol - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - --connection child2_3 - DROP DATABASE IF EXISTS auto_test_remote3; -} -if ($USE_CHILD_GROUP3) -{ - --connection child3_1 - DROP DATABASE IF EXISTS auto_test_local; - --connection child3_2 - DROP DATABASE IF EXISTS auto_test_local; - --connection child3_3 - DROP DATABASE IF EXISTS auto_test_local; -} ---disable_query_log ---disable_result_log ---source ha_test_deinit.inc ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings -} ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle2/t/ha_part.test b/storage/spider/mysql-test/spider/oracle2/t/ha_part.test deleted file mode 100644 index 72ddcfd1f10..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/ha_part.test +++ /dev/null @@ -1,1017 +0,0 @@ -# This test tests for ha features -if ($USE_HA_TEST) -{ ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---source ha_test_init.inc ---enable_result_log ---enable_query_log -if (!$HAVE_PARTITION) -{ - --disable_query_log - --disable_result_log - --source ha_test_deinit.inc - --source test_deinit.inc - --enable_result_log - --enable_query_log - --enable_warnings - skip Test requires partitioning; -} - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; - --connection child2_3 - DROP DATABASE IF EXISTS auto_test_remote3; - CREATE DATABASE auto_test_remote3; - USE auto_test_remote3; -} -if ($USE_CHILD_GROUP3) -{ - --connection child3_1 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; - --connection child3_2 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; - --connection child3_3 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - --connection child2_3 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} -if ($USE_CHILD_GROUP3) -{ - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - SELECT 1; - --connection child3_2 - SELECT 1; - --connection child3_3 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } -} - -if ($HAVE_PARTITION) -{ - --echo - --echo create table with partition test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_DROP_TABLES2; - echo CHILD2_1_CREATE_TABLES; - echo CHILD2_1_CREATE_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - eval $CHILD2_1_DROP_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - eval $CHILD2_1_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_3_DROP_TABLES; - echo CHILD2_3_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_3_DROP_TABLES; - --enable_warnings - eval $CHILD2_3_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_P_2_1; - --enable_warnings - eval $CHILD3_1_CREATE_TABLES_HA_P_2_1; - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_P_2_1; - --enable_warnings - eval $CHILD3_2_CREATE_TABLES_HA_P_2_1; - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_P_2_1; - --enable_warnings - eval $CHILD3_3_CREATE_TABLES_HA_P_2_1; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - --disable_warnings - DROP TABLE IF EXISTS ta_l2; - --enable_warnings - --disable_query_log - echo CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_P_2_1; - eval CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_HA_P_2_1; - --enable_query_log - INSERT INTO ta_l2 (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - - --echo - --echo select test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - eval $CHILD2_1_SELECT_TABLES2; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_3 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_3_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - - --echo - --echo fail-over test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_3_HA_DROP_TABLES; - } - --disable_warnings - eval $CHILD2_3_HA_DROP_TABLES; - --enable_warnings - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - eval $MASTER_1_CHECK_HA_STATUS; - --error 12511 - INSERT INTO ta_l2 (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); - eval $MASTER_1_CHECK_LINK_STATUS; - eval $MASTER_1_CHECK_LINK_FAILED_LOG; - eval $MASTER_1_CHECK_HA_STATUS; - INSERT INTO ta_l2 (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - eval $CHILD2_1_SELECT_TABLES2; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_CHECK_LINK_STATUS; - eval $CHILD3_1_CHECK_LINK_FAILED_LOG; - --connection child3_2 - eval $CHILD3_2_CHECK_LINK_STATUS; - eval $CHILD3_2_CHECK_LINK_FAILED_LOG; - --connection child3_3 - eval $CHILD3_3_CHECK_LINK_STATUS; - eval $CHILD3_3_CHECK_LINK_FAILED_LOG; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } - - --echo - --echo recovery test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_3_HA_CREATE_TABLES; - } - eval $CHILD2_3_HA_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_SET_RECOVERY_STATUS_P_2_1; - eval $CHILD3_1_CHECK_LINK_STATUS; - --connection child3_2 - eval $CHILD3_2_SET_RECOVERY_STATUS_P_2_1; - eval $CHILD3_2_CHECK_LINK_STATUS; - --connection child3_3 - eval $CHILD3_3_SET_RECOVERY_STATUS_P_2_1; - eval $CHILD3_3_CHECK_LINK_STATUS; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - eval $MASTER_1_SET_RECOVERY_STATUS_P_2_1; - eval $MASTER_1_CHECK_LINK_STATUS; - eval $MASTER_1_COPY_TABLES_P_2_1; - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_SET_OK_STATUS_P_2_1; - eval $CHILD3_1_CHECK_LINK_STATUS; - --connection child3_2 - eval $CHILD3_2_SET_OK_STATUS_P_2_1; - eval $CHILD3_2_CHECK_LINK_STATUS; - --connection child3_3 - eval $CHILD3_3_SET_OK_STATUS_P_2_1; - eval $CHILD3_3_CHECK_LINK_STATUS; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - eval $MASTER_1_SET_OK_STATUS_P_2_1; - eval $MASTER_1_CHECK_LINK_STATUS; - INSERT INTO ta_l2 (a, b, c) VALUES - (8, 'g', '2011-05-05 21:33:30'), - (9, 'h', '2011-05-05 22:32:10'); - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - DROP TABLE ta_l2; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - eval $CHILD2_1_SELECT_TABLES2; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_3 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_3_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_P_2_1; - --enable_warnings - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_P_2_1; - --enable_warnings - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_P_2_1; - --enable_warnings - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } -} - -if ($HAVE_PARTITION) -{ - --echo - --echo create table with partition test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_DROP_TABLES2; - echo CHILD2_1_CREATE_TABLES; - echo CHILD2_1_CREATE_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - eval $CHILD2_1_DROP_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - eval $CHILD2_1_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_3_DROP_TABLES; - echo CHILD2_3_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_3_DROP_TABLES; - --enable_warnings - eval $CHILD2_3_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_P_2_1; - --enable_warnings - eval $CHILD3_1_CREATE_TABLES_HA_AS_P_2_1; - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_P_2_1; - --enable_warnings - eval $CHILD3_2_CREATE_TABLES_HA_AS_P_2_1; - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_P_2_1; - --enable_warnings - eval $CHILD3_3_CREATE_TABLES_HA_AS_P_2_1; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - --disable_warnings - DROP TABLE IF EXISTS ta_l2; - --enable_warnings - --disable_query_log - echo CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_AS_P_2_1; - eval CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_HA_AS_P_2_1; - --enable_query_log - INSERT INTO ta_l2 (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - - --echo - --echo select test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - eval $CHILD2_1_SELECT_TABLES2; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_3 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_3_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - - --echo - --echo fail-over test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_HA_AS_DROP_TABLES2; - } - --disable_warnings - eval $CHILD2_1_HA_AS_DROP_TABLES2; - --enable_warnings - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - eval $MASTER_1_CHECK_HA_STATUS; - --error 12511 - INSERT INTO ta_l2 (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); - eval $MASTER_1_CHECK_LINK_STATUS; - eval $MASTER_1_CHECK_LINK_FAILED_LOG; - eval $MASTER_1_CHECK_HA_STATUS; - INSERT INTO ta_l2 (a, b, c) VALUES - (6, 'e', '2011-05-05 20:04:05'); - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_3 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_3_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_CHECK_LINK_STATUS; - eval $CHILD3_1_CHECK_LINK_FAILED_LOG; - --connection child3_2 - eval $CHILD3_2_CHECK_LINK_STATUS; - eval $CHILD3_2_CHECK_LINK_FAILED_LOG; - --connection child3_3 - eval $CHILD3_3_CHECK_LINK_STATUS; - eval $CHILD3_3_CHECK_LINK_FAILED_LOG; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } - - --echo - --echo recovery test - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_HA_AS_CREATE_TABLES2; - } - eval $CHILD2_1_HA_AS_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_3 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - eval $CHILD3_1_SET_OK_STATUS_AS_P_2_1; - eval $CHILD3_1_CHECK_LINK_STATUS; - --connection child3_2 - eval $CHILD3_2_SET_OK_STATUS_AS_P_2_1; - eval $CHILD3_2_CHECK_LINK_STATUS; - --connection child3_3 - eval $CHILD3_3_SET_OK_STATUS_AS_P_2_1; - eval $CHILD3_3_CHECK_LINK_STATUS; - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - eval $MASTER_1_SET_OK_STATUS_AS_P_2_1; - eval $MASTER_1_CHECK_LINK_STATUS; - INSERT INTO ta_l2 (a, b, c) VALUES - (8, 'g', '2011-05-05 21:33:30'), - (9, 'h', '2011-05-05 22:32:10'); - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a; - DROP TABLE ta_l2; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES; - eval $CHILD2_1_SELECT_TABLES2; - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_3 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_3_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - if ($USE_CHILD_GROUP3) - { - if (!$OUTPUT_CHILD_GROUP3) - { - --disable_query_log - --disable_result_log - } - --connection child3_1 - --disable_warnings - eval $CHILD3_1_DROP_TABLES_HA_P_2_1; - --enable_warnings - --connection child3_2 - --disable_warnings - eval $CHILD3_2_DROP_TABLES_HA_P_2_1; - --enable_warnings - --connection child3_3 - --disable_warnings - eval $CHILD3_3_DROP_TABLES_HA_P_2_1; - --enable_warnings - if (!$OUTPUT_CHILD_GROUP3) - { - --enable_query_log - --enable_result_log - } - } -} - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - --connection child2_3 - DROP DATABASE IF EXISTS auto_test_remote3; -} -if ($USE_CHILD_GROUP3) -{ - --connection child3_1 - DROP DATABASE IF EXISTS auto_test_local; - --connection child3_2 - DROP DATABASE IF EXISTS auto_test_local; - --connection child3_3 - DROP DATABASE IF EXISTS auto_test_local; -} ---disable_query_log ---disable_result_log ---source ha_test_deinit.inc ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings -} ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle2/t/ha_test_deinit.inc b/storage/spider/mysql-test/spider/oracle2/t/ha_test_deinit.inc deleted file mode 100644 index 53d0409d066..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/ha_test_deinit.inc +++ /dev/null @@ -1,30 +0,0 @@ -# get connection and exist engine test ---echo for master_1 ---connection master_1 ---source ../include/ha_deinit_master_1.inc ---echo for child2 -if ($USE_CHILD_GROUP2) -{ - --echo child2_1 - --connection child2_1 - --source ../include/ha_deinit_child2_1.inc - --echo child2_2 - --connection child2_2 - --source ../include/ha_deinit_child2_2.inc - --echo child2_3 - --connection child2_3 - --source ../include/ha_deinit_child2_3.inc -} ---echo for child3 -if ($USE_CHILD_GROUP3) -{ - --echo child3_1 - --connection child3_1 - --source ../include/ha_deinit_child3_1.inc - --echo child3_2 - --connection child3_2 - --source ../include/ha_deinit_child3_2.inc - --echo child3_3 - --connection child3_3 - --source ../include/ha_deinit_child3_3.inc -} diff --git a/storage/spider/mysql-test/spider/oracle2/t/ha_test_init.inc b/storage/spider/mysql-test/spider/oracle2/t/ha_test_init.inc deleted file mode 100644 index 70576ab16dc..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/ha_test_init.inc +++ /dev/null @@ -1,30 +0,0 @@ -# get connection and exist engine test ---echo for master_1 ---connection master_1 ---source ../include/ha_init_master_1.inc ---echo for child2 -if ($USE_CHILD_GROUP2) -{ - --echo child2_1 - --connection child2_1 - --source ../include/ha_init_child2_1.inc - --echo child2_2 - --connection child2_2 - --source ../include/ha_init_child2_2.inc - --echo child2_3 - --connection child2_3 - --source ../include/ha_init_child2_3.inc -} ---echo for child3 -if ($USE_CHILD_GROUP3) -{ - --echo child3_1 - --connection child3_1 - --source ../include/ha_init_child3_1.inc - --echo child3_2 - --connection child3_2 - --source ../include/ha_init_child3_2.inc - --echo child3_3 - --connection child3_3 - --source ../include/ha_init_child3_3.inc -} diff --git a/storage/spider/mysql-test/spider/oracle2/t/have_engine.inc b/storage/spider/mysql-test/spider/oracle2/t/have_engine.inc deleted file mode 100644 index 64bef7499cb..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/have_engine.inc +++ /dev/null @@ -1,7 +0,0 @@ -if (!`SELECT count(*) FROM information_schema.engines WHERE - (support = 'YES' OR support = 'DEFAULT') AND - engine = '$TEST_ENGINE_TYPE'`) -{ - SELECT engine, support FROM information_schema.engines; - --let $SKIP_REASON= "Need $TEST_ENGINE_TYPE engine" -} diff --git a/storage/spider/mysql-test/spider/oracle2/t/have_func.inc b/storage/spider/mysql-test/spider/oracle2/t/have_func.inc deleted file mode 100644 index e0823e73fc8..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/have_func.inc +++ /dev/null @@ -1,5 +0,0 @@ -if (!`SELECT count(*) FROM mysql.func WHERE name = '$TEST_FUNC_NAME'`) -{ - SELECT name FROM mysql.func; - --let $SKIP_REASON= "Need $TEST_FUNC_NAME function" -} diff --git a/storage/spider/mysql-test/spider/oracle2/t/have_partition.inc b/storage/spider/mysql-test/spider/oracle2/t/have_partition.inc deleted file mode 100644 index b6e699475db..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/have_partition.inc +++ /dev/null @@ -1,7 +0,0 @@ -let $HAVE_PARTITION= 0; -if (`SELECT count(*) FROM information_schema.plugins WHERE - plugin_status = 'ACTIVE' AND - plugin_name = 'partition'`) -{ - let $HAVE_PARTITION= 1; -} diff --git a/storage/spider/mysql-test/spider/oracle2/t/have_trigger.inc b/storage/spider/mysql-test/spider/oracle2/t/have_trigger.inc deleted file mode 100644 index 32de484b388..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/have_trigger.inc +++ /dev/null @@ -1,2 +0,0 @@ -let $HAVE_TRIGGER= `SELECT COUNT(*) FROM information_schema.tables - WHERE TABLE_SCHEMA = 'information_schema' AND TABLE_NAME = 'TRIGGERS'`; diff --git a/storage/spider/mysql-test/spider/oracle2/t/hs_test_deinit.inc b/storage/spider/mysql-test/spider/oracle2/t/hs_test_deinit.inc deleted file mode 100644 index 7ec2e981fd2..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/hs_test_deinit.inc +++ /dev/null @@ -1,17 +0,0 @@ -# get connection and exist engine test ---echo for master_1 ---connection master_1 ---source ../include/hs_deinit_master_1.inc ---echo for child2 -if ($USE_CHILD_GROUP2) -{ - --echo child2_1 - --connection child2_1 - --source ../include/hs_deinit_child2_1.inc - --echo child2_2 - --connection child2_2 - --source ../include/hs_deinit_child2_2.inc - --echo child2_3 - --connection child2_3 - --source ../include/hs_deinit_child2_3.inc -} diff --git a/storage/spider/mysql-test/spider/oracle2/t/hs_test_init.inc b/storage/spider/mysql-test/spider/oracle2/t/hs_test_init.inc deleted file mode 100644 index 831bf479524..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/hs_test_init.inc +++ /dev/null @@ -1,17 +0,0 @@ -# get connection and exist engine test ---echo for master_1 ---connection master_1 ---source ../include/hs_init_master_1.inc ---echo for child2 -if ($USE_CHILD_GROUP2) -{ - --echo child2_1 - --connection child2_1 - --source ../include/hs_init_child2_1.inc - --echo child2_2 - --connection child2_2 - --source ../include/hs_init_child2_2.inc - --echo child2_3 - --connection child2_3 - --source ../include/hs_init_child2_3.inc -} diff --git a/storage/spider/mysql-test/spider/oracle2/t/slave_test_deinit.inc b/storage/spider/mysql-test/spider/oracle2/t/slave_test_deinit.inc deleted file mode 100644 index e9d99b7a960..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/slave_test_deinit.inc +++ /dev/null @@ -1,6 +0,0 @@ -# get connection and exist engine test ---echo for slave1_1 ---connection slave1_1 -STOP SLAVE; ---source ../include/deinit_slave1_1.inc ---disconnect slave1_1 diff --git a/storage/spider/mysql-test/spider/oracle2/t/slave_test_init.inc b/storage/spider/mysql-test/spider/oracle2/t/slave_test_init.inc deleted file mode 100644 index 739d88970c5..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/slave_test_init.inc +++ /dev/null @@ -1,44 +0,0 @@ -# get connection and exist engine test ---echo for slave1_1 ---source connect_slave1_1.inc ---connection slave1_1 -SET SESSION sql_log_bin= 0; ---let $SLAVE1_1_SERVER_ID=`SELECT @@global.server_id` ---let $TEST_ENGINE_TYPE= $SLAVE1_1_ENGINE_TYPE ---source have_partition.inc ---source have_trigger.inc ---source ../include/init_slave1_1.inc ---source have_engine.inc ---let $SLAVE1_1_SLAVE_STATUS=`SHOW SLAVE STATUS` -if (!$SLAVE1_1_SLAVE_STATUS) -{ - eval CHANGE MASTER TO - MASTER_HOST = '127.0.0.1', - MASTER_USER = 'root', - MASTER_PASSWORD = '', - MASTER_PORT = $MASTER_1_MYPORT - ; -} -START SLAVE; ---connection master_1 -call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); ---connection slave1_1 -call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); - --connection child2_2 - call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); - --connection child2_3 - call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); -} -if ($USE_CHILD_GROUP3) -{ - --connection child3_1 - call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); - --connection child3_2 - call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); - --connection child3_3 - call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT"); -} diff --git a/storage/spider/mysql-test/spider/oracle2/t/spider3_fixes.test b/storage/spider/mysql-test/spider/oracle2/t/spider3_fixes.test deleted file mode 100644 index 13fa6f5fa39..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/spider3_fixes.test +++ /dev/null @@ -1,292 +0,0 @@ -# This test tests for Spider 3.0's bug fixes -source include/have_log_bin.inc; ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---source slave_test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - - ---echo ---echo 3.1 ---echo auto_increment -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_INCREMENT_TABLES1; - echo CHILD2_1_CREATE_INCREMENT_TABLES1; - echo CHILD2_1_AUTO_INCREMENT_INCREMENT2; - echo CHILD2_1_AUTO_INCREMENT_OFFSET2; - } - --disable_warnings - eval $CHILD2_1_DROP_INCREMENT_TABLES1; - --enable_warnings - eval $CHILD2_1_CREATE_INCREMENT_TABLES1; - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT2; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -if ($USE_REPLICATION) -{ - save_master_pos; - --connection slave1_1 - sync_with_master; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log -} ---disable_warnings -DROP TABLE IF EXISTS t1, t2; ---enable_warnings ---disable_query_log -echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1; -echo CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1; -echo MASTER_1_AUTO_INCREMENT_INCREMENT2; -echo MASTER_1_AUTO_INCREMENT_OFFSET2; -eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_1; -eval CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_1; -eval $MASTER_1_AUTO_INCREMENT_INCREMENT2; -eval $MASTER_1_AUTO_INCREMENT_OFFSET2; -if ($USE_REPLICATION) -{ - SET SESSION sql_log_bin= 1; - --connection slave1_1 - --disable_warnings - DROP TABLE IF EXISTS t1, t2; - --enable_warnings - echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_1; - echo CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_1; - eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_1; - eval CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_1; - --connection master_1 -} ---enable_query_log -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t2 () VALUES (); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t2; ---disable_query_log -echo MASTER_1_AUTO_INCREMENT_OFFSET3; -eval $MASTER_1_AUTO_INCREMENT_OFFSET3; ---enable_query_log -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; ---disable_query_log -echo MASTER_1_AUTO_INCREMENT_OFFSET4; -eval $MASTER_1_AUTO_INCREMENT_OFFSET4; ---enable_query_log -INSERT INTO t2 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t2; ---disable_query_log -echo MASTER_1_AUTO_INCREMENT_OFFSET3; -eval $MASTER_1_AUTO_INCREMENT_OFFSET3; ---enable_query_log -INSERT INTO t1 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -SELECT id FROM t1 ORDER BY id; ---disable_query_log -echo MASTER_1_AUTO_INCREMENT_OFFSET4; -eval $MASTER_1_AUTO_INCREMENT_OFFSET4; ---enable_query_log -INSERT INTO t2 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -SELECT id FROM t2 ORDER BY id; -TRUNCATE TABLE t1; -TRUNCATE TABLE t2; -INSERT INTO t1 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -SELECT id FROM t1 ORDER BY id; -INSERT INTO t2 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -SELECT id FROM t2 ORDER BY id; -SET INSERT_ID=5000; ---disable_query_log -echo MASTER_1_AUTO_INCREMENT_OFFSET3; -eval $MASTER_1_AUTO_INCREMENT_OFFSET3; ---enable_query_log -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; ---disable_query_log -echo MASTER_1_AUTO_INCREMENT_OFFSET4; -eval $MASTER_1_AUTO_INCREMENT_OFFSET4; ---enable_query_log -INSERT INTO t2 () VALUES (); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t2; -INSERT INTO t1 (id) VALUES (10000); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t2 (id) VALUES (1000); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t2; -if ($USE_REPLICATION) -{ - save_master_pos; - --connection slave1_1 - sync_with_master; - SELECT id FROM t1 ORDER BY id; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log -} -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_INCREMENT_TABLES1; - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_AUTO_INCREMENT_INCREMENT1; - echo CHILD2_1_AUTO_INCREMENT_OFFSET1; - } - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT1; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET1; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source slave_test_deinit.inc ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle2/t/spider3_fixes_part.test b/storage/spider/mysql-test/spider/oracle2/t/spider3_fixes_part.test deleted file mode 100644 index 3288c490a46..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/spider3_fixes_part.test +++ /dev/null @@ -1,345 +0,0 @@ -# This test tests for Spider 3.0's bug fixes -source include/have_log_bin.inc; ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---source slave_test_init.inc ---enable_result_log ---enable_query_log -if (!$HAVE_PARTITION) -{ - --disable_query_log - --disable_result_log - --source slave_test_deinit.inc - --source test_deinit.inc - --enable_result_log - --enable_query_log - --enable_warnings - skip Test requires partitioning; -} - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - - ---echo auto_increment with partition -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_INCREMENT_TABLES1; - echo CHILD2_1_CREATE_INCREMENT_TABLES1; - echo CHILD2_1_AUTO_INCREMENT_INCREMENT2; - echo CHILD2_1_AUTO_INCREMENT_OFFSET2; - } - --disable_warnings - eval $CHILD2_1_DROP_INCREMENT_TABLES1; - --enable_warnings - eval $CHILD2_1_CREATE_INCREMENT_TABLES1; - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT2; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_INCREMENT_TABLES1; - echo CHILD2_2_CREATE_INCREMENT_TABLES1; - echo CHILD2_2_AUTO_INCREMENT_INCREMENT2; - echo CHILD2_2_AUTO_INCREMENT_OFFSET2; - } - --disable_warnings - eval $CHILD2_2_DROP_INCREMENT_TABLES1; - --enable_warnings - eval $CHILD2_2_CREATE_INCREMENT_TABLES1; - eval $CHILD2_2_AUTO_INCREMENT_INCREMENT2; - eval $CHILD2_2_AUTO_INCREMENT_OFFSET2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - if ($USE_REPLICATION) - { - save_master_pos; - --connection slave1_1 - sync_with_master; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log - } - --disable_warnings - DROP TABLE IF EXISTS t1, t2; - --enable_warnings - --disable_query_log - echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1; - echo CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1; - echo MASTER_1_AUTO_INCREMENT_INCREMENT2; - echo MASTER_1_AUTO_INCREMENT_OFFSET2; - eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_P_1; - eval CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_P_1; - eval $MASTER_1_AUTO_INCREMENT_INCREMENT2; - eval $MASTER_1_AUTO_INCREMENT_OFFSET2; - if ($USE_REPLICATION) - { - SET SESSION sql_log_bin= 1; - --connection slave1_1 - --disable_warnings - DROP TABLE IF EXISTS t1, t2; - --enable_warnings - echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_P_1; - echo CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_P_1; - eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_P_1; - eval CREATE TABLE t2 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_P_1; - --connection master_1 - } - --enable_query_log - INSERT INTO t1 () VALUES (); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t2 () VALUES (); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t2; - --disable_query_log - echo MASTER_1_AUTO_INCREMENT_OFFSET3; - eval $MASTER_1_AUTO_INCREMENT_OFFSET3; - --enable_query_log - INSERT INTO t1 (id) VALUES (null); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - --disable_query_log - echo MASTER_1_AUTO_INCREMENT_OFFSET4; - eval $MASTER_1_AUTO_INCREMENT_OFFSET4; - --enable_query_log - INSERT INTO t2 (id) VALUES (null); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t2; - --disable_query_log - echo MASTER_1_AUTO_INCREMENT_OFFSET3; - eval $MASTER_1_AUTO_INCREMENT_OFFSET3; - --enable_query_log - INSERT INTO t1 () VALUES (),(),(),(); - SELECT LAST_INSERT_ID(); - SELECT id FROM t1 ORDER BY id; - --disable_query_log - echo MASTER_1_AUTO_INCREMENT_OFFSET4; - eval $MASTER_1_AUTO_INCREMENT_OFFSET4; - --enable_query_log - INSERT INTO t2 () VALUES (),(),(),(); - SELECT LAST_INSERT_ID(); - SELECT id FROM t2 ORDER BY id; - TRUNCATE TABLE t1; - TRUNCATE TABLE t2; - INSERT INTO t1 () VALUES (),(),(),(); - SELECT LAST_INSERT_ID(); - SELECT id FROM t1 ORDER BY id; - INSERT INTO t2 () VALUES (),(),(),(); - SELECT LAST_INSERT_ID(); - SELECT id FROM t2 ORDER BY id; - SET INSERT_ID=5000; - --disable_query_log - echo MASTER_1_AUTO_INCREMENT_OFFSET3; - eval $MASTER_1_AUTO_INCREMENT_OFFSET3; - --enable_query_log - INSERT INTO t1 () VALUES (); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - --disable_query_log - echo MASTER_1_AUTO_INCREMENT_OFFSET4; - eval $MASTER_1_AUTO_INCREMENT_OFFSET4; - --enable_query_log - INSERT INTO t2 () VALUES (); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t2; - INSERT INTO t1 (id) VALUES (10000); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t2 (id) VALUES (1000); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t2; - if ($USE_REPLICATION) - { - save_master_pos; - --connection slave1_1 - sync_with_master; - SELECT id FROM t1 ORDER BY id; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log - } - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_INCREMENT_TABLES1; - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_AUTO_INCREMENT_INCREMENT1; - echo CHILD2_1_AUTO_INCREMENT_OFFSET1; - } - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT1; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET1; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_2_SELECT_INCREMENT_TABLES1; - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_AUTO_INCREMENT_INCREMENT1; - echo CHILD2_2_AUTO_INCREMENT_OFFSET1; - } - eval $CHILD2_2_AUTO_INCREMENT_INCREMENT1; - eval $CHILD2_2_AUTO_INCREMENT_OFFSET1; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source slave_test_deinit.inc ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle2/t/spider_fixes.test b/storage/spider/mysql-test/spider/oracle2/t/spider_fixes.test deleted file mode 100644 index cfca9a04e6b..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/spider_fixes.test +++ /dev/null @@ -1,1425 +0,0 @@ -# This test tests for Spider's bug fixes -source include/have_log_bin.inc; ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---source slave_test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo create table and insert -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS tb_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2; -eval CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2; ---enable_query_log -INSERT INTO tb_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1; -eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; ---enable_query_log -INSERT INTO ta_l SELECT a, b, c FROM tb_l; - ---echo ---echo 2.13 ---echo select table with "order by desc" and "<" -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_ps2_protocol -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -WHERE a < 5 ORDER BY a DESC LIMIT 3; ---enable_ps2_protocol -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo select table with "order by desc" and "<=" -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_ps2_protocol -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l -WHERE a <= 5 ORDER BY a DESC LIMIT 3; ---enable_ps2_protocol -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo 2.14 ---echo update table with range scan and split_read -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l SET c = '2000-02-02 00:00:00' WHERE a > 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a; - ---echo ---echo 2.15 ---echo select table with range scan -TRUNCATE TABLE ta_l; ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES6; - echo CHILD2_1_CREATE_TABLES6; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES6; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES6; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } -} ---connection master_1 ---disable_query_log -echo CREATE TABLE ta_l ( - a int(11) NOT NULL DEFAULT '0', - b char(1) DEFAULT NULL, - c datetime DEFAULT NULL, - PRIMARY KEY (a, b, c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT5_2_1; -eval CREATE TABLE ta_l ( - a int(11) NOT NULL DEFAULT '0', - b char(1) DEFAULT NULL, - c datetime DEFAULT NULL, - PRIMARY KEY (a, b, c) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT5_2_1; ---enable_query_log -INSERT INTO ta_l SELECT a, b, c FROM tb_l; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b >= 'b' -AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b > 'b' -AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a >= 4 AND b = 'd' -AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a > 4 AND b = 'c' -AND c = '2001-12-31 23:59:59'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b <= 'd' -AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b < 'e' -AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a <= 4 AND b = 'b' -AND c = '2000-01-01 00:00:00'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a < 4 AND b = 'b' -AND c = '2000-01-01 00:00:00'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b >= 'b' -AND b <= 'd' AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b > 'b' -AND b < 'e' AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a <= 4 AND a >= 1 -AND b >= 'b' AND c = '2003-11-30 05:01:03'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a < 4 AND a > 1 -AND b >= 'b' AND c = '2000-01-01 00:00:00'; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo 2.16 ---echo auto_increment insert with trigger -if ($HAVE_TRIGGER) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_result_log - } - --disable_query_log - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_1_DROP_TABLES4; - echo CHILD2_1_CREATE_TABLES4; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES4; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES4; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } - } - --connection master_1 - --disable_query_log - echo CREATE TABLE ta_l_auto_inc ( - a INT AUTO_INCREMENT, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT3_2_1; - eval CREATE TABLE ta_l_auto_inc ( - a INT AUTO_INCREMENT, - b CHAR(1) DEFAULT 'c', - c DATETIME DEFAULT '1999-10-10 10:10:10', - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT3_2_1; - echo CREATE TABLE tc_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) MASTER_1_ENGINE2 MASTER_1_CHARSET2; - eval CREATE TABLE tc_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2; - --enable_query_log - --eval CREATE TRIGGER ins_ta_l_auto_inc AFTER INSERT ON ta_l_auto_inc FOR EACH ROW BEGIN INSERT INTO tc_l (a, b, c) VALUES (NEW.a, NEW.b, NEW.c); END; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - INSERT INTO ta_l_auto_inc (a, b, c) VALUES - (NULL, 's', '2008-12-31 20:59:59'); - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_TABLES4; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM tc_l ORDER BY a; -} - ---echo ---echo 2.17 ---echo engine-condition-pushdown with "or" and joining -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l WHERE a = 1 OR a IN (SELECT a FROM tb_l); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo 2.23 ---echo index merge -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_result_log - } - --disable_query_log - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_1_DROP_TABLES5; - echo CHILD2_1_CREATE_TABLES5; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES5; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES5; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } -} ---connection master_1 ---disable_query_log -echo CREATE TABLE ta_l_int ( - a INT AUTO_INCREMENT, - b INT DEFAULT 10, - c INT DEFAULT 11, - PRIMARY KEY(a), - KEY idx1(b), - KEY idx2(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1; -eval CREATE TABLE ta_l_int ( - a INT AUTO_INCREMENT, - b INT DEFAULT 10, - c INT DEFAULT 11, - PRIMARY KEY(a), - KEY idx1(b), - KEY idx2(c) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1; ---enable_query_log -INSERT INTO ta_l_int (a, b, c) VALUES (1, 2, 3); -INSERT INTO ta_l_int (a, b, c) SELECT a + 1, b + 1, c + 1 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 2, b + 2, c + 2 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 4, b + 4, c + 4 FROM ta_l_int; -INSERT INTO ta_l_int (a, b, c) SELECT a + 8, b + 8, c + 8 FROM ta_l_int; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l_int force index(primary, idx1, idx2) -WHERE a = 5 OR b = 5 OR c = 5 ORDER BY a; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo 2.24 ---echo index scan update without PK ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l_int; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l_int ( - a INT NOT NULL, - b INT DEFAULT 10, - c INT DEFAULT 11, - KEY idx1(b), - KEY idx2(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1; -if ($MASTER_1_NEEDPK) -{ - --error ER_REQUIRES_PRIMARY_KEY - eval CREATE TABLE ta_l_int ( - a INT NOT NULL, - b INT DEFAULT 10, - c INT DEFAULT 11, - KEY idx1(b), - KEY idx2(c) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1; - eval CREATE TABLE ta_l_int ( - a INT NOT NULL, - b INT DEFAULT 10, - c INT DEFAULT 11, - PRIMARY KEY(a), - KEY idx1(b), - KEY idx2(c) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1; -} -if (!$MASTER_1_NEEDPK) -{ - eval CREATE TABLE ta_l_int ( - a INT NOT NULL, - b INT DEFAULT 10, - c INT DEFAULT 11, - KEY idx1(b), - KEY idx2(c) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1; -} ---enable_query_log -SELECT a, b, c FROM ta_l_int ORDER BY a; -INSERT INTO ta_l_int (a, b, c) VALUES (0, 2, 3); -INSERT INTO ta_l_int (a, b, c) VALUES (18, 2, 3); -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -UPDATE ta_l_int SET c = 4 WHERE b = 2; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%update %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -SELECT a, b, c FROM ta_l_int ORDER BY a; - - ---echo ---echo 2.25 ---echo direct order limit ---connection master_1 -eval $MASTER_1_CHECK_DIRECT_ORDER_LIMIT_STATUS; ---disable_ps2_protocol -SELECT a, b, c FROM ta_l_int ORDER BY a LIMIT 3; ---enable_ps2_protocol -eval $MASTER_1_CHECK_DIRECT_ORDER_LIMIT_STATUS; - - ---echo ---echo 2.26 ---echo lock tables -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_LOCK_TABLES1; - echo CHILD2_1_DROP_LOCK_TABLES2; - echo CHILD2_1_CREATE_LOCK_TABLES1; - echo CHILD2_1_CREATE_LOCK_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_LOCK_TABLES1; - eval $CHILD2_1_DROP_LOCK_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_LOCK_TABLES1; - eval $CHILD2_1_CREATE_LOCK_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_LOCK_TABLES1; - echo CHILD2_2_DROP_LOCK_TABLES2; - echo CHILD2_2_CREATE_LOCK_TABLES1; - echo CHILD2_2_CREATE_LOCK_TABLES2; - } - --disable_warnings - eval $CHILD2_2_DROP_LOCK_TABLES1; - eval $CHILD2_2_DROP_LOCK_TABLES2; - --enable_warnings - eval $CHILD2_2_CREATE_LOCK_TABLES1; - eval $CHILD2_2_CREATE_LOCK_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS t1; -DROP TABLE IF EXISTS t2; ---enable_warnings ---disable_query_log -echo CREATE TABLE t1 ( - id int(11) NOT NULL, - PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_LOCK1; -eval CREATE TABLE t1 ( - id int(11) NOT NULL, - PRIMARY KEY (id) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_LOCK1; -echo CREATE TABLE t2 ( - id int(11) NOT NULL, - PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_LOCK2; -eval CREATE TABLE t2 ( - id int(11) NOT NULL, - PRIMARY KEY (id) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_LOCK2; ---enable_query_log -LOCK TABLES t1 READ, t2 READ; -UNLOCK TABLES; - - ---echo ---echo auto_increment -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_INCREMENT_TABLES1; - echo CHILD2_1_CREATE_INCREMENT_TABLES1; - echo CHILD2_1_AUTO_INCREMENT_INCREMENT2; - echo CHILD2_1_AUTO_INCREMENT_OFFSET2; - } - --disable_warnings - eval $CHILD2_1_DROP_INCREMENT_TABLES1; - --enable_warnings - eval $CHILD2_1_CREATE_INCREMENT_TABLES1; - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT2; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -if ($USE_REPLICATION) -{ - save_master_pos; - --connection slave1_1 - sync_with_master; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log -} ---disable_warnings -DROP TABLE IF EXISTS t1; ---enable_warnings ---disable_query_log -echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1; -echo MASTER_1_AUTO_INCREMENT_INCREMENT2; -echo MASTER_1_AUTO_INCREMENT_OFFSET2; -eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_1; -eval $MASTER_1_AUTO_INCREMENT_INCREMENT2; -eval $MASTER_1_AUTO_INCREMENT_OFFSET2; -if ($USE_REPLICATION) -{ - SET SESSION sql_log_bin= 1; - --connection slave1_1 - --disable_warnings - DROP TABLE IF EXISTS t1; - --enable_warnings - echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_1; - eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_1; - --connection master_1 -} ---enable_query_log -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t1 (id) VALUES (null); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t1 () VALUES (),(),(),(); -SELECT LAST_INSERT_ID(); -SELECT id FROM t1 ORDER BY id; -SET INSERT_ID=5000; -INSERT INTO t1 () VALUES (); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t1 (id) VALUES (10000); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -INSERT INTO t1 (id) VALUES (1000); -SELECT LAST_INSERT_ID(); -SELECT MAX(id) FROM t1; -if ($USE_REPLICATION) -{ - save_master_pos; - --connection slave1_1 - sync_with_master; - SELECT id FROM t1 ORDER BY id; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log -} -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_INCREMENT_TABLES1; - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_AUTO_INCREMENT_INCREMENT1; - echo CHILD2_1_AUTO_INCREMENT_OFFSET1; - } - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT1; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET1; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - - ---echo ---echo read only -let $MASTER_1_ENGINE_IS_SPIDER= - `SELECT IF('$MASTER_1_ENGINE_TYPE' = 'Spider' OR - '$MASTER_1_HIDDEN_ENGINE_TYPE' = 'Spider', 1, 0)`; -if ($MASTER_1_ENGINE_IS_SPIDER) -{ - --connection master_1 - --disable_warnings - DROP TABLE IF EXISTS t1; - --enable_warnings - --disable_query_log - echo CREATE TABLE t1 ( - id int(11) NOT NULL, - PRIMARY KEY (id) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_READONLY1_1; - eval CREATE TABLE t1 ( - id int(11) NOT NULL, - PRIMARY KEY (id) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_READONLY1_1; - --let $MIN_VAL= `SELECT MIN(id) FROM t1` - --enable_query_log - SELECT id FROM t1 ORDER BY id; - --error 12518 - INSERT INTO t1 (id) VALUES (1); - --error 12518 - eval UPDATE t1 SET id = 4 WHERE id = $MIN_VAL; - --error 12518 - eval DELETE FROM t1 WHERE id = $MIN_VAL; - --error 12518 - DELETE FROM t1; - --error 12518 - TRUNCATE t1; -} -if (!$MASTER_1_ENGINE_IS_SPIDER) -{ - --echo skipped -} - - ---echo ---echo 2.27 ---echo error mode -if ($MASTER_1_ENGINE_IS_SPIDER) -{ - --connection master_1 - --disable_warnings - DROP TABLE IF EXISTS t1; - --enable_warnings - --disable_query_log - echo CREATE TABLE t1 ( - id int(11) NOT NULL, - PRIMARY KEY (id) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_ERROR_MODE1_1; - eval CREATE TABLE t1 ( - id int(11) NOT NULL, - PRIMARY KEY (id) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_ERROR_MODE1_1; - --enable_query_log - SELECT id FROM t1 ORDER BY id; - INSERT INTO t1 (id) VALUES (1); - DELETE FROM t1; - TRUNCATE t1; -} -if (!$MASTER_1_ENGINE_IS_SPIDER) -{ - --echo skipped -} - - ---echo ---echo 3.0 ---echo is null -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_result_log - } - --disable_query_log - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_1_DROP_TEXT_KEY_TABLES1; - echo CHILD2_1_CREATE_TEXT_KEY_TABLES1; - } - --disable_warnings - eval $CHILD2_1_DROP_TEXT_KEY_TABLES1; - --enable_warnings - eval $CHILD2_1_CREATE_TEXT_KEY_TABLES1; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS t1; ---enable_warnings ---disable_query_log -echo CREATE TABLE t1 ( - a VARCHAR(255), - b VARCHAR(255), - c VARCHAR(255), - KEY idx1(a,b), - KEY idx2(b), - PRIMARY KEY(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_TEXT_KEY1_1; -eval CREATE TABLE t1 ( - a VARCHAR(255), - b VARCHAR(255), - c VARCHAR(255), - KEY idx1(a,b), - KEY idx2(b), - PRIMARY KEY(c) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_TEXT_KEY1_1; ---enable_query_log -insert into t1 values (null, null, '2048'); -insert into t1 values ('1', '1', '1'); -insert into t1 select a + 1, b + 1, c + 1 from t1; -insert into t1 select a + 2, b + 2, c + 2 from t1; -insert into t1 select a + 4, b + 4, c + 4 from t1; -insert into t1 select a + 8, b + 8, c + 8 from t1; -insert into t1 select a + 16, b + 16, c + 16 from t1; -insert into t1 select a + 32, b + 32, c + 32 from t1; -insert into t1 select a + 64, b + 64, c + 64 from t1; -insert into t1 select a + 128, b + 128, c + 128 from t1; -insert into t1 select a + 256, b + 256, c + 256 from t1; -insert into t1 select a + 512, b + 512, c + 512 from t1; -flush tables; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -select a from t1 where a is null order by a limit 30; -select b from t1 where b is null order by b limit 30; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TEXT_PK_TABLES1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - - ---echo ---echo direct_order_limit ---connection master_1 -TRUNCATE TABLE t1; -insert into t1 values ('1', '1', '1'); -insert into t1 select a + 1, b + 1, c + 1 from t1; -insert into t1 select a + 2, b + 2, c + 2 from t1; -insert into t1 select a + 4, b + 4, c + 4 from t1; -insert into t1 select a + 8, b + 8, c + 8 from t1; -insert into t1 select a + 16, b + 16, c + 16 from t1; -insert into t1 select a, b + 32, c + 32 from t1; -insert into t1 select a, b + 64, c + 64 from t1; -insert into t1 select a, b + 128, c + 128 from t1; -flush tables; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -select a, b, c from t1 where a = '10' and b <> '100' order by c desc limit 5; -select a, c from t1 where a = '10' order by b desc limit 5; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TEXT_PK_TABLES1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source slave_test_deinit.inc ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle2/t/spider_fixes_part.test b/storage/spider/mysql-test/spider/oracle2/t/spider_fixes_part.test deleted file mode 100644 index ef5a8026c02..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/spider_fixes_part.test +++ /dev/null @@ -1,645 +0,0 @@ -# This test tests for Spider's bug fixes -source include/have_log_bin.inc; ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---source slave_test_init.inc ---enable_result_log ---enable_query_log -if (!$HAVE_PARTITION) -{ - --disable_query_log - --disable_result_log - --source slave_test_deinit.inc - --source test_deinit.inc - --enable_result_log - --enable_query_log - --enable_warnings - skip Test requires partitioning; -} - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; - CREATE DATABASE auto_test_local; - USE auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS tb_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2; -eval CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2; ---enable_query_log -INSERT INTO tb_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); - ---echo ---echo 2.17 ---echo partition with sort -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES2; - echo CHILD2_1_CREATE_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - --disable_query_log - echo CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1; - eval CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_COMMENT2_P_2_1; - --enable_query_log - INSERT INTO ta_l2 SELECT a, b, c FROM tb_l; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 WHERE a > 1 - ORDER BY a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - ---echo ---echo 2.23 ---echo partition update with moving partition -if ($HAVE_PARTITION) -{ - --connection master_1 - --disable_warnings - DROP TABLE IF EXISTS ta_l2; - --enable_warnings - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_TABLES; - echo CHILD2_2_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES2; - echo CHILD2_1_CREATE_TABLES2; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES2; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - --disable_query_log - echo CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1; - eval CREATE TABLE ta_l2 ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) - ) $MASTER_1_ENGINE $MASTER_1_COMMENT2_P_2_1; - --enable_query_log - INSERT INTO ta_l2 (a, b, c) VALUES (3, 'B', '2010-09-26 00:00:00'); - UPDATE ta_l2 SET a = 4 WHERE a = 3; - SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%update %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%delete %'; - } - eval $CHILD2_2_SELECT_TABLES; - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%update %'; - SELECT argument FROM mysql.general_log WHERE argument LIKE '%delete %'; - } - eval $CHILD2_1_SELECT_TABLES2; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - ---echo index merge with partition -if ($HAVE_PARTITION) -{ - --connection master_1 - --disable_warnings - DROP TABLE IF EXISTS ta_l_int; - --enable_warnings - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_result_log - } - --disable_query_log - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_2_DROP_TABLES5; - echo CHILD2_2_CREATE_TABLES5; - } - --disable_warnings - eval $CHILD2_2_DROP_TABLES5; - --enable_warnings - eval $CHILD2_2_CREATE_TABLES5; - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_1_DROP_TABLES5; - echo CHILD2_1_CREATE_TABLES5; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES5; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES5; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } - } - --connection master_1 - --disable_query_log - echo CREATE TABLE ta_l_int ( - a INT AUTO_INCREMENT, - b INT DEFAULT 10, - c INT DEFAULT 11, - PRIMARY KEY(a), - KEY idx1(b), - KEY idx2(c) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT3_P_2_1; - eval CREATE TABLE ta_l_int ( - a INT AUTO_INCREMENT, - b INT DEFAULT 10, - c INT DEFAULT 11, - PRIMARY KEY(a), - KEY idx1(b), - KEY idx2(c) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT3_P_2_1; - --enable_query_log - INSERT INTO ta_l_int (a, b, c) VALUES (1, 2, 3); - INSERT INTO ta_l_int (a, b, c) SELECT a + 1, b + 1, c + 1 FROM ta_l_int; - INSERT INTO ta_l_int (a, b, c) SELECT a + 2, b + 2, c + 2 FROM ta_l_int; - INSERT INTO ta_l_int (a, b, c) SELECT a + 4, b + 4, c + 4 FROM ta_l_int; - INSERT INTO ta_l_int (a, b, c) SELECT a + 8, b + 8, c + 8 FROM ta_l_int; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - SELECT a, b, c FROM ta_l_int force index(primary, idx1, idx2) - WHERE a = 5 OR b = 5 OR c = 5 ORDER BY a; - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - - ---echo ---echo 2.26 ---echo auto_increment with partition -if ($HAVE_PARTITION) -{ - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_INCREMENT_TABLES1; - echo CHILD2_1_CREATE_INCREMENT_TABLES1; - echo CHILD2_1_AUTO_INCREMENT_INCREMENT2; - echo CHILD2_1_AUTO_INCREMENT_OFFSET2; - } - --disable_warnings - eval $CHILD2_1_DROP_INCREMENT_TABLES1; - --enable_warnings - eval $CHILD2_1_CREATE_INCREMENT_TABLES1; - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT2; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - --connection child2_2 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_DROP_INCREMENT_TABLES1; - echo CHILD2_2_CREATE_INCREMENT_TABLES1; - echo CHILD2_2_AUTO_INCREMENT_INCREMENT2; - echo CHILD2_2_AUTO_INCREMENT_OFFSET2; - } - --disable_warnings - eval $CHILD2_2_DROP_INCREMENT_TABLES1; - --enable_warnings - eval $CHILD2_2_CREATE_INCREMENT_TABLES1; - eval $CHILD2_2_AUTO_INCREMENT_INCREMENT2; - eval $CHILD2_2_AUTO_INCREMENT_OFFSET2; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } - --connection master_1 - if ($USE_REPLICATION) - { - save_master_pos; - --connection slave1_1 - sync_with_master; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log - } - --disable_warnings - DROP TABLE IF EXISTS t1; - --enable_warnings - --disable_query_log - echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1; - echo MASTER_1_AUTO_INCREMENT_INCREMENT2; - echo MASTER_1_AUTO_INCREMENT_OFFSET2; - eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_P_1; - eval $MASTER_1_AUTO_INCREMENT_INCREMENT2; - eval $MASTER_1_AUTO_INCREMENT_OFFSET2; - if ($USE_REPLICATION) - { - SET SESSION sql_log_bin= 1; - --connection slave1_1 - --disable_warnings - DROP TABLE IF EXISTS t1; - --enable_warnings - echo CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_P_1; - eval CREATE TABLE t1 ( - id int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (id) - ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_P_1; - --connection master_1 - } - --enable_query_log - INSERT INTO t1 () VALUES (); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t1 () VALUES (); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t1 (id) VALUES (null); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t1 (id) VALUES (null); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t1 () VALUES (),(),(),(); - SELECT LAST_INSERT_ID(); - SELECT id FROM t1 ORDER BY id; - SET INSERT_ID=5000; - INSERT INTO t1 () VALUES (); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t1 (id) VALUES (10000); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - INSERT INTO t1 (id) VALUES (1000); - SELECT LAST_INSERT_ID(); - SELECT MAX(id) FROM t1; - if ($USE_REPLICATION) - { - save_master_pos; - --connection slave1_1 - sync_with_master; - SELECT id FROM t1 ORDER BY id; - --connection master_1 - --disable_query_log - SET SESSION sql_log_bin= 0; - --enable_query_log - } - if ($USE_CHILD_GROUP2) - { - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_INCREMENT_TABLES1; - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_AUTO_INCREMENT_INCREMENT1; - echo CHILD2_1_AUTO_INCREMENT_OFFSET1; - } - eval $CHILD2_1_AUTO_INCREMENT_INCREMENT1; - eval $CHILD2_1_AUTO_INCREMENT_OFFSET1; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - --connection child2_2 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_2_SELECT_INCREMENT_TABLES1; - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_2_AUTO_INCREMENT_INCREMENT1; - echo CHILD2_2_AUTO_INCREMENT_OFFSET1; - } - eval $CHILD2_2_AUTO_INCREMENT_INCREMENT1; - eval $CHILD2_2_AUTO_INCREMENT_OFFSET1; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } - } -} - - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_REPLICATION) -{ - --connection slave1_1 - DROP DATABASE IF EXISTS auto_test_local; -} -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source slave_test_deinit.inc ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/mysql-test/spider/oracle2/t/test_deinit.inc b/storage/spider/mysql-test/spider/oracle2/t/test_deinit.inc deleted file mode 100644 index 989bde26d3c..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/test_deinit.inc +++ /dev/null @@ -1,37 +0,0 @@ -# get connection and exist engine test ---echo for master_1 ---connection master_1 ---source ../include/deinit_master_1.inc ---disconnect master_1 ---echo for child2 -if ($USE_CHILD_GROUP2) -{ - --echo child2_1 - --connection child2_1 - --source ../include/deinit_child2_1.inc - --disconnect child2_1 - --echo child2_2 - --connection child2_2 - --source ../include/deinit_child2_2.inc - --disconnect child2_2 - --echo child2_3 - --connection child2_3 - --source ../include/deinit_child2_3.inc - --disconnect child2_3 -} ---echo for child3 -if ($USE_CHILD_GROUP3) -{ - --echo child3_1 - --connection child3_1 - --source ../include/deinit_child3_1.inc - --disconnect child3_1 - --echo child3_2 - --connection child3_2 - --source ../include/deinit_child3_2.inc - --disconnect child3_2 - --echo child3_3 - --connection child3_3 - --source ../include/deinit_child3_3.inc - --disconnect child3_3 -} diff --git a/storage/spider/mysql-test/spider/oracle2/t/test_init.inc b/storage/spider/mysql-test/spider/oracle2/t/test_init.inc deleted file mode 100644 index f2cd6c0269f..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/test_init.inc +++ /dev/null @@ -1,74 +0,0 @@ -# get connection and exist engine test ---echo for master_1 ---source connect_master_1.inc ---connection master_1 -CALL mtr.add_suppression("unknown variable"); -SET SESSION sql_log_bin= 0; ---let $MASTER_1_SERVER_ID=`SELECT @@global.server_id` ---let $TEST_ENGINE_TYPE= $MASTER_1_ENGINE_TYPE ---source have_partition.inc ---source have_trigger.inc ---source ../include/init_master_1.inc ---source have_engine.inc ---echo for child2 -if ($USE_CHILD_GROUP2) -{ - --echo child2_1 - --source connect_child2_1.inc - --connection child2_1 - CALL mtr.add_suppression("unknown variable *"); - SET SESSION sql_log_bin= 0; - --let $CHILD2_1_SERVER_ID=`SELECT @@global.server_id` - --let $TEST_ENGINE_TYPE= $CHILD2_1_ENGINE_TYPE - --source ../include/init_child2_1.inc - --source have_engine.inc - --echo child2_2 - --source connect_child2_2.inc - --connection child2_2 - CALL mtr.add_suppression("unknown variable *"); - SET SESSION sql_log_bin= 0; - --let $CHILD2_2_SERVER_ID=`SELECT @@global.server_id` - --let $TEST_ENGINE_TYPE= $CHILD2_2_ENGINE_TYPE - --source ../include/init_child2_2.inc - --source have_engine.inc - --echo child2_3 - --source connect_child2_3.inc - --connection child2_3 - CALL mtr.add_suppression("unknown variable *"); - SET SESSION sql_log_bin= 0; - --let $CHILD2_3_SERVER_ID=`SELECT @@global.server_id` - --let $TEST_ENGINE_TYPE= $CHILD2_3_ENGINE_TYPE - --source ../include/init_child2_3.inc - --source have_engine.inc -} ---echo for child3 -if ($USE_CHILD_GROUP3) -{ - --echo child3_1 - --source connect_child3_1.inc - --connection child3_1 - CALL mtr.add_suppression("unknown variable *"); - SET SESSION sql_log_bin= 0; - --let $CHILD3_1_SERVER_ID=`SELECT @@global.server_id` - --let $TEST_ENGINE_TYPE= $CHILD3_1_ENGINE_TYPE - --source ../include/init_child3_1.inc - --source have_engine.inc - --echo child3_2 - --source connect_child3_2.inc - --connection child3_2 - CALL mtr.add_suppression("unknown variable *"); - SET SESSION sql_log_bin= 0; - --let $CHILD3_2_SERVER_ID=`SELECT @@global.server_id` - --let $TEST_ENGINE_TYPE= $CHILD3_2_ENGINE_TYPE - --source ../include/init_child3_2.inc - --source have_engine.inc - --echo child3_3 - --source connect_child3_3.inc - --connection child3_3 - CALL mtr.add_suppression("unknown variable *"); - SET SESSION sql_log_bin= 0; - --let $CHILD3_3_SERVER_ID=`SELECT @@global.server_id` - --let $TEST_ENGINE_TYPE= $CHILD3_3_ENGINE_TYPE - --source ../include/init_child3_3.inc - --source have_engine.inc -} diff --git a/storage/spider/mysql-test/spider/oracle2/t/vp_fixes.test b/storage/spider/mysql-test/spider/oracle2/t/vp_fixes.test deleted file mode 100644 index 90380227040..00000000000 --- a/storage/spider/mysql-test/spider/oracle2/t/vp_fixes.test +++ /dev/null @@ -1,335 +0,0 @@ -# This test tests for VP's bug fixes ---disable_warnings ---disable_query_log ---disable_result_log ---source test_init.inc ---enable_result_log ---enable_query_log - ---echo ---echo drop and create databases ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -CREATE DATABASE auto_test_local; -USE auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - CREATE DATABASE auto_test_remote; - USE auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; - CREATE DATABASE auto_test_remote2; - USE auto_test_remote2; -} ---enable_warnings - ---echo ---echo test select 1 ---connection master_1 -SELECT 1; -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - SELECT 1; - --connection child2_2 - SELECT 1; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo create table and insert -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - --disable_query_log - echo CHILD2_1_DROP_TABLES; - echo CHILD2_1_CREATE_TABLES; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES; - if ($OUTPUT_CHILD_GROUP2) - { - --enable_query_log - } - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS tb_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) MASTER_1_ENGINE2 MASTER_1_CHARSET2; -eval CREATE TABLE tb_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2; ---enable_query_log -INSERT INTO tb_l (a, b, c) VALUES - (1, 'a', '2008-08-01 10:21:39'), - (2, 'b', '2000-01-01 00:00:00'), - (3, 'e', '2007-06-04 20:03:11'), - (4, 'd', '2003-11-30 05:01:03'), - (5, 'c', '2001-12-31 23:59:59'); ---disable_warnings -DROP TABLE IF EXISTS ta_l; ---enable_warnings ---disable_query_log -echo CREATE TABLE ta_l ( - PRIMARY KEY(a) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1; -eval CREATE TABLE ta_l ( - a INT, - b CHAR(1), - c DATETIME, - PRIMARY KEY(a) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1; ---enable_query_log -INSERT INTO ta_l SELECT a, b, c FROM tb_l; - ---echo ---echo 0.9 ---echo create different primary key table -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_result_log - } - --disable_query_log - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_1_DROP_TABLES5; - echo CHILD2_1_CREATE_TABLES5; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES5; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES5; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } -} ---connection master_1 ---disable_query_log -echo CREATE TABLE ta_l_int ( - a INT DEFAULT 10, - b INT AUTO_INCREMENT, - c INT DEFAULT 11, - PRIMARY KEY(b) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1; -eval CREATE TABLE ta_l_int ( - a INT DEFAULT 10, - b INT AUTO_INCREMENT, - c INT DEFAULT 11, - PRIMARY KEY(b) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1; ---enable_query_log -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 ---let $MASTER_1_IS_VP= `SELECT IF('$MASTER_1_ENGINE_TYPE' = 'VP', 1, 0)` -if ($MASTER_1_IS_VP) -{ - --error 14514 - INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3); -} -if (!$MASTER_1_IS_VP) -{ - INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3); - --disable_query_log - --disable_result_log - TRUNCATE TABLE ta_l_int; - --enable_query_log - --enable_result_log -} -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_TABLES5; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo create un-correspond primary key table ---connection master_1 ---disable_warnings -DROP TABLE IF EXISTS ta_l_int; ---enable_warnings -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_result_log - } - --disable_query_log - --connection child2_1 - if ($OUTPUT_CHILD_GROUP2) - { - echo CHILD2_1_DROP_TABLES5; - echo CHILD2_1_CREATE_TABLES5; - } - --disable_warnings - eval $CHILD2_1_DROP_TABLES5; - --enable_warnings - eval $CHILD2_1_CREATE_TABLES5; - --enable_query_log - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_result_log - } -} ---connection master_1 ---disable_query_log -echo CREATE TABLE ta_l_int ( - a INT DEFAULT 10, - b INT DEFAULT 12, - c INT DEFAULT 11, - PRIMARY KEY(c) -) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1; -eval CREATE TABLE ta_l_int ( - a INT DEFAULT 10, - b INT DEFAULT 12, - c INT DEFAULT 11, - PRIMARY KEY(c) -) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1; ---enable_query_log -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - TRUNCATE TABLE mysql.general_log; - } - eval $CHILD2_1_SELECT_TABLES; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} ---connection master_1 -if ($MASTER_1_IS_VP) -{ - --error 14514 - INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3); -} -if (!$MASTER_1_IS_VP) -{ - INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3); - --disable_query_log - --disable_result_log - TRUNCATE TABLE ta_l_int; - --enable_query_log - --enable_result_log -} -if ($USE_CHILD_GROUP2) -{ - if (!$OUTPUT_CHILD_GROUP2) - { - --disable_query_log - --disable_result_log - } - --connection child2_1 - if ($USE_GENERAL_LOG) - { - SELECT argument FROM mysql.general_log WHERE argument LIKE '%insert %'; - } - eval $CHILD2_1_SELECT_TABLES5; - if (!$OUTPUT_CHILD_GROUP2) - { - --enable_query_log - --enable_result_log - } -} - ---echo ---echo deinit ---disable_warnings ---connection master_1 -DROP DATABASE IF EXISTS auto_test_local; -if ($USE_CHILD_GROUP2) -{ - --connection child2_1 - DROP DATABASE IF EXISTS auto_test_remote; - --connection child2_2 - DROP DATABASE IF EXISTS auto_test_remote2; -} ---disable_query_log ---disable_result_log ---source test_deinit.inc ---enable_result_log ---enable_query_log ---enable_warnings ---echo ---echo end of test diff --git a/storage/spider/spd_db_oracle.cc b/storage/spider/spd_db_oracle.cc deleted file mode 100644 index 19295d40c5f..00000000000 --- a/storage/spider/spd_db_oracle.cc +++ /dev/null @@ -1,13404 +0,0 @@ -/* Copyright (C) 2012-2018 Kentoku Shiba - Copyright (c) 2020, MariaDB Corporation. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ - -#define MYSQL_SERVER 1 -#include -#include "mysql_version.h" -#include "sql_priv.h" -#include "probes_mysql.h" -#include "sql_partition.h" -#include "sql_analyse.h" -#include "sql_select.h" - -#ifdef HAVE_ORACLE_OCI -#if (defined(WIN32) || defined(_WIN32) || defined(WINDOWS) || defined(_WINDOWS)) -#include -#define strcasestr StrStr -#endif -#include -#include "spd_err.h" -#include "spd_param.h" -#include "spd_db_include.h" -#include "spd_include.h" -#include "spd_db_oracle.h" -#include "ha_spider.h" -#include "spd_conn.h" -#include "spd_db_conn.h" -#include "spd_malloc.h" -#include "spd_sys_table.h" -#include "spd_table.h" - -extern struct charset_info_st *spd_charset_utf8mb3_bin; - -extern handlerton *spider_hton_ptr; -extern pthread_mutex_t spider_open_conn_mutex; -extern HASH spider_open_connections; -extern HASH spider_ipport_conns; -extern SPIDER_DBTON spider_dbton[SPIDER_DBTON_SIZE]; -extern const char spider_dig_upper[]; - -#define SPIDER_DB_WRAPPER_ORACLE "oracle" - -#define SPIDER_SQL_NAME_QUOTE_STR "\"" -#define SPIDER_SQL_NAME_QUOTE_LEN (sizeof(SPIDER_SQL_NAME_QUOTE_STR) - 1) -static const char *name_quote_str = SPIDER_SQL_NAME_QUOTE_STR; - -#define SPIDER_SQL_ISO_READ_COMMITTED_STR "set transaction isolation level read committed" -#define SPIDER_SQL_ISO_READ_COMMITTED_LEN sizeof(SPIDER_SQL_ISO_READ_COMMITTED_STR) - 1 -#define SPIDER_SQL_ISO_SERIALIZABLE_STR "set transaction isolation level serializable" -#define SPIDER_SQL_ISO_SERIALIZABLE_LEN sizeof(SPIDER_SQL_ISO_SERIALIZABLE_STR) - 1 - -#define SPIDER_SQL_START_TRANSACTION_STR "set transaction read write" -#define SPIDER_SQL_START_TRANSACTION_LEN sizeof(SPIDER_SQL_START_TRANSACTION_STR) - 1 - -#define SPIDER_SQL_AUTOCOMMIT_OFF_STR "set autocommit off" -#define SPIDER_SQL_AUTOCOMMIT_OFF_LEN sizeof(SPIDER_SQL_AUTOCOMMIT_OFF_STR) - 1 -#define SPIDER_SQL_AUTOCOMMIT_ON_STR "set autocommit on" -#define SPIDER_SQL_AUTOCOMMIT_ON_LEN sizeof(SPIDER_SQL_AUTOCOMMIT_ON_STR) - 1 - -#define SPIDER_SQL_LOCK_TABLE_STR "lock table " -#define SPIDER_SQL_LOCK_TABLE_LEN (sizeof(SPIDER_SQL_LOCK_TABLE_STR) - 1) -#define SPIDER_SQL_UNLOCK_TABLE_STR "unlock tables" -#define SPIDER_SQL_UNLOCK_TABLE_LEN (sizeof(SPIDER_SQL_UNLOCK_TABLE_STR) - 1) -#define SPIDER_SQL_LOCK_TABLE_SHARE_MODE_STR " in share mode" -#define SPIDER_SQL_LOCK_TABLE_SHARE_MODE_LEN (sizeof(SPIDER_SQL_LOCK_TABLE_SHARE_MODE_STR) - 1) -#define SPIDER_SQL_LOCK_TABLE_EXCLUSIVE_MODE_STR " in exclusive mode" -#define SPIDER_SQL_LOCK_TABLE_EXCLUSIVE_MODE_LEN (sizeof(SPIDER_SQL_LOCK_TABLE_EXCLUSIVE_MODE_STR) - 1) - -#define SPIDER_SQL_COMMIT_STR "commit" -#define SPIDER_SQL_COMMIT_LEN sizeof(SPIDER_SQL_COMMIT_STR) - 1 - -#define SPIDER_SQL_SET_NLS_DATE_FORMAT_STR "alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS'" -#define SPIDER_SQL_SET_NLS_DATE_FORMAT_LEN sizeof(SPIDER_SQL_SET_NLS_DATE_FORMAT_STR) - 1 -#define SPIDER_SQL_SET_NLS_TIME_FORMAT_STR "alter session set nls_time_format='HH24:MI:SSXFF'" -#define SPIDER_SQL_SET_NLS_TIME_FORMAT_LEN sizeof(SPIDER_SQL_SET_NLS_TIME_FORMAT_STR) - 1 -#define SPIDER_SQL_SET_NLS_TIMESTAMP_FORMAT_STR "alter session set nls_timestamp_format='YYYY-MM-DD HH24:MI:SSXFF'" -#define SPIDER_SQL_SET_NLS_TIMESTAMP_FORMAT_LEN sizeof(SPIDER_SQL_SET_NLS_TIMESTAMP_FORMAT_STR) - 1 - -#define SPIDER_SQL_SELECT_WRAPPER_HEAD_STR "select * from (" -#define SPIDER_SQL_SELECT_WRAPPER_HEAD_LEN sizeof(SPIDER_SQL_SELECT_WRAPPER_HEAD_STR) - 1 -#define SPIDER_SQL_UPDATE_WRAPPER_HEAD_STR " where rowid in (select rowid from (select rowid, row_number() over (order by " -#define SPIDER_SQL_UPDATE_WRAPPER_HEAD_LEN sizeof(SPIDER_SQL_UPDATE_WRAPPER_HEAD_STR) - 1 -#define SPIDER_SQL_ROW_NUMBER_HEAD_STR ", row_number() over (order by " -#define SPIDER_SQL_ROW_NUMBER_HEAD_LEN sizeof(SPIDER_SQL_ROW_NUMBER_HEAD_STR) - 1 -#define SPIDER_SQL_ROW_NUMBER_TAIL_STR "rowid) row_num" -#define SPIDER_SQL_ROW_NUMBER_TAIL_LEN sizeof(SPIDER_SQL_ROW_NUMBER_TAIL_STR) - 1 -#define SPIDER_SQL_ROW_NUMBER_DESC_TAIL_STR "rowid desc) row_num" -#define SPIDER_SQL_ROW_NUMBER_DESC_TAIL_LEN sizeof(SPIDER_SQL_ROW_NUMBER_DESC_TAIL_STR) - 1 -#define SPIDER_SQL_SELECT_WRAPPER_TAIL_STR ") where row_num " -#define SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN sizeof(SPIDER_SQL_SELECT_WRAPPER_TAIL_STR) - 1 -#define SPIDER_SQL_ROW_NUM_STR "row_num" -#define SPIDER_SQL_ROW_NUM_LEN sizeof(SPIDER_SQL_ROW_NUM_STR) - 1 -#define SPIDER_SQL_ROWNUM_STR "rownum" -#define SPIDER_SQL_ROWNUM_LEN sizeof(SPIDER_SQL_ROWNUM_STR) - 1 -#define SPIDER_SQL_NEXTVAL_STR ".nextval" -#define SPIDER_SQL_NEXTVAL_LEN sizeof(SPIDER_SQL_NEXTVAL_STR) - 1 -#define SPIDER_SQL_CURRVAL_STR ".currval" -#define SPIDER_SQL_CURRVAL_LEN sizeof(SPIDER_SQL_CURRVAL_STR) - 1 -#define SPIDER_SQL_FROM_DUAL_STR " from dual" -#define SPIDER_SQL_FROM_DUAL_LEN sizeof(SPIDER_SQL_FROM_DUAL_STR) - 1 - -#define SPIDER_SQL_SHOW_TABLE_STATUS_STR "show table status from " -#define SPIDER_SQL_SHOW_TABLE_STATUS_LEN sizeof(SPIDER_SQL_SHOW_TABLE_STATUS_STR) - 1 -#define SPIDER_SQL_SELECT_TABLES_STATUS_STR "select `table_rows`,`avg_row_length`,`data_length`,`max_data_length`,`index_length`,`auto_increment`,`create_time`,`update_time`,`check_time` from `information_schema`.`tables` where `table_schema` = " -#define SPIDER_SQL_SELECT_TABLES_STATUS_LEN sizeof(SPIDER_SQL_SELECT_TABLES_STATUS_STR) - 1 - -#define SPIDER_SQL_LIKE_STR " like " -#define SPIDER_SQL_LIKE_LEN (sizeof(SPIDER_SQL_LIKE_STR) - 1) -#define SPIDER_SQL_LIMIT1_STR "rownum = 1" -#define SPIDER_SQL_LIMIT1_LEN (sizeof(SPIDER_SQL_LIMIT1_STR) - 1) - -#define SPIDER_SQL_ADD_MONTHS_STR "add_months" -#define SPIDER_SQL_ADD_MONTHS_LEN (sizeof(SPIDER_SQL_ADD_MONTHS_STR) - 1) - -#define SPIDER_ORACLE_ERR_BUF_LEN 512 - -static uchar SPIDER_SQL_LINESTRING_HEAD_STR[] = - {0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00}; -#define SPIDER_SQL_LINESTRING_HEAD_LEN sizeof(SPIDER_SQL_LINESTRING_HEAD_STR) - -static const char *spider_db_table_lock_str[] = -{ - " in share mode", - " in share mode", - " in exclusive mode", - " in exclusive mode" -}; -static const int spider_db_table_lock_len[] = -{ - sizeof(" in share mode") - 1, - sizeof(" in share mode") - 1, - sizeof(" in exclusive mode") - 1, - sizeof(" in exclusive mode") - 1 -}; - -/* UTC time zone for timestamp columns */ -extern Time_zone *UTC; - -int spider_db_oracle_get_error( - sword res, - dvoid *hndlp, - int error_num, - const char *error1, - const char *error2, - CHARSET_INFO *access_charset, - char *stored_error_msg -) { - sb4 error_code; - char buf[SPIDER_ORACLE_ERR_BUF_LEN]; - char buf2[SPIDER_ORACLE_ERR_BUF_LEN]; - spider_string tmp_str(buf2, SPIDER_ORACLE_ERR_BUF_LEN, system_charset_info); - DBUG_ENTER("spider_db_oracle_get_error"); - tmp_str.init_calc_mem(SPD_MID_DB_ORACLE_GET_ERROR_1); - tmp_str.length(0); - - switch (res) - { - case OCI_SUCCESS: - DBUG_PRINT("info",("spider res=OCI_SUCCESS")); - break; - case OCI_SUCCESS_WITH_INFO: - DBUG_PRINT("info",("spider res=OCI_SUCCESS_WITH_INFO")); - OCIErrorGet(hndlp, 1, NULL, &error_code, (OraText *) buf, sizeof(buf), - OCI_HTYPE_ERROR); - DBUG_PRINT("info",("spider error_code=%d error='%s'",error_code ,buf)); - if (access_charset && access_charset->cset != system_charset_info->cset) - { - tmp_str.append(buf, strlen(buf), access_charset); - } else { - tmp_str.set(buf, strlen(buf), system_charset_info); - } - push_warning_printf(current_thd, SPIDER_WARN_LEVEL_WARN, - ER_SPIDER_ORACLE_NUM, ER_SPIDER_ORACLE_STR, res, error_code, - tmp_str.c_ptr_safe()); - break; - case OCI_NO_DATA: - DBUG_PRINT("info",("spider res=OCI_NO_DATA")); - DBUG_RETURN(HA_ERR_END_OF_FILE); - case OCI_ERROR: - DBUG_PRINT("info",("spider res=OCI_ERROR")); - OCIErrorGet(hndlp, 1, NULL, &error_code, (OraText *) buf, sizeof(buf), - OCI_HTYPE_ERROR); - DBUG_PRINT("info",("spider error_code=%d error='%s'",error_code ,buf)); - if (error_code == 1) - { - DBUG_PRINT("info",("spider found dupp key")); - if (stored_error_msg) - strmov(stored_error_msg, buf); - DBUG_RETURN(HA_ERR_FOUND_DUPP_KEY); - } - if (error_num) - { - if (error1) - { - if (error2) - { - my_printf_error(error_num, error1, MYF(0), error2); - } else { - my_printf_error(error_num, error1, MYF(0)); - } - } else if (error2) { - my_error(error_num, MYF(0), error2); - } else { - my_error(error_num, MYF(0)); - } - } - if (access_charset && access_charset->cset != system_charset_info->cset) - { - tmp_str.append(buf, strlen(buf), access_charset); - } else { - tmp_str.set(buf, strlen(buf), system_charset_info); - } - my_printf_error(ER_SPIDER_ORACLE_NUM, ER_SPIDER_ORACLE_STR, MYF(0), - res, error_code, tmp_str.c_ptr_safe()); - if (error_num) - { - DBUG_RETURN(error_num); - } else { - DBUG_RETURN(ER_SPIDER_ORACLE_NUM); - } - case OCI_INVALID_HANDLE: - case OCI_NEED_DATA: - if (res == OCI_INVALID_HANDLE) - DBUG_PRINT("info",("spider res=OCI_INVALID_HANDLE")); - else - DBUG_PRINT("info",("spider res=OCI_NEED_DATA")); - default: - DBUG_PRINT("info",("spider res=%d", res)); - if (error_num) - { - if (error1) - { - if (error2) - { - my_printf_error(error_num, error1, MYF(0), error2); - } else { - my_printf_error(error_num, error1, MYF(0)); - } - } else if (error2) { - my_error(error_num, MYF(0), error2); - } else { - my_error(error_num, MYF(0)); - } - } - my_printf_error(ER_SPIDER_ORACLE_NUM, ER_SPIDER_ORACLE_STR, MYF(0), - res, 0, ""); - if (error_num) - { - DBUG_RETURN(error_num); - } else { - DBUG_RETURN(ER_SPIDER_ORACLE_NUM); - } - } - DBUG_RETURN(0); -} - -int spider_oracle_init() -{ - DBUG_ENTER("spider_oracle_init"); - DBUG_RETURN(0); -} - -int spider_oracle_deinit() -{ - DBUG_ENTER("spider_oracle_deinit"); - DBUG_RETURN(0); -} - -spider_db_share *spider_oracle_create_share( - SPIDER_SHARE *share -) { - DBUG_ENTER("spider_oracle_create_share"); - DBUG_RETURN(new spider_oracle_share(share)); -} - -spider_db_handler *spider_oracle_create_handler( - ha_spider *spider, - spider_db_share *db_share -) { - DBUG_ENTER("spider_oracle_create_handler"); - DBUG_RETURN(new spider_oracle_handler(spider, - (spider_oracle_share *) db_share)); -} - -spider_db_copy_table *spider_oracle_create_copy_table( - spider_db_share *db_share -) { - DBUG_ENTER("spider_oracle_create_copy_table"); - DBUG_RETURN(new spider_oracle_copy_table( - (spider_oracle_share *) db_share)); -} - -SPIDER_DB_CONN *spider_oracle_create_conn( - SPIDER_CONN *conn -) { - DBUG_ENTER("spider_oracle_create_conn"); - DBUG_RETURN(new spider_db_oracle(conn)); -} - -bool spider_oracle_support_direct_join( -) { - DBUG_ENTER("spider_oracle_support_direct_join"); - DBUG_RETURN(FALSE); -} - -spider_db_oracle_util spider_db_oracle_utility; - -SPIDER_DBTON spider_dbton_oracle = { - 0, - SPIDER_DB_WRAPPER_ORACLE, - SPIDER_DB_ACCESS_TYPE_SQL, - spider_oracle_init, - spider_oracle_deinit, - spider_oracle_create_share, - spider_oracle_create_handler, - spider_oracle_create_copy_table, - spider_oracle_create_conn, - spider_oracle_support_direct_join, - &spider_db_oracle_utility, - "For communication with Oracle using the native protocol", - "1.0.0", - SPIDER_MATURITY_BETA -}; - -spider_db_oracle_row::spider_db_oracle_row() : - spider_db_row(spider_dbton_oracle.dbton_id), - db_conn(NULL), result(NULL), - ind(NULL), val(NULL), rlen(NULL), ind_first(NULL), val_first(NULL), - rlen_first(NULL), val_str(NULL), val_str_first(NULL), defnp(NULL), - lobhp(NULL), colhp(NULL), coltp(NULL), colsz(NULL), field_count(0), - row_size(NULL), row_size_first(NULL), access_charset(NULL), cloned(FALSE) -{ - DBUG_ENTER("spider_db_oracle_row::spider_db_oracle_row"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_VOID_RETURN; -} - -spider_db_oracle_row::~spider_db_oracle_row() -{ - DBUG_ENTER("spider_db_oracle_row::~spider_db_oracle_row"); - DBUG_PRINT("info",("spider this=%p", this)); - deinit(); - DBUG_VOID_RETURN; -} - -int spider_db_oracle_row::store_to_field( - Field *field, - CHARSET_INFO *access_charset -) { - DBUG_ENTER("spider_db_oracle_row::store_to_field"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_PRINT("info",("spider ind=%d", *ind)); - if (*ind == -1) - { - DBUG_PRINT("info", ("spider field is null")); - field->set_null(); - field->reset(); - } else { - DBUG_PRINT("info", ("spider field->type()=%u", field->type())); - field->set_notnull(); - if (field->type() == MYSQL_TYPE_YEAR) - { - field->store(val_str->ptr(), 4, - field->table->s->table_charset); - } else if (field->type() == MYSQL_TYPE_DATE) - { - field->store(val_str->ptr(), 10, - field->table->s->table_charset); - } else if (field->type() == MYSQL_TYPE_TIME) - { - field->store(val_str->ptr() + 11, 8, - field->table->s->table_charset); - } else { - DBUG_PRINT("info", ("spider val_str->length()=%u", val_str->length())); - if (field->flags & BLOB_FLAG) - { - DBUG_PRINT("info", ("spider blob field")); - ((Field_blob *)field)->set_ptr( - val_str->length(), (uchar *) val_str->ptr()); - } else { - field->store(val_str->ptr(), val_str->length(), - field->table->s->table_charset); - } - } - } - DBUG_RETURN(0); -} - -int spider_db_oracle_row::append_to_str( - spider_string *str -) { - DBUG_ENTER("spider_db_oracle_row::append_to_str"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(val_str->length())) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(val_str->ptr(), val_str->length()); - DBUG_RETURN(0); -} - -int spider_db_oracle_row::append_escaped_to_str( - spider_string *str, - uint dbton_id -) { - DBUG_ENTER("spider_db_oracle_row::append_escaped_to_str"); - DBUG_PRINT("info",("spider this=%p", this)); -/* - spider_string tmp_str(*val, *rlen, str->charset()); - tmp_str.init_calc_mem(SPD_MID_DB_ORACLE_ROW_APPEND_ESCAPED_TO_STR_1); - tmp_str.length(*rlen); -#ifndef DBUG_OFF - tmp_str.c_ptr_safe(); -#endif - if (str->reserve(*rlen * 2)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - util.append_escaped(str, tmp_str.get_str()); -*/ - if (str->reserve(val_str->length() * 2)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - spider_dbton[dbton_id].db_util->append_escaped_util(str, val_str->get_str()); - DBUG_RETURN(0); -} - -void spider_db_oracle_row::first() -{ - DBUG_ENTER("spider_db_oracle_row::first"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_PRINT("info",("spider ind_first=%p", ind_first)); - ind = ind_first; - DBUG_PRINT("info",("spider val_first=%p", val_first)); - val = val_first; - DBUG_PRINT("info",("spider rlen_first=%p", rlen_first)); - rlen = rlen_first; - DBUG_PRINT("info",("spider row_size_first=%p", row_size_first)); - row_size = row_size_first; - DBUG_PRINT("info",("spider val_str_first=%p", val_str_first)); - val_str = val_str_first; - DBUG_VOID_RETURN; -} - -void spider_db_oracle_row::next() -{ - DBUG_ENTER("spider_db_oracle_row::next"); - DBUG_PRINT("info",("spider this=%p", this)); - ind++; - val++; - rlen++; - row_size++; - val_str++; - DBUG_VOID_RETURN; -} - -bool spider_db_oracle_row::is_null() -{ - DBUG_ENTER("spider_db_oracle_row::is_null"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN((*ind == -1)); -} - -int spider_db_oracle_row::val_int() -{ - DBUG_ENTER("spider_db_oracle_row::val_int"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN((*ind != -1) ? atoi(*val) : 0); -} - -double spider_db_oracle_row::val_real() -{ - DBUG_ENTER("spider_db_oracle_row::val_real"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN((*ind != -1) ? my_atof(*val) : 0.0); -} - -my_decimal *spider_db_oracle_row::val_decimal( - my_decimal *decimal_value, - CHARSET_INFO *access_charset -) { - DBUG_ENTER("spider_db_oracle_row::val_decimal"); - DBUG_PRINT("info",("spider this=%p", this)); - if (*ind == -1) - DBUG_RETURN(NULL); - -#ifdef SPIDER_HAS_DECIMAL_OPERATION_RESULTS_VALUE_TYPE - decimal_operation_results(str2my_decimal(0, *val, *rlen, access_charset, - decimal_value), "", ""); -#else - decimal_operation_results(str2my_decimal(0, *val, *rlen, access_charset, - decimal_value)); -#endif - - DBUG_RETURN(decimal_value); -} - -SPIDER_DB_ROW *spider_db_oracle_row::clone() -{ - uint i; - spider_db_oracle_row *clone_row; - DBUG_ENTER("spider_db_oracle_row::clone"); - DBUG_PRINT("info",("spider this=%p", this)); - if (!(clone_row = new spider_db_oracle_row(dbton_id))) - { - DBUG_RETURN(NULL); - } - clone_row->db_conn = db_conn; - clone_row->result = result; - clone_row->field_count = field_count; - clone_row->record_size = record_size; - clone_row->access_charset = access_charset; - clone_row->cloned = TRUE; - if (clone_row->init()) - { - delete clone_row; - DBUG_RETURN(NULL); - } - memcpy(clone_row->ind, ind_first, sizeof(ub2) * field_count * 4 + - sizeof(ulong) * field_count); - for (i = 0; i < field_count; i++) - { - if (clone_row->val_str[i].copy(val_str_first[i])) - { - delete clone_row; - DBUG_RETURN(NULL); - } - } - DBUG_RETURN((SPIDER_DB_ROW *) clone_row); -} - -int spider_db_oracle_row::store_to_tmp_table( - TABLE *tmp_table, - spider_string *str -) { - uint i; - DBUG_ENTER("spider_db_oracle_row::store_to_tmp_table"); - DBUG_PRINT("info",("spider this=%p", this)); - str->length(0); - for (i = 0; i < field_count; i++) - { - if (row_size_first[i]) - { - if (str->reserve(val_str_first[i].length())) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(val_str_first[i].ptr(), val_str_first[i].length()); - } - } - tmp_table->field[0]->set_notnull(); - tmp_table->field[0]->store( - (const char *) row_size_first, - sizeof(ulong) * field_count, &my_charset_bin); - tmp_table->field[1]->set_notnull(); - tmp_table->field[1]->store( - str->ptr(), str->length(), &my_charset_bin); - tmp_table->field[2]->set_notnull(); - tmp_table->field[2]->store( - (char *) ind_first, (uint) (sizeof(sb2) * field_count), &my_charset_bin); - DBUG_RETURN(tmp_table->file->ha_write_row(tmp_table->record[0])); -} - -uint spider_db_oracle_row::get_byte_size() -{ - DBUG_ENTER("spider_db_oracle_row::get_byte_size"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(record_size); -} - -int spider_db_oracle_row::init() -{ - char *tmp_val; - uint i; - DBUG_ENTER("spider_db_oracle_row::init"); - DBUG_PRINT("info",("spider this=%p", this)); - if ( - !(ind = (sb2 *) - spider_bulk_malloc(spider_current_trx, SPD_MID_DB_ORACLE_ROW_INIT_1, MYF(MY_WME | MY_ZEROFILL), - &ind, (uint) (sizeof(sb2) * field_count), - &rlen, (uint) (sizeof(ub2) * field_count), - &coltp, (uint) (sizeof(ub2) * field_count), - &colsz, (uint) (sizeof(ub2) * field_count), - &row_size, (uint) (sizeof(ulong) * field_count), - &val, (uint) (sizeof(char *) * field_count), - &tmp_val, (uint) (MAX_FIELD_WIDTH * field_count), - &defnp, (uint) (sizeof(OCIDefine *) * field_count), - &lobhp, (uint) (sizeof(OCILobLocator *) * field_count), - &colhp, (uint) (sizeof(OCIParam *) * field_count), - NullS) - ) || - !(val_str = new spider_string[field_count]) - ) { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - ind_first = ind; - val_first = val; - rlen_first = rlen; - row_size_first = row_size; - val_str_first = val_str; - for (i = 0; i < field_count; i++) - { - val[i] = tmp_val; - val_str[i].init_calc_mem(SPD_MID_DB_ORACLE_ROW_INIT_2); - val_str[i].set(tmp_val, MAX_FIELD_WIDTH, access_charset); - tmp_val += MAX_FIELD_WIDTH; - } - DBUG_RETURN(0); -} - -void spider_db_oracle_row::deinit() -{ - uint i; - DBUG_ENTER("spider_db_oracle_row::deinit"); - DBUG_PRINT("info",("spider this=%p", this)); - if (!cloned) - { - for (i = 0; i < field_count; i++) - { - if (defnp && defnp[i]) - { - OCIHandleFree(defnp[i], OCI_HTYPE_DEFINE); - defnp[i] = NULL; - } - if (lobhp && lobhp[i]) - { - OCIDescriptorFree(lobhp[i], OCI_DTYPE_LOB); - lobhp[i] = NULL; - } - } - } - if (val_str_first) - { - delete [] val_str_first; - val_str_first = NULL; - } - if (ind_first) - { - spider_free(spider_current_trx, ind_first, MYF(0)); - ind_first = NULL; - } - DBUG_VOID_RETURN; -} - -int spider_db_oracle_row::define() -{ - sword res; - uint i; - DBUG_ENTER("spider_db_oracle_row::define"); - DBUG_PRINT("info",("spider this=%p", this)); - for (i = 0; i < field_count; i++) - { - if (coltp[i] == SQLT_BLOB) - { - res = OCIDescriptorAlloc(db_conn->envhp, (dvoid **) &lobhp[i], - OCI_DTYPE_LOB, 0, 0); - if (res != OCI_SUCCESS) - { - DBUG_RETURN( - spider_db_oracle_get_error(res, db_conn->errhp, 0, NULL, NULL, - access_charset, NULL)); - } - res = OCIDefineByPos(result->stmtp, &defnp[i], db_conn->errhp, i + 1, - &lobhp[i], 0, SQLT_BLOB, &ind[i], &rlen[i], NULL, - OCI_DEFAULT); - } else if (coltp[i] == SQLT_DAT) - { - res = OCIDefineByPos(result->stmtp, &defnp[i], db_conn->errhp, i + 1, - (char *) val_str[i].ptr() + 20, sizeof(ub1) * 7, SQLT_DAT, &ind[i], - &rlen[i], NULL, OCI_DEFAULT); - } else { - if (val_str[i].alloc(colsz[i])) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - res = OCIDefineByPos(result->stmtp, &defnp[i], db_conn->errhp, i + 1, - (char *) val_str[i].ptr(), colsz[i], SQLT_CHR, &ind[i], &rlen[i], NULL, - OCI_DEFAULT); - } - if (res != OCI_SUCCESS) - { - DBUG_RETURN( - spider_db_oracle_get_error(res, db_conn->errhp, 0, NULL, NULL, - access_charset, NULL)); - } - } - DBUG_RETURN(0); -} - -int spider_db_oracle_row::fetch() -{ - sword res; - uint i; - DBUG_ENTER("spider_db_oracle_row::fetch"); - DBUG_PRINT("info",("spider this=%p", this)); - record_size = 0; - for (i = 0; i < field_count; i++) - { - if (ind[i] == -1) - { - DBUG_PRINT("info",("spider NULL")); - val_str[i].length(0); - } else { - if (coltp[i] == SQLT_BLOB) - { - DBUG_PRINT("info",("spider SQLT_BLOB")); - oraub8 len; - res = OCILobGetLength2(db_conn->svchp, db_conn->errhp, lobhp[i], &len); - if (res != OCI_SUCCESS) - { - DBUG_RETURN( - spider_db_oracle_get_error(res, db_conn->errhp, 0, NULL, NULL, - access_charset, NULL)); - } -#ifndef DBUG_OFF - { - ulonglong print_len = len; - DBUG_PRINT("info",("spider len=%llu", print_len)); - } -#endif - if (val_str[i].alloc(len)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - res = OCILobRead2(db_conn->svchp, db_conn->errhp, lobhp[i], &len, - NULL, 1, (char *) val_str[i].ptr(), len, OCI_ONE_PIECE, NULL, NULL, - 0, 0); - if (res != OCI_SUCCESS) - { - DBUG_RETURN( - spider_db_oracle_get_error(res, db_conn->errhp, 0, NULL, NULL, - access_charset, NULL)); - } -#ifndef DBUG_OFF - { - ulonglong print_len = len; - DBUG_PRINT("info",("spider lenb=%llu", print_len)); - } -#endif - val_str[i].length(len); - } else if (coltp[i] == SQLT_DAT) - { - DBUG_PRINT("info",("spider SQLT_DAT")); - char *val = (char *) val_str[i].ptr(); - ub1 *src = (ub1 *) val + 20; - val_str[i].length(19); - if (src[0] < 100) - my_sprintf(val, (val, "0000-00-00 00:00:00")); - else - my_sprintf(val, (val, "%02u%02u-%02u-%02u %02u:%02u:%02u", - src[0] - 100, src[1] - 100, src[2], src[3], - src[4] - 1, src[5] - 1, src[6] - 1)); - } else { - val_str[i].length(rlen[i]); - } - } - row_size[i] = val_str[i].length(); - record_size += row_size[i]; - } - DBUG_RETURN(0); -} - -spider_db_oracle_result::spider_db_oracle_result(SPIDER_DB_CONN *in_db_conn) : - spider_db_result(in_db_conn), - db_conn(NULL), stmtp(NULL), field_count(0), access_charset(NULL), - fetched(FALSE), row(in_db_conn->dbton_id) -{ - DBUG_ENTER("spider_db_oracle_result::spider_db_oracle_result"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_VOID_RETURN; -} - -spider_db_oracle_result::~spider_db_oracle_result() -{ - DBUG_ENTER("spider_db_oracle_result::~spider_db_oracle_result"); - DBUG_PRINT("info",("spider this=%p", this)); - free_result(); - DBUG_VOID_RETURN; -} - -bool spider_db_oracle_result::has_result() -{ - DBUG_ENTER("spider_db_oracle_result::has_result"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(stmtp); -} - -void spider_db_oracle_result::free_result() -{ - DBUG_ENTER("spider_db_oracle_result::free_result"); - DBUG_PRINT("info",("spider this=%p", this)); - if (stmtp) - { - OCIHandleFree(stmtp, OCI_HTYPE_STMT); - stmtp = NULL; - } - DBUG_VOID_RETURN; -} - -SPIDER_DB_ROW *spider_db_oracle_result::current_row() -{ - DBUG_ENTER("spider_db_oracle_result::current_row"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN((SPIDER_DB_ROW *) row.clone()); -} - -SPIDER_DB_ROW *spider_db_oracle_result::fetch_row() -{ - sword res; - DBUG_ENTER("spider_db_oracle_result::fetch_row"); - DBUG_PRINT("info",("spider this=%p", this)); - row.ind = row.ind_first; - row.val = row.val_first; - row.rlen = row.rlen_first; - row.row_size = row.row_size_first; - row.val_str = row.val_str_first; - if (fetched) - { - /* already fetched */ - fetched = FALSE; - } else { - res = OCIStmtFetch2(stmtp, db_conn->errhp, 1, OCI_FETCH_NEXT, 0, - OCI_DEFAULT); - if (res != OCI_SUCCESS) - { - store_error_num = spider_db_oracle_get_error(res, db_conn->errhp, 0, - NULL, NULL, access_charset, NULL); - DBUG_RETURN(NULL); - } - } - if ((store_error_num = row.fetch())) - { - DBUG_RETURN(NULL); - } - DBUG_RETURN((SPIDER_DB_ROW *) &row); -} - -SPIDER_DB_ROW *spider_db_oracle_result::fetch_row_from_result_buffer( - spider_db_result_buffer *spider_res_buf -) { - sword res; - DBUG_ENTER("spider_db_oracle_result::fetch_row_from_result_buffer"); - DBUG_PRINT("info",("spider this=%p", this)); - row.ind = row.ind_first; - row.val = row.val_first; - row.rlen = row.rlen_first; - row.row_size = row.row_size_first; - row.val_str = row.val_str_first; - if (fetched) - { - /* already fetched */ - fetched = FALSE; - } else { - res = OCIStmtFetch2(stmtp, db_conn->errhp, 1, OCI_FETCH_NEXT, 0, - OCI_DEFAULT); - if (res != OCI_SUCCESS) - { - store_error_num = spider_db_oracle_get_error(res, db_conn->errhp, 0, - NULL, NULL, access_charset, NULL); - DBUG_RETURN(NULL); - } - } - if ((store_error_num = row.fetch())) - { - DBUG_RETURN(NULL); - } - DBUG_RETURN((SPIDER_DB_ROW *) &row); -} - -SPIDER_DB_ROW *spider_db_oracle_result::fetch_row_from_tmp_table( - TABLE *tmp_table -) { - uint i; - const char *str; - spider_string tmp_str1, tmp_str2, tmp_str3; - DBUG_ENTER("spider_db_oracle_result::fetch_row_from_tmp_table"); - DBUG_PRINT("info",("spider this=%p", this)); - tmp_str1.init_calc_mem(SPD_MID_DB_ORACLE_RESULT_FETCH_ROW_FROM_TMP_TABLE_1); - tmp_str2.init_calc_mem(SPD_MID_DB_ORACLE_RESULT_FETCH_ROW_FROM_TMP_TABLE_2); - tmp_str3.init_calc_mem(SPD_MID_DB_ORACLE_RESULT_FETCH_ROW_FROM_TMP_TABLE_3); - tmp_table->field[0]->val_str(tmp_str1.get_str()); - tmp_table->field[1]->val_str(tmp_str2.get_str()); - tmp_table->field[2]->val_str(tmp_str3.get_str()); - tmp_str1.mem_calc(); - tmp_str2.mem_calc(); - tmp_str3.mem_calc(); - row.ind = row.ind_first; - row.val = row.val_first; - row.rlen = row.rlen_first; - row.row_size = row.row_size_first; - row.val_str = row.val_str_first; - DBUG_PRINT("info",("spider tmp_str1.length()=%u", tmp_str1.length())); - DBUG_PRINT("info",("spider tmp_str2.length()=%u", tmp_str2.length())); - DBUG_PRINT("info",("spider tmp_str3.length()=%u", tmp_str3.length())); - memcpy(row.ind, tmp_str3.ptr(), tmp_str3.length()); - memcpy(row.row_size, tmp_str1.ptr(), tmp_str1.length()); - row.field_count = tmp_str1.length() / sizeof(ulong); - str = tmp_str2.ptr(); - for (i = 0; i < row.field_count; i++) - { - row.val_str[i].length(0); - if (row.row_size[i]) - { - if (row.val_str[i].reserve(row.row_size[i])) - { - store_error_num = HA_ERR_OUT_OF_MEM; - DBUG_RETURN(NULL); - } - row.val_str[i].q_append(str, row.row_size[i]); - str += row.row_size[i]; - } - } - row.record_size = tmp_str2.length(); - DBUG_RETURN((SPIDER_DB_ROW *) &row); -} - -int spider_db_oracle_result::fetch_table_status( - int mode, - ha_statistics &stat -) { - DBUG_ENTER("spider_db_oracle_result::fetch_table_status"); - DBUG_PRINT("info",("spider this=%p", this)); - /* TODO: develop later */ - stat.records = 2; - stat.mean_rec_length = 65535; - stat.data_file_length = 65535; - stat.max_data_file_length = 65535; - stat.index_file_length = 65535; -/* - auto_increment_value = 0; -*/ - stat.create_time = (time_t) 0; - stat.update_time = (time_t) 0; - stat.check_time = (time_t) 0; - DBUG_RETURN(0); -} - -int spider_db_oracle_result::fetch_table_records( - int mode, - ha_rows &records -) { - DBUG_ENTER("spider_db_oracle_result::fetch_table_records"); - DBUG_PRINT("info",("spider this=%p", this)); - if (!fetch_row()) - { - records = 0; - } else { - records = row.val_int(); - } - DBUG_RETURN(0); -} - -int spider_db_oracle_result::fetch_table_cardinality( - int mode, - TABLE *table, - longlong *cardinality, - uchar *cardinality_upd, - int bitmap_size -) { - DBUG_ENTER("spider_db_oracle_result::fetch_table_cardinality"); - DBUG_PRINT("info",("spider this=%p", this)); - /* TODO: develop later */ - DBUG_RETURN(0); -} - -int spider_db_oracle_result::fetch_table_mon_status( - int &status -) { - DBUG_ENTER("spider_db_oracle_result::fetch_table_mon_status"); - DBUG_PRINT("info",("spider this=%p", this)); - /* TODO: develop later */ - status = SPIDER_LINK_MON_OK; - DBUG_RETURN(0); -} - -longlong spider_db_oracle_result::num_rows() -{ - sword res; - ub4 rowcnt; - DBUG_ENTER("spider_db_oracle_result::num_rows"); - DBUG_PRINT("info",("spider this=%p", this)); - res = OCIAttrGet(stmtp, OCI_HTYPE_STMT, &rowcnt, 0, - OCI_ATTR_ROW_COUNT, db_conn->errhp); - if (res != OCI_SUCCESS) - { - spider_db_oracle_get_error(res, db_conn->errhp, 0, NULL, NULL, - access_charset, NULL); - DBUG_RETURN(0); - } - DBUG_PRINT("info",("spider rowcnt=%u", rowcnt)); - DBUG_RETURN((longlong) rowcnt); -} - -uint spider_db_oracle_result::num_fields() -{ - sword res; - ub4 parmcnt; - DBUG_ENTER("spider_db_oracle_result::num_fields"); - DBUG_PRINT("info",("spider this=%p", this)); - res = OCIAttrGet(stmtp, OCI_HTYPE_STMT, &parmcnt, 0, - OCI_ATTR_PARAM_COUNT, db_conn->errhp); - if (res != OCI_SUCCESS) - { - spider_db_oracle_get_error(res, db_conn->errhp, 0, NULL, NULL, - access_charset, NULL); - DBUG_RETURN(0); - } - DBUG_RETURN((uint) parmcnt); -} - -void spider_db_oracle_result::move_to_pos( - longlong pos -) { - sword res; - DBUG_ENTER("spider_db_oracle_result::move_to_pos"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_PRINT("info",("spider pos=%lld", pos)); - res = OCIStmtFetch2(stmtp, db_conn->errhp, 1, OCI_FETCH_ABSOLUTE, pos, - OCI_DEFAULT); - if (res != OCI_SUCCESS) - { - spider_db_oracle_get_error(res, db_conn->errhp, 0, NULL, NULL, - access_charset, NULL); - } - DBUG_VOID_RETURN; -} - -int spider_db_oracle_result::set_column_info() -{ - sword res; - uint i; - DBUG_ENTER("spider_db_oracle_result::set_column_info"); - DBUG_PRINT("info",("spider this=%p", this)); - for (i = 0; i < field_count; i++) - { - res = OCIParamGet(stmtp, OCI_HTYPE_STMT, db_conn->errhp, - (dvoid **) &row.colhp[i], i + 1); - if (res != OCI_SUCCESS) - { - DBUG_RETURN(spider_db_oracle_get_error(res, db_conn->errhp, 0, NULL, - NULL, access_charset, NULL)); - } - res = OCIAttrGet(row.colhp[i], OCI_DTYPE_PARAM, &row.coltp[i], NULL, - OCI_ATTR_DATA_TYPE, db_conn->errhp); - if (res != OCI_SUCCESS) - { - DBUG_RETURN(spider_db_oracle_get_error(res, db_conn->errhp, 0, NULL, - NULL, access_charset, NULL)); - } - res = OCIAttrGet(row.colhp[i], OCI_DTYPE_PARAM, &row.colsz[i], NULL, - OCI_ATTR_DATA_SIZE, db_conn->errhp); - if (res != OCI_SUCCESS) - { - DBUG_RETURN(spider_db_oracle_get_error(res, db_conn->errhp, 0, NULL, - NULL, access_charset, NULL)); - } - } - DBUG_RETURN(0); -} - -int spider_db_oracle_result::get_errno() -{ - DBUG_ENTER("spider_db_oracle_result::get_errno"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_PRINT("info",("spider store_error_num=%d", store_error_num)); - DBUG_RETURN(store_error_num); -} - -#ifdef SPIDER_HAS_DISCOVER_TABLE_STRUCTURE -int spider_db_oracle_result::fetch_columns_for_discover_table_structure( - spider_string *str, - CHARSET_INFO *access_charset -) { - DBUG_ENTER("spider_db_oracle_result::fetch_columns_for_discover_table_structure"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(HA_ERR_WRONG_COMMAND); -} - -int spider_db_oracle_result::fetch_index_for_discover_table_structure( - spider_string *str, - CHARSET_INFO *access_charset -) { - DBUG_ENTER("spider_db_oracle_result::fetch_index_for_discover_table_structure"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(HA_ERR_WRONG_COMMAND); -} - -int spider_db_oracle_result::fetch_table_for_discover_table_structure( - spider_string *str, - SPIDER_SHARE *spider_share, - CHARSET_INFO *access_charset -) { - DBUG_ENTER("spider_db_oracle_result::fetch_table_for_discover_table_structure"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(HA_ERR_WRONG_COMMAND); -} -#endif - -spider_db_oracle::spider_db_oracle( - SPIDER_CONN *conn -) : spider_db_conn(conn), envhp(NULL), errhp(NULL), srvhp(NULL), svchp(NULL), - usrhp(NULL), stmtp(NULL), txnhp(NULL), result(NULL), table_lock_mode(0), - lock_table_hash_inited(FALSE), handler_open_array_inited(FALSE) -{ - DBUG_ENTER("spider_db_oracle::spider_db_oracle"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_VOID_RETURN; -} - -spider_db_oracle::~spider_db_oracle() -{ - DBUG_ENTER("spider_db_oracle::~spider_db_oracle"); - DBUG_PRINT("info",("spider this=%p", this)); - if (handler_open_array_inited) - { - reset_opened_handler(); - spider_free_mem_calc(spider_current_trx, - handler_open_array_id, - handler_open_array.max_element * - handler_open_array.size_of_element); - delete_dynamic(&handler_open_array); - } - if (lock_table_hash_inited) - { - spider_free_mem_calc(spider_current_trx, - lock_table_hash_id, - lock_table_hash.array.max_element * - lock_table_hash.array.size_of_element); - my_hash_free(&lock_table_hash); - } - disconnect(); - DBUG_VOID_RETURN; -} - -int spider_db_oracle::init() -{ - DBUG_ENTER("spider_db_oracle::init"); - DBUG_PRINT("info",("spider this=%p", this)); - if ( - my_hash_init(&lock_table_hash, spd_charset_utf8mb3_bin, 32, 0, 0, - (my_hash_get_key) spider_link_get_key, 0, 0) - ) { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - spider_alloc_calc_mem_init(lock_table_hash, SPD_MID_DB_ORACLE_INIT_1); - spider_alloc_calc_mem(spider_current_trx, - lock_table_hash, - lock_table_hash.array.max_element * - lock_table_hash.array.size_of_element); - lock_table_hash_inited = TRUE; - - if ( - SPD_INIT_DYNAMIC_ARRAY2(&handler_open_array, - sizeof(SPIDER_LINK_FOR_HASH *), NULL, 16, 16, MYF(MY_WME)) - ) { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - spider_alloc_calc_mem_init(handler_open_array, SPD_MID_DB_ORACLE_INIT_2); - spider_alloc_calc_mem(spider_current_trx, - handler_open_array, - handler_open_array.max_element * - handler_open_array.size_of_element); - handler_open_array_inited = TRUE; - DBUG_RETURN(0); -} - -bool spider_db_oracle::is_connected() -{ - DBUG_ENTER("spider_db_oracle::is_connected"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(svchp); -} - -void spider_db_oracle::bg_connect() -{ - sword res; - DBUG_ENTER("spider_db_oracle::bg_connect"); - DBUG_PRINT("info",("spider this=%p", this)); - res = OCIEnvNlsCreate(&envhp, OCI_DEFAULT, 0, 0, 0, 0, 0, 0, 0, 0); -/* - res = OCIEnvCreate(&envhp, OCI_THREADED, 0, 0, 0, 0, 0, 0); -*/ - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider create environment error")); - stored_error_num = set_error(res, errhp, 0, NULL, NULL); - goto error; - } - DBUG_PRINT("info",("spider OCI init envhp=%p", envhp)); - - res = OCIHandleAlloc(envhp, (dvoid **) &errhp, OCI_HTYPE_ERROR, 0, 0); - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider create error handler error")); - stored_error_num = set_error(res, errhp, 0, NULL, NULL); - bg_disconnect(); - goto error; - } - DBUG_PRINT("info",("spider OCI init errhp=%p", errhp)); - - res = OCIHandleAlloc(envhp, (dvoid **) &srvhp, OCI_HTYPE_SERVER, 0, 0); - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider create server handler error")); - stored_error_num = set_error(res, errhp, 0, NULL, NULL); - bg_disconnect(); - goto error; - } - DBUG_PRINT("info",("spider OCI init srvhp=%p", srvhp)); - - res = OCIServerAttach(srvhp, errhp, (OraText *) tgt_host, strlen(tgt_host), - OCI_DEFAULT); - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider attach server error")); - stored_error_num = set_error(res, errhp, 0, NULL, NULL); - bg_disconnect(); - goto error; - } - - res = OCIHandleAlloc(envhp, (dvoid **) &svchp, OCI_HTYPE_SVCCTX, 0, 0); - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider create service context error")); - stored_error_num = set_error(res, errhp, 0, NULL, NULL); - bg_disconnect(); - goto error; - } - DBUG_PRINT("info",("spider OCI init svchp=%p", svchp)); - - res = OCIAttrSet(svchp, OCI_HTYPE_SVCCTX, srvhp, 0, OCI_ATTR_SERVER, errhp); - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider set server attr error")); - stored_error_num = set_error(res, errhp, 0, NULL, NULL); - bg_disconnect(); - goto error; - } - - res = OCIHandleAlloc(envhp, (dvoid **) &usrhp, OCI_HTYPE_SESSION, 0, 0); - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider create session handler error")); - stored_error_num = set_error(res, errhp, 0, NULL, NULL); - bg_disconnect(); - goto error; - } - DBUG_PRINT("info",("spider OCI init usrhp=%p", usrhp)); - - res = OCIAttrSet(usrhp, OCI_HTYPE_SESSION, - tgt_username, strlen(tgt_username), OCI_ATTR_USERNAME, errhp); - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider set username attr error")); - stored_error_num = set_error(res, errhp, 0, NULL, NULL); - bg_disconnect(); - goto error; - } - - res = OCIAttrSet(usrhp, OCI_HTYPE_SESSION, - tgt_password, strlen(tgt_password), OCI_ATTR_PASSWORD, errhp); - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider set password attr error")); - stored_error_num = set_error(res, errhp, 0, NULL, NULL); - bg_disconnect(); - goto error; - } - - res = OCISessionBegin(svchp, errhp, usrhp, OCI_CRED_RDBMS, OCI_DEFAULT); - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider session begin error")); - stored_error_num = set_error(res, errhp, 0, NULL, NULL); - bg_disconnect(); - goto error; - } - DBUG_PRINT("info",("spider OCISessionBegin")); - - // set the session in the context handle - res = OCIAttrSet(svchp, OCI_HTYPE_SVCCTX, usrhp, 0, OCI_ATTR_SESSION, errhp); - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider set session attr error")); - stored_error_num = set_error(res, errhp, 0, NULL, NULL); - bg_disconnect(); - goto error; - } - - if ( - (stored_error_num = exec_query(SPIDER_SQL_SET_NLS_DATE_FORMAT_STR, - SPIDER_SQL_SET_NLS_DATE_FORMAT_LEN, -1)) || - (stored_error_num = exec_query(SPIDER_SQL_SET_NLS_TIME_FORMAT_STR, - SPIDER_SQL_SET_NLS_TIME_FORMAT_LEN, -1)) || - (stored_error_num = exec_query(SPIDER_SQL_SET_NLS_TIMESTAMP_FORMAT_STR, - SPIDER_SQL_SET_NLS_TIMESTAMP_FORMAT_LEN, -1)) - ) { - DBUG_PRINT("info",("spider init connection error")); - bg_disconnect(); - goto error; - } - DBUG_VOID_RETURN; - -error: - strmov(stored_error_msg, spider_stmt_da_message(current_thd)); - current_thd->clear_error(); - DBUG_VOID_RETURN; -} - -int spider_db_oracle::connect( - char *tgt_host, - char *tgt_username, - char *tgt_password, - long tgt_port, - char *tgt_socket, - char *server_name, - int connect_retry_count, - longlong connect_retry_interval -) { - int error_num; - DBUG_ENTER("spider_db_oracle::connect"); - DBUG_PRINT("info",("spider this=%p", this)); - this->tgt_host = tgt_host; - this->tgt_username = tgt_username; - this->tgt_password = tgt_password; - this->tgt_port = tgt_port; - this->tgt_socket = tgt_socket; - this->server_name = server_name; - this->connect_retry_count = connect_retry_count; - this->connect_retry_interval = connect_retry_interval; - if ((error_num = spider_create_conn_thread(conn))) - DBUG_RETURN(error_num); - spider_bg_conn_simple_action(conn, SPIDER_SIMPLE_CONNECT, TRUE, NULL, - 0, NULL); - - if (stored_error_num) - { - my_message(stored_error_num, stored_error_msg, MYF(0)); - DBUG_RETURN(stored_error_num); - } - DBUG_RETURN(0); -} - -int spider_db_oracle::ping( -) { - sword res; - DBUG_ENTER("spider_db_oracle::ping"); - DBUG_PRINT("info",("spider this=%p", this)); - res = OCIPing(svchp, errhp, OCI_DEFAULT); - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider ping error %d", res)); - DBUG_RETURN(ER_SPIDER_REMOTE_SERVER_GONE_AWAY_NUM); - } - DBUG_RETURN(0); -} - -void spider_db_oracle::bg_disconnect() -{ - DBUG_ENTER("spider_db_oracle::bg_disconnect"); - DBUG_PRINT("info",("spider this=%p", this)); - if (result) - { - delete result; - result = NULL; - } - if (txnhp) - { - DBUG_PRINT("info",("spider OCI free txnhp=%p", txnhp)); - OCIHandleFree(txnhp, OCI_HTYPE_TRANS); - txnhp = NULL; - } - if (stmtp) - { - DBUG_PRINT("info",("spider OCI free stmtp=%p", stmtp)); - OCIHandleFree(stmtp, OCI_HTYPE_STMT); - stmtp = NULL; - } - if (svchp && errhp && usrhp) - { - DBUG_PRINT("info",("spider OCISessionEnd")); - OCISessionEnd(svchp, errhp, usrhp, OCI_DEFAULT); - } - if (usrhp) - { - DBUG_PRINT("info",("spider OCI free usrhp=%p", usrhp)); - OCIHandleFree(usrhp, OCI_HTYPE_SESSION); - usrhp = NULL; - } - if (svchp) - { - DBUG_PRINT("info",("spider OCI free svchp=%p", svchp)); - OCIHandleFree(svchp, OCI_HTYPE_SVCCTX); - svchp = NULL; - } - if (srvhp) - { - DBUG_PRINT("info",("spider OCI free srvhp=%p", srvhp)); - OCIServerDetach(srvhp, errhp, OCI_DEFAULT); - OCIHandleFree(srvhp, OCI_HTYPE_SERVER); - srvhp = NULL; - } - if (errhp) - { - DBUG_PRINT("info",("spider OCI free errhp=%p", errhp)); - OCIHandleFree(errhp, OCI_HTYPE_ERROR); - errhp = NULL; - } - if (envhp) - { - DBUG_PRINT("info",("spider OCI free envhp=%p", envhp)); - OCIHandleFree(envhp, OCI_HTYPE_ENV); - envhp = NULL; - } - DBUG_VOID_RETURN; -} - -void spider_db_oracle::disconnect() -{ - DBUG_ENTER("spider_db_oracle::disconnect"); - DBUG_PRINT("info",("spider this=%p", this)); - if (!conn->bg_init) - DBUG_VOID_RETURN; - spider_bg_conn_simple_action(conn, SPIDER_SIMPLE_DISCONNECT, TRUE, NULL, - 0, NULL); - DBUG_VOID_RETURN; -} - -int spider_db_oracle::set_net_timeout() -{ - DBUG_ENTER("spider_db_oracle::set_net_timeout"); - DBUG_PRINT("info",("spider this=%p", this)); - /* TODO: develop later */ - DBUG_RETURN(0); -} - -int spider_db_oracle::exec_query( - const char *query, - uint length, - int quick_mode -) { - sword res; - int error_num; - DBUG_ENTER("spider_db_oracle::exec_query"); - DBUG_PRINT("info",("spider this=%p", this)); - if (spider_param_general_log()) - { - const char *tgt_str = conn->tgt_host; - uint32 tgt_len = conn->tgt_host_length; - spider_string tmp_query_str(length + conn->tgt_wrapper_length + - tgt_len + (SPIDER_SQL_SPACE_LEN * 2)); - tmp_query_str.init_calc_mem(SPD_MID_DB_ORACLE_EXEC_QUERY_1); - tmp_query_str.length(0); - tmp_query_str.q_append(conn->tgt_wrapper, conn->tgt_wrapper_length); - tmp_query_str.q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - tmp_query_str.q_append(tgt_str, tgt_len); - tmp_query_str.q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - tmp_query_str.q_append(query, length); - general_log_write(current_thd, COM_QUERY, tmp_query_str.ptr(), - tmp_query_str.length()); - } - stored_error_num = 0; - if (table_lock_mode && !conn->in_before_query) - { - DBUG_PRINT("info",("spider table_lock_mode=%d", table_lock_mode)); - table_lock_mode = 0; - if ((error_num = exec_query(exec_lock_sql->ptr(), exec_lock_sql->length(), - -1))) { - DBUG_RETURN(error_num); - } - } - - if (length) - { - if (result) - { - delete result; - result = NULL; - } - - if (!stmtp) - { - DBUG_PRINT("info",("spider create stmt")); - res = OCIHandleAlloc(envhp, (dvoid **) &stmtp, OCI_HTYPE_STMT, 0, 0); - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider create stmt handler error")); - DBUG_RETURN(set_error(res, errhp, 0, NULL, NULL)); - } - } - - res = OCIStmtPrepare(stmtp, errhp, (OraText *) query, length, - OCI_NTV_SYNTAX, OCI_DEFAULT); - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider stmt prepare error")); - DBUG_RETURN(set_error(res, errhp, 0, NULL, NULL)); - } - -/* - if ((result = new spider_db_oracle_result())) - { - result->db_conn = this; - result->stmtp = stmtp; - stmtp = NULL; - result->field_count = result->num_fields(); - result->row.field_count = result->field_count; - result->row.db_conn = this; - result->row.result = result; - if ((error_num = result->row.init())) - { - delete result; - result = NULL; - DBUG_RETURN(error_num); - } - } else { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } -*/ - - /* select statement check */ - ub4 iters; - if ( - !strncasecmp(query, "select ", sizeof("select ") - 1) || - !strncasecmp(query, "(select ", sizeof("(select ") - 1) - ) { - iters = 0; - } else { - iters = 1; - } - - if (quick_mode) - { - DBUG_PRINT("info",("spider use OCI_DEFAULT")); - res = OCIStmtExecute(svchp, stmtp, errhp, iters, 0, NULL, NULL, - OCI_DEFAULT); - } else { - DBUG_PRINT("info",("spider use OCI_STMT_SCROLLABLE_READONLY")); - res = OCIStmtExecute(svchp, stmtp, errhp, iters, 0, NULL, NULL, - OCI_STMT_SCROLLABLE_READONLY); -/* - if (res == OCI_SUCCESS) - { - DBUG_PRINT("info",("spider fetch last for row count")); - res = OCIStmtFetch2(result->stmtp, errhp, 1, OCI_FETCH_LAST, 0, - OCI_DEFAULT); - } - if (res == OCI_SUCCESS) - { - DBUG_PRINT("info",("spider fetch first for row count")); - res = OCIStmtFetch2(result->stmtp, errhp, 1, OCI_FETCH_FIRST, 0, - OCI_DEFAULT); - } -*/ - } - if (res == OCI_SUCCESS && iters) - { - DBUG_PRINT("info",("spider get row count")); - ub4 row_count; - res = OCIAttrGet(stmtp, OCI_HTYPE_STMT, &row_count, 0, - OCI_ATTR_ROW_COUNT, errhp); - update_rows = (uint) row_count; - DBUG_PRINT("info",("spider row_count=%u", update_rows)); - } - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider stmt execute error")); - error_num = set_error(res, errhp, 0, NULL, NULL); - if (error_num == HA_ERR_END_OF_FILE) - DBUG_RETURN(0); - DBUG_RETURN(error_num); - } - - if ((result = new spider_db_oracle_result(this))) - { - result->db_conn = this; - result->stmtp = stmtp; - stmtp = NULL; - result->field_count = result->num_fields(); - result->row.field_count = result->field_count; - result->row.db_conn = this; - result->row.result = result; - result->row.access_charset = conn->access_charset; - result->access_charset = conn->access_charset; - if ( - (error_num = result->row.init()) || - (error_num = result->set_column_info()) - ) { - delete result; - result = NULL; - DBUG_RETURN(error_num); - } - result->row.define(); - } else { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - - if (!quick_mode && !iters) - { - if (res == OCI_SUCCESS) - { - DBUG_PRINT("info",("spider fetch last for row count")); - res = OCIStmtFetch2(result->stmtp, errhp, 1, OCI_FETCH_LAST, 0, - OCI_DEFAULT); - } - if (res == OCI_SUCCESS) - { - DBUG_PRINT("info",("spider fetch first for row count")); - res = OCIStmtFetch2(result->stmtp, errhp, 1, OCI_FETCH_FIRST, 0, - OCI_DEFAULT); - } - if (res != OCI_SUCCESS) - { - DBUG_PRINT("info",("spider stmt execute error")); - error_num = set_error(res, errhp, 0, NULL, NULL); - if (error_num == HA_ERR_END_OF_FILE) - DBUG_RETURN(0); - DBUG_RETURN(error_num); - } - result->fetched = TRUE; - } - } - DBUG_RETURN(0); -} - -int spider_db_oracle::get_errno() -{ - DBUG_ENTER("spider_db_oracle::get_errno"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_PRINT("info",("spider stored_error=%d", stored_error_num)); - DBUG_RETURN(stored_error_num); -} - -const char *spider_db_oracle::get_error() -{ - DBUG_ENTER("spider_db_oracle::get_error"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_PRINT("info",("spider error=%s", stored_error)); - DBUG_RETURN(stored_error); -} - -bool spider_db_oracle::is_server_gone_error( - int error_num -) { - DBUG_ENTER("spider_db_oracle::is_server_gone_error"); - DBUG_PRINT("info",("spider this=%p", this)); - /* TODO: develop later */ - DBUG_RETURN(FALSE); -} - -bool spider_db_oracle::is_dup_entry_error( - int error_num -) { - DBUG_ENTER("spider_db_oracle::is_dup_entry_error"); - DBUG_PRINT("info",("spider this=%p", this)); - if (error_num == HA_ERR_FOUND_DUPP_KEY) - DBUG_RETURN(TRUE); - DBUG_RETURN(FALSE); -} - -bool spider_db_oracle::is_xa_nota_error( - int error_num -) { - DBUG_ENTER("spider_db_oracle::is_xa_nota_error"); - DBUG_PRINT("info",("spider this=%p", this)); - /* TODO: develop later */ - DBUG_RETURN(FALSE); -} - -spider_db_result *spider_db_oracle::store_result( - spider_db_result_buffer **spider_res_buf, - st_spider_db_request_key *request_key, - int *error_num -) { - spider_db_oracle_result *tmp_result = result; - DBUG_ENTER("spider_db_oracle::store_result"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_ASSERT(!spider_res_buf); - if (stored_error_num == HA_ERR_END_OF_FILE) - { - *error_num = HA_ERR_END_OF_FILE; - DBUG_RETURN(NULL); - } - - *error_num = 0; - result = NULL; - DBUG_RETURN(tmp_result); -} - -spider_db_result *spider_db_oracle::use_result( - ha_spider *spider, - st_spider_db_request_key *request_key, - int *error_num -) { - spider_db_oracle_result *tmp_result = result; - DBUG_ENTER("spider_db_oracle::use_result"); - DBUG_PRINT("info",("spider this=%p", this)); - if (stored_error_num == HA_ERR_END_OF_FILE) - { - *error_num = HA_ERR_END_OF_FILE; - DBUG_RETURN(NULL); - } - - *error_num = 0; - result = NULL; - DBUG_RETURN(tmp_result); -} - -int spider_db_oracle::next_result() -{ - DBUG_ENTER("spider_db_oracle::next_result"); - DBUG_PRINT("info",("spider this=%p", this)); - /* TODO: develop later */ - DBUG_RETURN(-1); -} - -uint spider_db_oracle::affected_rows() -{ - DBUG_ENTER("spider_db_oracle::affected_rows"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(update_rows); -} - -uint spider_db_oracle::matched_rows() -{ - DBUG_ENTER("spider_db_oracle::matched_rows"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(0); -} - -bool spider_db_oracle::inserted_info( - spider_db_handler *handler, - ha_copy_info *copy_info -) { - DBUG_ENTER("spider_db_oracle::inserted_info"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(FALSE); -} - -ulonglong spider_db_oracle::last_insert_id() -{ - DBUG_ENTER("spider_db_oracle::last_insert_id"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(stored_last_insert_id); -} - -int spider_db_oracle::set_character_set( - const char *csname -) { - DBUG_ENTER("spider_db_oracle::set_character_set"); - DBUG_PRINT("info",("spider this=%p", this)); - /* TODO: develop later */ - DBUG_RETURN(0); -} - -int spider_db_oracle::select_db( - const char *dbname -) { - DBUG_ENTER("spider_db_oracle::select_db"); - DBUG_PRINT("info",("spider this=%p", this)); - /* nothing to do for oracle */ - DBUG_RETURN(0); -} - -int spider_db_oracle::consistent_snapshot( - int *need_mon -) { - DBUG_ENTER("spider_db_oracle::consistent_snapshot"); - DBUG_PRINT("info",("spider this=%p", this)); - /* nothing to do for oracle */ - DBUG_RETURN(0); -} - -bool spider_db_oracle::trx_start_in_bulk_sql() -{ - DBUG_ENTER("spider_db_oracle::trx_start_in_bulk_sql"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(FALSE); -} - -int spider_db_oracle::start_transaction( - int *need_mon -) { - DBUG_ENTER("spider_db_oracle::start_transaction"); - DBUG_PRINT("info",("spider this=%p", this)); - if (conn->in_before_query) - { - if (conn->queued_semi_trx_isolation) - { - if (conn->queued_semi_trx_isolation_val != conn->trx_isolation) - { - /* nothing to do */ - DBUG_RETURN(0); - } - } else if (conn->queued_trx_isolation) - { - if (conn->queued_trx_isolation_val != conn->trx_isolation) - { - /* nothing to do */ - DBUG_RETURN(0); - } - } - DBUG_RETURN(set_trx_isolation(conn->trx_isolation, need_mon)); - } - pthread_mutex_assert_owner(&conn->mta_conn_mutex); - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - if (spider_db_query( - conn, - SPIDER_SQL_START_TRANSACTION_STR, - SPIDER_SQL_START_TRANSACTION_LEN, - -1, - need_mon) - ) { - DBUG_RETURN(spider_db_errorno(conn)); - } - DBUG_RETURN(0); -} - -int spider_db_oracle::commit( - int *need_mon -) { - sword res; - DBUG_ENTER("spider_db_oracle::commit"); - DBUG_PRINT("info",("spider this=%p", this)); - if (conn->table_locked) - { - conn->table_locked = FALSE; - spider_current_trx->locked_connections--; - } - res = OCITransCommit(svchp, errhp, OCI_DEFAULT); - if (res != OCI_SUCCESS) - { - *need_mon = set_error(res, errhp, 0, NULL, NULL); - DBUG_RETURN(*need_mon); - } - DBUG_RETURN(0); -} - -int spider_db_oracle::rollback( - int *need_mon -) { - sword res; - DBUG_ENTER("spider_db_oracle::rollback"); - DBUG_PRINT("info",("spider this=%p", this)); - if (conn->table_locked) - { - conn->table_locked = FALSE; - spider_current_trx->locked_connections--; - } - if (svchp && errhp) - { - res = OCITransRollback(svchp, errhp, OCI_DEFAULT); - if (res != OCI_SUCCESS) - { - *need_mon = set_error(res, errhp, 0, NULL, NULL); - DBUG_RETURN(*need_mon); - } - } - DBUG_RETURN(0); -} - -bool spider_db_oracle::xa_start_in_bulk_sql() -{ - DBUG_ENTER("spider_db_oracle::xa_start_in_bulk_sql"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(FALSE); -} - -int spider_db_oracle::xa_start( - XID *xid, - int *need_mon -) { - sword res; - DBUG_ENTER("spider_db_oracle::xa_start"); - DBUG_PRINT("info",("spider this=%p", this)); - if (txnhp) - { - OCIHandleFree(txnhp, OCI_HTYPE_TRANS); - txnhp = NULL; - } - OCIHandleAlloc((dvoid *)envhp, (dvoid **)&txnhp, OCI_HTYPE_TRANS, 0, 0); - OCIAttrSet((dvoid *)svchp, OCI_HTYPE_SVCCTX, (dvoid *)txnhp, 0, - OCI_ATTR_TRANS, errhp); - OCIAttrSet((dvoid *)txnhp, OCI_HTYPE_TRANS, (dvoid *)xid, sizeof(XID), - OCI_ATTR_XID, errhp); - - res = OCITransStart(svchp, errhp, 31622400, OCI_TRANS_NEW); - if (res != OCI_SUCCESS) - { - *need_mon = set_error(res, errhp, 0, NULL, NULL); - DBUG_RETURN(*need_mon); - } - DBUG_RETURN(0); -} - -int spider_db_oracle::xa_end( - XID *xid, - int *need_mon -) { - DBUG_ENTER("spider_db_oracle::xa_end"); - DBUG_PRINT("info",("spider this=%p", this)); - /* nothing to do for oracle */ - DBUG_RETURN(0); -} - -int spider_db_oracle::xa_prepare( - XID *xid, - int *need_mon -) { - sword res; - DBUG_ENTER("spider_db_oracle::xa_prepare"); - DBUG_PRINT("info",("spider this=%p", this)); - res = OCITransPrepare(svchp, errhp, OCI_DEFAULT); - if (res != OCI_SUCCESS) - { - *need_mon = set_error(res, errhp, 0, NULL, NULL); - DBUG_RETURN(*need_mon); - } - DBUG_RETURN(0); -} - -int spider_db_oracle::xa_commit( - XID *xid, - int *need_mon -) { - sword res; - DBUG_ENTER("spider_db_oracle::xa_commit"); - DBUG_PRINT("info",("spider this=%p", this)); - if (conn->table_locked) - { - conn->table_locked = FALSE; - spider_current_trx->locked_connections--; - } - res = OCITransCommit(svchp, errhp, OCI_TRANS_TWOPHASE); - if (res != OCI_SUCCESS) - { - *need_mon = set_error(res, errhp, 0, NULL, NULL); - if (txnhp) - { - OCIHandleFree(txnhp, OCI_HTYPE_TRANS); - txnhp = NULL; - } - DBUG_RETURN(*need_mon); - } - if (txnhp) - { - OCIHandleFree(txnhp, OCI_HTYPE_TRANS); - txnhp = NULL; - } - DBUG_RETURN(0); -} - -int spider_db_oracle::xa_rollback( - XID *xid, - int *need_mon -) { - sword res; - DBUG_ENTER("spider_db_oracle::xa_rollback"); - DBUG_PRINT("info",("spider this=%p", this)); - if (svchp && errhp) - { - res = OCITransRollback(svchp, errhp, OCI_DEFAULT); - if (res != OCI_SUCCESS) - { - *need_mon = set_error(res, errhp, 0, NULL, NULL); - if (txnhp) - { - OCIHandleFree(txnhp, OCI_HTYPE_TRANS); - txnhp = NULL; - } - DBUG_RETURN(*need_mon); - } - } - if (txnhp) - { - OCIHandleFree(txnhp, OCI_HTYPE_TRANS); - txnhp = NULL; - } - DBUG_RETURN(0); -} - -bool spider_db_oracle::set_trx_isolation_in_bulk_sql() -{ - DBUG_ENTER("spider_db_oracle::set_trx_isolation_in_bulk_sql"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(FALSE); -} - -int spider_db_oracle::set_trx_isolation( - int trx_isolation, - int *need_mon -) { - DBUG_ENTER("spider_db_oracle::set_trx_isolation"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (trx_isolation) - { - case ISO_READ_UNCOMMITTED: - case ISO_READ_COMMITTED: - if (conn->in_before_query) - { - DBUG_RETURN(exec_query(SPIDER_SQL_ISO_READ_COMMITTED_STR, - SPIDER_SQL_ISO_READ_COMMITTED_LEN, -1)); - } - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = need_mon; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - if (spider_db_query( - conn, - SPIDER_SQL_ISO_READ_COMMITTED_STR, - SPIDER_SQL_ISO_READ_COMMITTED_LEN, - -1, - need_mon) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - DBUG_RETURN(spider_db_errorno(conn)); - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - break; - case ISO_REPEATABLE_READ: - case ISO_SERIALIZABLE: - if (conn->in_before_query) - { - DBUG_RETURN(exec_query(SPIDER_SQL_ISO_SERIALIZABLE_STR, - SPIDER_SQL_ISO_SERIALIZABLE_LEN, -1)); - } - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = need_mon; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - if (spider_db_query( - conn, - SPIDER_SQL_ISO_SERIALIZABLE_STR, - SPIDER_SQL_ISO_SERIALIZABLE_LEN, - -1, - need_mon) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - DBUG_RETURN(spider_db_errorno(conn)); - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - break; - default: - DBUG_RETURN(HA_ERR_UNSUPPORTED); - } - DBUG_RETURN(0); -} - -bool spider_db_oracle::set_autocommit_in_bulk_sql() -{ - DBUG_ENTER("spider_db_oracle::set_autocommit_in_bulk_sql"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(FALSE); -} - -int spider_db_oracle::set_autocommit( - bool autocommit, - int *need_mon -) { - DBUG_ENTER("spider_db_oracle::set_autocommit"); - DBUG_PRINT("info",("spider this=%p", this)); - if (autocommit) - { - if (conn->in_before_query) - { - DBUG_RETURN(exec_query(SPIDER_SQL_AUTOCOMMIT_ON_STR, - SPIDER_SQL_AUTOCOMMIT_ON_LEN, -1)); - } - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = need_mon; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - if (spider_db_query( - conn, - SPIDER_SQL_AUTOCOMMIT_ON_STR, - SPIDER_SQL_AUTOCOMMIT_ON_LEN, - -1, - need_mon) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - DBUG_RETURN(spider_db_errorno(conn)); - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - } else { - if (conn->in_before_query) - { - DBUG_RETURN(exec_query(SPIDER_SQL_AUTOCOMMIT_OFF_STR, - SPIDER_SQL_AUTOCOMMIT_OFF_LEN, -1)); - } - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = need_mon; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - if (spider_db_query( - conn, - SPIDER_SQL_AUTOCOMMIT_OFF_STR, - SPIDER_SQL_AUTOCOMMIT_OFF_LEN, - -1, - need_mon) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - DBUG_RETURN(spider_db_errorno(conn)); - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - } - DBUG_RETURN(0); -} - -bool spider_db_oracle::set_sql_log_off_in_bulk_sql() -{ - DBUG_ENTER("spider_db_oracle::set_sql_log_off_in_bulk_sql"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(FALSE); -} - -int spider_db_oracle::set_sql_log_off( - bool sql_log_off, - int *need_mon -) { - DBUG_ENTER("spider_db_oracle::set_sql_log_off"); - DBUG_PRINT("info",("spider this=%p", this)); - /* nothing to do */ - DBUG_RETURN(0); -} - -bool spider_db_oracle::set_wait_timeout_in_bulk_sql() -{ - DBUG_ENTER("spider_db_oracle::set_wait_timeout_in_bulk_sql"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(FALSE); -} - -int spider_db_oracle::set_wait_timeout( - int wait_timeout, - int *need_mon -) { - DBUG_ENTER("spider_db_oracle::set_wait_timeout"); - DBUG_PRINT("info",("spider this=%p", this)); - /* nothing to do */ - DBUG_RETURN(0); -} - -bool spider_db_oracle::set_sql_mode_in_bulk_sql() -{ - DBUG_ENTER("spider_db_oracle::set_sql_mode_in_bulk_sql"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(FALSE); -} - -int spider_db_oracle::set_sql_mode( - sql_mode_t sql_mode, - int *need_mon -) { - DBUG_ENTER("spider_db_oracle::set_sql_mode"); - DBUG_PRINT("info",("spider this=%p", this)); - /* nothing to do */ - DBUG_RETURN(0); -} - -bool spider_db_oracle::set_time_zone_in_bulk_sql() -{ - DBUG_ENTER("spider_db_oracle::set_time_zone_in_bulk_sql"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(FALSE); -} - -int spider_db_oracle::set_time_zone( - Time_zone *time_zone, - int *need_mon -) { - DBUG_ENTER("spider_db_oracle::set_time_zone"); - DBUG_PRINT("info",("spider this=%p", this)); - /* nothing to do */ - DBUG_RETURN(0); -} - -int spider_db_oracle::show_master_status( - SPIDER_TRX *trx, - SPIDER_SHARE *share, - int all_link_idx, - int *need_mon, - TABLE *table, - spider_string *str, - int mode, - SPIDER_DB_RESULT **res1, - SPIDER_DB_RESULT **res2 -) { - DBUG_ENTER("spider_db_oracle::show_master_status"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(0); -} - - -size_t spider_db_oracle::escape_string( - char *to, - const char *from, - size_t from_length -) { - DBUG_ENTER("spider_db_oracle::escape_string"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(util.escape_string(to, from, from_length, conn->access_charset)); -} - -bool spider_db_oracle::have_lock_table_list() -{ - DBUG_ENTER("spider_db_oracle::have_lock_table_list"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(lock_table_hash.records); -} - -int spider_db_oracle::append_lock_tables( - spider_string *str -) { - int error_num; - ha_spider *tmp_spider; - int lock_type; - uint conn_link_idx; - int tmp_link_idx; - SPIDER_LINK_FOR_HASH *tmp_link_for_hash; - const char *db_name; - uint db_name_length; - CHARSET_INFO *db_name_charset; - const char *table_name; - uint table_name_length; - CHARSET_INFO *table_name_charset; - DBUG_ENTER("spider_db_oracle::lock_tables"); - DBUG_PRINT("info",("spider this=%p", this)); - if ((tmp_link_for_hash = - (SPIDER_LINK_FOR_HASH *) my_hash_element(&lock_table_hash, 0))) - { - if ((error_num = spider_db_oracle_utility.append_lock_table_head(str))) - { - DBUG_RETURN(error_num); - } - - tmp_spider = tmp_link_for_hash->spider; - tmp_link_idx = tmp_link_for_hash->link_idx; - switch (tmp_spider->wide_handler->lock_type) - { - case TL_READ: - lock_type = SPIDER_DB_TABLE_LOCK_READ_LOCAL; - break; - case TL_READ_NO_INSERT: - lock_type = SPIDER_DB_TABLE_LOCK_READ; - break; - case TL_WRITE_LOW_PRIORITY: - lock_type = SPIDER_DB_TABLE_LOCK_LOW_PRIORITY_WRITE; - break; - case TL_WRITE: - lock_type = SPIDER_DB_TABLE_LOCK_WRITE; - break; - default: - // no lock - DBUG_PRINT("info",("spider lock_type=%d", - tmp_spider->wide_handler->lock_type)); - DBUG_RETURN(0); - } - conn_link_idx = tmp_spider->conn_link_idx[tmp_link_idx]; - spider_oracle_share *db_share = (spider_oracle_share *) - tmp_spider->share->dbton_share[conn->dbton_id]; - if (&db_share->db_names_str[conn_link_idx]) - { - db_name = db_share->db_names_str[conn_link_idx].ptr(); - db_name_length = db_share->db_names_str[conn_link_idx].length(); - db_name_charset = tmp_spider->share->access_charset; - } else { - db_name = tmp_spider->share->tgt_dbs[conn_link_idx]; - db_name_length = tmp_spider->share->tgt_dbs_lengths[conn_link_idx]; - db_name_charset = system_charset_info; - } - if (&db_share->table_names_str[conn_link_idx]) - { - table_name = db_share->table_names_str[conn_link_idx].ptr(); - table_name_length = db_share->table_names_str[conn_link_idx].length(); - table_name_charset = tmp_spider->share->access_charset; - } else { - table_name = tmp_spider->share->tgt_table_names[conn_link_idx]; - table_name_length = - tmp_spider->share->tgt_table_names_lengths[conn_link_idx]; - table_name_charset = system_charset_info; - } - if ((error_num = spider_db_oracle_utility. - append_lock_table_body( - str, - db_name, - db_name_length, - db_name_charset, - table_name, - table_name_length, - table_name_charset, - lock_type - ) - )) { - my_hash_reset(&lock_table_hash); - DBUG_RETURN(error_num); - } - my_hash_delete(&lock_table_hash, (uchar*) tmp_link_for_hash); - - if ((error_num = spider_db_oracle_utility.append_lock_table_tail(str))) - { - DBUG_RETURN(error_num); - } - } - DBUG_RETURN(0); -} - -int spider_db_oracle::append_unlock_tables( - spider_string *str -) { - int error_num; - DBUG_ENTER("spider_db_oracle::append_unlock_tables"); - DBUG_PRINT("info",("spider this=%p", this)); - if ((error_num = spider_db_oracle_utility.append_unlock_table(str))) - { - DBUG_RETURN(error_num); - } - DBUG_RETURN(0); -} - -uint spider_db_oracle::get_lock_table_hash_count() -{ - DBUG_ENTER("spider_db_oracle::get_lock_table_hash_count"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(lock_table_hash.records); -} - -void spider_db_oracle::reset_lock_table_hash() -{ - DBUG_ENTER("spider_db_oracle::reset_lock_table_hash"); - DBUG_PRINT("info",("spider this=%p", this)); - my_hash_reset(&lock_table_hash); - DBUG_VOID_RETURN; -} - -uint spider_db_oracle::get_opened_handler_count() -{ - DBUG_ENTER("spider_db_oracle::get_opened_handler_count"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(handler_open_array.elements); -} - -void spider_db_oracle::reset_opened_handler() -{ - ha_spider *tmp_spider; - int tmp_link_idx; - SPIDER_LINK_FOR_HASH **tmp_link_for_hash; - DBUG_ENTER("spider_db_oracle::reset_opened_handler"); - DBUG_PRINT("info",("spider this=%p", this)); - while ((tmp_link_for_hash = - (SPIDER_LINK_FOR_HASH **) pop_dynamic(&handler_open_array))) - { - tmp_spider = (*tmp_link_for_hash)->spider; - tmp_link_idx = (*tmp_link_for_hash)->link_idx; - tmp_spider->clear_handler_opened(tmp_link_idx, conn->conn_kind); - } - DBUG_VOID_RETURN; -} - -void spider_db_oracle::set_dup_key_idx( - ha_spider *spider, - int link_idx -) { - TABLE *table = spider->get_table(); - uint roop_count, pk_idx = table->s->primary_key; - int key_name_length; - int max_length = 0; - char *key_name, *tmp_pos; - char buf[SPIDER_ORACLE_ERR_BUF_LEN]; - DBUG_ENTER("spider_db_oracle::set_dup_key_idx"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_PRINT("info",("spider error_str=%s", stored_error_msg)); - memcpy(buf, spider->share->tgt_dbs[link_idx], - spider->share->tgt_dbs_lengths[link_idx]); - tmp_pos = buf + spider->share->tgt_dbs_lengths[link_idx]; - *tmp_pos = '.'; - ++tmp_pos; - for (roop_count = 0; roop_count < table->s->keys; roop_count++) - { - if (roop_count == pk_idx) - { - DBUG_PRINT("info",("spider pk_idx=%u", roop_count)); - int all_link_idx = spider->conn_link_idx[link_idx]; - key_name = spider->share->tgt_pk_names[all_link_idx]; - key_name_length = spider->share->tgt_pk_names_lengths[all_link_idx]; - } else { - key_name = (char *) table->s->key_info[roop_count].name.str; - key_name_length = table->s->key_info[roop_count].name.length; - } - memcpy(tmp_pos, key_name, key_name_length + 1); - DBUG_PRINT("info",("spider key_name=%s", key_name)); - DBUG_PRINT("info",("spider full key name=%s", buf)); - if ( - max_length < key_name_length && - strcasestr(stored_error_msg, buf) - ) { - max_length = key_name_length; - spider->dup_key_idx = roop_count; - } - } - if (max_length == 0) - spider->dup_key_idx = (uint) -1; - DBUG_PRINT("info",("spider dup_key_idx=%d", spider->dup_key_idx)); - DBUG_VOID_RETURN; -} - -bool spider_db_oracle::cmp_request_key_to_snd( - st_spider_db_request_key *request_key -) { - DBUG_ENTER("spider_db_oracle::cmp_request_key_to_snd"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(TRUE); -} - -int spider_db_oracle::set_error( - sword res, - dvoid *hndlp, - int error_num, - const char *error1, - const char *error2 -) { - DBUG_ENTER("spider_db_oracle::set_error"); - DBUG_PRINT("info",("spider this=%p", this)); - stored_error_num = - spider_db_oracle_get_error(res, hndlp, error_num, error1, error2, - conn->access_charset, stored_error_msg); - if (stored_error_num) - stored_error = ER_SPIDER_ORACLE_ERR; - else - stored_error = ""; - DBUG_RETURN(stored_error_num); -} - -spider_db_oracle_util::spider_db_oracle_util() : spider_db_util() -{ - DBUG_ENTER("spider_db_oracle_util::spider_db_oracle_util"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_VOID_RETURN; -} - -spider_db_oracle_util::~spider_db_oracle_util() -{ - DBUG_ENTER("spider_db_oracle_util::~spider_db_oracle_util"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_VOID_RETURN; -} - -int spider_db_oracle_util::append_name( - spider_string *str, - const char *name, - uint name_length -) { - DBUG_ENTER("spider_db_oracle_util::append_name"); - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - str->q_append(name, name_length); - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_name_with_charset( - spider_string *str, - const char *name, - uint name_length, - CHARSET_INFO *name_charset -) { - DBUG_ENTER("spider_db_oracle_util::append_name_with_charset"); - if (str->reserve(SPIDER_SQL_NAME_QUOTE_LEN * 2 + name_length * 2)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - str->append(name, name_length, name_charset); - if (str->reserve(SPIDER_SQL_NAME_QUOTE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_escaped_name( - spider_string *str, - const char *name, - uint name_length -) { - int error_num; - DBUG_ENTER("spider_db_oracle_util::append_name"); - if (str->reserve(SPIDER_SQL_NAME_QUOTE_LEN * 2 + name_length * 2)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - if ((error_num = spider_db_append_name_with_quote_str_internal( - str, name, name_length, dbton_id))) - { - DBUG_RETURN(error_num); - } - if (str->reserve(SPIDER_SQL_NAME_QUOTE_LEN)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_escaped_name_with_charset( - spider_string *str, - const char *name, - uint name_length, - CHARSET_INFO *name_charset -) { - int error_num; - DBUG_ENTER("spider_db_oracle_util::append_name_with_charset"); - if (str->reserve(SPIDER_SQL_NAME_QUOTE_LEN * 2 + name_length * 2)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - if ((error_num = spider_db_append_name_with_quote_str_internal( - str, name, name_length, name_charset, dbton_id))) - { - DBUG_RETURN(error_num); - } - if (str->reserve(SPIDER_SQL_NAME_QUOTE_LEN)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - DBUG_RETURN(0); -} - -bool spider_db_oracle_util::is_name_quote( - const char head_code -) { - DBUG_ENTER("spider_db_oracle_util::is_name_quote"); - DBUG_RETURN(head_code == *name_quote_str); -} - -int spider_db_oracle_util::append_escaped_name_quote( - spider_string *str -) { - DBUG_ENTER("spider_db_oracle_util::append_escaped_name_quote"); - if (str->reserve(SPIDER_SQL_NAME_QUOTE_LEN * 2)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_column_value( - ha_spider *spider, - spider_string *str, - Field *field, - const uchar *new_ptr, - CHARSET_INFO *access_charset -) { - char buf[MAX_FIELD_WIDTH]; - spider_string tmp_str(buf, MAX_FIELD_WIDTH, &my_charset_bin); - String *ptr; - uint length; - Time_zone *saved_time_zone = thd->variables.time_zone; - DBUG_ENTER("spider_db_oracle_util::append_column_value"); - tmp_str.init_calc_mem(SPD_MID_DB_ORACLE_UTIL_APPEND_COLUMN_VALUE_1); - - thd->variables.time_zone = UTC; - - if (new_ptr) - { - if ( - field->type() == MYSQL_TYPE_BLOB || - field->real_type() == MYSQL_TYPE_VARCHAR - ) { - length = uint2korr(new_ptr); - tmp_str.set_quick((char *) new_ptr + HA_KEY_BLOB_LENGTH, length, - &my_charset_bin); - ptr = tmp_str.get_str(); - } else if (field->type() == MYSQL_TYPE_GEOMETRY) - { -/* - uint mlength = SIZEOF_STORED_DOUBLE, lcnt; - uchar *dest = (uchar *) buf; - const uchar *source; - for (lcnt = 0; lcnt < 4; lcnt++) - { - mlength = SIZEOF_STORED_DOUBLE; - source = new_ptr + mlength + SIZEOF_STORED_DOUBLE * lcnt; - while (mlength--) - *dest++ = *--source; - } - tmp_str.length(SIZEOF_STORED_DOUBLE * lcnt); -*/ - double xmin, xmax, ymin, ymax; -/* - float8store(buf,xmin); - float8store(buf+8,xmax); - float8store(buf+16,ymin); - float8store(buf+24,ymax); - memcpy(&xmin,new_ptr,sizeof(xmin)); - memcpy(&xmax,new_ptr + 8,sizeof(xmax)); - memcpy(&ymin,new_ptr + 16,sizeof(ymin)); - memcpy(&ymax,new_ptr + 24,sizeof(ymax)); - float8get(xmin, buf); - float8get(xmax, buf + 8); - float8get(ymin, buf + 16); - float8get(ymax, buf + 24); - DBUG_PRINT("info", ("spider geo is %f %f %f %f", - xmin, xmax, ymin, ymax)); - DBUG_PRINT("info", ("spider geo is %.14g %.14g %.14g %.14g", - xmin, xmax, ymin, ymax)); -*/ - float8get(xmin, new_ptr); - float8get(xmax, new_ptr + 8); - float8get(ymin, new_ptr + 16); - float8get(ymax, new_ptr + 24); - DBUG_PRINT("info", ("spider geo is %f %f %f %f", - xmin, xmax, ymin, ymax)); -/* - float8get(xmin, new_ptr + SIZEOF_STORED_DOUBLE * 4); - float8get(xmax, new_ptr + SIZEOF_STORED_DOUBLE * 5); - float8get(ymin, new_ptr + SIZEOF_STORED_DOUBLE * 6); - float8get(ymax, new_ptr + SIZEOF_STORED_DOUBLE * 7); - DBUG_PRINT("info", ("spider geo is %f %f %f %f", - xmin, xmax, ymin, ymax)); - float8get(xmin, new_ptr + SIZEOF_STORED_DOUBLE * 8); - float8get(xmax, new_ptr + SIZEOF_STORED_DOUBLE * 9); - float8get(ymin, new_ptr + SIZEOF_STORED_DOUBLE * 10); - float8get(ymax, new_ptr + SIZEOF_STORED_DOUBLE * 11); - DBUG_PRINT("info", ("spider geo is %f %f %f %f", - xmin, xmax, ymin, ymax)); - float8get(xmin, new_ptr + SIZEOF_STORED_DOUBLE * 12); - float8get(xmax, new_ptr + SIZEOF_STORED_DOUBLE * 13); - float8get(ymin, new_ptr + SIZEOF_STORED_DOUBLE * 14); - float8get(ymax, new_ptr + SIZEOF_STORED_DOUBLE * 15); - DBUG_PRINT("info", ("spider geo is %f %f %f %f", - xmin, xmax, ymin, ymax)); -*/ -/* - tmp_str.set_quick((char *) new_ptr, SIZEOF_STORED_DOUBLE * 4, - &my_charset_bin); -*/ - tmp_str.length(0); - tmp_str.q_append((char *) SPIDER_SQL_LINESTRING_HEAD_STR, - SPIDER_SQL_LINESTRING_HEAD_LEN); - tmp_str.q_append((char *) new_ptr, SIZEOF_STORED_DOUBLE); - tmp_str.q_append((char *) new_ptr + SIZEOF_STORED_DOUBLE * 2, - SIZEOF_STORED_DOUBLE); - tmp_str.q_append((char *) new_ptr + SIZEOF_STORED_DOUBLE, - SIZEOF_STORED_DOUBLE); - tmp_str.q_append((char *) new_ptr + SIZEOF_STORED_DOUBLE * 3, - SIZEOF_STORED_DOUBLE); - ptr = tmp_str.get_str(); - } else { - ptr = field->val_str(tmp_str.get_str(), new_ptr); - tmp_str.mem_calc(); - } - } else { - ptr = field->val_str(tmp_str.get_str()); - tmp_str.mem_calc(); - } - - thd->variables.time_zone = saved_time_zone; - - DBUG_PRINT("info", ("spider field->type() is %d", field->type())); - DBUG_PRINT("info", ("spider ptr->length() is %d", ptr->length())); -/* - if ( - field->type() == MYSQL_TYPE_BIT || - (field->type() >= MYSQL_TYPE_TINY_BLOB && - field->type() <= MYSQL_TYPE_BLOB) - ) { - uchar *hex_ptr = (uchar *) ptr->ptr(), *end_ptr; - char *str_ptr; - DBUG_PRINT("info", ("spider HEX")); - if (str->reserve(SPIDER_SQL_HEX_LEN + ptr->length() * 2)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_HEX_STR, SPIDER_SQL_HEX_LEN); - str_ptr = (char *) str->ptr() + str->length(); - for (end_ptr = hex_ptr + ptr->length(); hex_ptr < end_ptr; hex_ptr++) - { - *str_ptr++ = spider_dig_upper[(*hex_ptr) >> 4]; - *str_ptr++ = spider_dig_upper[(*hex_ptr) & 0x0F]; - } - str->length(str->length() + ptr->length() * 2); - } else -*/ - if (field->result_type() == STRING_RESULT) - { - DBUG_PRINT("info", ("spider STRING_RESULT")); - if (str->reserve(SPIDER_SQL_VALUE_QUOTE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - if ( - field->type() == MYSQL_TYPE_VARCHAR || - (field->type() >= MYSQL_TYPE_ENUM && - field->type() <= MYSQL_TYPE_GEOMETRY) - ) { - DBUG_PRINT("info", ("spider append_escaped")); - char buf2[MAX_FIELD_WIDTH]; - spider_string tmp_str2(buf2, MAX_FIELD_WIDTH, access_charset); - tmp_str2.init_calc_mem(SPD_MID_DB_ORACLE_UTIL_APPEND_COLUMN_VALUE_2); - tmp_str2.length(0); - if ( - tmp_str2.append(ptr->ptr(), ptr->length(), field->charset()) || - str->reserve(tmp_str2.length() * 2) || - append_escaped_util(str, tmp_str2.get_str()) - ) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } else if (str->append(*ptr)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - if (str->reserve(SPIDER_SQL_VALUE_QUOTE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - } else if (field->str_needs_quotes()) - { - if (str->reserve(SPIDER_SQL_VALUE_QUOTE_LEN * 2 + ptr->length() * 2 + 2)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - append_escaped_util(str, ptr); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - } else if (str->append(*ptr)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_from_with_alias( - spider_string *str, - const char **table_names, - uint *table_name_lengths, - const char **table_aliases, - uint *table_alias_lengths, - uint table_count, - int *table_name_pos, - bool over_write -) { - uint roop_count, length = 0; - DBUG_ENTER("spider_db_oracle_util::append_from_with_alias"); - DBUG_PRINT("info",("spider this=%p", this)); - if (!over_write) - { - for (roop_count = 0; roop_count < table_count; roop_count++) - length += table_name_lengths[roop_count] + SPIDER_SQL_SPACE_LEN + - table_alias_lengths[roop_count] + SPIDER_SQL_COMMA_LEN; - if (str->reserve(SPIDER_SQL_FROM_LEN + length)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN); - *table_name_pos = str->length(); - } - for (roop_count = 0; roop_count < table_count; roop_count++) - { - str->q_append(table_names[roop_count], table_name_lengths[roop_count]); - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - str->q_append(table_aliases[roop_count], table_alias_lengths[roop_count]); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_trx_isolation( - spider_string *str, - int trx_isolation -) { - DBUG_ENTER("spider_db_oracle_util::append_trx_isolation"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_SEMICOLON_LEN + - SPIDER_SQL_ISO_READ_COMMITTED_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - if (str->length()) - { - str->q_append(SPIDER_SQL_SEMICOLON_STR, SPIDER_SQL_SEMICOLON_LEN); - } - switch (trx_isolation) - { - case ISO_READ_UNCOMMITTED: - case ISO_READ_COMMITTED: - str->q_append(SPIDER_SQL_ISO_READ_COMMITTED_STR, - SPIDER_SQL_ISO_READ_COMMITTED_LEN); - break; - case ISO_REPEATABLE_READ: - case ISO_SERIALIZABLE: - str->q_append(SPIDER_SQL_ISO_SERIALIZABLE_STR, - SPIDER_SQL_ISO_SERIALIZABLE_LEN); - break; - default: - DBUG_RETURN(HA_ERR_UNSUPPORTED); - } - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_autocommit( - spider_string *str, - bool autocommit -) { - DBUG_ENTER("spider_db_oracle_util::append_autocommit"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_SEMICOLON_LEN + SPIDER_SQL_AUTOCOMMIT_OFF_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - if (str->length()) - { - str->q_append(SPIDER_SQL_SEMICOLON_STR, SPIDER_SQL_SEMICOLON_LEN); - } - if (autocommit) - { - str->q_append(SPIDER_SQL_AUTOCOMMIT_ON_STR, - SPIDER_SQL_AUTOCOMMIT_ON_LEN); - } else { - str->q_append(SPIDER_SQL_AUTOCOMMIT_OFF_STR, - SPIDER_SQL_AUTOCOMMIT_OFF_LEN); - } - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_sql_log_off( - spider_string *str, - bool sql_log_off -) { - DBUG_ENTER("spider_db_oracle_util::append_sql_log_off"); - DBUG_PRINT("info",("spider this=%p", this)); - /* nothing to do */ - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_wait_timeout( - spider_string *str, - int wait_timeout -) { - DBUG_ENTER("spider_db_oracle_util::append_wait_timeout"); - DBUG_PRINT("info",("spider this=%p", this)); - /* nothing to do */ - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_sql_mode( - spider_string *str, - sql_mode_t sql_mode -) { - DBUG_ENTER("spider_db_oracle_util::append_sql_mode"); - DBUG_PRINT("info",("spider this=%p", this)); - /* nothing to do */ - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_time_zone( - spider_string *str, - Time_zone *time_zone -) { - DBUG_ENTER("spider_db_oracle_util::append_time_zone"); - DBUG_PRINT("info",("spider this=%p", this)); - /* nothing to do */ - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_start_transaction( - spider_string *str -) { - DBUG_ENTER("spider_db_oracle_util::append_start_transaction"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_SEMICOLON_LEN + - SPIDER_SQL_START_TRANSACTION_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - if (str->length()) - { - str->q_append(SPIDER_SQL_SEMICOLON_STR, SPIDER_SQL_SEMICOLON_LEN); - } - str->q_append(SPIDER_SQL_START_TRANSACTION_STR, - SPIDER_SQL_START_TRANSACTION_LEN); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_xa_start( - spider_string *str, - XID *xid -) { - DBUG_ENTER("spider_db_oracle_util::append_xa_start"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_ASSERT(0); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_lock_table_head( - spider_string *str -) { - DBUG_ENTER("spider_db_oracle_util::append_lock_table_head"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_lock_table_body( - spider_string *str, - const char *db_name, - uint db_name_length, - CHARSET_INFO *db_name_charset, - const char *table_name, - uint table_name_length, - CHARSET_INFO *table_name_charset, - int lock_type -) { - DBUG_ENTER("spider_db_oracle_util::append_lock_table_body"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_SEMICOLON_LEN + SPIDER_SQL_LOCK_TABLE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - if (str->length()) - { - str->q_append(SPIDER_SQL_SEMICOLON_STR, SPIDER_SQL_SEMICOLON_LEN); - } - str->q_append(SPIDER_SQL_LOCK_TABLE_STR, SPIDER_SQL_LOCK_TABLE_LEN); - if (str->reserve(SPIDER_SQL_NAME_QUOTE_LEN)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - if ( - str->append(db_name, db_name_length, db_name_charset) || - str->reserve((SPIDER_SQL_NAME_QUOTE_LEN) * 2 + SPIDER_SQL_DOT_LEN) - ) { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - str->q_append(SPIDER_SQL_DOT_STR, SPIDER_SQL_DOT_LEN); - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - if ( - str->append(table_name, table_name_length, table_name_charset) || - str->reserve(SPIDER_SQL_NAME_QUOTE_LEN + - spider_db_table_lock_len[lock_type]) - ) { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - str->q_append(spider_db_table_lock_str[lock_type], - spider_db_table_lock_len[lock_type]); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_lock_table_tail( - spider_string *str -) { - DBUG_ENTER("spider_db_oracle_util::append_lock_table_tail"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_unlock_table( - spider_string *str -) { - DBUG_ENTER("spider_db_oracle_util::append_unlock_table"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_COMMIT_LEN)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_COMMIT_STR, SPIDER_SQL_COMMIT_LEN); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::open_item_func( - Item_func *item_func, - ha_spider *spider, - spider_string *str, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields -) { - uint dbton_id = spider_dbton_oracle.dbton_id; - int error_num; - Item *item, **item_list = item_func->arguments(); - Field *field; - uint roop_count, item_count = item_func->argument_count(), start_item = 0; - const char *func_name = SPIDER_SQL_NULL_CHAR_STR, - *separator_str = SPIDER_SQL_NULL_CHAR_STR, - *last_str = SPIDER_SQL_NULL_CHAR_STR; - int func_name_length = SPIDER_SQL_NULL_CHAR_LEN, - separator_str_length = SPIDER_SQL_NULL_CHAR_LEN, - last_str_length = SPIDER_SQL_NULL_CHAR_LEN; - int use_pushdown_udf; - bool merge_func = FALSE; - DBUG_ENTER("spider_db_oracle_util::open_item_func"); - if (str) - { - if (str->reserve(SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - } - DBUG_PRINT("info",("spider functype = %d", item_func->functype())); - switch (item_func->functype()) - { - case Item_func::ISNULL_FUNC: - last_str = SPIDER_SQL_IS_NULL_STR; - last_str_length = SPIDER_SQL_IS_NULL_LEN; - break; - case Item_func::ISNOTNULL_FUNC: - last_str = SPIDER_SQL_IS_NOT_NULL_STR; - last_str_length = SPIDER_SQL_IS_NOT_NULL_LEN; - break; - case Item_func::UNKNOWN_FUNC: - func_name = (char*) item_func->func_name(); - func_name_length = strlen(func_name); - DBUG_PRINT("info",("spider func_name = %s", func_name)); - DBUG_PRINT("info",("spider func_name_length = %d", func_name_length)); - if (func_name_length == 1 && - ( - !strncasecmp("+", func_name, func_name_length) || - !strncasecmp("-", func_name, func_name_length) || - !strncasecmp("*", func_name, func_name_length) || - !strncasecmp("/", func_name, func_name_length) || - !strncasecmp("%", func_name, func_name_length) || - !strncasecmp("&", func_name, func_name_length) || - !strncasecmp("|", func_name, func_name_length) || - !strncasecmp("^", func_name, func_name_length) - ) - ) { - /* no action */ - break; - } else if (func_name_length == 2 && - ( - !strncasecmp("<<", func_name, func_name_length) || - !strncasecmp(">>", func_name, func_name_length) - ) - ) { - /* no action */ - break; - } else if (func_name_length == 3 && - !strncasecmp("div", func_name, func_name_length) - ) { - /* no action */ - break; - } else if (func_name_length == 4) - { - if ( - !strncasecmp("rand", func_name, func_name_length) && - !item_func->argument_count() - ) { - if (str) - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - DBUG_RETURN(spider_db_open_item_int(item_func, NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields)); - } else if ( - !strncasecmp("case", func_name, func_name_length) - ) { -#ifdef ITEM_FUNC_CASE_PARAMS_ARE_PUBLIC - Item_func_case *item_func_case = (Item_func_case *) item_func; - if (str) - { - if (str->reserve(SPIDER_SQL_CASE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CASE_STR, SPIDER_SQL_CASE_LEN); - } - if (item_func_case->first_expr_num != -1) - { - if ((error_num = spider_db_print_item_type( - item_list[item_func_case->first_expr_num], NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields))) - DBUG_RETURN(error_num); - } - for (roop_count = 0; roop_count < item_func_case->ncases; - roop_count += 2) - { - if (str) - { - if (str->reserve(SPIDER_SQL_WHEN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_WHEN_STR, SPIDER_SQL_WHEN_LEN); - } - if ((error_num = spider_db_print_item_type( - item_list[roop_count], NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields))) - DBUG_RETURN(error_num); - if (str) - { - if (str->reserve(SPIDER_SQL_THEN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_THEN_STR, SPIDER_SQL_THEN_LEN); - } - if ((error_num = spider_db_print_item_type( - item_list[roop_count + 1], NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields))) - DBUG_RETURN(error_num); - } - if (item_func_case->else_expr_num != -1) - { - if (str) - { - if (str->reserve(SPIDER_SQL_ELSE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_ELSE_STR, SPIDER_SQL_ELSE_LEN); - } - if ((error_num = spider_db_print_item_type( - item_list[item_func_case->else_expr_num], NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields))) - DBUG_RETURN(error_num); - } - if (str) - { - if (str->reserve(SPIDER_SQL_END_LEN + SPIDER_SQL_CLOSE_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_END_STR, SPIDER_SQL_END_LEN); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - } - DBUG_RETURN(0); -#else - DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); -#endif - } - } else if (func_name_length == 6 && - !strncasecmp("istrue", func_name, func_name_length) - ) { - last_str = SPIDER_SQL_IS_TRUE_STR; - last_str_length = SPIDER_SQL_IS_TRUE_LEN; - break; - } else if (func_name_length == 7) - { - if (!strncasecmp("isfalse", func_name, func_name_length)) - { - last_str = SPIDER_SQL_IS_FALSE_STR; - last_str_length = SPIDER_SQL_IS_FALSE_LEN; - break; - } else if ( - !strncasecmp("sysdate", func_name, func_name_length) || - !strncasecmp("curdate", func_name, func_name_length) || - !strncasecmp("curtime", func_name, func_name_length) - ) { - if (str) - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - DBUG_RETURN(spider_db_open_item_string(item_func, NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields)); - } else if ( - !strncasecmp("convert", func_name, func_name_length) - ) { - if (str) - { - if (str->reserve(func_name_length * 2 + SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, - SPIDER_SQL_OPEN_PAREN_LEN); - last_str = SPIDER_SQL_CLOSE_PAREN_STR; - last_str_length = SPIDER_SQL_CLOSE_PAREN_LEN; - } - break; - } - } else if (func_name_length == 8 && - ( - !strncasecmp("utc_date", func_name, func_name_length) || - !strncasecmp("utc_time", func_name, func_name_length) - ) - ) { - if (str) - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - DBUG_RETURN(spider_db_open_item_string(item_func, NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields)); - } else if (func_name_length == 9 && - !strncasecmp("isnottrue", func_name, func_name_length) - ) { - last_str = SPIDER_SQL_IS_NOT_TRUE_STR; - last_str_length = SPIDER_SQL_IS_NOT_TRUE_LEN; - break; - } else if (func_name_length == 10) - { - if (!strncasecmp("isnotfalse", func_name, func_name_length)) - { - last_str = SPIDER_SQL_IS_NOT_FALSE_STR; - last_str_length = SPIDER_SQL_IS_NOT_FALSE_LEN; - break; - } else if (!strncasecmp("column_get", func_name, func_name_length)) - { - if (str) - { - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - } - func_name = SPIDER_SQL_COMMA_STR; - func_name_length = SPIDER_SQL_COMMA_LEN; - separator_str = SPIDER_SQL_COMMA_STR; - separator_str_length = SPIDER_SQL_COMMA_LEN; - break; - } - } else if (func_name_length == 12) - { - if (!strncasecmp("cast_as_date", func_name, func_name_length)) - { - item = item_list[0]; - if (item->type() == Item::FUNC_ITEM) - { - DBUG_PRINT("info",("spider child is FUNC_ITEM")); - Item_func *ifunc = (Item_func *) item; - if (ifunc->functype() == Item_func::UNKNOWN_FUNC) - { - const char *child_func_name; - int child_func_name_length; - DBUG_PRINT("info",("spider child is UNKNOWN_FUNC")); - child_func_name = (char*) ifunc->func_name(); - child_func_name_length = strlen(child_func_name); - DBUG_PRINT("info",("spider child func_name is %s", child_func_name)); - if ( - child_func_name_length == 10 && - !strncasecmp("column_get", child_func_name, child_func_name_length) - ) { - DBUG_PRINT("info",("spider this is merge func")); - merge_func = TRUE; - } - } - } - - if (str) - { - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } - } - last_str = SPIDER_SQL_AS_DATE_STR; - last_str_length = SPIDER_SQL_AS_DATE_LEN; - break; - } else if (!strncasecmp("cast_as_time", func_name, func_name_length)) - { - item = item_list[0]; - if (item->type() == Item::FUNC_ITEM) - { - DBUG_PRINT("info",("spider child is FUNC_ITEM")); - Item_func *ifunc = (Item_func *) item; - if (ifunc->functype() == Item_func::UNKNOWN_FUNC) - { - const char *child_func_name; - int child_func_name_length; - DBUG_PRINT("info",("spider child is UNKNOWN_FUNC")); - child_func_name = (char*) ifunc->func_name(); - child_func_name_length = strlen(child_func_name); - DBUG_PRINT("info",("spider child func_name is %s", child_func_name)); - if ( - child_func_name_length == 10 && - !strncasecmp("column_get", child_func_name, child_func_name_length) - ) { - DBUG_PRINT("info",("spider this is merge func")); - merge_func = TRUE; - } - } - } - - if (str) - { - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } - } - last_str = SPIDER_SQL_AS_TIME_STR; - last_str_length = SPIDER_SQL_AS_TIME_LEN; - break; - } - } else if (func_name_length == 13) - { - if (!strncasecmp("utc_timestamp", func_name, func_name_length)) - { - if (str) - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - DBUG_RETURN(spider_db_open_item_string(item_func, NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields)); - } else if (!strncasecmp("timestampdiff", func_name, func_name_length)) - { - Item_func_timestamp_diff *item_func_timestamp_diff = - (Item_func_timestamp_diff *) item_func; - if (str) - { - const char *interval_str; - uint interval_len; - switch (item_func_timestamp_diff->get_int_type()) - { - case INTERVAL_YEAR: - interval_str = SPIDER_SQL_YEAR_STR; - interval_len = SPIDER_SQL_YEAR_LEN; - break; - case INTERVAL_QUARTER: - interval_str = SPIDER_SQL_QUARTER_STR; - interval_len = SPIDER_SQL_QUARTER_LEN; - break; - case INTERVAL_MONTH: - interval_str = SPIDER_SQL_MONTH_STR; - interval_len = SPIDER_SQL_MONTH_LEN; - break; - case INTERVAL_WEEK: - interval_str = SPIDER_SQL_WEEK_STR; - interval_len = SPIDER_SQL_WEEK_LEN; - break; - case INTERVAL_DAY: - interval_str = SPIDER_SQL_DAY_STR; - interval_len = SPIDER_SQL_DAY_LEN; - break; - case INTERVAL_HOUR: - interval_str = SPIDER_SQL_HOUR_STR; - interval_len = SPIDER_SQL_HOUR_LEN; - break; - case INTERVAL_MINUTE: - interval_str = SPIDER_SQL_MINUTE_STR; - interval_len = SPIDER_SQL_MINUTE_LEN; - break; - case INTERVAL_SECOND: - interval_str = SPIDER_SQL_SECOND_STR; - interval_len = SPIDER_SQL_SECOND_LEN; - break; - case INTERVAL_MICROSECOND: - interval_str = SPIDER_SQL_MICROSECOND_STR; - interval_len = SPIDER_SQL_MICROSECOND_LEN; - break; - default: - interval_str = ""; - interval_len = 0; - break; - } - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN + - interval_len + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - str->q_append(interval_str, interval_len); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - if ((error_num = spider_db_print_item_type(item_list[0], NULL, spider, - str, alias, alias_length, dbton_id, use_fields, fields))) - DBUG_RETURN(error_num); - if (str) - { - if (str->reserve(SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - if ((error_num = spider_db_print_item_type(item_list[1], NULL, spider, - str, alias, alias_length, dbton_id, use_fields, fields))) - DBUG_RETURN(error_num); - if (str) - { - if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - } - DBUG_RETURN(0); - } - } else if (func_name_length == 14) - { - if (!strncasecmp("cast_as_binary", func_name, func_name_length)) - { - item = item_list[0]; - if (item->type() == Item::FUNC_ITEM) - { - DBUG_PRINT("info",("spider child is FUNC_ITEM")); - Item_func *ifunc = (Item_func *) item; - if (ifunc->functype() == Item_func::UNKNOWN_FUNC) - { - const char *child_func_name; - int child_func_name_length; - DBUG_PRINT("info",("spider child is UNKNOWN_FUNC")); - child_func_name = (char*) ifunc->func_name(); - child_func_name_length = strlen(child_func_name); - DBUG_PRINT("info",("spider child func_name is %s", child_func_name)); - if ( - child_func_name_length == 10 && - !strncasecmp("column_get", child_func_name, child_func_name_length) - ) { - DBUG_PRINT("info",("spider this is merge func")); - merge_func = TRUE; - } - } - } - - if (str) - { - char tmp_buf[MAX_FIELD_WIDTH], *tmp_ptr, *tmp_ptr2; - spider_string tmp_str(tmp_buf, MAX_FIELD_WIDTH, str->charset()); - tmp_str.init_calc_mem(SPD_MID_DB_ORACLE_UTIL_OPEN_ITEM_FUNC_1); - tmp_str.length(0); - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } - item_func->print(tmp_str.get_str(), QT_TO_SYSTEM_CHARSET); - tmp_str.mem_calc(); - if (tmp_str.reserve(1)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - tmp_ptr = tmp_str.c_ptr_quick(); - DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr)); - while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_BINARY_STR))) - tmp_ptr = tmp_ptr2 + 1; - last_str = tmp_ptr - 1; - last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN; - } - break; - } else if (!strncasecmp("cast_as_signed", func_name, func_name_length)) - { - item = item_list[0]; - if (item->type() == Item::FUNC_ITEM) - { - DBUG_PRINT("info",("spider child is FUNC_ITEM")); - Item_func *ifunc = (Item_func *) item; - if (ifunc->functype() == Item_func::UNKNOWN_FUNC) - { - const char *child_func_name; - int child_func_name_length; - DBUG_PRINT("info",("spider child is UNKNOWN_FUNC")); - child_func_name = (char*) ifunc->func_name(); - child_func_name_length = strlen(child_func_name); - DBUG_PRINT("info",("spider child func_name is %s", child_func_name)); - if ( - child_func_name_length == 10 && - !strncasecmp("column_get", child_func_name, child_func_name_length) - ) { - DBUG_PRINT("info",("spider this is merge func")); - merge_func = TRUE; - } - } - } - - if (str) - { - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } - } - last_str = SPIDER_SQL_AS_SIGNED_STR; - last_str_length = SPIDER_SQL_AS_SIGNED_LEN; - break; - } - } else if (func_name_length == 16) - { - if (!strncasecmp("cast_as_unsigned", func_name, func_name_length)) - { - item = item_list[0]; - if (item->type() == Item::FUNC_ITEM) - { - DBUG_PRINT("info",("spider child is FUNC_ITEM")); - Item_func *ifunc = (Item_func *) item; - if (ifunc->functype() == Item_func::UNKNOWN_FUNC) - { - const char *child_func_name; - int child_func_name_length; - DBUG_PRINT("info",("spider child is UNKNOWN_FUNC")); - child_func_name = (char*) ifunc->func_name(); - child_func_name_length = strlen(child_func_name); - DBUG_PRINT("info",("spider child func_name is %s", child_func_name)); - if ( - child_func_name_length == 10 && - !strncasecmp("column_get", child_func_name, child_func_name_length) - ) { - DBUG_PRINT("info",("spider this is merge func")); - merge_func = TRUE; - } - } - } - - if (str) - { - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } - } - last_str = SPIDER_SQL_AS_UNSIGNED_STR; - last_str_length = SPIDER_SQL_AS_UNSIGNED_LEN; - break; - } else if (!strncasecmp("decimal_typecast", func_name, - func_name_length)) - { - item = item_list[0]; - if (item->type() == Item::FUNC_ITEM) - { - DBUG_PRINT("info",("spider child is FUNC_ITEM")); - Item_func *ifunc = (Item_func *) item; - if (ifunc->functype() == Item_func::UNKNOWN_FUNC) - { - const char *child_func_name; - int child_func_name_length; - DBUG_PRINT("info",("spider child is UNKNOWN_FUNC")); - child_func_name = (char*) ifunc->func_name(); - child_func_name_length = strlen(child_func_name); - DBUG_PRINT("info",("spider child func_name is %s", child_func_name)); - if ( - child_func_name_length == 10 && - !strncasecmp("column_get", child_func_name, child_func_name_length) - ) { - DBUG_PRINT("info",("spider this is merge func")); - merge_func = TRUE; - } - } - } - - if (str) - { - char tmp_buf[MAX_FIELD_WIDTH], *tmp_ptr, *tmp_ptr2; - spider_string tmp_str(tmp_buf, MAX_FIELD_WIDTH, str->charset()); - tmp_str.init_calc_mem(SPD_MID_DB_ORACLE_UTIL_OPEN_ITEM_FUNC_2); - tmp_str.length(0); - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } - item_func->print(tmp_str.get_str(), QT_TO_SYSTEM_CHARSET); - tmp_str.mem_calc(); - if (tmp_str.reserve(1)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - tmp_ptr = tmp_str.c_ptr_quick(); - DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr)); - while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_DECIMAL_STR))) - tmp_ptr = tmp_ptr2 + 1; - last_str = tmp_ptr - 1; - last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN; - } - break; - } else if (!strncasecmp("cast_as_datetime", func_name, - func_name_length)) - { - item = item_list[0]; - if (item->type() == Item::FUNC_ITEM) - { - DBUG_PRINT("info",("spider child is FUNC_ITEM")); - Item_func *ifunc = (Item_func *) item; - if (ifunc->functype() == Item_func::UNKNOWN_FUNC) - { - const char *child_func_name; - int child_func_name_length; - DBUG_PRINT("info",("spider child is UNKNOWN_FUNC")); - child_func_name = (char*) ifunc->func_name(); - child_func_name_length = strlen(child_func_name); - DBUG_PRINT("info",("spider child func_name is %s", child_func_name)); - if ( - child_func_name_length == 10 && - !strncasecmp("column_get", child_func_name, child_func_name_length) - ) { - DBUG_PRINT("info",("spider this is merge func")); - merge_func = TRUE; - } - } - } - - if (str) - { - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } - } - last_str = SPIDER_SQL_AS_DATETIME_STR; - last_str_length = SPIDER_SQL_AS_DATETIME_LEN; - break; - } - } else if (func_name_length == 17) - { - if (!strncasecmp("date_add_interval", func_name, func_name_length)) - { - Item_date_add_interval *item_date_add_interval = - (Item_date_add_interval *) item_func; - switch (item_date_add_interval->int_type) - { - case INTERVAL_YEAR: - case INTERVAL_QUARTER: - case INTERVAL_MONTH: - if (str) - { - if (str->reserve(SPIDER_SQL_ADD_MONTHS_LEN + - SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_ADD_MONTHS_STR, - SPIDER_SQL_ADD_MONTHS_LEN); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, - SPIDER_SQL_OPEN_PAREN_LEN); - } - if ((error_num = spider_db_print_item_type(item_list[0], NULL, - spider, str, alias, alias_length, dbton_id, use_fields, - fields))) - DBUG_RETURN(error_num); - if (str) - { - if (item_date_add_interval->date_sub_interval) - { - if (str->reserve(SPIDER_SQL_COMMA_LEN + - SPIDER_SQL_MINUS_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - str->q_append(SPIDER_SQL_MINUS_STR, SPIDER_SQL_MINUS_LEN); - } else { - if (str->reserve(SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - if ((error_num = spider_db_print_item_type(item_list[1], NULL, - spider, str, alias, alias_length, dbton_id, use_fields, - fields))) - DBUG_RETURN(error_num); - if (str) - { - if (item_date_add_interval->int_type == INTERVAL_YEAR) - { - func_name = " * 12"; - func_name_length = sizeof(" * 12") - 1; - if (str->reserve(func_name_length + - (SPIDER_SQL_CLOSE_PAREN_LEN * 2))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - } else if (item_date_add_interval->int_type == - INTERVAL_QUARTER) - { - func_name = " * 3"; - func_name_length = sizeof(" * 3") - 1; - if (str->reserve(func_name_length + - (SPIDER_SQL_CLOSE_PAREN_LEN * 2))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - } else { - if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN * 2)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - } - } - break; - case INTERVAL_WEEK: - case INTERVAL_DAY: - case INTERVAL_HOUR: - case INTERVAL_MINUTE: - case INTERVAL_SECOND: - case INTERVAL_MICROSECOND: - if ((error_num = spider_db_print_item_type(item_list[0], NULL, - spider, str, alias, alias_length, dbton_id, use_fields, - fields))) - DBUG_RETURN(error_num); - if (str) - { - if (item_date_add_interval->date_sub_interval) - { - if (str->reserve(SPIDER_SQL_MINUS_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_MINUS_STR, SPIDER_SQL_MINUS_LEN); - } else { - if (str->reserve(SPIDER_SQL_PLUS_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_PLUS_STR, SPIDER_SQL_PLUS_LEN); - } - } - if ((error_num = spider_db_print_item_type(item_list[1], NULL, - spider, str, alias, alias_length, dbton_id, use_fields, - fields))) - DBUG_RETURN(error_num); - if (str) - { - if (item_date_add_interval->int_type == INTERVAL_WEEK) - { - func_name = " * 7"; - func_name_length = sizeof(" * 7") - 1; - if (str->reserve(func_name_length + - (SPIDER_SQL_CLOSE_PAREN_LEN))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - } else if (item_date_add_interval->int_type == INTERVAL_HOUR) - { - func_name = " / 24"; - func_name_length = sizeof(" / 24") - 1; - if (str->reserve(func_name_length + - (SPIDER_SQL_CLOSE_PAREN_LEN))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - } else if (item_date_add_interval->int_type == INTERVAL_MINUTE) - { - func_name = " / 1440"; - func_name_length = sizeof(" / 1440") - 1; - if (str->reserve(func_name_length + - (SPIDER_SQL_CLOSE_PAREN_LEN))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - } else if (item_date_add_interval->int_type == INTERVAL_SECOND) - { - func_name = " / 86400"; - func_name_length = sizeof(" / 86400") - 1; - if (str->reserve(func_name_length + - (SPIDER_SQL_CLOSE_PAREN_LEN))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - } else if (item_date_add_interval->int_type == - INTERVAL_MICROSECOND) - { - func_name = " / 86400000000"; - func_name_length = sizeof(" / 86400000000") - 1; - if (str->reserve(func_name_length + - (SPIDER_SQL_CLOSE_PAREN_LEN))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - } else { - if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - } - } - break; - default: - DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); - } - DBUG_RETURN(0); - break; - } - } - if (str) - { - if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - } - func_name = SPIDER_SQL_COMMA_STR; - func_name_length = SPIDER_SQL_COMMA_LEN; - separator_str = SPIDER_SQL_COMMA_STR; - separator_str_length = SPIDER_SQL_COMMA_LEN; - last_str = SPIDER_SQL_CLOSE_PAREN_STR; - last_str_length = SPIDER_SQL_CLOSE_PAREN_LEN; - break; - case Item_func::NOW_FUNC: - if (str) - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - DBUG_RETURN(spider_db_open_item_string(item_func, NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields)); - case Item_func::CHAR_TYPECAST_FUNC: - DBUG_PRINT("info",("spider CHAR_TYPECAST_FUNC")); - { - item = item_list[0]; - if (item->type() == Item::FUNC_ITEM) - { - DBUG_PRINT("info",("spider child is FUNC_ITEM")); - Item_func *ifunc = (Item_func *) item; - if (ifunc->functype() == Item_func::UNKNOWN_FUNC) - { - const char *child_func_name; - int child_func_name_length; - DBUG_PRINT("info",("spider child is UNKNOWN_FUNC")); - child_func_name = (char*) ifunc->func_name(); - child_func_name_length = strlen(child_func_name); - DBUG_PRINT("info",("spider child func_name is %s", child_func_name)); - if ( - child_func_name_length == 10 && - !strncasecmp("column_get", child_func_name, child_func_name_length) - ) { - DBUG_PRINT("info",("spider this is merge func")); - merge_func = TRUE; - } - } - } - - if (str) - { - char tmp_buf[MAX_FIELD_WIDTH], *tmp_ptr, *tmp_ptr2; - spider_string tmp_str(tmp_buf, MAX_FIELD_WIDTH, str->charset()); - tmp_str.init_calc_mem(SPD_MID_DB_ORACLE_UTIL_OPEN_ITEM_FUNC_3); - tmp_str.length(0); - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } - item_func->print(tmp_str.get_str(), QT_TO_SYSTEM_CHARSET); - tmp_str.mem_calc(); - if (tmp_str.reserve(1)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - tmp_ptr = tmp_str.c_ptr_quick(); - DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr)); - while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_CHAR_STR))) - tmp_ptr = tmp_ptr2 + 1; - last_str = tmp_ptr - 1; - last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN; - } - } - break; - case Item_func::NOT_FUNC: - DBUG_PRINT("info",("spider NOT_FUNC")); - if (item_list[0]->type() == Item::COND_ITEM) - { - DBUG_PRINT("info",("spider item_list[0] is COND_ITEM")); - Item_cond *item_cond = (Item_cond *) item_list[0]; - if (item_cond->functype() == Item_func::COND_AND_FUNC) - { - DBUG_PRINT("info",("spider item_cond is COND_AND_FUNC")); - List_iterator_fast lif(*(item_cond->argument_list())); - bool has_expr_cache_item = FALSE; - bool has_isnotnull_func = FALSE; - bool has_other_item = FALSE; - while((item = lif++)) - { -#ifdef SPIDER_HAS_EXPR_CACHE_ITEM - if ( - item->type() == Item::EXPR_CACHE_ITEM - ) { - DBUG_PRINT("info",("spider EXPR_CACHE_ITEM")); - has_expr_cache_item = TRUE; - } else -#endif - if ( - item->type() == Item::FUNC_ITEM && - ((Item_func *) item)->functype() == Item_func::ISNOTNULL_FUNC - ) { - DBUG_PRINT("info",("spider ISNOTNULL_FUNC")); - has_isnotnull_func = TRUE; - } else { - DBUG_PRINT("info",("spider has other item")); - DBUG_PRINT("info",("spider COND type=%d", item->type())); - has_other_item = TRUE; - } - } - if (has_expr_cache_item && has_isnotnull_func && !has_other_item) - { - DBUG_PRINT("info",("spider NOT EXISTS skip")); - DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); - } - } - } - if (str) - { - func_name = (char*) item_func->func_name(); - func_name_length = strlen(func_name); - if (str->reserve(func_name_length + SPIDER_SQL_SPACE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - } - break; - case Item_func::NEG_FUNC: - if (str) - { - func_name = (char*) item_func->func_name(); - func_name_length = strlen(func_name); - if (str->reserve(func_name_length + SPIDER_SQL_SPACE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - } - break; - case Item_func::IN_FUNC: - if (((Item_func_opt_neg *) item_func)->negated) - { - func_name = SPIDER_SQL_NOT_IN_STR; - func_name_length = SPIDER_SQL_NOT_IN_LEN; - separator_str = SPIDER_SQL_COMMA_STR; - separator_str_length = SPIDER_SQL_COMMA_LEN; - last_str = SPIDER_SQL_CLOSE_PAREN_STR; - last_str_length = SPIDER_SQL_CLOSE_PAREN_LEN; - } else { - func_name = SPIDER_SQL_IN_STR; - func_name_length = SPIDER_SQL_IN_LEN; - separator_str = SPIDER_SQL_COMMA_STR; - separator_str_length = SPIDER_SQL_COMMA_LEN; - last_str = SPIDER_SQL_CLOSE_PAREN_STR; - last_str_length = SPIDER_SQL_CLOSE_PAREN_LEN; - } - break; - case Item_func::BETWEEN: - if (((Item_func_opt_neg *) item_func)->negated) - { - func_name = SPIDER_SQL_NOT_BETWEEN_STR; - func_name_length = SPIDER_SQL_NOT_BETWEEN_LEN; - separator_str = SPIDER_SQL_AND_STR; - separator_str_length = SPIDER_SQL_AND_LEN; - } else { - func_name = (char*) item_func->func_name(); - func_name_length = strlen(func_name); - separator_str = SPIDER_SQL_AND_STR; - separator_str_length = SPIDER_SQL_AND_LEN; - } - break; - case Item_func::UDF_FUNC: - use_pushdown_udf = spider_param_use_pushdown_udf( - spider->wide_handler->trx->thd, - spider->share->use_pushdown_udf); - if (!use_pushdown_udf) - DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); - if (str) - { - func_name = (char*) item_func->func_name(); - func_name_length = strlen(func_name); - DBUG_PRINT("info",("spider func_name = %s", func_name)); - DBUG_PRINT("info",("spider func_name_length = %d", func_name_length)); - if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - } - func_name = SPIDER_SQL_COMMA_STR; - func_name_length = SPIDER_SQL_COMMA_LEN; - separator_str = SPIDER_SQL_COMMA_STR; - separator_str_length = SPIDER_SQL_COMMA_LEN; - last_str = SPIDER_SQL_CLOSE_PAREN_STR; - last_str_length = SPIDER_SQL_CLOSE_PAREN_LEN; - break; - case Item_func::XOR_FUNC: - if (str) - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - DBUG_RETURN( - spider_db_open_item_cond((Item_cond *) item_func, spider, str, - alias, alias_length, dbton_id, use_fields, fields)); - case Item_func::TRIG_COND_FUNC: - DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); - case Item_func::GUSERVAR_FUNC: - if (str) - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (item_func->result_type() == STRING_RESULT) - DBUG_RETURN(spider_db_open_item_string(item_func, NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields)); - else - DBUG_RETURN(spider_db_open_item_int(item_func, NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields)); - case Item_func::FT_FUNC: - if (spider_db_check_ft_idx(item_func, spider) == MAX_KEY) - DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); - start_item = 1; - if (str) - { - if (str->reserve(SPIDER_SQL_MATCH_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_MATCH_STR, SPIDER_SQL_MATCH_LEN); - } - separator_str = SPIDER_SQL_COMMA_STR; - separator_str_length = SPIDER_SQL_COMMA_LEN; - last_str = SPIDER_SQL_CLOSE_PAREN_STR; - last_str_length = SPIDER_SQL_CLOSE_PAREN_LEN; - break; - case Item_func::SP_EQUALS_FUNC: - if (str) - { - func_name = SPIDER_SQL_MBR_EQUAL_STR; - func_name_length = SPIDER_SQL_MBR_EQUAL_LEN; - DBUG_PRINT("info",("spider func_name = %s", func_name)); - DBUG_PRINT("info",("spider func_name_length = %d", func_name_length)); - if (str->reserve(func_name_length)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - } - func_name = SPIDER_SQL_COMMA_STR; - func_name_length = SPIDER_SQL_COMMA_LEN; - separator_str = SPIDER_SQL_COMMA_STR; - separator_str_length = SPIDER_SQL_COMMA_LEN; - last_str = SPIDER_SQL_CLOSE_PAREN_STR; - last_str_length = SPIDER_SQL_CLOSE_PAREN_LEN; - break; - case Item_func::SP_DISJOINT_FUNC: - case Item_func::SP_INTERSECTS_FUNC: - case Item_func::SP_TOUCHES_FUNC: - case Item_func::SP_CROSSES_FUNC: - case Item_func::SP_WITHIN_FUNC: - case Item_func::SP_CONTAINS_FUNC: - case Item_func::SP_OVERLAPS_FUNC: - if (str) - { - func_name = (char*) item_func->func_name(); - func_name_length = strlen(func_name); - DBUG_PRINT("info",("spider func_name = %s", func_name)); - DBUG_PRINT("info",("spider func_name_length = %d", func_name_length)); - if (str->reserve( -#ifndef SPIDER_ITEM_GEOFUNC_NAME_HAS_MBR - SPIDER_SQL_MBR_LEN + -#endif - func_name_length + SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); -#ifndef SPIDER_ITEM_GEOFUNC_NAME_HAS_MBR - str->q_append(SPIDER_SQL_MBR_STR, SPIDER_SQL_MBR_LEN); -#endif - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - } - func_name = SPIDER_SQL_COMMA_STR; - func_name_length = SPIDER_SQL_COMMA_LEN; - separator_str = SPIDER_SQL_COMMA_STR; - separator_str_length = SPIDER_SQL_COMMA_LEN; - last_str = SPIDER_SQL_CLOSE_PAREN_STR; - last_str_length = SPIDER_SQL_CLOSE_PAREN_LEN; - break; - case Item_func::EQ_FUNC: - case Item_func::EQUAL_FUNC: - case Item_func::NE_FUNC: - case Item_func::LT_FUNC: - case Item_func::LE_FUNC: - case Item_func::GE_FUNC: - case Item_func::GT_FUNC: - if (str) - { - func_name = (char*) item_func->func_name(); - func_name_length = strlen(func_name); - } - break; - case Item_func::LIKE_FUNC: - if (str) - { - if (((Item_func_like *)item_func)->get_negated()) - { - func_name = SPIDER_SQL_NOT_LIKE_STR; - func_name_length = SPIDER_SQL_NOT_LIKE_LEN; - } - else - { - func_name = (char*)item_func->func_name(); - func_name_length = strlen(func_name); - } - } - break; - default: - THD *thd = spider->wide_handler->trx->thd; - SPIDER_SHARE *share = spider->share; - if (spider_param_skip_default_condition(thd, - share->skip_default_condition)) - DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); - if (str) - { - func_name = (char*) item_func->func_name(); - func_name_length = strlen(func_name); - } - break; - } - DBUG_PRINT("info",("spider func_name = %s", func_name)); - DBUG_PRINT("info",("spider func_name_length = %d", func_name_length)); - DBUG_PRINT("info",("spider separator_str = %s", separator_str)); - DBUG_PRINT("info",("spider separator_str_length = %d", separator_str_length)); - DBUG_PRINT("info",("spider last_str = %s", last_str)); - DBUG_PRINT("info",("spider last_str_length = %d", last_str_length)); - if (item_count) - { - /* Find the field in the list of items of the expression tree */ - field = spider_db_find_field_in_item_list(item_list, - item_count, start_item, - str, - func_name, func_name_length); - item_count--; - for (roop_count = start_item; roop_count < item_count; roop_count++) - { - item = item_list[roop_count]; - if ((error_num = spider_db_print_item_type(item, field, spider, str, - alias, alias_length, dbton_id, use_fields, fields))) - DBUG_RETURN(error_num); - if (roop_count == 1) - { - func_name = separator_str; - func_name_length = separator_str_length; - } - if (str) - { - if (str->reserve(func_name_length + SPIDER_SQL_SPACE_LEN * 2)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - } - } - item = item_list[roop_count]; - if ((error_num = spider_db_print_item_type(item, field, spider, str, - alias, alias_length, dbton_id, use_fields, fields))) - DBUG_RETURN(error_num); - } - if (item_func->functype() == Item_func::FT_FUNC) - { - Item_func_match *item_func_match = (Item_func_match *)item_func; - if (str) - { - if (str->reserve(SPIDER_SQL_AGAINST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_AGAINST_STR, SPIDER_SQL_AGAINST_LEN); - } - item = item_list[0]; - if ((error_num = spider_db_print_item_type(item, NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields))) - DBUG_RETURN(error_num); - if (str) - { - if (str->reserve( - ((item_func_match->flags & FT_BOOL) ? - SPIDER_SQL_IN_BOOLEAN_MODE_LEN : 0) + - ((item_func_match->flags & FT_EXPAND) ? - SPIDER_SQL_WITH_QUERY_EXPANSION_LEN : 0) - )) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - if (item_func_match->flags & FT_BOOL) - str->q_append(SPIDER_SQL_IN_BOOLEAN_MODE_STR, - SPIDER_SQL_IN_BOOLEAN_MODE_LEN); - if (item_func_match->flags & FT_EXPAND) - str->q_append(SPIDER_SQL_WITH_QUERY_EXPANSION_STR, - SPIDER_SQL_WITH_QUERY_EXPANSION_LEN); - } - } else if (item_func->functype() == Item_func::UNKNOWN_FUNC) - { - if ( - func_name_length == 7 && - !strncasecmp("convert", func_name, func_name_length) - ) { - if (str) - { - Item_func_conv_charset *item_func_conv_charset = - (Item_func_conv_charset *)item_func; - CHARSET_INFO *conv_charset = - item_func_conv_charset->SPIDER_Item_func_conv_charset_conv_charset; - uint cset_length = strlen(conv_charset->csname); - if (str->reserve(SPIDER_SQL_USING_LEN + cset_length)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_USING_STR, SPIDER_SQL_USING_LEN); - str->q_append(conv_charset->csname, cset_length); - } - } - } - if (str) - { - if (merge_func) - str->length(str->length() - SPIDER_SQL_CLOSE_PAREN_LEN); - if (str->reserve(last_str_length + SPIDER_SQL_CLOSE_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(last_str, last_str_length); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); - } - DBUG_RETURN(0); -} - -int spider_db_oracle_util::open_item_sum_func( - Item_sum *item_sum, - ha_spider *spider, - spider_string *str, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields -) { - uint dbton_id = spider_dbton_oracle.dbton_id; - uint roop_count, item_count = item_sum->get_arg_count(); - int error_num; - DBUG_ENTER("spider_db_oracle_util::open_item_sum_func"); - DBUG_PRINT("info",("spider Sumfunctype = %d", item_sum->sum_func())); - switch (item_sum->sum_func()) - { - case Item_sum::COUNT_FUNC: - case Item_sum::SUM_FUNC: - case Item_sum::MIN_FUNC: - case Item_sum::MAX_FUNC: - { - const char *func_name = item_sum->func_name(); - uint func_name_length = strlen(func_name); - Item *item, **args = item_sum->get_args(); - if (str) - { - if (str->reserve(func_name_length)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - } - if (item_count) - { - item_count--; - for (roop_count = 0; roop_count < item_count; roop_count++) - { - item = args[roop_count]; - if ((error_num = spider_db_print_item_type(item, NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields))) - DBUG_RETURN(error_num); - if (str) - { - if (str->reserve(SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - item = args[roop_count]; - if ((error_num = spider_db_print_item_type(item, NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields))) - DBUG_RETURN(error_num); - } - if (str) - { - if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - } - } - break; - case Item_sum::COUNT_DISTINCT_FUNC: - case Item_sum::SUM_DISTINCT_FUNC: - case Item_sum::AVG_FUNC: - case Item_sum::AVG_DISTINCT_FUNC: - case Item_sum::STD_FUNC: - case Item_sum::VARIANCE_FUNC: - case Item_sum::SUM_BIT_FUNC: - case Item_sum::UDF_SUM_FUNC: - case Item_sum::GROUP_CONCAT_FUNC: - default: - DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); - } - DBUG_RETURN(0); -} - -size_t spider_db_oracle_util::escape_string( - char *to, - const char *from, - size_t from_length, - CHARSET_INFO *access_charset -) { - DBUG_ENTER("spider_db_oracle::escape_string"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(escape_quotes_for_mysql(access_charset, to, 0, - from, from_length)); -} - -int spider_db_oracle_util::append_escaped_util( - spider_string *to, - String *from -) { - size_t copy_length; - DBUG_ENTER("spider_db_oracle_util::append_escaped_util"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_PRINT("info",("spider to=%s", to->c_ptr_safe())); - DBUG_PRINT("info",("spider from=%s", from->c_ptr_safe())); - copy_length = escape_string((char *) to->ptr() + to->length(), from->ptr(), - from->length(), to->charset()); - DBUG_PRINT("info",("spider copy_length=%zu", copy_length)); - to->length(to->length() + copy_length); - to->mem_calc(); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_from_and_tables( - ha_spider *spider, - spider_fields *fields, - spider_string *str, - TABLE_LIST *table_list, - uint table_count -) { - SPIDER_TABLE_HOLDER *table_holder; - int error_num; - uint dbton_id = spider_dbton_oracle.dbton_id, from_length; - spider_oracle_share *db_share; - spider_oracle_handler *dbton_hdl; - ha_spider *spider; - DBUG_ENTER("spider_db_oracle_util::append_from_and_tables"); - DBUG_PRINT("info",("spider this=%p", this)); - - /* calculate from size */ - from_length = SPIDER_SQL_FROM_LEN; - fields->set_pos_to_first_table_holder(); - while ((table_holder = fields->get_next_table_holder())) - { - spider = table_holder->spider; - db_share = (spider_oracle_share *) - spider->share->dbton_share[dbton_id]; - from_length += - db_share->db_nm_max_length + - SPIDER_SQL_DOT_LEN + /* SPIDER_SQL_NAME_QUOTE_LEN */ 4 + - db_share->table_nm_max_length + - SPIDER_SQL_SPACE_LEN + SPIDER_SQL_COMMA_LEN + - table_holder->alias->length() - SPIDER_SQL_DOT_LEN; - } - - if (str->reserve(from_length)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN); - - fields->set_pos_to_first_table_holder(); - while ((table_holder = fields->get_next_table_holder())) - { - spider = table_holder->spider; - db_share = (spider_oracle_share *) - spider->share->dbton_share[dbton_id]; - dbton_hdl = (spider_oracle_handler *) spider->dbton_handler[dbton_id]; - dbton_hdl->table_name_pos = str->length(); - if ((error_num = db_share->append_table_name_with_adjusting(str, - spider->conn_link_idx[dbton_hdl->first_link_idx]))) - { - DBUG_RETURN(error_num); - } - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - str->q_append(table_holder->alias->ptr(), - table_holder->alias->length() - SPIDER_SQL_DOT_LEN); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::reappend_tables( - spider_fields *fields, - SPIDER_LINK_IDX_CHAIN *link_idx_chain, - spider_string *str -) { - int error_num; - uint dbton_id = spider_dbton_oracle.dbton_id, length; - ha_spider *spider; - spider_oracle_share *db_share; - spider_oracle_handler *dbton_hdl; - SPIDER_TABLE_HOLDER *table_holder; - SPIDER_LINK_IDX_HOLDER *link_idx_holder; - DBUG_ENTER("spider_db_oracle_util::reappend_tables"); - DBUG_PRINT("info",("spider this=%p", this)); - length = str->length(); - fields->set_pos_to_first_table_on_link_idx_chain(link_idx_chain); - fields->set_pos_to_first_table_holder(); - while ((table_holder = fields->get_next_table_holder())) - { - link_idx_holder = fields->get_next_table_on_link_idx_chain(link_idx_chain); - spider = table_holder->spider; - db_share = (spider_oracle_share *) - spider->share->dbton_share[dbton_id]; - if (!db_share->same_db_table_name) - { - dbton_hdl = (spider_oracle_handler *) spider->dbton_handler[dbton_id]; - str->length(dbton_hdl->table_name_pos); - if ((error_num = db_share->append_table_name_with_adjusting(str, - spider->conn_link_idx[link_idx_holder->link_idx]))) - { - DBUG_RETURN(error_num); - } - } - } - str->length(length); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_where( - spider_string *str -) { - DBUG_ENTER("spider_db_oracle_util::append_where"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_WHERE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_WHERE_STR, SPIDER_SQL_WHERE_LEN); - DBUG_RETURN(0); -} - -int spider_db_oracle_util::append_having( - spider_string *str -) { - DBUG_ENTER("spider_db_oracle_util::append_having"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_HAVING_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_HAVING_STR, SPIDER_SQL_HAVING_LEN); - DBUG_RETURN(0); -} - -spider_oracle_share::spider_oracle_share( - st_spider_share *share -) : spider_db_share( - share, - spider_dbton_oracle.dbton_id -), - table_select(NULL), - table_select_pos(0), - key_select(NULL), - key_select_pos(NULL), - key_hint(NULL), - show_table_status(NULL), - show_records(NULL), - show_autoinc(NULL), - show_last_insert_id(NULL), - show_index(NULL), - table_names_str(NULL), - db_names_str(NULL), - db_table_str(NULL), - nextval_str(NULL), - db_table_str_hash_value(NULL), - table_nm_max_length(0), - db_nm_max_length(0), - nextval_max_length(0), - column_name_str(NULL), - same_db_table_name(TRUE), - first_all_link_idx(-1) -{ - DBUG_ENTER("spider_oracle_share::spider_oracle_share"); - DBUG_PRINT("info",("spider this=%p", this)); - spider_alloc_calc_mem_init(mem_calc, SPD_MID_ORACLE_SHARE_SPIDER_ORACLE_SHARE_1); - spider_alloc_calc_mem(spider_current_trx, mem_calc, sizeof(*this)); - DBUG_VOID_RETURN; -} - -spider_oracle_share::~spider_oracle_share() -{ - DBUG_ENTER("spider_oracle_share::~spider_oracle_share"); - DBUG_PRINT("info",("spider this=%p", this)); - if (table_select) - delete [] table_select; - if (key_select) - delete [] key_select; - if (key_hint) - delete [] key_hint; - free_show_table_status(); - free_show_records(); - free_show_autoinc(); - free_show_last_insert_id(); - free_show_index(); - free_column_name_str(); - free_table_names_str(); - if (key_select_pos) - { - spider_free(spider_current_trx, key_select_pos, MYF(0)); - } - spider_free_mem_calc(spider_current_trx, mem_calc_id, sizeof(*this)); - DBUG_VOID_RETURN; -} - -int spider_oracle_share::init() -{ - int error_num; - uint roop_count; - TABLE_SHARE *table_share = spider_share->table_share; - uint keys = table_share ? table_share->keys : 0; - DBUG_ENTER("spider_oracle_share::init"); - DBUG_PRINT("info",("spider this=%p", this)); - if (!(key_select_pos = (int *) - spider_bulk_alloc_mem(spider_current_trx, SPD_MID_ORACLE_SHARE_INIT_1, - __func__, __FILE__, __LINE__, MYF(MY_WME | MY_ZEROFILL), - &key_select_pos, - sizeof(int) * keys, - &db_table_str_hash_value, - sizeof(my_hash_value_type) * spider_share->all_link_count, - NullS)) - ) { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - - if (keys > 0 && - !(key_hint = new spider_string[keys]) - ) { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - for (roop_count = 0; roop_count < keys; roop_count++) - { - key_hint[roop_count].init_calc_mem(SPD_MID_ORACLE_SHARE_INIT_2); - key_hint[roop_count].set_charset(spider_share->access_charset); - } - DBUG_PRINT("info",("spider key_hint=%p", key_hint)); - - if ( - !(table_select = new spider_string[1]) || - (keys > 0 && - !(key_select = new spider_string[keys]) - ) || - (error_num = create_table_names_str()) || - (table_share && - ( - (error_num = create_column_name_str()) || - (error_num = convert_key_hint_str()) || - (error_num = append_show_table_status()) || - (error_num = append_show_records()) || - (error_num = append_show_autoinc()) || - (error_num = append_show_last_insert_id()) || - (error_num = append_show_index()) - ) - ) - ) { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - - table_select->init_calc_mem(SPD_MID_ORACLE_SHARE_INIT_3); - if (table_share && (error_num = append_table_select())) - DBUG_RETURN(error_num); - - for (roop_count = 0; roop_count < keys; roop_count++) - { - key_select[roop_count].init_calc_mem(SPD_MID_ORACLE_SHARE_INIT_4); - if ((error_num = append_key_select(roop_count))) - DBUG_RETURN(error_num); - } - - DBUG_RETURN(error_num); -} - -uint spider_oracle_share::get_column_name_length( - uint field_index -) { - DBUG_ENTER("spider_oracle_share::get_column_name_length"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(column_name_str[field_index].length()); -} - -int spider_oracle_share::append_column_name( - spider_string *str, - uint field_index -) { - int error_num; - DBUG_ENTER("spider_oracle_share::append_column_name"); - DBUG_PRINT("info",("spider this=%p", this)); - error_num = spider_db_oracle_utility.append_name(str, - column_name_str[field_index].ptr(), column_name_str[field_index].length()); - DBUG_RETURN(error_num); -} - -int spider_oracle_share::append_column_name_with_alias( - spider_string *str, - uint field_index, - const char *alias, - uint alias_length -) { - DBUG_ENTER("spider_oracle_share::append_column_name_with_alias"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve( - alias_length + - column_name_str[field_index].length() + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(alias, alias_length); - append_column_name(str, field_index); - DBUG_RETURN(0); -} - -int spider_oracle_share::append_table_name( - spider_string *str, - int all_link_idx -) { - const char *db_nm = db_names_str[all_link_idx].ptr(); - uint db_nm_len = db_names_str[all_link_idx].length(); - const char *table_nm = table_names_str[all_link_idx].ptr(); - uint table_nm_len = table_names_str[all_link_idx].length(); - DBUG_ENTER("spider_oracle_share::append_table_name"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(db_nm_len + SPIDER_SQL_DOT_LEN + table_nm_len + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 4)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - spider_db_oracle_utility.append_name(str, db_nm, db_nm_len); - str->q_append(SPIDER_SQL_DOT_STR, SPIDER_SQL_DOT_LEN); - spider_db_oracle_utility.append_name(str, table_nm, table_nm_len); - DBUG_RETURN(0); -} - -int spider_oracle_share::append_table_name_with_adjusting( - spider_string *str, - int all_link_idx -) { - const char *db_nm = db_names_str[all_link_idx].ptr(); - uint db_nm_len = db_names_str[all_link_idx].length(); - uint db_nm_max_len = db_nm_max_length; - const char *table_nm = table_names_str[all_link_idx].ptr(); - uint table_nm_len = table_names_str[all_link_idx].length(); - uint table_nm_max_len = table_nm_max_length; - DBUG_ENTER("spider_oracle_share::append_table_name_with_adjusting"); - DBUG_PRINT("info",("spider this=%p", this)); - spider_db_oracle_utility.append_name(str, db_nm, db_nm_len); - str->q_append(SPIDER_SQL_DOT_STR, SPIDER_SQL_DOT_LEN); - spider_db_oracle_utility.append_name(str, table_nm, table_nm_len); - uint length = - db_nm_max_len - db_nm_len + - table_nm_max_len - table_nm_len; - memset((char *) str->ptr() + str->length(), ' ', length); - str->length(str->length() + length); - DBUG_RETURN(0); -} - -int spider_oracle_share::append_from_with_adjusted_table_name( - spider_string *str, - int *table_name_pos -) { - const char *db_nm = db_names_str[0].ptr(); - uint db_nm_len = db_names_str[0].length(); - uint db_nm_max_len = db_nm_max_length; - const char *table_nm = table_names_str[0].ptr(); - uint table_nm_len = table_names_str[0].length(); - uint table_nm_max_len = table_nm_max_length; - DBUG_ENTER("spider_oracle_share::append_from_with_adjusted_table_name"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_FROM_LEN + db_nm_max_length + - SPIDER_SQL_DOT_LEN + table_nm_max_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 4)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN); - *table_name_pos = str->length(); - spider_db_oracle_utility.append_name(str, db_nm, db_nm_len); - str->q_append(SPIDER_SQL_DOT_STR, SPIDER_SQL_DOT_LEN); - spider_db_oracle_utility.append_name(str, table_nm, table_nm_len); - uint length = - db_nm_max_len - db_nm_len + - table_nm_max_len - table_nm_len; - memset((char *) str->ptr() + str->length(), ' ', length); - str->length(str->length() + length); - DBUG_RETURN(0); -} - -int spider_oracle_share::create_table_names_str() -{ - int error_num, roop_count; - uint table_nm_len, db_nm_len; - spider_string *str, *first_tbl_nm_str, *first_db_nm_str, *first_db_tbl_str; - char *first_tbl_nm, *first_db_nm; - uint dbton_id = spider_dbton_oracle.dbton_id; - DBUG_ENTER("spider_oracle_share::create_table_names_str"); - table_names_str = NULL; - db_names_str = NULL; - db_table_str = NULL; - if ( - !(table_names_str = new spider_string[spider_share->all_link_count]) || - !(db_names_str = new spider_string[spider_share->all_link_count]) || - !(db_table_str = new spider_string[spider_share->all_link_count]) - ) { - error_num = HA_ERR_OUT_OF_MEM; - goto error; - } - - same_db_table_name = TRUE; - first_tbl_nm = spider_share->tgt_table_names[0]; - first_db_nm = spider_share->tgt_dbs[0]; - table_nm_len = spider_share->tgt_table_names_lengths[0]; - db_nm_len = spider_share->tgt_dbs_lengths[0]; - first_tbl_nm_str = &table_names_str[0]; - first_db_nm_str = &db_names_str[0]; - first_db_tbl_str = &db_table_str[0]; - for (roop_count = 0; roop_count < (int) spider_share->all_link_count; - roop_count++) - { - table_names_str[roop_count].init_calc_mem(SPD_MID_ORACLE_SHARE_CREATE_TABLE_NAMES_STR_1); - db_names_str[roop_count].init_calc_mem(SPD_MID_ORACLE_SHARE_CREATE_TABLE_NAMES_STR_2); - db_table_str[roop_count].init_calc_mem(SPD_MID_ORACLE_SHARE_CREATE_TABLE_NAMES_STR_3); - if (spider_share->sql_dbton_ids[roop_count] != dbton_id) - continue; - if (first_all_link_idx == -1) - first_all_link_idx = roop_count; - - str = &table_names_str[roop_count]; - if ( - roop_count != 0 && - same_db_table_name && - spider_share->tgt_table_names_lengths[roop_count] == table_nm_len && - !memcmp(first_tbl_nm, spider_share->tgt_table_names[roop_count], - table_nm_len) - ) { - if (str->copy(*first_tbl_nm_str)) - { - error_num = HA_ERR_OUT_OF_MEM; - goto error; - } - } else { - str->set_charset(spider_share->access_charset); - if ((error_num = spider_db_append_name_with_quote_str(str, - spider_share->tgt_table_names[roop_count], dbton_id))) - goto error; - if (roop_count) - { - same_db_table_name = FALSE; - DBUG_PRINT("info", ("spider found different table name %s", - spider_share->tgt_table_names[roop_count])); - if (str->length() > table_nm_max_length) - table_nm_max_length = str->length(); - } else - table_nm_max_length = str->length(); - } - - str = &db_names_str[roop_count]; - if ( - roop_count != 0 && - same_db_table_name && - spider_share->tgt_dbs_lengths[roop_count] == db_nm_len && - !memcmp(first_db_nm, spider_share->tgt_dbs[roop_count], - db_nm_len) - ) { - if (str->copy(*first_db_nm_str)) - { - error_num = HA_ERR_OUT_OF_MEM; - goto error; - } - } else { - str->set_charset(spider_share->access_charset); - if ((error_num = spider_db_append_name_with_quote_str(str, - spider_share->tgt_dbs[roop_count], dbton_id))) - goto error; - if (roop_count) - { - same_db_table_name = FALSE; - DBUG_PRINT("info", ("spider found different db name %s", - spider_share->tgt_dbs[roop_count])); - if (str->length() > db_nm_max_length) - db_nm_max_length = str->length(); - } else - db_nm_max_length = str->length(); - } - - str = &db_table_str[roop_count]; - if ( - roop_count != 0 && - same_db_table_name - ) { - if (str->copy(*first_db_tbl_str)) - { - error_num = HA_ERR_OUT_OF_MEM; - goto error; - } - } else { - str->set_charset(spider_share->access_charset); - if ((error_num = append_table_name(str, roop_count))) - goto error; - } - db_table_str_hash_value[roop_count] = my_calc_hash( - &spider_open_connections, (uchar*) str->ptr(), str->length()); - } - DBUG_RETURN(0); - -error: - if (db_table_str) - { - delete [] db_table_str; - db_table_str = NULL; - } - if (db_names_str) - { - delete [] db_names_str; - db_names_str = NULL; - } - if (table_names_str) - { - delete [] table_names_str; - table_names_str = NULL; - } - DBUG_RETURN(error_num); -} - -void spider_oracle_share::free_table_names_str() -{ - DBUG_ENTER("spider_oracle_share::free_table_names_str"); - if (db_table_str) - { - delete [] db_table_str; - db_table_str = NULL; - } - if (db_names_str) - { - delete [] db_names_str; - db_names_str = NULL; - } - if (table_names_str) - { - delete [] table_names_str; - table_names_str = NULL; - } - DBUG_VOID_RETURN; -} - -int spider_oracle_share::create_column_name_str() -{ - spider_string *str; - int error_num; - Field **field; - TABLE_SHARE *table_share = spider_share->table_share; - uint dbton_id = spider_dbton_oracle.dbton_id; - DBUG_ENTER("spider_oracle_share::create_column_name_str"); - if ( - table_share->fields && - !(column_name_str = new spider_string[table_share->fields]) - ) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - for (field = table_share->field, str = column_name_str; - *field; field++, str++) - { - str->init_calc_mem(SPD_MID_ORACLE_SHARE_CREATE_COLUMN_NAME_STR_1); - str->set_charset(spider_share->access_charset); - if ((error_num = spider_db_append_name_with_quote_str(str, - (*field)->field_name, dbton_id))) - goto error; - } - DBUG_RETURN(0); - -error: - if (column_name_str) - { - delete [] column_name_str; - column_name_str = NULL; - } - DBUG_RETURN(error_num); -} - -void spider_oracle_share::free_column_name_str() -{ - DBUG_ENTER("spider_oracle_share::free_column_name_str"); - if (column_name_str) - { - delete [] column_name_str; - column_name_str = NULL; - } - DBUG_VOID_RETURN; -} - -int spider_oracle_share::convert_key_hint_str() -{ - spider_string *tmp_key_hint; - int roop_count; - TABLE_SHARE *table_share = spider_share->table_share; - DBUG_ENTER("spider_oracle_share::convert_key_hint_str"); - if (spider_share->access_charset->cset != system_charset_info->cset) - { - /* need conversion */ - for (roop_count = 0, tmp_key_hint = key_hint; - roop_count < (int) table_share->keys; roop_count++, tmp_key_hint++) - { - tmp_key_hint->length(0); - if (tmp_key_hint->append(spider_share->key_hint->ptr(), - spider_share->key_hint->length(), system_charset_info)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - } else { - for (roop_count = 0, tmp_key_hint = key_hint; - roop_count < (int) table_share->keys; roop_count++, tmp_key_hint++) - { - if (tmp_key_hint->copy(spider_share->key_hint[roop_count])) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - } - DBUG_RETURN(0); -} - -int spider_oracle_share::append_show_table_status() -{ - int roop_count; - spider_string *str; - uint dbton_id = spider_dbton_oracle.dbton_id; - DBUG_ENTER("spider_oracle_append_show_table_status"); - if (!(show_table_status = - new spider_string[2 * spider_share->all_link_count])) - goto error; - - for (roop_count = 0; roop_count < (int) spider_share->all_link_count; - roop_count++) - { - show_table_status[0 + (2 * roop_count)].init_calc_mem(SPD_MID_ORACLE_SHARE_APPEND_SHOW_TABLE_STATUS_1); - show_table_status[1 + (2 * roop_count)].init_calc_mem(SPD_MID_ORACLE_SHARE_APPEND_SHOW_TABLE_STATUS_2); - if (spider_share->sql_dbton_ids[roop_count] != dbton_id) - continue; - - if ( - show_table_status[0 + (2 * roop_count)].reserve( - SPIDER_SQL_SHOW_TABLE_STATUS_LEN + - db_names_str[roop_count].length() + - SPIDER_SQL_LIKE_LEN + table_names_str[roop_count].length() + - ((SPIDER_SQL_NAME_QUOTE_LEN) * 2) + - ((SPIDER_SQL_VALUE_QUOTE_LEN) * 2)) || - show_table_status[1 + (2 * roop_count)].reserve( - SPIDER_SQL_SELECT_TABLES_STATUS_LEN + - db_names_str[roop_count].length() + - SPIDER_SQL_AND_LEN + SPIDER_SQL_TABLE_NAME_LEN + SPIDER_SQL_EQUAL_LEN + - table_names_str[roop_count].length() + - ((SPIDER_SQL_VALUE_QUOTE_LEN) * 4)) - ) - goto error; - str = &show_table_status[0 + (2 * roop_count)]; - str->q_append( - SPIDER_SQL_SHOW_TABLE_STATUS_STR, SPIDER_SQL_SHOW_TABLE_STATUS_LEN); - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - str->q_append(db_names_str[roop_count].ptr(), - db_names_str[roop_count].length()); - str->q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - str->q_append(SPIDER_SQL_LIKE_STR, SPIDER_SQL_LIKE_LEN); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - str->q_append(table_names_str[roop_count].ptr(), - table_names_str[roop_count].length()); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - str = &show_table_status[1 + (2 * roop_count)]; - str->q_append( - SPIDER_SQL_SELECT_TABLES_STATUS_STR, - SPIDER_SQL_SELECT_TABLES_STATUS_LEN); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - str->q_append(db_names_str[roop_count].ptr(), - db_names_str[roop_count].length()); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - str->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN); - str->q_append(SPIDER_SQL_TABLE_NAME_STR, SPIDER_SQL_TABLE_NAME_LEN); - str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - str->q_append(table_names_str[roop_count].ptr(), - table_names_str[roop_count].length()); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - } - DBUG_RETURN(0); - -error: - if (show_table_status) - { - delete [] show_table_status; - show_table_status = NULL; - } - DBUG_RETURN(HA_ERR_OUT_OF_MEM); -} - -void spider_oracle_share::free_show_table_status() -{ - DBUG_ENTER("spider_oracle_free_show_table_status"); - if (show_table_status) - { - delete [] show_table_status; - show_table_status = NULL; - } - DBUG_VOID_RETURN; -} - -int spider_oracle_share::append_show_records() -{ - int roop_count; - spider_string *str; - uint dbton_id = spider_dbton_oracle.dbton_id; - DBUG_ENTER("spider_oracle_share::append_show_records"); - if (!(show_records = new spider_string[spider_share->all_link_count])) - goto error; - - for (roop_count = 0; roop_count < (int) spider_share->all_link_count; - roop_count++) - { - show_records[roop_count].init_calc_mem(SPD_MID_ORACLE_SHARE_APPEND_SHOW_RECORDS_1); - if (spider_share->sql_dbton_ids[roop_count] != dbton_id) - continue; - - if ( - show_records[roop_count].reserve( - SPIDER_SQL_SHOW_RECORDS_LEN + - db_names_str[roop_count].length() + - SPIDER_SQL_DOT_LEN + - table_names_str[roop_count].length() + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 4) - ) - goto error; - str = &show_records[roop_count]; - str->q_append(SPIDER_SQL_SHOW_RECORDS_STR, SPIDER_SQL_SHOW_RECORDS_LEN); - append_table_name(str, roop_count); - } - DBUG_RETURN(0); - -error: - if (show_records) - { - delete [] show_records; - show_records = NULL; - } - DBUG_RETURN(HA_ERR_OUT_OF_MEM); -} - -void spider_oracle_share::free_show_records() -{ - DBUG_ENTER("spider_oracle_share::free_show_records"); - if (show_records) - { - delete [] show_records; - show_records = NULL; - } - DBUG_VOID_RETURN; -} - -int spider_oracle_share::append_show_autoinc() -{ - uint roop_count, field_length; - spider_string *str; - uint dbton_id = spider_dbton_oracle.dbton_id; - Field **found_next_number_field = - spider_share->table_share->found_next_number_field; - DBUG_ENTER("spider_oracle_share::append_show_autoinc"); - if (!found_next_number_field) - DBUG_RETURN(0); - - if (!(show_autoinc = new spider_string[spider_share->all_link_count])) - goto error; - - field_length = - column_name_str[(*found_next_number_field)->field_index].length(); - for (roop_count = 0; roop_count < spider_share->all_link_count; - roop_count++) - { - show_autoinc[roop_count].init_calc_mem(SPD_MID_ORACLE_SHARE_APPEND_SHOW_AUTOINC_1); - if (spider_share->sql_dbton_ids[roop_count] != dbton_id) - continue; - - if ( - show_autoinc[roop_count].reserve( - SPIDER_SQL_SELECT_LEN + - SPIDER_SQL_MAX_LEN + - SPIDER_SQL_OPEN_PAREN_LEN + - field_length + - SPIDER_SQL_CLOSE_PAREN_LEN + - SPIDER_SQL_FROM_LEN + - db_names_str[roop_count].length() + - SPIDER_SQL_DOT_LEN + - table_names_str[roop_count].length() + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 6) - ) - goto error; - str = &show_autoinc[roop_count]; - str->q_append(SPIDER_SQL_SELECT_STR, SPIDER_SQL_SELECT_LEN); - str->q_append(SPIDER_SQL_MAX_STR, SPIDER_SQL_MAX_LEN); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - append_column_name(str, (*found_next_number_field)->field_index); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); - str->q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN); - append_table_name(str, roop_count); - } - DBUG_RETURN(0); - -error: - if (show_autoinc) - { - delete [] show_autoinc; - show_autoinc = NULL; - } - DBUG_RETURN(HA_ERR_OUT_OF_MEM); -} - -void spider_oracle_share::free_show_autoinc() -{ - DBUG_ENTER("spider_oracle_share::free_show_autoinc"); - if (show_autoinc) - { - delete [] show_autoinc; - show_autoinc = NULL; - } - DBUG_VOID_RETURN; -} - -int spider_oracle_share::append_show_last_insert_id() -{ - uint roop_count; - spider_string *str; - uint dbton_id = spider_dbton_oracle.dbton_id; - Field **found_next_number_field = - spider_share->table_share->found_next_number_field; - uint seq_nm_max_length = 0; - DBUG_ENTER("spider_oracle_share::append_show_last_insert_id"); - if (!found_next_number_field) - DBUG_RETURN(0); - - if ( - !(show_last_insert_id = new spider_string[spider_share->all_link_count]) || - !(nextval_str = new spider_string[spider_share->all_link_count]) - ) - goto error; - - for (roop_count = 0; roop_count < spider_share->all_link_count; - roop_count++) - { - show_last_insert_id[roop_count].init_calc_mem(SPD_MID_ORACLE_SHARE_APPEND_SHOW_LAST_INSERT_ID_1); - nextval_str[roop_count].init_calc_mem(SPD_MID_ORACLE_SHARE_APPEND_SHOW_LAST_INSERT_ID_2); - if (spider_share->sql_dbton_ids[roop_count] != dbton_id) - continue; - - if ( - show_last_insert_id[roop_count].reserve( - SPIDER_SQL_SELECT_LEN + - spider_share->tgt_sequence_names_lengths[roop_count] + - SPIDER_SQL_CURRVAL_LEN + - SPIDER_SQL_FROM_DUAL_LEN + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2) - ) - goto error; - str = &show_last_insert_id[roop_count]; - str->q_append(SPIDER_SQL_SELECT_STR, SPIDER_SQL_SELECT_LEN); - spider_db_oracle_utility.append_name(str, - spider_share->tgt_sequence_names[roop_count], - spider_share->tgt_sequence_names_lengths[roop_count]); - str->q_append(SPIDER_SQL_CURRVAL_STR, SPIDER_SQL_CURRVAL_LEN); - str->q_append(SPIDER_SQL_FROM_DUAL_STR, SPIDER_SQL_FROM_DUAL_LEN); - - if (seq_nm_max_length < - spider_share->tgt_sequence_names_lengths[roop_count]) - { - seq_nm_max_length = - spider_share->tgt_sequence_names_lengths[roop_count]; - } - } - for (roop_count = 0; roop_count < spider_share->all_link_count; - roop_count++) - { - if (spider_share->sql_dbton_ids[roop_count] != dbton_id) - continue; - - if ( - nextval_str[roop_count].reserve( - seq_nm_max_length + - SPIDER_SQL_NEXTVAL_LEN + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2) - ) - goto error; - str = &nextval_str[roop_count]; - spider_db_oracle_utility.append_name(str, - spider_share->tgt_sequence_names[roop_count], - spider_share->tgt_sequence_names_lengths[roop_count]); - str->q_append(SPIDER_SQL_NEXTVAL_STR, SPIDER_SQL_NEXTVAL_LEN); - uint length = - seq_nm_max_length - spider_share->tgt_sequence_names_lengths[roop_count]; - memset((char *) str->ptr() + str->length(), ' ', length); - str->length(str->length() + length); - nextval_max_length = str->length(); - } - DBUG_RETURN(0); - -error: - if (show_last_insert_id) - { - delete [] show_last_insert_id; - show_last_insert_id = NULL; - } - if (nextval_str) - { - delete [] nextval_str; - nextval_str = NULL; - } - DBUG_RETURN(HA_ERR_OUT_OF_MEM); -} - -void spider_oracle_share::free_show_last_insert_id() -{ - DBUG_ENTER("spider_oracle_share::free_show_last_insert_id"); - if (show_last_insert_id) - { - delete [] show_last_insert_id; - show_last_insert_id = NULL; - } - if (nextval_str) - { - delete [] nextval_str; - nextval_str = NULL; - } - DBUG_VOID_RETURN; -} - -int spider_oracle_share::append_show_index() -{ - int roop_count; - spider_string *str; - uint dbton_id = spider_dbton_oracle.dbton_id; - DBUG_ENTER("spider_oracle_share::append_show_index"); - if (!(show_index = new spider_string[2 * spider_share->all_link_count])) - goto error; - - for (roop_count = 0; roop_count < (int) spider_share->all_link_count; - roop_count++) - { - show_index[0 + (2 * roop_count)].init_calc_mem(SPD_MID_ORACLE_SHARE_APPEND_SHOW_INDEX_1); - show_index[1 + (2 * roop_count)].init_calc_mem(SPD_MID_ORACLE_SHARE_APPEND_SHOW_INDEX_2); - if (spider_share->sql_dbton_ids[roop_count] != dbton_id) - continue; - - if ( - show_index[0 + (2 * roop_count)].reserve( - SPIDER_SQL_SHOW_INDEX_LEN + db_names_str[roop_count].length() + - SPIDER_SQL_DOT_LEN + - table_names_str[roop_count].length() + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 4) || - show_index[1 + (2 * roop_count)].reserve( - SPIDER_SQL_SELECT_STATISTICS_LEN + - db_names_str[roop_count].length() + - SPIDER_SQL_AND_LEN + SPIDER_SQL_TABLE_NAME_LEN + SPIDER_SQL_EQUAL_LEN + - table_names_str[roop_count].length() + - ((SPIDER_SQL_VALUE_QUOTE_LEN) * 4) + - SPIDER_SQL_GROUP_LEN + SPIDER_SQL_COLUMN_NAME_LEN) - ) - goto error; - str = &show_index[0 + (2 * roop_count)]; - str->q_append( - SPIDER_SQL_SHOW_INDEX_STR, SPIDER_SQL_SHOW_INDEX_LEN); - append_table_name(str, roop_count); - str = &show_index[1 + (2 * roop_count)]; - str->q_append( - SPIDER_SQL_SELECT_STATISTICS_STR, SPIDER_SQL_SELECT_STATISTICS_LEN); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - str->q_append(db_names_str[roop_count].ptr(), - db_names_str[roop_count].length()); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - str->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN); - str->q_append(SPIDER_SQL_TABLE_NAME_STR, SPIDER_SQL_TABLE_NAME_LEN); - str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - str->q_append(table_names_str[roop_count].ptr(), - table_names_str[roop_count].length()); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - str->q_append(SPIDER_SQL_GROUP_STR, SPIDER_SQL_GROUP_LEN); - str->q_append(SPIDER_SQL_COLUMN_NAME_STR, SPIDER_SQL_COLUMN_NAME_LEN); - } - DBUG_RETURN(0); - -error: - if (show_index) - { - delete [] show_index; - show_index = NULL; - } - DBUG_RETURN(HA_ERR_OUT_OF_MEM); -} - -void spider_oracle_share::free_show_index() -{ - DBUG_ENTER("spider_oracle_share::free_show_index"); - if (show_index) - { - delete [] show_index; - show_index = NULL; - } - DBUG_VOID_RETURN; -} - -int spider_oracle_share::append_table_select() -{ - Field **field; - uint field_length; - spider_string *str = table_select; - TABLE_SHARE *table_share = spider_share->table_share; - DBUG_ENTER("spider_oracle_share::append_table_select"); - - if (!*table_share->field) - DBUG_RETURN(0); - - for (field = table_share->field; *field; field++) - { - field_length = column_name_str[(*field)->field_index].length(); - if (str->reserve(field_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - append_column_name(str, (*field)->field_index); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - DBUG_RETURN(append_from_with_adjusted_table_name(str, &table_select_pos)); -} - -int spider_oracle_share::append_key_select( - uint idx -) { - KEY_PART_INFO *key_part; - Field *field; - uint part_num; - uint field_length; - spider_string *str = &key_select[idx]; - TABLE_SHARE *table_share = spider_share->table_share; - const KEY *key_info = &table_share->key_info[idx]; - DBUG_ENTER("spider_oracle_share::append_key_select"); - - if (!spider_user_defined_key_parts(key_info)) - DBUG_RETURN(0); - - for (key_part = key_info->key_part, part_num = 0; - part_num < spider_user_defined_key_parts(key_info); key_part++, part_num++) - { - field = key_part->field; - field_length = column_name_str[field->field_index].length(); - if (str->reserve(field_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - append_column_name(str, field->field_index); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - DBUG_RETURN(append_from_with_adjusted_table_name(str, &key_select_pos[idx])); -} - -bool spider_oracle_share::need_change_db_table_name() -{ - DBUG_ENTER("spider_oracle_share::need_change_db_table_name"); - DBUG_RETURN(!same_db_table_name); -} - -#ifdef SPIDER_HAS_DISCOVER_TABLE_STRUCTURE -int spider_oracle_share::discover_table_structure( - SPIDER_TRX *trx, - SPIDER_SHARE *spider_share, - spider_string *str -) { - DBUG_ENTER("spider_oracle_share::discover_table_structure"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(HA_ERR_WRONG_COMMAND); -} -#endif - -spider_oracle_handler::spider_oracle_handler( - ha_spider *spider, - spider_oracle_share *db_share -) : spider_db_handler( - spider, - db_share -), - where_pos(0), - order_pos(0), - limit_pos(0), - table_name_pos(0), - update_set_pos(0), - ha_read_pos(0), - ha_next_pos(0), - ha_where_pos(0), - ha_limit_pos(0), - ha_table_name_pos(0), - insert_pos(0), - insert_table_name_pos(0), - upd_tmp_tbl(NULL), - tmp_sql_pos1(0), - tmp_sql_pos2(0), - tmp_sql_pos3(0), - tmp_sql_pos4(0), - tmp_sql_pos5(0), - table_lock_mode(0), - reading_from_bulk_tmp_table(FALSE), - filled_up(FALSE), - select_rownum_appended(FALSE), - update_rownum_appended(FALSE), - union_table_name_pos_first(NULL), - union_table_name_pos_current(NULL), - oracle_share(db_share), - link_for_hash(NULL) -{ - DBUG_ENTER("spider_oracle_handler::spider_oracle_handler"); - DBUG_PRINT("info",("spider this=%p", this)); - spider_alloc_calc_mem_init(mem_calc, SPD_MID_ORACLE_HANDLER_SPIDER_ORACLE_HANDLER_1); - spider_alloc_calc_mem(spider_current_trx, mem_calc, sizeof(*this)); - DBUG_VOID_RETURN; -} - -spider_oracle_handler::~spider_oracle_handler() -{ - DBUG_ENTER("spider_oracle_handler::~spider_oracle_handler"); - DBUG_PRINT("info",("spider this=%p", this)); - while (union_table_name_pos_first) - { - SPIDER_INT_HLD *tmp_pos = union_table_name_pos_first; - union_table_name_pos_first = tmp_pos->next; - spider_free(spider_current_trx, tmp_pos, MYF(0)); - } - if (link_for_hash) - { - spider_free(spider_current_trx, link_for_hash, MYF(0)); - } - spider_free_mem_calc(spider_current_trx, mem_calc_id, sizeof(*this)); - DBUG_VOID_RETURN; -} - -int spider_oracle_handler::init() -{ - uint roop_count; - THD *thd = spider->wide_handler->trx->thd; - st_spider_share *share = spider->share; - int init_sql_alloc_size = - spider_param_init_sql_alloc_size(thd, share->init_sql_alloc_size); - TABLE *table = spider->get_table(); - DBUG_ENTER("spider_oracle_handler::init"); - DBUG_PRINT("info",("spider this=%p", this)); - sql.init_calc_mem(SPD_MID_ORACLE_HANDLER_INIT_1); - sql_part.init_calc_mem(SPD_MID_ORACLE_HANDLER_INIT_2); - sql_part2.init_calc_mem(SPD_MID_ORACLE_HANDLER_INIT_3); - ha_sql.init_calc_mem(SPD_MID_ORACLE_HANDLER_INIT_4); - insert_sql.init_calc_mem(SPD_MID_ORACLE_HANDLER_INIT_5); - update_sql.init_calc_mem(SPD_MID_ORACLE_HANDLER_INIT_6); - tmp_sql.init_calc_mem(SPD_MID_ORACLE_HANDLER_INIT_7); - dup_update_sql.init_calc_mem(SPD_MID_ORACLE_HANDLER_INIT_8); - if ( - (sql.real_alloc(init_sql_alloc_size)) || - (insert_sql.real_alloc(init_sql_alloc_size)) || - (update_sql.real_alloc(init_sql_alloc_size)) || - (tmp_sql.real_alloc(init_sql_alloc_size)) - ) { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - sql.set_charset(share->access_charset); - sql_part.set_charset(share->access_charset); - sql_part2.set_charset(share->access_charset); - ha_sql.set_charset(share->access_charset); - insert_sql.set_charset(share->access_charset); - update_sql.set_charset(share->access_charset); - tmp_sql.set_charset(share->access_charset); - dup_update_sql.set_charset(share->access_charset); - upd_tmp_tbl_prm.init(); - upd_tmp_tbl_prm.field_count = 1; - if (!(link_for_hash = (SPIDER_LINK_FOR_HASH *) - spider_bulk_alloc_mem(spider_current_trx, SPD_MID_ORACLE_HANDLER_INIT_9, - __func__, __FILE__, __LINE__, MYF(MY_WME | MY_ZEROFILL), - &link_for_hash, - sizeof(SPIDER_LINK_FOR_HASH) * share->link_count, - &minimum_select_bitmap, - table ? sizeof(uchar) * no_bytes_in_map(table->read_set) : 0, - NullS)) - ) { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - for (roop_count = 0; roop_count < share->link_count; roop_count++) - { - link_for_hash[roop_count].spider = spider; - link_for_hash[roop_count].link_idx = roop_count; - link_for_hash[roop_count].db_table_str = - &oracle_share->db_table_str[roop_count]; - link_for_hash[roop_count].db_table_str_hash_value = - oracle_share->db_table_str_hash_value[roop_count]; - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_index_hint( - spider_string *str, - int link_idx, - ulong sql_type - ) -{ - DBUG_ENTER("spider_oracle_handler::append_index_hint"); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_table_name_with_adjusting( - spider_string *str, - int link_idx, - ulong sql_type -) { - int error_num = 0; - DBUG_ENTER("spider_oracle_handler::append_table_name_with_adjusting"); - DBUG_PRINT("info",("spider this=%p", this)); - if (sql_type == SPIDER_SQL_TYPE_HANDLER) - { - str->q_append(spider->m_handler_cid[link_idx], SPIDER_SQL_HANDLER_CID_LEN); - } else { - error_num = oracle_share->append_table_name_with_adjusting(str, - spider->conn_link_idx[link_idx]); - } - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_key_column_types( - const key_range *start_key, - spider_string *str -) { - SPIDER_RESULT_LIST *result_list = &spider->result_list; - KEY *key_info = result_list->key_info; - uint key_name_length, key_count; - key_part_map full_key_part_map = - make_prev_keypart_map(spider_user_defined_key_parts(key_info)); - key_part_map start_key_part_map; - KEY_PART_INFO *key_part; - Field *field; - char tmp_buf[MAX_FIELD_WIDTH]; - spider_string tmp_str(tmp_buf, sizeof(tmp_buf), system_charset_info); - DBUG_ENTER("spider_oracle_handler::append_key_column_types"); - DBUG_PRINT("info",("spider this=%p", this)); - tmp_str.init_calc_mem(SPD_MID_ORACLE_HANDLER_APPEND_KEY_COLUMN_TYPES_1); - - start_key_part_map = start_key->keypart_map & full_key_part_map; - DBUG_PRINT("info", ("spider spider_user_defined_key_parts=%u", - spider_user_defined_key_parts(key_info))); - DBUG_PRINT("info", ("spider full_key_part_map=%lu", full_key_part_map)); - DBUG_PRINT("info", ("spider start_key_part_map=%lu", start_key_part_map)); - - if (!start_key_part_map) - DBUG_RETURN(0); - - for ( - key_part = key_info->key_part, - key_count = 0; - start_key_part_map; - start_key_part_map >>= 1, - key_part++, - key_count++ - ) { - field = key_part->field; - key_name_length = my_sprintf(tmp_buf, (tmp_buf, "c%u", key_count)); - if (str->reserve(key_name_length + SPIDER_SQL_SPACE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(tmp_buf, key_name_length); - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - - if (tmp_str.ptr() != tmp_buf) - tmp_str.set(tmp_buf, sizeof(tmp_buf), system_charset_info); - else - tmp_str.set_charset(system_charset_info); - field->sql_type(*tmp_str.get_str()); - tmp_str.mem_calc(); - str->append(tmp_str); - - if (str->reserve(SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_key_join_columns_for_bka( - const key_range *start_key, - spider_string *str, - const char **table_aliases, - uint *table_alias_lengths -) { - KEY *key_info = spider->result_list.key_info; - uint length, key_name_length, key_count; - key_part_map full_key_part_map = - make_prev_keypart_map(spider_user_defined_key_parts(key_info)); - key_part_map start_key_part_map; - KEY_PART_INFO *key_part; - Field *field; - char tmp_buf[MAX_FIELD_WIDTH]; - bool start_where = ((int) str->length() == where_pos); - DBUG_ENTER("spider_oracle_handler::append_key_join_columns_for_bka"); - DBUG_PRINT("info",("spider this=%p", this)); - start_key_part_map = start_key->keypart_map & full_key_part_map; - DBUG_PRINT("info", ("spider spider_user_defined_key_parts=%u", - spider_user_defined_key_parts(key_info))); - DBUG_PRINT("info", ("spider full_key_part_map=%lu", full_key_part_map)); - DBUG_PRINT("info", ("spider start_key_part_map=%lu", start_key_part_map)); - - if (!start_key_part_map) - DBUG_RETURN(0); - - if (start_where) - { - if (str->reserve(SPIDER_SQL_WHERE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_WHERE_STR, SPIDER_SQL_WHERE_LEN); - } else { - if (str->reserve(SPIDER_SQL_AND_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN); - } - - for ( - key_part = key_info->key_part, - key_count = 0; - start_key_part_map; - start_key_part_map >>= 1, - key_part++, - key_count++ - ) { - field = key_part->field; - key_name_length = - oracle_share->column_name_str[field->field_index].length(); - length = my_sprintf(tmp_buf, (tmp_buf, "c%u", key_count)); - if (str->reserve(length + table_alias_lengths[0] + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + - table_alias_lengths[1] + SPIDER_SQL_PF_EQUAL_LEN + SPIDER_SQL_AND_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(table_aliases[0], table_alias_lengths[0]); - str->q_append(tmp_buf, length); - str->q_append(SPIDER_SQL_PF_EQUAL_STR, SPIDER_SQL_PF_EQUAL_LEN); - str->q_append(table_aliases[1], table_alias_lengths[1]); - oracle_share->append_column_name(str, field->field_index); - str->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN); - } - str->length(str->length() - SPIDER_SQL_AND_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_tmp_table_and_sql_for_bka( - const key_range *start_key -) { - int error_num; - DBUG_ENTER("spider_oracle_handler::append_tmp_table_and_sql_for_bka"); - DBUG_PRINT("info",("spider this=%p", this)); - char tmp_table_name[MAX_FIELD_WIDTH * 2], - tgt_table_name[MAX_FIELD_WIDTH * 2]; - int tmp_table_name_length; - spider_string tgt_table_name_str(tgt_table_name, MAX_FIELD_WIDTH * 2, - oracle_share->db_names_str[0].charset()); - const char *table_names[2], *table_aliases[2], *table_dot_aliases[2]; - uint table_name_lengths[2], table_alias_lengths[2], - table_dot_alias_lengths[2]; - tgt_table_name_str.init_calc_mem(SPD_MID_ORACLE_HANDLER_APPEND_TMP_TABLE_AND_SQL_FOR_BKA_1); - tgt_table_name_str.length(0); - create_tmp_bka_table_name(tmp_table_name, &tmp_table_name_length, - first_link_idx); - if ((error_num = append_table_name_with_adjusting(&tgt_table_name_str, - first_link_idx, SPIDER_SQL_TYPE_SELECT_SQL))) - { - DBUG_RETURN(error_num); - } - table_names[0] = tmp_table_name; - table_names[1] = tgt_table_name_str.c_ptr_safe(); - table_name_lengths[0] = tmp_table_name_length; - table_name_lengths[1] = tgt_table_name_str.length(); - table_aliases[0] = SPIDER_SQL_A_STR; - table_aliases[1] = SPIDER_SQL_B_STR; - table_alias_lengths[0] = SPIDER_SQL_A_LEN; - table_alias_lengths[1] = SPIDER_SQL_B_LEN; - table_dot_aliases[0] = SPIDER_SQL_A_DOT_STR; - table_dot_aliases[1] = SPIDER_SQL_B_DOT_STR; - table_dot_alias_lengths[0] = SPIDER_SQL_A_DOT_LEN; - table_dot_alias_lengths[1] = SPIDER_SQL_B_DOT_LEN; - if ( - (error_num = append_drop_tmp_bka_table( - &tmp_sql, tmp_table_name, tmp_table_name_length, - &tmp_sql_pos1, &tmp_sql_pos5, TRUE)) || - (error_num = append_create_tmp_bka_table( - start_key, - &tmp_sql, tmp_table_name, - tmp_table_name_length, - &tmp_sql_pos2, spider->share->table_share->table_charset)) || - (error_num = append_insert_tmp_bka_table( - start_key, - &tmp_sql, tmp_table_name, - tmp_table_name_length, &tmp_sql_pos3)) - ) - DBUG_RETURN(error_num); - tmp_sql_pos4 = tmp_sql.length(); - if ((error_num = spider_db_append_select(spider))) - DBUG_RETURN(error_num); - if (sql.reserve(SPIDER_SQL_A_DOT_LEN + SPIDER_SQL_ID_LEN + - SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_A_DOT_STR, SPIDER_SQL_A_DOT_LEN); - sql.q_append(SPIDER_SQL_ID_STR, SPIDER_SQL_ID_LEN); - sql.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - if ( - (error_num = append_select_columns_with_alias(&sql, - SPIDER_SQL_B_DOT_STR, SPIDER_SQL_B_DOT_LEN)) || - (error_num = spider_db_oracle_utility.append_from_with_alias(&sql, - table_names, table_name_lengths, - table_aliases, table_alias_lengths, 2, - &table_name_pos, FALSE)) - ) - DBUG_RETURN(error_num); - if ( - oracle_share->key_hint && - (error_num = spider_db_append_hint_after_table(spider, - &sql, &oracle_share->key_hint[spider->active_index])) - ) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - where_pos = sql.length(); - if ( - (error_num = append_key_join_columns_for_bka( - start_key, &sql, - table_dot_aliases, table_dot_alias_lengths)) || - (error_num = append_condition_part( - SPIDER_SQL_B_DOT_STR, SPIDER_SQL_B_DOT_LEN, - SPIDER_SQL_TYPE_SELECT_SQL, FALSE)) - ) - DBUG_RETURN(error_num); - if (spider->result_list.direct_order_limit) - { - if ((error_num = append_key_order_for_direct_order_limit_with_alias(&sql, - SPIDER_SQL_B_DOT_STR, SPIDER_SQL_B_DOT_LEN))) - DBUG_RETURN(error_num); - } - else if (spider->result_list.direct_aggregate) - { - if ((error_num = - append_group_by(&sql, SPIDER_SQL_B_DOT_STR, SPIDER_SQL_B_DOT_LEN))) - DBUG_RETURN(error_num); - } - - DBUG_RETURN(0); -} - -int spider_oracle_handler::reuse_tmp_table_and_sql_for_bka() -{ - DBUG_ENTER("spider_oracle_handler::reuse_tmp_table_and_sql_for_bka"); - DBUG_PRINT("info",("spider this=%p", this)); - tmp_sql.length(tmp_sql_pos4); - sql.length(limit_pos); - ha_sql.length(ha_limit_pos); - DBUG_RETURN(0); -} - -void spider_oracle_handler::create_tmp_bka_table_name( - char *tmp_table_name, - int *tmp_table_name_length, - int link_idx -) { - uint adjust_length, length; - DBUG_ENTER("spider_oracle_handler::create_tmp_bka_table_name"); - if (spider_param_bka_table_name_type(current_thd, - oracle_share->spider_share-> - bka_table_name_types[spider->conn_link_idx[link_idx]]) == 1) - { - adjust_length = - oracle_share->db_nm_max_length - - oracle_share->db_names_str[spider->conn_link_idx[link_idx]].length() + - oracle_share->table_nm_max_length - - oracle_share->table_names_str[spider->conn_link_idx[link_idx]].length(); - *tmp_table_name_length = oracle_share->db_nm_max_length + - oracle_share->table_nm_max_length; - memset(tmp_table_name, ' ', adjust_length); - tmp_table_name += adjust_length; - memcpy(tmp_table_name, oracle_share->db_names_str[link_idx].c_ptr(), - oracle_share->db_names_str[link_idx].length()); - tmp_table_name += oracle_share->db_names_str[link_idx].length(); - length = my_sprintf(tmp_table_name, (tmp_table_name, - "%s%s%p%s", SPIDER_SQL_DOT_STR, SPIDER_SQL_TMP_BKA_STR, spider, - SPIDER_SQL_UNDERSCORE_STR)); - *tmp_table_name_length += length; - tmp_table_name += length; - memcpy(tmp_table_name, - oracle_share->table_names_str[spider->conn_link_idx[link_idx]].c_ptr(), - oracle_share->table_names_str[spider->conn_link_idx[link_idx]].length()); - } else { - adjust_length = - oracle_share->db_nm_max_length - - oracle_share->db_names_str[spider->conn_link_idx[link_idx]].length(); - *tmp_table_name_length = oracle_share->db_nm_max_length; - memset(tmp_table_name, ' ', adjust_length); - tmp_table_name += adjust_length; - memcpy(tmp_table_name, oracle_share->db_names_str[link_idx].c_ptr(), - oracle_share->db_names_str[link_idx].length()); - tmp_table_name += oracle_share->db_names_str[link_idx].length(); - length = my_sprintf(tmp_table_name, (tmp_table_name, - "%s%s%p", SPIDER_SQL_DOT_STR, SPIDER_SQL_TMP_BKA_STR, spider)); - *tmp_table_name_length += length; - } - DBUG_VOID_RETURN; -} - -int spider_oracle_handler::append_create_tmp_bka_table( - const key_range *start_key, - spider_string *str, - char *tmp_table_name, - int tmp_table_name_length, - int *db_name_pos, - CHARSET_INFO *table_charset -) { - int error_num; - SPIDER_SHARE *share = spider->share; - THD *thd = spider->wide_handler->trx->thd; - char *bka_engine = spider_param_bka_engine(thd, share->bka_engine); - uint bka_engine_length = strlen(bka_engine), - cset_length = strlen(table_charset->csname); - DBUG_ENTER("spider_oracle_handler::append_create_tmp_bka_table"); - if (str->reserve(SPIDER_SQL_CREATE_TMP_LEN + tmp_table_name_length + - SPIDER_SQL_OPEN_PAREN_LEN + SPIDER_SQL_ID_LEN + SPIDER_SQL_ID_TYPE_LEN + - SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CREATE_TMP_STR, SPIDER_SQL_CREATE_TMP_LEN); - *db_name_pos = str->length(); - str->q_append(tmp_table_name, tmp_table_name_length); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - str->q_append(SPIDER_SQL_ID_STR, SPIDER_SQL_ID_LEN); - str->q_append(SPIDER_SQL_ID_TYPE_STR, SPIDER_SQL_ID_TYPE_LEN); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - if ((error_num = append_key_column_types(start_key, str))) - DBUG_RETURN(error_num); - if (str->reserve(SPIDER_SQL_ENGINE_LEN + bka_engine_length + - SPIDER_SQL_DEF_CHARSET_LEN + cset_length + SPIDER_SQL_SEMICOLON_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_ENGINE_STR, SPIDER_SQL_ENGINE_LEN); - str->q_append(bka_engine, bka_engine_length); - str->q_append(SPIDER_SQL_DEF_CHARSET_STR, SPIDER_SQL_DEF_CHARSET_LEN); - str->q_append(table_charset->csname, cset_length); - str->q_append(SPIDER_SQL_SEMICOLON_STR, SPIDER_SQL_SEMICOLON_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_drop_tmp_bka_table( - spider_string *str, - char *tmp_table_name, - int tmp_table_name_length, - int *db_name_pos, - int *drop_table_end_pos, - bool with_semicolon -) { - DBUG_ENTER("spider_oracle_handler::append_drop_tmp_bka_table"); - if (str->reserve(SPIDER_SQL_DROP_TMP_LEN + tmp_table_name_length + - (with_semicolon ? SPIDER_SQL_SEMICOLON_LEN : 0))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_DROP_TMP_STR, SPIDER_SQL_DROP_TMP_LEN); - *db_name_pos = str->length(); - str->q_append(tmp_table_name, tmp_table_name_length); - *drop_table_end_pos = str->length(); - if (with_semicolon) - str->q_append(SPIDER_SQL_SEMICOLON_STR, SPIDER_SQL_SEMICOLON_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_insert_tmp_bka_table( - const key_range *start_key, - spider_string *str, - char *tmp_table_name, - int tmp_table_name_length, - int *db_name_pos -) { - int error_num; - DBUG_ENTER("spider_oracle_handler::append_insert_tmp_bka_table"); - if (str->reserve(SPIDER_SQL_INSERT_LEN + SPIDER_SQL_INTO_LEN + - tmp_table_name_length + SPIDER_SQL_OPEN_PAREN_LEN + SPIDER_SQL_ID_LEN + - SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_INSERT_STR, SPIDER_SQL_INSERT_LEN); - str->q_append(SPIDER_SQL_INTO_STR, SPIDER_SQL_INTO_LEN); - *db_name_pos = str->length(); - str->q_append(tmp_table_name, tmp_table_name_length); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - str->q_append(SPIDER_SQL_ID_STR, SPIDER_SQL_ID_LEN); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - if ((error_num = spider_db_append_key_columns(start_key, spider, str))) - DBUG_RETURN(error_num); - if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN + SPIDER_SQL_VALUES_LEN + - SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); - str->q_append(SPIDER_SQL_VALUES_STR, SPIDER_SQL_VALUES_LEN); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_union_table_and_sql_for_bka( - const key_range *start_key -) { - int error_num; - DBUG_ENTER("spider_oracle_handler::append_union_table_and_sql_for_bka"); - DBUG_PRINT("info",("spider this=%p", this)); - char tgt_table_name[MAX_FIELD_WIDTH * 2]; - spider_string tgt_table_name_str(tgt_table_name, MAX_FIELD_WIDTH * 2, - oracle_share->db_names_str[0].charset()); - const char *table_names[2], *table_aliases[2], *table_dot_aliases[2]; - uint table_name_lengths[2], table_alias_lengths[2], - table_dot_alias_lengths[2]; - tgt_table_name_str.init_calc_mem(SPD_MID_ORACLE_HANDLER_APPEND_UNION_TABLE_AND_SQL_FOR_BKA_1); - tgt_table_name_str.length(0); - if ((error_num = append_table_name_with_adjusting(&tgt_table_name_str, - first_link_idx, SPIDER_SQL_TYPE_SELECT_SQL))) - { - DBUG_RETURN(error_num); - } - table_names[0] = ""; - table_names[1] = tgt_table_name_str.c_ptr_safe(); - table_name_lengths[0] = 0; - table_name_lengths[1] = tgt_table_name_str.length(); - table_aliases[0] = SPIDER_SQL_A_STR; - table_aliases[1] = SPIDER_SQL_B_STR; - table_alias_lengths[0] = SPIDER_SQL_A_LEN; - table_alias_lengths[1] = SPIDER_SQL_B_LEN; - table_dot_aliases[0] = SPIDER_SQL_A_DOT_STR; - table_dot_aliases[1] = SPIDER_SQL_B_DOT_STR; - table_dot_alias_lengths[0] = SPIDER_SQL_A_DOT_LEN; - table_dot_alias_lengths[1] = SPIDER_SQL_B_DOT_LEN; - - if ((error_num = spider_db_append_select(spider))) - DBUG_RETURN(error_num); - if (sql.reserve(SPIDER_SQL_A_DOT_LEN + SPIDER_SQL_ID_LEN + - SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_A_DOT_STR, SPIDER_SQL_A_DOT_LEN); - sql.q_append(SPIDER_SQL_ID_STR, SPIDER_SQL_ID_LEN); - sql.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - if ((error_num = append_select_columns_with_alias(&sql, - SPIDER_SQL_B_DOT_STR, SPIDER_SQL_B_DOT_LEN))) - DBUG_RETURN(error_num); - if (sql.reserve(SPIDER_SQL_FROM_LEN + (SPIDER_SQL_OPEN_PAREN_LEN * 2))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN); - sql.q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - sql.q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - tmp_sql_pos1 = sql.length(); - - if ( - (error_num = spider_db_oracle_utility.append_from_with_alias(&tmp_sql, - table_names, table_name_lengths, - table_aliases, table_alias_lengths, 2, - &table_name_pos, FALSE)) - ) - DBUG_RETURN(error_num); - if ( - oracle_share->key_hint && - (error_num = spider_db_append_hint_after_table(spider, - &tmp_sql, &oracle_share->key_hint[spider->active_index])) - ) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - where_pos = tmp_sql.length(); - if ( - (error_num = append_key_join_columns_for_bka( - start_key, &tmp_sql, - table_dot_aliases, table_dot_alias_lengths)) || - (error_num = append_condition_part( - SPIDER_SQL_B_DOT_STR, SPIDER_SQL_B_DOT_LEN, - SPIDER_SQL_TYPE_TMP_SQL, FALSE)) - ) - DBUG_RETURN(error_num); - if (spider->result_list.direct_order_limit) - { - if ((error_num = append_key_order_for_direct_order_limit_with_alias( - &tmp_sql, SPIDER_SQL_B_DOT_STR, SPIDER_SQL_B_DOT_LEN))) - DBUG_RETURN(error_num); - } - else if (spider->result_list.direct_aggregate) - { - if ((error_num = - append_group_by(&tmp_sql, SPIDER_SQL_B_DOT_STR, SPIDER_SQL_B_DOT_LEN))) - DBUG_RETURN(error_num); - } - - DBUG_RETURN(0); -} - -int spider_oracle_handler::reuse_union_table_and_sql_for_bka() -{ - DBUG_ENTER("spider_oracle_handler::reuse_union_table_and_sql_for_bka"); - DBUG_PRINT("info",("spider this=%p", this)); - sql.length(tmp_sql_pos1); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_insert_for_recovery( - ulong sql_type, - int link_idx -) { - const TABLE *table = spider->get_table(); - SPIDER_SHARE *share = spider->share; - Field **field; - uint field_name_length = 0; - bool add_value = FALSE; - spider_string *insert_sql; - DBUG_ENTER("spider_oracle_handler::append_insert_for_recovery"); - DBUG_PRINT("info",("spider this=%p", this)); - if (sql_type == SPIDER_SQL_TYPE_INSERT_SQL) - { - insert_sql = &spider->result_list.insert_sqls[link_idx]; - insert_sql->length(0); - } else { - insert_sql = &spider->result_list.update_sqls[link_idx]; - } - if (insert_sql->reserve( - SPIDER_SQL_INSERT_LEN + SPIDER_SQL_SQL_IGNORE_LEN + - SPIDER_SQL_INTO_LEN + oracle_share->db_nm_max_length + - SPIDER_SQL_DOT_LEN + oracle_share->table_nm_max_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 4 + SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - insert_sql->q_append(SPIDER_SQL_INSERT_STR, SPIDER_SQL_INSERT_LEN); - insert_sql->q_append(SPIDER_SQL_SQL_IGNORE_STR, SPIDER_SQL_SQL_IGNORE_LEN); - insert_sql->q_append(SPIDER_SQL_INTO_STR, SPIDER_SQL_INTO_LEN); - oracle_share->append_table_name(insert_sql, spider->conn_link_idx[link_idx]); - insert_sql->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - for (field = table->field; *field; field++) - { - field_name_length = - oracle_share->column_name_str[(*field)->field_index].length(); - if (insert_sql->reserve(field_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - oracle_share->append_column_name(insert_sql, (*field)->field_index); - insert_sql->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - if (field_name_length) - insert_sql->length(insert_sql->length() - SPIDER_SQL_COMMA_LEN); - if (insert_sql->reserve(SPIDER_SQL_CLOSE_PAREN_LEN + SPIDER_SQL_VALUES_LEN + - SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - insert_sql->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); - insert_sql->q_append(SPIDER_SQL_VALUES_STR, SPIDER_SQL_VALUES_LEN); - insert_sql->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - for (field = table->field; *field; field++) - { - add_value = TRUE; - if ((*field)->is_null()) - { - if (insert_sql->reserve(SPIDER_SQL_NULL_LEN + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - insert_sql->q_append(SPIDER_SQL_NULL_STR, SPIDER_SQL_NULL_LEN); - } else { - if ( - spider_db_oracle_utility. - append_column_value(spider, insert_sql, *field, NULL, - share->access_charset) || - insert_sql->reserve(SPIDER_SQL_COMMA_LEN) - ) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - insert_sql->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - if (add_value) - insert_sql->length(insert_sql->length() - SPIDER_SQL_COMMA_LEN); - if (insert_sql->reserve(SPIDER_SQL_CLOSE_PAREN_LEN, SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - insert_sql->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); - if (sql_type == SPIDER_SQL_TYPE_INSERT_SQL) - { - exec_insert_sql = insert_sql; - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_update( - const TABLE *table, - my_ptrdiff_t ptr_diff -) { - int error_num; - spider_string *str = &update_sql; - DBUG_ENTER("spider_oracle_handler::append_update"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->length() > 0) - { - if (str->reserve(SPIDER_SQL_SEMICOLON_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SEMICOLON_STR, SPIDER_SQL_SEMICOLON_LEN); - } - - if ( - (error_num = append_update(str, 0)) || - (error_num = append_update_set(str)) || - (error_num = append_update_where(str, table, ptr_diff)) - ) - DBUG_RETURN(error_num); - filled_up = (str->length() >= (uint) spider->result_list.bulk_update_size); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_update( - const TABLE *table, - my_ptrdiff_t ptr_diff, - int link_idx -) { - int error_num; - SPIDER_SHARE *share = spider->share; - spider_string *str = &spider->result_list.update_sqls[link_idx]; - DBUG_ENTER("spider_oracle_handler::append_update"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->length() > 0) - { - if (str->reserve(SPIDER_SQL_SEMICOLON_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SEMICOLON_STR, SPIDER_SQL_SEMICOLON_LEN); - } - - if ( - (error_num = append_update(str, link_idx)) || - (error_num = append_update_set(str)) || - (error_num = append_update_where(str, table, ptr_diff)) - ) - DBUG_RETURN(error_num); - - if ( - spider->pk_update && - share->link_statuses[link_idx] == SPIDER_LINK_STATUS_RECOVERY - ) { - if (str->reserve(SPIDER_SQL_SEMICOLON_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SEMICOLON_STR, SPIDER_SQL_SEMICOLON_LEN); - if ((error_num = append_insert_for_recovery( - SPIDER_SQL_TYPE_UPDATE_SQL, link_idx))) - DBUG_RETURN(error_num); - } - - if (!filled_up) - filled_up = (str->length() >= (uint) spider->result_list.bulk_update_size); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_delete( - const TABLE *table, - my_ptrdiff_t ptr_diff -) { - int error_num; - spider_string *str = &update_sql; - DBUG_ENTER("spider_oracle_handler::append_delete"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->length() > 0) - { - if (str->reserve(SPIDER_SQL_SEMICOLON_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SEMICOLON_STR, SPIDER_SQL_SEMICOLON_LEN); - } - - if ( - (error_num = append_delete(str)) || - (error_num = append_from(str, SPIDER_SQL_TYPE_DELETE_SQL, - first_link_idx)) || - (error_num = append_update_where(str, table, ptr_diff)) - ) - DBUG_RETURN(error_num); - filled_up = (str->length() >= (uint) spider->result_list.bulk_update_size); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_delete( - const TABLE *table, - my_ptrdiff_t ptr_diff, - int link_idx -) { - int error_num; - spider_string *str = &spider->result_list.update_sqls[link_idx]; - DBUG_ENTER("spider_oracle_handler::append_delete"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->length() > 0) - { - if (str->reserve(SPIDER_SQL_SEMICOLON_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SEMICOLON_STR, SPIDER_SQL_SEMICOLON_LEN); - } - - if ( - (error_num = append_delete(str)) || - (error_num = append_from(str, SPIDER_SQL_TYPE_DELETE_SQL, link_idx)) || - (error_num = append_update_where(str, table, ptr_diff)) - ) - DBUG_RETURN(error_num); - if (!filled_up) - filled_up = (str->length() >= (uint) spider->result_list.bulk_update_size); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_insert_part() -{ - int error_num; - DBUG_ENTER("spider_oracle_handler::append_insert_part"); - DBUG_PRINT("info",("spider this=%p", this)); - error_num = append_insert(&insert_sql, 0); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_insert( - spider_string *str, - int link_idx -) { - DBUG_ENTER("spider_oracle_handler::append_insert"); - if (str->reserve(SPIDER_SQL_INSERT_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_INSERT_STR, SPIDER_SQL_INSERT_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_update_part() -{ - int error_num; - DBUG_ENTER("spider_oracle_handler::append_update_part"); - DBUG_PRINT("info",("spider this=%p", this)); - error_num = append_update(&update_sql, 0); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_update( - spider_string *str, - int link_idx -) { - DBUG_ENTER("spider_oracle_handler::append_update"); - if (str->reserve(SPIDER_SQL_UPDATE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_UPDATE_STR, SPIDER_SQL_UPDATE_LEN); - if (str->reserve(oracle_share->db_nm_max_length + - SPIDER_SQL_DOT_LEN + oracle_share->table_nm_max_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 4)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - table_name_pos = str->length(); - append_table_name_with_adjusting(str, link_idx, SPIDER_SQL_TYPE_UPDATE_SQL); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_delete_part() -{ - int error_num; - DBUG_ENTER("spider_oracle_handler::append_delete_part"); - DBUG_PRINT("info",("spider this=%p", this)); - error_num = append_delete(&update_sql); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_delete( - spider_string *str -) { - DBUG_ENTER("spider_oracle_handler::append_delete"); - if (str->reserve(SPIDER_SQL_DELETE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_DELETE_STR, SPIDER_SQL_DELETE_LEN); - str->length(str->length() - 1); - DBUG_RETURN(0); -} - - -int spider_oracle_handler::append_update_set_part() -{ - int error_num; - DBUG_ENTER("spider_oracle_handler::append_update_set_part"); - DBUG_PRINT("info",("spider this=%p", this)); - update_set_pos = update_sql.length(); - error_num = append_update_set(&update_sql); - where_pos = update_sql.length(); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_update_set( - spider_string *str -) { - uint field_name_length; - SPIDER_SHARE *share = spider->share; - TABLE *table = spider->get_table(); - Field **fields; - DBUG_ENTER("spider_oracle_handler::append_update_set"); - if (str->reserve(SPIDER_SQL_SET_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SET_STR, SPIDER_SQL_SET_LEN); - for (fields = table->field; *fields; fields++) - { - if (bitmap_is_set(table->write_set, (*fields)->field_index)) - { - field_name_length = - oracle_share->column_name_str[(*fields)->field_index].length(); - if ((*fields)->is_null()) - { - if (str->reserve(field_name_length + /* SPIDER_SQL_NAME_QUOTE_LEN */ - 2 + SPIDER_SQL_EQUAL_LEN + SPIDER_SQL_NULL_LEN + - SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - oracle_share->append_column_name(str, (*fields)->field_index); - str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN); - str->q_append(SPIDER_SQL_NULL_STR, SPIDER_SQL_NULL_LEN); - } else { - if (str->reserve(field_name_length + /* SPIDER_SQL_NAME_QUOTE_LEN */ - 2 + SPIDER_SQL_EQUAL_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - oracle_share->append_column_name(str, (*fields)->field_index); - str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN); -#ifndef DBUG_OFF - my_bitmap_map *tmp_map = dbug_tmp_use_all_columns(table, - table->read_set); -#endif - if ( - spider_db_oracle_utility. - append_column_value(spider, str, *fields, NULL, - share->access_charset) || - str->reserve(SPIDER_SQL_COMMA_LEN) - ) { -#ifndef DBUG_OFF - dbug_tmp_restore_column_map(table->read_set, tmp_map); -#endif - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } -#ifndef DBUG_OFF - dbug_tmp_restore_column_map(table->read_set, tmp_map); -#endif - } - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_direct_update_set_part() -{ - int error_num; - DBUG_ENTER("spider_oracle_handler::append_direct_update_set_part"); - DBUG_PRINT("info",("spider this=%p", this)); - update_set_pos = update_sql.length(); - error_num = append_direct_update_set(&update_sql); - where_pos = update_sql.length(); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_direct_update_set( - spider_string *str -) { - DBUG_ENTER("spider_oracle_handler::append_direct_update_set"); - if ( - spider->direct_update_kinds == SPIDER_SQL_KIND_SQL && - spider->wide_handler->direct_update_fields - ) { - if (str->reserve(SPIDER_SQL_SET_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SET_STR, SPIDER_SQL_SET_LEN); - DBUG_RETURN(append_update_columns(str, NULL, 0)); - } - - if ( - (spider->direct_update_kinds & SPIDER_SQL_KIND_SQL) - ) { - DBUG_ASSERT(0); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_dup_update_pushdown_part( - const char *alias, - uint alias_length -) { - int error_num; - DBUG_ENTER("spider_oracle_handler::append_dup_update_pushdown_part"); - DBUG_PRINT("info",("spider this=%p", this)); - dup_update_sql.length(0); - error_num = append_update_columns(&dup_update_sql, alias, alias_length); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_update_columns_part( - const char *alias, - uint alias_length -) { - int error_num; - DBUG_ENTER("spider_oracle_handler::append_update_columns_part"); - DBUG_PRINT("info",("spider this=%p", this)); - error_num = append_update_columns(&update_sql, alias, alias_length); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::check_update_columns_part() -{ - int error_num; - DBUG_ENTER("spider_oracle_handler::check_update_columns_part"); - DBUG_PRINT("info",("spider this=%p", this)); - error_num = append_update_columns(NULL, NULL, 0); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_update_columns( - spider_string *str, - const char *alias, - uint alias_length -) { - int error_num; - List_iterator_fast fi(*spider->wide_handler->direct_update_fields), - vi(*spider->wide_handler->direct_update_values); - Item *field, *value; - DBUG_ENTER("spider_oracle_handler::append_update_columns"); - while ((field = fi++)) - { - value = vi++; - if ((error_num = spider_db_print_item_type( - (Item *) field, NULL, spider, str, alias, alias_length, - spider_dbton_oracle.dbton_id, FALSE, NULL))) - { - if ( - error_num == ER_SPIDER_COND_SKIP_NUM && - field->type() == Item::FIELD_ITEM && - ((Item_field *) field)->field - ) - continue; - DBUG_RETURN(error_num); - } - if (str) - { - if (str->reserve(SPIDER_SQL_EQUAL_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN); - } - if ((error_num = spider_db_print_item_type( - (Item *) value, ((Item_field *) field)->field, spider, str, - alias, alias_length, spider_dbton_oracle.dbton_id, FALSE, NULL))) - DBUG_RETURN(error_num); - if (str) - { - if (str->reserve(SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - if (str) - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - DBUG_RETURN(0); -/* - error_num = spider_db_append_update_columns(spider, str, - alias, alias_length, spider_dbton_oracle.dbton_id); - DBUG_RETURN(error_num); -*/ -} - -int spider_oracle_handler::append_select_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_select_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - case SPIDER_SQL_TYPE_HANDLER: - str = &ha_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_select(str, sql_type); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_select( - spider_string *str, - ulong sql_type -) { - DBUG_ENTER("spider_oracle_handler::append_select"); - if (sql_type == SPIDER_SQL_TYPE_HANDLER) - { - if (str->reserve(SPIDER_SQL_HANDLER_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_HANDLER_STR, SPIDER_SQL_HANDLER_LEN); - } else { - if (str->reserve(SPIDER_SQL_SELECT_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SELECT_STR, SPIDER_SQL_SELECT_LEN); - if (spider->result_list.direct_distinct) - { - if (str->reserve(SPIDER_SQL_DISTINCT_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_DISTINCT_STR, SPIDER_SQL_DISTINCT_LEN); - } - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_table_select_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_table_select_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_table_select(str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_table_select( - spider_string *str -) { - DBUG_ENTER("spider_oracle_handler::append_table_select"); - table_name_pos = str->length() + oracle_share->table_select_pos; - if (str->append(*(oracle_share->table_select))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_key_select_part( - ulong sql_type, - uint idx -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_key_select_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_key_select(str, idx); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_key_select( - spider_string *str, - uint idx -) { - DBUG_ENTER("spider_oracle_handler::append_key_select"); - table_name_pos = str->length() + oracle_share->key_select_pos[idx]; - if (str->append(oracle_share->key_select[idx])) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_minimum_select_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_minimum_select_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_minimum_select(str, sql_type); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_minimum_select( - spider_string *str, - ulong sql_type -) { - TABLE *table = spider->get_table(); - Field **field; - int field_length; - bool appended = FALSE; - DBUG_ENTER("spider_oracle_handler::append_minimum_select"); - minimum_select_bitmap_create(); - for (field = table->field; *field; field++) - { - if (minimum_select_bit_is_set((*field)->field_index)) - { -/* - spider_set_bit(minimum_select_bitmap, (*field)->field_index); -*/ - field_length = - oracle_share->column_name_str[(*field)->field_index].length(); - if (str->reserve(field_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - oracle_share->append_column_name(str, (*field)->field_index); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - appended = TRUE; - } - } - if (appended) - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - else { - if (str->reserve(SPIDER_SQL_ONE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_ONE_STR, SPIDER_SQL_ONE_LEN); - } - DBUG_RETURN(append_from(str, sql_type, first_link_idx)); -} - -int spider_oracle_handler::append_table_select_with_alias( - spider_string *str, - const char *alias, - uint alias_length -) { - TABLE *table = spider->get_table(); - Field **field; - int field_length; - DBUG_ENTER("spider_oracle_handler::append_table_select_with_alias"); - for (field = table->field; *field; field++) - { - field_length = - oracle_share->column_name_str[(*field)->field_index].length(); - if (str->reserve(alias_length + field_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(alias, alias_length); - oracle_share->append_column_name(str, (*field)->field_index); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_key_select_with_alias( - spider_string *str, - const KEY *key_info, - const char *alias, - uint alias_length -) { - KEY_PART_INFO *key_part; - Field *field; - uint part_num; - int field_length; - DBUG_ENTER("spider_oracle_handler::append_key_select_with_alias"); - for (key_part = key_info->key_part, part_num = 0; - part_num < spider_user_defined_key_parts(key_info); key_part++, part_num++) - { - field = key_part->field; - field_length = oracle_share->column_name_str[field->field_index].length(); - if (str->reserve(alias_length + field_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(alias, alias_length); - oracle_share->append_column_name(str, field->field_index); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_minimum_select_with_alias( - spider_string *str, - const char *alias, - uint alias_length -) { - TABLE *table = spider->get_table(); - Field **field; - int field_length; - bool appended = FALSE; - DBUG_ENTER("spider_oracle_handler::append_minimum_select_with_alias"); - minimum_select_bitmap_create(); - for (field = table->field; *field; field++) - { - if (minimum_select_bit_is_set((*field)->field_index)) - { -/* - spider_set_bit(minimum_select_bitmap, (*field)->field_index); -*/ - field_length = - oracle_share->column_name_str[(*field)->field_index].length(); - if (str->reserve(alias_length + field_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(alias, alias_length); - oracle_share->append_column_name(str, (*field)->field_index); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - appended = TRUE; - } - } - if (appended) - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - else { - if (str->reserve(SPIDER_SQL_ONE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_ONE_STR, SPIDER_SQL_ONE_LEN); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_select_columns_with_alias( - spider_string *str, - const char *alias, - uint alias_length -) { - int error_num; - SPIDER_RESULT_LIST *result_list = &spider->result_list; - DBUG_ENTER("spider_oracle_handler::append_select_columns_with_alias"); - if ( - result_list->direct_aggregate && - (error_num = append_sum_select(str, alias, alias_length)) - ) - DBUG_RETURN(error_num); - if ((error_num = append_match_select(str, alias, alias_length))) - DBUG_RETURN(error_num); - if (!spider->select_column_mode) - { - if (result_list->keyread) - DBUG_RETURN(append_key_select_with_alias( - str, result_list->key_info, alias, alias_length)); - else - DBUG_RETURN(append_table_select_with_alias( - str, alias, alias_length)); - } - DBUG_RETURN(append_minimum_select_with_alias(str, alias, alias_length)); -} - -int spider_oracle_handler::append_hint_after_table_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_hint_after_table_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - case SPIDER_SQL_TYPE_TMP_SQL: - str = &sql; - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - str = &update_sql; - break; - case SPIDER_SQL_TYPE_HANDLER: - str = &ha_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_hint_after_table(str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_hint_after_table( - spider_string *str -) { - int error_num; - DBUG_ENTER("spider_oracle_handler::append_hint_after_table"); - DBUG_PRINT("info",("spider this=%p", this)); - if ( - oracle_share->key_hint && - (error_num = spider_db_append_hint_after_table(spider, - str, &oracle_share->key_hint[spider->active_index])) - ) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - DBUG_RETURN(0); -} - -void spider_oracle_handler::set_where_pos( - ulong sql_type -) { - DBUG_ENTER("spider_oracle_handler::set_where_pos"); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - case SPIDER_SQL_TYPE_TMP_SQL: - where_pos = sql.length(); - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - where_pos = update_sql.length(); - break; - case SPIDER_SQL_TYPE_HANDLER: - ha_read_pos = ha_sql.length(); - break; - default: - break; - } - DBUG_VOID_RETURN; -} - -void spider_oracle_handler::set_where_to_pos( - ulong sql_type -) { - DBUG_ENTER("spider_oracle_handler::set_where_to_pos"); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - case SPIDER_SQL_TYPE_TMP_SQL: - sql.length(where_pos); - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - update_sql.length(where_pos); - break; - case SPIDER_SQL_TYPE_HANDLER: - ha_sql.length(ha_read_pos); - break; - default: - break; - } - DBUG_VOID_RETURN; -} - -int spider_oracle_handler::check_item_type( - Item *item -) { - int error_num; - DBUG_ENTER("spider_oracle_handler::check_item_type"); - DBUG_PRINT("info",("spider this=%p", this)); - error_num = spider_db_print_item_type(item, NULL, spider, NULL, NULL, 0, - spider_dbton_oracle.dbton_id, FALSE, NULL); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_values_connector_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_values_connector_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - case SPIDER_SQL_TYPE_TMP_SQL: - str = &tmp_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_values_connector(str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_values_connector( - spider_string *str -) { - DBUG_ENTER("spider_oracle_handler::append_values_connector"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN + - SPIDER_SQL_COMMA_LEN + SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_values_terminator_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_values_terminator_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - case SPIDER_SQL_TYPE_TMP_SQL: - str = &tmp_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_values_terminator(str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_values_terminator( - spider_string *str -) { - DBUG_ENTER("spider_oracle_handler::append_values_terminator"); - DBUG_PRINT("info",("spider this=%p", this)); - str->length(str->length() - - SPIDER_SQL_COMMA_LEN - SPIDER_SQL_OPEN_PAREN_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_union_table_connector_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_union_table_connector_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - case SPIDER_SQL_TYPE_TMP_SQL: - str = &tmp_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_union_table_connector(str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_union_table_connector( - spider_string *str -) { - DBUG_ENTER("spider_oracle_handler::append_union_table_connector"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve((SPIDER_SQL_SPACE_LEN * 2) + SPIDER_SQL_UNION_ALL_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - str->q_append(SPIDER_SQL_UNION_ALL_STR, SPIDER_SQL_UNION_ALL_LEN); - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_union_table_terminator_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_union_table_terminator_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_union_table_terminator(str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_union_table_terminator( - spider_string *str -) { - DBUG_ENTER("spider_oracle_handler::append_union_table_terminator"); - DBUG_PRINT("info",("spider this=%p", this)); - str->length(str->length() - - ((SPIDER_SQL_SPACE_LEN * 2) + SPIDER_SQL_UNION_ALL_LEN)); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); - table_name_pos = str->length() + SPIDER_SQL_SPACE_LEN + SPIDER_SQL_A_LEN + - SPIDER_SQL_COMMA_LEN; - if (str->reserve(tmp_sql.length() - SPIDER_SQL_FROM_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(tmp_sql.ptr() + SPIDER_SQL_FROM_LEN, - tmp_sql.length() - SPIDER_SQL_FROM_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_key_column_values_part( - const key_range *start_key, - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_key_column_values_part"); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - case SPIDER_SQL_TYPE_TMP_SQL: - str = &tmp_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_key_column_values(str, start_key); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_key_column_values( - spider_string *str, - const key_range *start_key -) { - int error_num; - const uchar *ptr; - SPIDER_RESULT_LIST *result_list = &spider->result_list; - SPIDER_SHARE *share = spider->share; - KEY *key_info = result_list->key_info; - uint length; - uint store_length; - key_part_map full_key_part_map = - make_prev_keypart_map(spider_user_defined_key_parts(key_info)); - key_part_map start_key_part_map; - KEY_PART_INFO *key_part; - Field *field; - DBUG_ENTER("spider_oracle_handler::append_key_column_values"); - start_key_part_map = start_key->keypart_map & full_key_part_map; - DBUG_PRINT("info", ("spider spider_user_defined_key_parts=%u", - spider_user_defined_key_parts(key_info))); - DBUG_PRINT("info", ("spider full_key_part_map=%lu", full_key_part_map)); - DBUG_PRINT("info", ("spider start_key_part_map=%lu", start_key_part_map)); - - if (!start_key_part_map) - DBUG_RETURN(0); - - for ( - key_part = key_info->key_part, - length = 0; - start_key_part_map; - start_key_part_map >>= 1, - key_part++, - length += store_length - ) { - store_length = key_part->store_length; - ptr = start_key->key + length; - field = key_part->field; - if ((error_num = spider_db_append_null_value(str, key_part, &ptr))) - { - if (error_num > 0) - DBUG_RETURN(error_num); - } else { - if (spider_db_oracle_utility.append_column_value(spider, str, field, ptr, - share->access_charset)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - - if (str->reserve(SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_key_column_values_with_name_part( - const key_range *start_key, - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_key_column_values_with_name_part"); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - case SPIDER_SQL_TYPE_TMP_SQL: - str = &tmp_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_key_column_values_with_name(str, start_key); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_key_column_values_with_name( - spider_string *str, - const key_range *start_key -) { - int error_num; - const uchar *ptr; - SPIDER_RESULT_LIST *result_list = &spider->result_list; - SPIDER_SHARE *share = spider->share; - KEY *key_info = result_list->key_info; - uint length; - uint key_name_length, key_count; - uint store_length; - key_part_map full_key_part_map = - make_prev_keypart_map(spider_user_defined_key_parts(key_info)); - key_part_map start_key_part_map; - KEY_PART_INFO *key_part; - Field *field; - char tmp_buf[MAX_FIELD_WIDTH]; - DBUG_ENTER("spider_oracle_handler::append_key_column_values_with_name"); - start_key_part_map = start_key->keypart_map & full_key_part_map; - DBUG_PRINT("info", ("spider spider_user_defined_key_parts=%u", - spider_user_defined_key_parts(key_info))); - DBUG_PRINT("info", ("spider full_key_part_map=%lu", full_key_part_map)); - DBUG_PRINT("info", ("spider start_key_part_map=%lu", start_key_part_map)); - - if (!start_key_part_map) - DBUG_RETURN(0); - - for ( - key_part = key_info->key_part, - length = 0, - key_count = 0; - start_key_part_map; - start_key_part_map >>= 1, - key_part++, - length += store_length, - key_count++ - ) { - store_length = key_part->store_length; - ptr = start_key->key + length; - field = key_part->field; - if ((error_num = spider_db_append_null_value(str, key_part, &ptr))) - { - if (error_num > 0) - DBUG_RETURN(error_num); - } else { - if (spider_db_oracle_utility.append_column_value(spider, str, field, ptr, - share->access_charset)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - - key_name_length = my_sprintf(tmp_buf, (tmp_buf, "c%u", key_count)); - if (str->reserve(SPIDER_SQL_SPACE_LEN + key_name_length + - SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - str->q_append(tmp_buf, key_name_length); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_key_where_part( - const key_range *start_key, - const key_range *end_key, - ulong sql_type -) { - int error_num; - spider_string *str, *str_part = NULL, *str_part2 = NULL; - bool set_order; - DBUG_ENTER("spider_oracle_handler::append_key_where_part"); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - set_order = FALSE; - break; - case SPIDER_SQL_TYPE_TMP_SQL: - str = &tmp_sql; - set_order = FALSE; - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - str = &update_sql; - set_order = FALSE; - break; - case SPIDER_SQL_TYPE_HANDLER: - str = &ha_sql; - ha_read_pos = str->length(); - str_part = &sql_part; - str_part2 = &sql_part2; - str_part->length(0); - str_part2->length(0); - set_order = TRUE; - break; - default: - DBUG_RETURN(0); - } - error_num = append_key_where(str, str_part, str_part2, start_key, end_key, - sql_type, set_order); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_key_where( - spider_string *str, - spider_string *str_part, - spider_string *str_part2, - const key_range *start_key, - const key_range *end_key, - ulong sql_type, - bool set_order -) { - int error_num; - DBUG_ENTER("spider_oracle_handler::append_key_where"); - error_num = spider_db_append_key_where_internal(str, str_part, str_part2, - start_key, end_key, spider, set_order, sql_type, - spider_dbton_oracle.dbton_id); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_is_null_part( - ulong sql_type, - KEY_PART_INFO *key_part, - const key_range *key, - const uchar **ptr, - bool key_eq, - bool tgt_final -) { - int error_num; - spider_string *str, *str_part = NULL, *str_part2 = NULL; - DBUG_ENTER("spider_oracle_handler::append_is_null_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - case SPIDER_SQL_TYPE_TMP_SQL: - str = &sql; - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - str = &update_sql; - break; - case SPIDER_SQL_TYPE_HANDLER: - str = &ha_sql; - str_part = &sql_part; - str_part2 = &sql_part2; - break; - default: - DBUG_RETURN(0); - } - error_num = append_is_null(sql_type, str, str_part, str_part2, - key_part, key, ptr, key_eq, tgt_final); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_is_null( - ulong sql_type, - spider_string *str, - spider_string *str_part, - spider_string *str_part2, - KEY_PART_INFO *key_part, - const key_range *key, - const uchar **ptr, - bool key_eq, - bool tgt_final -) { - DBUG_ENTER("spider_oracle_handler::append_is_null"); - DBUG_PRINT("info",("spider this=%p", this)); - if (key_part->null_bit) - { - if (*(*ptr)++) - { - if (sql_type == SPIDER_SQL_TYPE_HANDLER) - { - str = str_part; - if ( - key_eq || - key->flag == HA_READ_KEY_EXACT || - key->flag == HA_READ_KEY_OR_NEXT - ) { - if (str->reserve(SPIDER_SQL_IS_NULL_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_IS_NULL_STR, SPIDER_SQL_IS_NULL_LEN); - } else { - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - ha_next_pos = str->length(); - if (str->reserve(SPIDER_SQL_FIRST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_FIRST_STR, SPIDER_SQL_FIRST_LEN); - spider->result_list.ha_read_kind = 1; - } - str = str_part2; - } - if ( - key_eq || - key->flag == HA_READ_KEY_EXACT || - key->flag == HA_READ_KEY_OR_NEXT - ) { - if (str->reserve(SPIDER_SQL_IS_NULL_LEN + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + - oracle_share->column_name_str[key_part->field->field_index].length())) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - oracle_share->append_column_name(str, key_part->field->field_index); - str->q_append(SPIDER_SQL_IS_NULL_STR, SPIDER_SQL_IS_NULL_LEN); - } else { - if (str->reserve(SPIDER_SQL_IS_NOT_NULL_LEN + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + - oracle_share->column_name_str[key_part->field->field_index].length())) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - oracle_share->append_column_name(str, key_part->field->field_index); - str->q_append(SPIDER_SQL_IS_NOT_NULL_STR, SPIDER_SQL_IS_NOT_NULL_LEN); - } - DBUG_RETURN(-1); - } - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_where_terminator_part( - ulong sql_type, - bool set_order, - int key_count -) { - int error_num; - spider_string *str, *str_part = NULL, *str_part2 = NULL; - DBUG_ENTER("spider_oracle_handler::append_where_terminator_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - case SPIDER_SQL_TYPE_TMP_SQL: - str = &sql; - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - str = &update_sql; - break; - case SPIDER_SQL_TYPE_HANDLER: - str = &ha_sql; - str_part = &sql_part; - str_part2 = &sql_part2; - break; - default: - DBUG_RETURN(0); - } - error_num = append_where_terminator(sql_type, str, str_part, str_part2, - set_order, key_count); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_where_terminator( - ulong sql_type, - spider_string *str, - spider_string *str_part, - spider_string *str_part2, - bool set_order, - int key_count -) { - SPIDER_RESULT_LIST *result_list = &spider->result_list; - DBUG_ENTER("spider_oracle_handler::append_where_terminator"); - DBUG_PRINT("info",("spider this=%p", this)); - if (sql_type != SPIDER_SQL_TYPE_HANDLER) - { - str->length(str->length() - SPIDER_SQL_AND_LEN); - if (!set_order) - result_list->key_order = key_count; - } else { - str_part2->length(str_part2->length() - SPIDER_SQL_AND_LEN); - - str_part->length(str_part->length() - SPIDER_SQL_COMMA_LEN); - if (!result_list->ha_read_kind) - str_part->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - if (str->append(*str_part)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - uint clause_length = str->length() - ha_next_pos; - if (clause_length < SPIDER_SQL_NEXT_LEN) - { - int roop_count; - clause_length = SPIDER_SQL_NEXT_LEN - clause_length; - if (str->reserve(clause_length)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - for (roop_count = 0; roop_count < (int) clause_length; roop_count++) - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - } - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_match_where_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_match_where_part"); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_ASSERT(0); - DBUG_RETURN(0); - } - error_num = append_match_where(str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_match_where( - spider_string *str -) { - int error_num; - bool first = TRUE; - st_spider_ft_info *ft_info = spider->ft_first; - DBUG_ENTER("spider_oracle_handler::append_match_where"); - if (spider->ft_current) - { - while (TRUE) - { - if (ft_info->used_in_where) - { - if (first) - { - if (str->reserve(SPIDER_SQL_WHERE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_WHERE_STR, SPIDER_SQL_WHERE_LEN); - first = FALSE; - } - if ((error_num = append_match_against(str, ft_info, NULL, 0))) - DBUG_RETURN(error_num); - if (str->reserve(SPIDER_SQL_AND_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN); - } - - if (ft_info == spider->ft_current) - break; - ft_info = ft_info->next; - } - if (!first) - str->length(str->length() - SPIDER_SQL_AND_LEN); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_update_where( - spider_string *str, - const TABLE *table, - my_ptrdiff_t ptr_diff -) { - uint field_name_length; - Field **field; - THD *thd = spider->wide_handler->trx->thd; - SPIDER_SHARE *share = spider->share; - bool no_pk = (table->s->primary_key == MAX_KEY); - DBUG_ENTER("spider_oracle_handler::append_update_where"); - uint str_len_bakup = str->length(); - if (str->reserve(SPIDER_SQL_WHERE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_WHERE_STR, SPIDER_SQL_WHERE_LEN); - if ( - no_pk || - spider_param_use_cond_other_than_pk_for_update(thd) - ) { - for (field = table->field; *field; field++) - { - if ( - no_pk || - bitmap_is_set(table->read_set, (*field)->field_index) - ) { - field_name_length = - oracle_share->column_name_str[(*field)->field_index].length(); - if ((*field)->is_null(ptr_diff)) - { - if (str->reserve(field_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + - SPIDER_SQL_IS_NULL_LEN + SPIDER_SQL_AND_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - oracle_share->append_column_name(str, (*field)->field_index); - str->q_append(SPIDER_SQL_IS_NULL_STR, SPIDER_SQL_IS_NULL_LEN); - } else { - if (str->reserve(field_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + - SPIDER_SQL_EQUAL_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - oracle_share->append_column_name(str, (*field)->field_index); - str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN); - (*field)->move_field_offset(ptr_diff); - if ( - spider_db_oracle_utility. - append_column_value(spider, str, *field, NULL, - share->access_charset) || - str->reserve(SPIDER_SQL_AND_LEN) - ) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - (*field)->move_field_offset(-ptr_diff); - } - str->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN); - } - } - } else { - KEY *key_info = &table->key_info[table->s->primary_key]; - KEY_PART_INFO *key_part; - uint part_num; - for ( - key_part = key_info->key_part, part_num = 0; - part_num < spider_user_defined_key_parts(key_info); - key_part++, part_num++ - ) { - field = &key_part->field; - field_name_length = - oracle_share->column_name_str[(*field)->field_index].length(); - if ((*field)->is_null(ptr_diff)) - { - if (str->reserve(field_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + - SPIDER_SQL_IS_NULL_LEN + SPIDER_SQL_AND_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - oracle_share->append_column_name(str, (*field)->field_index); - str->q_append(SPIDER_SQL_IS_NULL_STR, SPIDER_SQL_IS_NULL_LEN); - } else { - if (str->reserve(field_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + - SPIDER_SQL_EQUAL_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - oracle_share->append_column_name(str, (*field)->field_index); - str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN); - (*field)->move_field_offset(ptr_diff); - if ( - spider_db_oracle_utility. - append_column_value(spider, str, *field, NULL, - share->access_charset) || - str->reserve(SPIDER_SQL_AND_LEN) - ) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - (*field)->move_field_offset(-ptr_diff); - } - str->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN); - } - } - if (str->length() == str_len_bakup + SPIDER_SQL_WHERE_LEN) - { - /* no condition */ - str->length(str_len_bakup); - } else { - str->length(str->length() - SPIDER_SQL_AND_LEN); - } - if (str->reserve(SPIDER_SQL_LIMIT1_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_LIMIT1_STR, SPIDER_SQL_LIMIT1_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_condition_part( - const char *alias, - uint alias_length, - ulong sql_type, - bool test_flg -) { - int error_num; - spider_string *str; - bool start_where = FALSE; - DBUG_ENTER("spider_oracle_handler::append_condition_part"); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - DBUG_PRINT("info",("spider case1 sql_type=%lu", sql_type)); - if (test_flg) - { - str = NULL; - } else { - str = &sql; - start_where = ((int) str->length() == where_pos); - } - break; - case SPIDER_SQL_TYPE_TMP_SQL: - DBUG_PRINT("info",("spider case1 sql_type=%lu", sql_type)); - if (test_flg) - { - str = NULL; - } else { - str = &tmp_sql; - start_where = ((int) str->length() == where_pos); - } - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - DBUG_PRINT("info",("spider case2 sql_type=%lu", sql_type)); - if (test_flg) - { - str = NULL; - } else { - str = &update_sql; - start_where = ((int) str->length() == where_pos); - } - break; - case SPIDER_SQL_TYPE_HANDLER: - DBUG_PRINT("info",("spider case3 sql_type=%lu", sql_type)); - if (test_flg) - { - str = NULL; - } else { - str = &ha_sql; - start_where = TRUE; - if (spider->active_index == MAX_KEY) - { - set_where_pos(SPIDER_SQL_TYPE_HANDLER); - if (str->reserve(SPIDER_SQL_READ_LEN + SPIDER_SQL_FIRST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_READ_STR, SPIDER_SQL_READ_LEN); - ha_next_pos = str->length(); - str->q_append(SPIDER_SQL_FIRST_STR, SPIDER_SQL_FIRST_LEN); - sql_part2.length(0); - } - ha_where_pos = str->length(); - - if (sql_part2.length()) - { - str->append(sql_part2); - start_where = FALSE; - } - } - break; - default: - DBUG_PRINT("info",("spider default sql_type=%lu", sql_type)); - DBUG_RETURN(0); - } - error_num = append_condition(str, alias, alias_length, start_where, - sql_type); - DBUG_PRINT("info",("spider str=%s", str ? str->c_ptr_safe() : "NULL")); - DBUG_PRINT("info",("spider length=%u", str ? str->length() : 0)); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_condition( - spider_string *str, - const char *alias, - uint alias_length, - bool start_where, - ulong sql_type -) { - int error_num, restart_pos = 0, start_where_pos; - SPIDER_CONDITION *tmp_cond = spider->condition; - DBUG_ENTER("spider_oracle_handler::append_condition"); - DBUG_PRINT("info",("spider str=%p", str)); - DBUG_PRINT("info",("spider alias=%p", alias)); - DBUG_PRINT("info",("spider alias_length=%u", alias_length)); - DBUG_PRINT("info",("spider start_where=%s", start_where ? "TRUE" : "FALSE")); - DBUG_PRINT("info",("spider sql_type=%lu", sql_type)); - if (str && start_where) - { - start_where_pos = str->length(); - } else { - start_where_pos = 0; - } - - if (spider->is_clone && !tmp_cond) - { - tmp_cond = spider->pt_clone_source_handler->condition; - } - - while (tmp_cond) - { - if (str) - { - restart_pos = str->length(); - if (start_where) - { - if (str->reserve(SPIDER_SQL_WHERE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_WHERE_STR, SPIDER_SQL_WHERE_LEN); - start_where = FALSE; - } else { - if (str->reserve(SPIDER_SQL_AND_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN); - } - } - if ((error_num = spider_db_print_item_type( - (Item *) tmp_cond->cond, NULL, spider, str, alias, alias_length, - spider_dbton_oracle.dbton_id, FALSE, NULL))) - { - if (str && error_num == ER_SPIDER_COND_SKIP_NUM) - { - DBUG_PRINT("info",("spider COND skip")); - str->length(restart_pos); - start_where = (restart_pos == start_where_pos); - } else - DBUG_RETURN(error_num); - } - tmp_cond = tmp_cond->next; - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_match_against_part( - ulong sql_type, - st_spider_ft_info *ft_info, - const char *alias, - uint alias_length -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_match_against_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_match_against(str, ft_info, alias, alias_length); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_match_against( - spider_string *str, - st_spider_ft_info *ft_info, - const char *alias, - uint alias_length -) { - SPIDER_SHARE *share = spider->share; - TABLE *table = spider->get_table(); - String *ft_init_key; - KEY *key_info; - uint key_name_length; - int key_count; - KEY_PART_INFO *key_part; - Field *field; - DBUG_ENTER("spider_oracle_handler::append_match_against"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_MATCH_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_MATCH_STR, SPIDER_SQL_MATCH_LEN); - - ft_init_key = ft_info->key; - key_info = &table->key_info[ft_info->inx]; - DBUG_PRINT("info", ("spider spider_user_defined_key_parts=%u", - spider_user_defined_key_parts(key_info))); - - for ( - key_part = key_info->key_part, - key_count = 0; - key_count < (int) spider_user_defined_key_parts(key_info); - key_part++, - key_count++ - ) { - field = key_part->field; - key_name_length = - oracle_share->column_name_str[field->field_index].length(); - if (alias_length) - { - if (str->reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(alias, alias_length); - } else { - if (str->reserve(key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - oracle_share->append_column_name(str, field->field_index); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - if (str->reserve(SPIDER_SQL_AGAINST_LEN + SPIDER_SQL_VALUE_QUOTE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_AGAINST_STR, SPIDER_SQL_AGAINST_LEN); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - - char buf[MAX_FIELD_WIDTH]; - spider_string tmp_str(buf, MAX_FIELD_WIDTH, share->access_charset); - tmp_str.init_calc_mem(SPD_MID_ORACLE_HANDLER_APPEND_MATCH_AGAINST_1); - tmp_str.length(0); - if ( - tmp_str.append(ft_init_key->ptr(), ft_init_key->length(), - ft_init_key->charset()) || - str->reserve(tmp_str.length() * 2) || - spider_db_oracle_utility.append_escaped_util(str, tmp_str.get_str()) - ) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - - if (str->reserve( - SPIDER_SQL_VALUE_QUOTE_LEN + SPIDER_SQL_CLOSE_PAREN_LEN + - ((ft_info->flags & FT_BOOL) ? SPIDER_SQL_IN_BOOLEAN_MODE_LEN : 0) + - ((ft_info->flags & FT_EXPAND) ? - SPIDER_SQL_WITH_QUERY_EXPANSION_LEN : 0) - )) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, SPIDER_SQL_VALUE_QUOTE_LEN); - if (ft_info->flags & FT_BOOL) - str->q_append(SPIDER_SQL_IN_BOOLEAN_MODE_STR, - SPIDER_SQL_IN_BOOLEAN_MODE_LEN); - if (ft_info->flags & FT_EXPAND) - str->q_append(SPIDER_SQL_WITH_QUERY_EXPANSION_STR, - SPIDER_SQL_WITH_QUERY_EXPANSION_LEN); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_match_select_part( - ulong sql_type, - const char *alias, - uint alias_length -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_match_select_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_match_select(str, alias, alias_length); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_match_select( - spider_string *str, - const char *alias, - uint alias_length -) { - int error_num; - DBUG_ENTER("spider_oracle_handler::append_match_select"); - DBUG_PRINT("info",("spider this=%p", this)); - if (spider->ft_current) - { - st_spider_ft_info *ft_info = spider->ft_first; - while (TRUE) - { - if ((error_num = append_match_against(str, ft_info, - alias, alias_length))) - DBUG_RETURN(error_num); - if (str->reserve(SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - if (ft_info == spider->ft_current) - break; - ft_info = ft_info->next; - } - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_sum_select_part( - ulong sql_type, - const char *alias, - uint alias_length -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_sum_select_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_sum_select(str, alias, alias_length); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_sum_select( - spider_string *str, - const char *alias, - uint alias_length -) { - int error_num; - st_select_lex *select_lex; - DBUG_ENTER("spider_oracle_handler::append_sum_select"); - DBUG_PRINT("info",("spider this=%p", this)); - select_lex = spider_get_select_lex(spider); - JOIN *join = select_lex->join; - Item_sum **item_sum_ptr; - for (item_sum_ptr = join->sum_funcs; *item_sum_ptr; ++item_sum_ptr) - { - if ((error_num = spider_db_oracle_utility.open_item_sum_func(*item_sum_ptr, - spider, str, alias, alias_length, FALSE, NULL))) - { - DBUG_RETURN(error_num); - } - if (str->reserve(SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - DBUG_RETURN(0); -} - -void spider_oracle_handler::set_order_pos( - ulong sql_type -) { - DBUG_ENTER("spider_oracle_handler::set_order_pos"); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - case SPIDER_SQL_TYPE_TMP_SQL: - order_pos = sql.length(); - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - order_pos = update_sql.length(); - break; - case SPIDER_SQL_TYPE_HANDLER: - ha_next_pos = ha_sql.length(); - break; - default: - DBUG_ASSERT(0); - break; - } - DBUG_VOID_RETURN; -} - -void spider_oracle_handler::set_order_to_pos( - ulong sql_type -) { - DBUG_ENTER("spider_oracle_handler::set_order_to_pos"); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - case SPIDER_SQL_TYPE_TMP_SQL: - sql.length(order_pos); - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - update_sql.length(order_pos); - break; - case SPIDER_SQL_TYPE_HANDLER: - ha_sql.length(ha_next_pos); - break; - default: - DBUG_ASSERT(0); - break; - } - DBUG_VOID_RETURN; -} - -int spider_oracle_handler::append_group_by_part( - const char *alias, - uint alias_length, - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_group_by_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - case SPIDER_SQL_TYPE_TMP_SQL: - str = &sql; - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - str = &update_sql; - break; - case SPIDER_SQL_TYPE_HANDLER: - str = &ha_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_group_by(str, alias, alias_length); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_group_by( - spider_string *str, - const char *alias, - uint alias_length -) { - int error_num; - st_select_lex *select_lex; - DBUG_ENTER("spider_oracle_handler::append_group_by"); - DBUG_PRINT("info",("spider this=%p", this)); - select_lex = spider_get_select_lex(spider); - ORDER *group = (ORDER *) select_lex->group_list.first; - if (group) - { - if (str->reserve(SPIDER_SQL_GROUP_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_GROUP_STR, SPIDER_SQL_GROUP_LEN); - for (; group; group = group->next) - { - if ((error_num = spider_db_print_item_type((*group->item), NULL, spider, - str, alias, alias_length, spider_dbton_oracle.dbton_id, FALSE, NULL))) - { - DBUG_RETURN(error_num); - } - if (str->reserve(SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_key_order_for_merge_with_alias_part( - const char *alias, - uint alias_length, - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_key_order_for_merge_with_alias_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - case SPIDER_SQL_TYPE_TMP_SQL: - str = &sql; - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - str = &update_sql; - break; - case SPIDER_SQL_TYPE_HANDLER: - str = &ha_sql; - ha_limit_pos = ha_sql.length(); - break; - default: - DBUG_RETURN(0); - } - error_num = append_key_order_for_merge_with_alias(str, alias, alias_length); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_key_order_for_merge_with_alias( - spider_string *str, - const char *alias, - uint alias_length -) { - /* sort for index merge */ - TABLE *table = spider->get_table(); - int length; - Field *field; - uint key_name_length; - DBUG_ENTER("spider_oracle_handler::append_key_order_for_merge_with_alias"); - DBUG_PRINT("info",("spider this=%p", this)); - if (spider->result_list.direct_aggregate) - { - int error_num; - if ((error_num = append_group_by(str, alias, alias_length))) - DBUG_RETURN(error_num); - } - if ( - spider->result_list.direct_order_limit || - spider->result_list.internal_limit < 9223372036854775807LL || - spider->result_list.split_read < 9223372036854775807LL || - spider->result_list.internal_offset - ) { - if (update_rownum_appended || select_rownum_appended) - { - if (str->reserve(SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SELECT_WRAPPER_TAIL_STR, - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN); - order_pos = str->length(); - limit_pos = str->length(); - DBUG_RETURN(0); - } - sql_part.length(0); - if (str == &update_sql) - { - if (sql_part.reserve(str->length() + SPIDER_SQL_UPDATE_WRAPPER_HEAD_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(str->ptr(), where_pos); - sql_part.q_append(SPIDER_SQL_UPDATE_WRAPPER_HEAD_STR, - SPIDER_SQL_UPDATE_WRAPPER_HEAD_LEN); - } else { - if (sql_part.reserve(str->length() + SPIDER_SQL_SELECT_WRAPPER_HEAD_LEN + - SPIDER_SQL_ROW_NUMBER_HEAD_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_SELECT_WRAPPER_HEAD_STR, - SPIDER_SQL_SELECT_WRAPPER_HEAD_LEN); - sql_part.q_append(str->ptr(), table_name_pos - SPIDER_SQL_FROM_LEN); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_HEAD_STR, - SPIDER_SQL_ROW_NUMBER_HEAD_LEN); - } - if (table->s->primary_key < MAX_KEY) - { - /* sort by primary key */ - KEY *key_info = &table->key_info[table->s->primary_key]; - KEY_PART_INFO *key_part; - for ( - key_part = key_info->key_part, - length = 1; - length <= (int) spider_user_defined_key_parts(key_info); - key_part++, - length++ - ) { - field = key_part->field; - key_name_length = - oracle_share->column_name_str[field->field_index].length(); - if (sql_part.reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(alias, alias_length); - oracle_share->append_column_name(&sql_part, field->field_index); - sql_part.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } else { - /* sort by all columns */ - Field **fieldp; - for ( - fieldp = table->field, length = 1; - *fieldp; - fieldp++, length++ - ) { - key_name_length = - oracle_share->column_name_str[(*fieldp)->field_index].length(); - if (sql_part.reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(alias, alias_length); - oracle_share->append_column_name(&sql_part, (*fieldp)->field_index); - sql_part.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - uint pos_diff; - if (str == &update_sql) - { - uint table_name_size = (update_set_pos ? update_set_pos : where_pos) - - table_name_pos; - if (sql_part.reserve(SPIDER_SQL_ROW_NUMBER_TAIL_LEN + - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN + str->length() - where_pos + - SPIDER_SQL_FROM_LEN + table_name_size)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_TAIL_STR, - SPIDER_SQL_ROW_NUMBER_TAIL_LEN); - sql_part.q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN); - sql_part.q_append(str->ptr() + table_name_pos, table_name_size); - pos_diff = sql_part.length() - where_pos; - sql_part.q_append(str->ptr() + where_pos, str->length() - where_pos); - sql_part.q_append(SPIDER_SQL_SELECT_WRAPPER_TAIL_STR, - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN); - update_rownum_appended = TRUE; - } else { - if (sql_part.reserve(SPIDER_SQL_ROW_NUMBER_TAIL_LEN + - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN + str->length() - table_name_pos + - SPIDER_SQL_FROM_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_TAIL_STR, - SPIDER_SQL_ROW_NUMBER_TAIL_LEN); - pos_diff = sql_part.length() + SPIDER_SQL_FROM_LEN - table_name_pos; - sql_part.q_append(str->ptr() + table_name_pos - SPIDER_SQL_FROM_LEN, - str->length() - table_name_pos + SPIDER_SQL_FROM_LEN); - sql_part.q_append(SPIDER_SQL_SELECT_WRAPPER_TAIL_STR, - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN); - select_rownum_appended = TRUE; - table_name_pos = table_name_pos + pos_diff; - } - if (str->copy(sql_part)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - where_pos = where_pos + pos_diff; - order_pos = str->length(); - limit_pos = str->length(); - DBUG_RETURN(0); - } - if (table->s->primary_key < MAX_KEY) - { - /* sort by primary key */ - KEY *key_info = &table->key_info[table->s->primary_key]; - KEY_PART_INFO *key_part; - for ( - key_part = key_info->key_part, - length = 1; - length <= (int) spider_user_defined_key_parts(key_info); - key_part++, - length++ - ) { - field = key_part->field; - key_name_length = - oracle_share->column_name_str[field->field_index].length(); - if (length == 1) - { - if (str->reserve(SPIDER_SQL_ORDER_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN); - } - if (str->reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(alias, alias_length); - oracle_share->append_column_name(str, field->field_index); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - if (length > 1) - { - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - } - } else { - /* sort by all columns */ - Field **fieldp; - for ( - fieldp = table->field, length = 1; - *fieldp; - fieldp++, length++ - ) { - key_name_length = - oracle_share->column_name_str[(*fieldp)->field_index].length(); - if (length == 1) - { - if (str->reserve(SPIDER_SQL_ORDER_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN); - } - if (str->reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(alias, alias_length); - oracle_share->append_column_name(str, (*fieldp)->field_index); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - if (length > 1) - { - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - } - } - limit_pos = str->length(); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_key_order_for_direct_order_limit_with_alias_part( - const char *alias, - uint alias_length, - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_key_order_for_direct_order_limit_with_alias_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - case SPIDER_SQL_TYPE_TMP_SQL: - str = &sql; - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - str = &update_sql; - break; - case SPIDER_SQL_TYPE_HANDLER: - str = &ha_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_key_order_for_direct_order_limit_with_alias( - str, alias, alias_length); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_key_order_for_direct_order_limit_with_alias( - spider_string *str, - const char *alias, - uint alias_length -) { - int error_num; - ORDER *order; - st_select_lex *select_lex; - longlong select_limit; - longlong offset_limit; - DBUG_ENTER("spider_oracle_handler::append_key_order_for_direct_order_limit_with_alias"); - DBUG_PRINT("info",("spider this=%p", this)); - if (spider->result_list.direct_aggregate) - { - if ((error_num = append_group_by(str, alias, alias_length))) - DBUG_RETURN(error_num); - } - spider_get_select_limit(spider, &select_lex, &select_limit, - &offset_limit); - if ( - spider->result_list.direct_order_limit || - spider->result_list.internal_limit < 9223372036854775807LL || - spider->result_list.split_read < 9223372036854775807LL || - spider->result_list.internal_offset - ) { - if (update_rownum_appended || select_rownum_appended) - { - if (str->reserve(SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SELECT_WRAPPER_TAIL_STR, - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN); - order_pos = str->length(); - limit_pos = str->length(); - DBUG_RETURN(0); - } - sql_part.length(0); - if (str == &update_sql) - { - if (sql_part.reserve(str->length() + SPIDER_SQL_UPDATE_WRAPPER_HEAD_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(str->ptr(), where_pos); - sql_part.q_append(SPIDER_SQL_UPDATE_WRAPPER_HEAD_STR, - SPIDER_SQL_UPDATE_WRAPPER_HEAD_LEN); - } else { - if (sql_part.reserve(str->length() + SPIDER_SQL_SELECT_WRAPPER_HEAD_LEN + - SPIDER_SQL_ROW_NUMBER_HEAD_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_SELECT_WRAPPER_HEAD_STR, - SPIDER_SQL_SELECT_WRAPPER_HEAD_LEN); - sql_part.q_append(str->ptr(), table_name_pos - SPIDER_SQL_FROM_LEN); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_HEAD_STR, - SPIDER_SQL_ROW_NUMBER_HEAD_LEN); - } - bool all_desc = TRUE; - if (select_lex->order_list.first) - { - for (order = (ORDER *) select_lex->order_list.first; order; - order = order->next) - { - if ((error_num = - spider_db_print_item_type((*order->item), NULL, spider, &sql_part, - alias, alias_length, spider_dbton_oracle.dbton_id, FALSE, NULL))) - { - DBUG_PRINT("info",("spider error=%d", error_num)); - DBUG_RETURN(error_num); - } - if (SPIDER_order_direction_is_asc(order)) - { - if (sql_part.reserve(SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - all_desc = FALSE; - } else { - if (sql_part.reserve(SPIDER_SQL_DESC_LEN + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN); - sql_part.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - } else { - all_desc = FALSE; - } - uint pos_diff; - if (str == &update_sql) - { - uint table_name_size = (update_set_pos ? update_set_pos : where_pos) - - table_name_pos; - if (all_desc) - { - if (sql_part.reserve(SPIDER_SQL_ROW_NUMBER_DESC_TAIL_LEN + - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN + str->length() - where_pos + - SPIDER_SQL_FROM_LEN + table_name_size)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_DESC_TAIL_STR, - SPIDER_SQL_ROW_NUMBER_DESC_TAIL_LEN); - } else { - if (sql_part.reserve(SPIDER_SQL_ROW_NUMBER_TAIL_LEN + - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN + str->length() - where_pos + - SPIDER_SQL_FROM_LEN + table_name_size)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_TAIL_STR, - SPIDER_SQL_ROW_NUMBER_TAIL_LEN); - } - sql_part.q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN); - sql_part.q_append(str->ptr() + table_name_pos, table_name_size); - pos_diff = sql_part.length() - where_pos; - sql_part.q_append(str->ptr() + where_pos, str->length() - where_pos); - sql_part.q_append(SPIDER_SQL_SELECT_WRAPPER_TAIL_STR, - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN); - update_rownum_appended = TRUE; - } else { - if (all_desc) - { - if (sql_part.reserve(SPIDER_SQL_ROW_NUMBER_DESC_TAIL_LEN + - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN + str->length() - table_name_pos + - SPIDER_SQL_FROM_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_DESC_TAIL_STR, - SPIDER_SQL_ROW_NUMBER_DESC_TAIL_LEN); - } else { - if (sql_part.reserve(SPIDER_SQL_ROW_NUMBER_TAIL_LEN + - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN + str->length() - table_name_pos + - SPIDER_SQL_FROM_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_TAIL_STR, - SPIDER_SQL_ROW_NUMBER_TAIL_LEN); - } - pos_diff = sql_part.length() + SPIDER_SQL_FROM_LEN - table_name_pos; - sql_part.q_append(str->ptr() + table_name_pos - SPIDER_SQL_FROM_LEN, - str->length() - table_name_pos + SPIDER_SQL_FROM_LEN); - sql_part.q_append(SPIDER_SQL_SELECT_WRAPPER_TAIL_STR, - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN); - select_rownum_appended = TRUE; - table_name_pos = table_name_pos + pos_diff; - } - if (str->copy(sql_part)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - where_pos = where_pos + pos_diff; - order_pos = str->length(); - limit_pos = str->length(); - DBUG_RETURN(0); - } - if (select_lex->order_list.first) - { - if (str->reserve(SPIDER_SQL_ORDER_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN); - for (order = (ORDER *) select_lex->order_list.first; order; - order = order->next) - { - if ((error_num = - spider_db_print_item_type((*order->item), NULL, spider, str, alias, - alias_length, spider_dbton_oracle.dbton_id, FALSE, NULL))) - { - DBUG_PRINT("info",("spider error=%d", error_num)); - DBUG_RETURN(error_num); - } - if (SPIDER_order_direction_is_asc(order)) - { - if (str->reserve(SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } else { - if (str->reserve(SPIDER_SQL_DESC_LEN + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - } - limit_pos = str->length(); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_key_order_with_alias_part( - const char *alias, - uint alias_length, - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_key_order_with_alias_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - case SPIDER_SQL_TYPE_TMP_SQL: - str = &sql; - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - str = &update_sql; - break; - case SPIDER_SQL_TYPE_HANDLER: - str = &ha_sql; - error_num = append_key_order_for_handler(str, alias, alias_length); - DBUG_RETURN(error_num); - default: - DBUG_RETURN(0); - } - error_num = append_key_order_with_alias(str, alias, alias_length); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_key_order_for_handler( - spider_string *str, - const char *alias, - uint alias_length -) { - DBUG_ENTER("spider_oracle_handler::append_key_order_for_handler"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_PRINT("info",("spider ha_next_pos=%d", ha_next_pos)); - DBUG_PRINT("info",("spider ha_where_pos=%d", ha_where_pos)); - str->q_append(alias, alias_length); - memset((char *) str->ptr() + str->length(), ' ', - ha_where_pos - ha_next_pos - alias_length); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_key_order_with_alias( - spider_string *str, - const char *alias, - uint alias_length -) { - SPIDER_RESULT_LIST *result_list = &spider->result_list; - KEY *key_info = result_list->key_info; - int length; - KEY_PART_INFO *key_part; - Field *field; - uint key_name_length; - DBUG_ENTER("spider_oracle_handler::append_key_order_with_alias"); - DBUG_PRINT("info",("spider this=%p", this)); - if (spider->result_list.direct_aggregate) - { - int error_num; - if ((error_num = append_group_by(str, alias, alias_length))) - DBUG_RETURN(error_num); - } - if ( - spider->result_list.direct_order_limit || - spider->result_list.internal_limit < 9223372036854775807LL || - spider->result_list.split_read < 9223372036854775807LL || - spider->result_list.internal_offset - ) { - if (update_rownum_appended || select_rownum_appended) - { - if (str->reserve(SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SELECT_WRAPPER_TAIL_STR, - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN); - order_pos = str->length(); - limit_pos = str->length(); - DBUG_RETURN(0); - } - sql_part.length(0); - if (str == &update_sql) - { - if (sql_part.reserve(str->length() + SPIDER_SQL_UPDATE_WRAPPER_HEAD_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(str->ptr(), where_pos); - sql_part.q_append(SPIDER_SQL_UPDATE_WRAPPER_HEAD_STR, - SPIDER_SQL_UPDATE_WRAPPER_HEAD_LEN); - } else { - if (sql_part.reserve(str->length() + SPIDER_SQL_SELECT_WRAPPER_HEAD_LEN + - SPIDER_SQL_ROW_NUMBER_HEAD_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_SELECT_WRAPPER_HEAD_STR, - SPIDER_SQL_SELECT_WRAPPER_HEAD_LEN); - sql_part.q_append(str->ptr(), table_name_pos - SPIDER_SQL_FROM_LEN); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_HEAD_STR, - SPIDER_SQL_ROW_NUMBER_HEAD_LEN); - } - if (result_list->sorted == TRUE) - { - if (result_list->desc_flg == TRUE) - { - for ( - key_part = key_info->key_part + result_list->key_order, - length = 1; - length + result_list->key_order <= - (int) spider_user_defined_key_parts(key_info) && - length <= result_list->max_order; - key_part++, - length++ - ) { - field = key_part->field; - key_name_length = - oracle_share->column_name_str[field->field_index].length(); - if (key_part->key_part_flag & HA_REVERSE_SORT) - { - if (sql_part.reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(alias, alias_length); - oracle_share->append_column_name(&sql_part, field->field_index); - sql_part.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } else { - if (sql_part.reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + - SPIDER_SQL_DESC_LEN + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(alias, alias_length); - oracle_share->append_column_name(&sql_part, field->field_index); - sql_part.q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN); - sql_part.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - } else { - for ( - key_part = key_info->key_part + result_list->key_order, - length = 1; - length + result_list->key_order <= - (int) spider_user_defined_key_parts(key_info) && - length <= result_list->max_order; - key_part++, - length++ - ) { - field = key_part->field; - key_name_length = - oracle_share->column_name_str[field->field_index].length(); - if (key_part->key_part_flag & HA_REVERSE_SORT) - { - if (sql_part.reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + - SPIDER_SQL_DESC_LEN + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(alias, alias_length); - oracle_share->append_column_name(&sql_part, field->field_index); - sql_part.q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN); - sql_part.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } else { - if (sql_part.reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(alias, alias_length); - oracle_share->append_column_name(&sql_part, field->field_index); - sql_part.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - } - } - uint pos_diff; - if (str == &update_sql) - { - uint table_name_size = (update_set_pos ? update_set_pos : where_pos) - - table_name_pos; - if (result_list->sorted == TRUE && result_list->desc_flg == TRUE) - { - if (sql_part.reserve(SPIDER_SQL_ROW_NUMBER_DESC_TAIL_LEN + - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN + str->length() - where_pos + - SPIDER_SQL_FROM_LEN + table_name_size)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_DESC_TAIL_STR, - SPIDER_SQL_ROW_NUMBER_DESC_TAIL_LEN); - } else { - if (sql_part.reserve(SPIDER_SQL_ROW_NUMBER_TAIL_LEN + - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN + str->length() - where_pos + - SPIDER_SQL_FROM_LEN + table_name_size)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_TAIL_STR, - SPIDER_SQL_ROW_NUMBER_TAIL_LEN); - } - sql_part.q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN); - sql_part.q_append(str->ptr() + table_name_pos, - table_name_size); - pos_diff = sql_part.length() - where_pos; - sql_part.q_append(str->ptr() + where_pos, str->length() - where_pos); - sql_part.q_append(SPIDER_SQL_SELECT_WRAPPER_TAIL_STR, - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN); - update_rownum_appended = TRUE; - } else { - if (result_list->sorted == TRUE && result_list->desc_flg == TRUE) - { - if (sql_part.reserve(SPIDER_SQL_ROW_NUMBER_DESC_TAIL_LEN + - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN + str->length() - table_name_pos + - SPIDER_SQL_FROM_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_DESC_TAIL_STR, - SPIDER_SQL_ROW_NUMBER_DESC_TAIL_LEN); - } else { - if (sql_part.reserve(SPIDER_SQL_ROW_NUMBER_TAIL_LEN + - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN + str->length() - table_name_pos + - SPIDER_SQL_FROM_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_TAIL_STR, - SPIDER_SQL_ROW_NUMBER_TAIL_LEN); - } - pos_diff = sql_part.length() + SPIDER_SQL_FROM_LEN - table_name_pos; - sql_part.q_append(str->ptr() + table_name_pos - SPIDER_SQL_FROM_LEN, - str->length() - table_name_pos + SPIDER_SQL_FROM_LEN); - sql_part.q_append(SPIDER_SQL_SELECT_WRAPPER_TAIL_STR, - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN); - select_rownum_appended = TRUE; - table_name_pos = table_name_pos + pos_diff; - } - if (str->copy(sql_part)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - where_pos = where_pos + pos_diff; - order_pos = str->length(); - limit_pos = str->length(); - DBUG_RETURN(0); - } - if (result_list->sorted == TRUE) - { - if (result_list->desc_flg == TRUE) - { - for ( - key_part = key_info->key_part + result_list->key_order, - length = 1; - length + result_list->key_order < - (int) spider_user_defined_key_parts(key_info) && - length < result_list->max_order; - key_part++, - length++ - ) { - field = key_part->field; - key_name_length = - oracle_share->column_name_str[field->field_index].length(); - if (length == 1) - { - if (str->reserve(SPIDER_SQL_ORDER_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN); - } - if (key_part->key_part_flag & HA_REVERSE_SORT) - { - if (str->reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(alias, alias_length); - oracle_share->append_column_name(str, field->field_index); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } else { - if (str->reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + - SPIDER_SQL_DESC_LEN + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(alias, alias_length); - oracle_share->append_column_name(str, field->field_index); - str->q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - if ( - length + result_list->key_order <= - (int) spider_user_defined_key_parts(key_info) && - length <= result_list->max_order - ) { - field = key_part->field; - key_name_length = - oracle_share->column_name_str[field->field_index].length(); - if (length == 1) - { - if (str->reserve(SPIDER_SQL_ORDER_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN); - } - if (key_part->key_part_flag & HA_REVERSE_SORT) - { - if (str->reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(alias, alias_length); - oracle_share->append_column_name(str, field->field_index); - } else { - if (str->reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_DESC_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(alias, alias_length); - oracle_share->append_column_name(str, field->field_index); - str->q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN); - } - } - } else { - for ( - key_part = key_info->key_part + result_list->key_order, - length = 1; - length + result_list->key_order < - (int) spider_user_defined_key_parts(key_info) && - length < result_list->max_order; - key_part++, - length++ - ) { - field = key_part->field; - key_name_length = - oracle_share->column_name_str[field->field_index].length(); - if (length == 1) - { - if (str->reserve(SPIDER_SQL_ORDER_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN); - } - if (key_part->key_part_flag & HA_REVERSE_SORT) - { - if (str->reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + - SPIDER_SQL_DESC_LEN + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(alias, alias_length); - oracle_share->append_column_name(str, field->field_index); - str->q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } else { - if (str->reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(alias, alias_length); - oracle_share->append_column_name(str, field->field_index); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - if ( - length + result_list->key_order <= - (int) spider_user_defined_key_parts(key_info) && - length <= result_list->max_order - ) { - field = key_part->field; - key_name_length = - oracle_share->column_name_str[field->field_index].length(); - if (length == 1) - { - if (str->reserve(SPIDER_SQL_ORDER_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN); - } - if (key_part->key_part_flag & HA_REVERSE_SORT) - { - if (str->reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_DESC_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(alias, alias_length); - oracle_share->append_column_name(str, field->field_index); - str->q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN); - } else { - if (str->reserve(alias_length + key_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(alias, alias_length); - oracle_share->append_column_name(str, field->field_index); - } - } - } - } - limit_pos = str->length(); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_limit_part( - longlong offset, - longlong limit, - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_limit_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - limit_pos = str->length(); - break; - case SPIDER_SQL_TYPE_TMP_SQL: - str = &tmp_sql; - limit_pos = str->length(); - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - str = &update_sql; - limit_pos = str->length(); - break; - case SPIDER_SQL_TYPE_HANDLER: - str = &ha_sql; - ha_limit_pos = str->length(); - break; - default: - DBUG_RETURN(0); - } - error_num = append_limit(str, offset, limit); - DBUG_PRINT("info",("spider str=%s", str->c_ptr_safe())); - DBUG_PRINT("info",("spider length=%u", str->length())); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::reappend_limit_part( - longlong offset, - longlong limit, - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::reappend_limit_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - str->length(limit_pos); - break; - case SPIDER_SQL_TYPE_TMP_SQL: - str = &tmp_sql; - str->length(limit_pos); - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - str = &update_sql; - str->length(limit_pos); - break; - case SPIDER_SQL_TYPE_HANDLER: - str = &ha_sql; - str->length(ha_limit_pos); - break; - default: - DBUG_RETURN(0); - } - error_num = append_limit(str, offset, limit); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_limit( - spider_string *str, - longlong offset, - longlong limit -) { - char buf[SPIDER_LONGLONG_LEN + 1]; - uint32 length; - DBUG_ENTER("spider_oracle_handler::append_limit"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_PRINT("info", ("spider offset=%lld", offset)); - DBUG_PRINT("info", ("spider limit=%lld", limit)); - if (offset || limit < 9223372036854775807LL) - { - if ((int) str->length() == where_pos) - { - if (offset) - { - int error_num; - if ((error_num = append_key_order_for_direct_order_limit_with_alias( - str, NULL, 0))) - DBUG_RETURN(error_num); - } else { - if (str->reserve(SPIDER_SQL_WHERE_LEN + SPIDER_SQL_ROWNUM_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_WHERE_STR, SPIDER_SQL_WHERE_LEN); - str->q_append(SPIDER_SQL_ROWNUM_STR, SPIDER_SQL_ROWNUM_LEN); - } - } - if (offset) - { - if (str->reserve(SPIDER_SQL_BETWEEN_LEN + SPIDER_SQL_AND_LEN + - ((SPIDER_LONGLONG_LEN) * 2))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_BETWEEN_STR, SPIDER_SQL_BETWEEN_LEN); - length = (uint32) (my_charset_bin.longlong10_to_str)( - buf, SPIDER_LONGLONG_LEN + 1, -10, offset + 1); - str->q_append(buf, length); - str->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN); - length = (uint32) (my_charset_bin.longlong10_to_str)( - buf, SPIDER_LONGLONG_LEN + 1, -10, limit + offset); - str->q_append(buf, length); - } else { - if (str->reserve(SPIDER_SQL_HS_LTEQUAL_LEN + - (SPIDER_LONGLONG_LEN))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_HS_LTEQUAL_STR, SPIDER_SQL_HS_LTEQUAL_LEN); - length = (uint32) (my_charset_bin.longlong10_to_str)( - buf, SPIDER_LONGLONG_LEN + 1, -10, limit); - str->q_append(buf, length); - } - if (update_rownum_appended) - { - if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); - } - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_select_lock_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_select_lock_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_select_lock(str); - DBUG_PRINT("info",("spider str=%s", str->c_ptr_safe())); - DBUG_PRINT("info",("spider length=%u", str->length())); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_select_lock( - spider_string *str -) { - int lock_mode = spider_conn_lock_mode(spider); - DBUG_ENTER("spider_oracle_handler::append_select_lock"); - DBUG_PRINT("info",("spider this=%p", this)); - if (select_rownum_appended) - { - table_lock_mode = lock_mode; - } else { - if (lock_mode == SPIDER_LOCK_MODE_EXCLUSIVE) - { - if (str->reserve(SPIDER_SQL_FOR_UPDATE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_FOR_UPDATE_STR, SPIDER_SQL_FOR_UPDATE_LEN); - } else if (lock_mode == SPIDER_LOCK_MODE_SHARED) - { - if (str->reserve(SPIDER_SQL_FOR_UPDATE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_FOR_UPDATE_STR, SPIDER_SQL_FOR_UPDATE_LEN); - } - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_union_all_start_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_union_all_start_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_union_all_start(str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_union_all_start( - spider_string *str -) { - DBUG_ENTER("spider_oracle_handler::append_union_all_start"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_union_all_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_union_all_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_union_all(str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_union_all( - spider_string *str -) { - DBUG_ENTER("spider_oracle_handler::append_union_all"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_UNION_ALL_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_UNION_ALL_STR, SPIDER_SQL_UNION_ALL_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_union_all_end_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_union_all_end_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_union_all_end(str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_union_all_end( - spider_string *str -) { - DBUG_ENTER("spider_oracle_handler::append_union_all_end"); - DBUG_PRINT("info",("spider this=%p", this)); - str->length(str->length() - - SPIDER_SQL_UNION_ALL_LEN + SPIDER_SQL_CLOSE_PAREN_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_multi_range_cnt_part( - ulong sql_type, - uint multi_range_cnt, - bool with_comma -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_multi_range_cnt_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - case SPIDER_SQL_TYPE_TMP_SQL: - str = &tmp_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_multi_range_cnt(str, multi_range_cnt, with_comma); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_multi_range_cnt( - spider_string *str, - uint multi_range_cnt, - bool with_comma -) { - int range_cnt_length; - char range_cnt_str[SPIDER_SQL_INT_LEN]; - DBUG_ENTER("spider_oracle_handler::append_multi_range_cnt"); - DBUG_PRINT("info",("spider this=%p", this)); - range_cnt_length = my_sprintf(range_cnt_str, (range_cnt_str, "%u", - multi_range_cnt)); - if (with_comma) - { - if (str->reserve(range_cnt_length + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(range_cnt_str, range_cnt_length); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } else { - if (str->reserve(range_cnt_length)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(range_cnt_str, range_cnt_length); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_multi_range_cnt_with_name_part( - ulong sql_type, - uint multi_range_cnt -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_multi_range_cnt_with_name_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - case SPIDER_SQL_TYPE_TMP_SQL: - str = &tmp_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_multi_range_cnt_with_name(str, multi_range_cnt); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_multi_range_cnt_with_name( - spider_string *str, - uint multi_range_cnt -) { - int range_cnt_length; - char range_cnt_str[SPIDER_SQL_INT_LEN]; - DBUG_ENTER("spider_oracle_handler::append_multi_range_cnt_with_name"); - DBUG_PRINT("info",("spider this=%p", this)); - range_cnt_length = my_sprintf(range_cnt_str, (range_cnt_str, "%u", - multi_range_cnt)); - if (str->reserve(range_cnt_length + SPIDER_SQL_SPACE_LEN + - SPIDER_SQL_ID_LEN + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(range_cnt_str, range_cnt_length); - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - str->q_append(SPIDER_SQL_ID_STR, SPIDER_SQL_ID_LEN); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_open_handler_part( - ulong sql_type, - uint handler_id, - SPIDER_CONN *conn, - int link_idx -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_open_handler_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_HANDLER: - str = &ha_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_open_handler(str, handler_id, conn, link_idx); - exec_ha_sql = str; - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_open_handler( - spider_string *str, - uint handler_id, - SPIDER_CONN *conn, - int link_idx -) { - int error_num; - DBUG_ENTER("spider_oracle_handler::append_open_handler"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_PRINT("info",("spider link_idx=%d", link_idx)); - DBUG_PRINT("info",("spider m_handler_cid=%s", - spider->m_handler_cid[link_idx])); - if (str->reserve(SPIDER_SQL_HANDLER_LEN)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_HANDLER_STR, SPIDER_SQL_HANDLER_LEN); - if ((error_num = oracle_share->append_table_name(str, - spider->conn_link_idx[link_idx]))) - DBUG_RETURN(error_num); - if (str->reserve(SPIDER_SQL_OPEN_LEN + SPIDER_SQL_AS_LEN + - SPIDER_SQL_HANDLER_CID_LEN)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_OPEN_STR, SPIDER_SQL_OPEN_LEN); - str->q_append(SPIDER_SQL_AS_STR, SPIDER_SQL_AS_LEN); - str->q_append(spider->m_handler_cid[link_idx], SPIDER_SQL_HANDLER_CID_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_close_handler_part( - ulong sql_type, - int link_idx -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_close_handler_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_HANDLER: - str = &ha_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_close_handler(str, link_idx); - exec_ha_sql = str; - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_close_handler( - spider_string *str, - int link_idx -) { - DBUG_ENTER("spider_oracle_handler::append_close_handler"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_HANDLER_LEN + SPIDER_SQL_CLOSE_LEN + - SPIDER_SQL_HANDLER_CID_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_HANDLER_STR, SPIDER_SQL_HANDLER_LEN); - str->q_append(spider->m_handler_cid[link_idx], - SPIDER_SQL_HANDLER_CID_LEN); - str->q_append(SPIDER_SQL_CLOSE_STR, SPIDER_SQL_CLOSE_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_insert_terminator_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_insert_terminator_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_INSERT_SQL: - str = &insert_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_insert_terminator(str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_insert_terminator( - spider_string *str -) { - DBUG_ENTER("spider_oracle_handler::append_insert_terminator"); - DBUG_PRINT("info",("spider this=%p", this)); - if (spider->result_list.insert_dup_update_pushdown) - { - DBUG_PRINT("info",("spider add duplicate key update")); - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - if (str->reserve(SPIDER_SQL_DUPLICATE_KEY_UPDATE_LEN + - dup_update_sql.length())) - { - str->length(0); - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_DUPLICATE_KEY_UPDATE_STR, - SPIDER_SQL_DUPLICATE_KEY_UPDATE_LEN); - if (str->append(dup_update_sql)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } else { - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_insert_values_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_insert_values_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_INSERT_SQL: - str = &insert_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_insert_values(str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_insert_values( - spider_string *str -) { - SPIDER_SHARE *share = spider->share; - TABLE *table = spider->get_table(); - Field **field; - bool add_value = FALSE; - DBUG_ENTER("spider_oracle_handler::append_insert_values"); - DBUG_PRINT("info",("spider this=%p", this)); - nextval_pos = 0; - if (str->reserve(SPIDER_SQL_OPEN_PAREN_LEN)) - { - str->length(0); - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - for (field = table->field; *field; field++) - { - DBUG_PRINT("info",("spider field_index=%u", (*field)->field_index)); - if ( - bitmap_is_set(table->write_set, (*field)->field_index) || - bitmap_is_set(table->read_set, (*field)->field_index) - ) { -#ifndef DBUG_OFF - my_bitmap_map *tmp_map = - dbug_tmp_use_all_columns(table, table->read_set); -#endif - add_value = TRUE; - DBUG_PRINT("info",("spider is_null()=%s", - (*field)->is_null() ? "TRUE" : "FALSE")); - DBUG_PRINT("info",("spider table->next_number_field=%p", - table->next_number_field)); - DBUG_PRINT("info",("spider *field=%p", *field)); - DBUG_PRINT("info",("spider force_auto_increment=%s", - (table->next_number_field && spider->force_auto_increment) ? - "TRUE" : "FALSE")); - if ( - table->next_number_field == *field && - !table->auto_increment_field_not_null && - !spider->force_auto_increment - ) { - nextval_pos = str->length(); - if (str->reserve(oracle_share->nextval_max_length + - SPIDER_SQL_COMMA_LEN)) - { -#ifndef DBUG_OFF - dbug_tmp_restore_column_map(table->read_set, tmp_map); -#endif - str->length(0); - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->length(str->length() + oracle_share->nextval_max_length); - } else if ((*field)->is_null()) - { - if (str->reserve(SPIDER_SQL_NULL_LEN + SPIDER_SQL_COMMA_LEN)) - { -#ifndef DBUG_OFF - dbug_tmp_restore_column_map(table->read_set, tmp_map); -#endif - str->length(0); - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_NULL_STR, SPIDER_SQL_NULL_LEN); - } else { - if ( - spider_db_oracle_utility. - append_column_value(spider, str, *field, NULL, - share->access_charset) || - str->reserve(SPIDER_SQL_COMMA_LEN) - ) { -#ifndef DBUG_OFF - dbug_tmp_restore_column_map(table->read_set, tmp_map); -#endif - str->length(0); - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - } - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); -#ifndef DBUG_OFF - dbug_tmp_restore_column_map(table->read_set, tmp_map); -#endif - } - } - if (add_value) - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN + SPIDER_SQL_COMMA_LEN)) - { - str->length(0); - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_into_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_into_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_INSERT_SQL: - str = &insert_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_into(str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_into( - spider_string *str -) { - const TABLE *table = spider->get_table(); - Field **field; - uint field_name_length = 0; - DBUG_ENTER("spider_oracle_handler::append_into"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_INTO_LEN + oracle_share->db_nm_max_length + - SPIDER_SQL_DOT_LEN + oracle_share->table_nm_max_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 4 + SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_INTO_STR, SPIDER_SQL_INTO_LEN); - insert_table_name_pos = str->length(); - append_table_name_with_adjusting(str, first_link_idx, - SPIDER_SQL_TYPE_INSERT_SQL); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - for (field = table->field; *field; field++) - { - if ( - bitmap_is_set(table->write_set, (*field)->field_index) || - bitmap_is_set(table->read_set, (*field)->field_index) - ) { - field_name_length = - oracle_share->column_name_str[(*field)->field_index].length(); - if (str->reserve(field_name_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - oracle_share->append_column_name(str, (*field)->field_index); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - if (field_name_length) - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN + SPIDER_SQL_VALUES_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); - str->q_append(SPIDER_SQL_VALUES_STR, SPIDER_SQL_VALUES_LEN); - insert_pos = str->length(); - DBUG_RETURN(0); -} - -void spider_oracle_handler::set_insert_to_pos( - ulong sql_type -) { - DBUG_ENTER("spider_oracle_handler::set_insert_to_pos"); - switch (sql_type) - { - case SPIDER_SQL_TYPE_INSERT_SQL: - insert_sql.length(insert_pos); - break; - default: - DBUG_ASSERT(0); - break; - } - DBUG_VOID_RETURN; -} - -int spider_oracle_handler::append_from_part( - ulong sql_type, - int link_idx -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_from_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_HANDLER: - str = &ha_sql; - break; - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - str = &update_sql; - break; - default: - str = &sql; - break; - } - error_num = append_from(str, sql_type, link_idx); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_from( - spider_string *str, - ulong sql_type, - int link_idx -) { - DBUG_ENTER("spider_oracle_handler::append_from"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_PRINT("info",("spider link_idx=%d", link_idx)); - if (sql_type == SPIDER_SQL_TYPE_HANDLER) - { - ha_table_name_pos = str->length(); - DBUG_PRINT("info",("spider ha_table_name_pos=%u", ha_table_name_pos)); - ha_sql_handler_id = spider->m_handler_id[link_idx]; - DBUG_PRINT("info",("spider ha_sql_handler_id=%u", ha_sql_handler_id)); - if (str->reserve(SPIDER_SQL_HANDLER_CID_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(spider->m_handler_cid[link_idx], SPIDER_SQL_HANDLER_CID_LEN); - DBUG_PRINT("info",("spider m_handler_cid=%s", - spider->m_handler_cid[link_idx])); - } else { - if (str->reserve(SPIDER_SQL_FROM_LEN + oracle_share->db_nm_max_length + - SPIDER_SQL_DOT_LEN + oracle_share->table_nm_max_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 4 + SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN); - table_name_pos = str->length(); - append_table_name_with_adjusting(str, link_idx, sql_type); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_flush_tables_part( - ulong sql_type, - int link_idx, - bool lock -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_flush_tables_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_OTHER_SQL: - str = &spider->result_list.sqls[link_idx]; - break; - default: - DBUG_RETURN(0); - } - error_num = append_flush_tables(str, link_idx, lock); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_flush_tables( - spider_string *str, - int link_idx, - bool lock -) { - DBUG_ENTER("spider_oracle_handler::append_flush_tables"); - DBUG_PRINT("info",("spider this=%p", this)); - if (lock) - { - if (str->reserve(SPIDER_SQL_FLUSH_TABLES_LEN + - SPIDER_SQL_WITH_READ_LOCK_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_FLUSH_TABLES_STR, SPIDER_SQL_FLUSH_TABLES_LEN); - str->q_append(SPIDER_SQL_WITH_READ_LOCK_STR, - SPIDER_SQL_WITH_READ_LOCK_LEN); - } else { - if (str->reserve(SPIDER_SQL_FLUSH_TABLES_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_FLUSH_TABLES_STR, SPIDER_SQL_FLUSH_TABLES_LEN); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_optimize_table_part( - ulong sql_type, - int link_idx -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_optimize_table_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_OTHER_SQL: - str = &spider->result_list.sqls[link_idx]; - break; - default: - DBUG_RETURN(0); - } - error_num = append_optimize_table(str, link_idx); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_optimize_table( - spider_string *str, - int link_idx -) { - SPIDER_SHARE *share = spider->share; - int conn_link_idx = spider->conn_link_idx[link_idx]; - int local_length = spider_param_internal_optimize_local( - spider->wide_handler->trx->thd, - share->internal_optimize_local) * SPIDER_SQL_SQL_LOCAL_LEN; - DBUG_ENTER("spider_oracle_handler::append_optimize_table"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_SQL_OPTIMIZE_LEN + SPIDER_SQL_SQL_TABLE_LEN + - local_length + - oracle_share->db_names_str[conn_link_idx].length() + - SPIDER_SQL_DOT_LEN + - oracle_share->table_names_str[conn_link_idx].length() + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 4)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SQL_OPTIMIZE_STR, SPIDER_SQL_SQL_OPTIMIZE_LEN); - if (local_length) - str->q_append(SPIDER_SQL_SQL_LOCAL_STR, SPIDER_SQL_SQL_LOCAL_LEN); - str->q_append(SPIDER_SQL_SQL_TABLE_STR, SPIDER_SQL_SQL_TABLE_LEN); - oracle_share->append_table_name(str, conn_link_idx); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_analyze_table_part( - ulong sql_type, - int link_idx -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_analyze_table_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_OTHER_SQL: - str = &spider->result_list.sqls[link_idx]; - break; - default: - DBUG_RETURN(0); - } - error_num = append_analyze_table(str, link_idx); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_analyze_table( - spider_string *str, - int link_idx -) { - SPIDER_SHARE *share = spider->share; - int conn_link_idx = spider->conn_link_idx[link_idx]; - int local_length = spider_param_internal_optimize_local( - spider->wide_handler->trx->thd, - share->internal_optimize_local) * SPIDER_SQL_SQL_LOCAL_LEN; - DBUG_ENTER("spider_oracle_handler::append_analyze_table"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_SQL_ANALYZE_LEN + SPIDER_SQL_SQL_TABLE_LEN + - local_length + - oracle_share->db_names_str[conn_link_idx].length() + - SPIDER_SQL_DOT_LEN + - oracle_share->table_names_str[conn_link_idx].length() + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 4)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SQL_ANALYZE_STR, SPIDER_SQL_SQL_ANALYZE_LEN); - if (local_length) - str->q_append(SPIDER_SQL_SQL_LOCAL_STR, SPIDER_SQL_SQL_LOCAL_LEN); - str->q_append(SPIDER_SQL_SQL_TABLE_STR, SPIDER_SQL_SQL_TABLE_LEN); - oracle_share->append_table_name(str, conn_link_idx); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_repair_table_part( - ulong sql_type, - int link_idx, - HA_CHECK_OPT* check_opt -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_repair_table_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_OTHER_SQL: - str = &spider->result_list.sqls[link_idx]; - break; - default: - DBUG_RETURN(0); - } - error_num = append_repair_table(str, link_idx, check_opt); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_repair_table( - spider_string *str, - int link_idx, - HA_CHECK_OPT* check_opt -) { - SPIDER_SHARE *share = spider->share; - int conn_link_idx = spider->conn_link_idx[link_idx]; - int local_length = spider_param_internal_optimize_local( - spider->wide_handler->trx->thd, - share->internal_optimize_local) * SPIDER_SQL_SQL_LOCAL_LEN; - DBUG_ENTER("spider_oracle_handler::append_repair_table"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_SQL_REPAIR_LEN + SPIDER_SQL_SQL_TABLE_LEN + - local_length + - oracle_share->db_names_str[conn_link_idx].length() + - SPIDER_SQL_DOT_LEN + - oracle_share->table_names_str[conn_link_idx].length() + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 4)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SQL_REPAIR_STR, SPIDER_SQL_SQL_REPAIR_LEN); - if (local_length) - str->q_append(SPIDER_SQL_SQL_LOCAL_STR, SPIDER_SQL_SQL_LOCAL_LEN); - str->q_append(SPIDER_SQL_SQL_TABLE_STR, SPIDER_SQL_SQL_TABLE_LEN); - oracle_share->append_table_name(str, conn_link_idx); - if (check_opt->flags & T_QUICK) - { - if (str->reserve(SPIDER_SQL_SQL_QUICK_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SQL_QUICK_STR, SPIDER_SQL_SQL_QUICK_LEN); - } - if (check_opt->flags & T_EXTEND) - { - if (str->reserve(SPIDER_SQL_SQL_EXTENDED_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SQL_EXTENDED_STR, SPIDER_SQL_SQL_EXTENDED_LEN); - } - if (check_opt->sql_flags & TT_USEFRM) - { - if (str->reserve(SPIDER_SQL_SQL_USE_FRM_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SQL_USE_FRM_STR, SPIDER_SQL_SQL_USE_FRM_LEN); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_check_table_part( - ulong sql_type, - int link_idx, - HA_CHECK_OPT* check_opt -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_check_table_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_OTHER_SQL: - str = &spider->result_list.sqls[link_idx]; - break; - default: - DBUG_RETURN(0); - } - error_num = append_check_table(str, link_idx, check_opt); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_check_table( - spider_string *str, - int link_idx, - HA_CHECK_OPT* check_opt -) { - int conn_link_idx = spider->conn_link_idx[link_idx]; - DBUG_ENTER("spider_oracle_handler::append_check_table"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_SQL_CHECK_TABLE_LEN + - oracle_share->db_names_str[conn_link_idx].length() + - SPIDER_SQL_DOT_LEN + - oracle_share->table_names_str[conn_link_idx].length() + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 4)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SQL_CHECK_TABLE_STR, - SPIDER_SQL_SQL_CHECK_TABLE_LEN); - oracle_share->append_table_name(str, conn_link_idx); - if (check_opt->flags & T_QUICK) - { - if (str->reserve(SPIDER_SQL_SQL_QUICK_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SQL_QUICK_STR, SPIDER_SQL_SQL_QUICK_LEN); - } - if (check_opt->flags & T_FAST) - { - if (str->reserve(SPIDER_SQL_SQL_FAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SQL_FAST_STR, SPIDER_SQL_SQL_FAST_LEN); - } - if (check_opt->flags & T_MEDIUM) - { - if (str->reserve(SPIDER_SQL_SQL_MEDIUM_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SQL_MEDIUM_STR, SPIDER_SQL_SQL_MEDIUM_LEN); - } - if (check_opt->flags & T_EXTEND) - { - if (str->reserve(SPIDER_SQL_SQL_EXTENDED_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SQL_EXTENDED_STR, SPIDER_SQL_SQL_EXTENDED_LEN); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_enable_keys_part( - ulong sql_type, - int link_idx -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_enable_keys_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_OTHER_SQL: - str = &spider->result_list.sqls[link_idx]; - break; - default: - DBUG_RETURN(0); - } - error_num = append_enable_keys(str, link_idx); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_enable_keys( - spider_string *str, - int link_idx -) { - int conn_link_idx = spider->conn_link_idx[link_idx]; - DBUG_ENTER("spider_oracle_handler::append_enable_keys"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_SQL_ALTER_TABLE_LEN + - oracle_share->db_names_str[conn_link_idx].length() + - SPIDER_SQL_DOT_LEN + - oracle_share->table_names_str[conn_link_idx].length() + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 4 + SPIDER_SQL_SQL_ENABLE_KEYS_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SQL_ALTER_TABLE_STR, - SPIDER_SQL_SQL_ALTER_TABLE_LEN); - oracle_share->append_table_name(str, conn_link_idx); - str->q_append(SPIDER_SQL_SQL_ENABLE_KEYS_STR, - SPIDER_SQL_SQL_ENABLE_KEYS_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_disable_keys_part( - ulong sql_type, - int link_idx -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_disable_keys_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_OTHER_SQL: - str = &spider->result_list.sqls[link_idx]; - break; - default: - DBUG_RETURN(0); - } - error_num = append_disable_keys(str, link_idx); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_disable_keys( - spider_string *str, - int link_idx -) { - int conn_link_idx = spider->conn_link_idx[link_idx]; - DBUG_ENTER("spider_oracle_handler::append_disable_keys"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_SQL_ALTER_TABLE_LEN + - oracle_share->db_names_str[conn_link_idx].length() + - SPIDER_SQL_DOT_LEN + - oracle_share->table_names_str[conn_link_idx].length() + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 4 + SPIDER_SQL_SQL_DISABLE_KEYS_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SQL_ALTER_TABLE_STR, - SPIDER_SQL_SQL_ALTER_TABLE_LEN); - oracle_share->append_table_name(str, conn_link_idx); - str->q_append(SPIDER_SQL_SQL_DISABLE_KEYS_STR, - SPIDER_SQL_SQL_DISABLE_KEYS_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_delete_all_rows_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_delete_all_rows_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_DELETE_SQL: - str = &update_sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_delete_all_rows(str, sql_type); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_delete_all_rows( - spider_string *str, - ulong sql_type -) { - int error_num; - DBUG_ENTER("spider_oracle_handler::append_delete_all_rows"); - DBUG_PRINT("info",("spider this=%p", this)); - if (spider->sql_command == SQLCOM_TRUNCATE) - { - if ((error_num = append_truncate(str, sql_type, first_link_idx))) - DBUG_RETURN(error_num); - } else { - if ( - (error_num = append_delete(str)) || - (error_num = append_from(str, sql_type, first_link_idx)) - ) - DBUG_RETURN(error_num); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_truncate( - spider_string *str, - ulong sql_type, - int link_idx -) { - DBUG_ENTER("spider_oracle_handler::append_truncate"); - if (str->reserve(SPIDER_SQL_TRUNCATE_TABLE_LEN + - oracle_share->db_nm_max_length + - SPIDER_SQL_DOT_LEN + oracle_share->table_nm_max_length + - /* SPIDER_SQL_NAME_QUOTE_LEN */ 4 + SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_TRUNCATE_TABLE_STR, SPIDER_SQL_TRUNCATE_TABLE_LEN); - table_name_pos = str->length(); - append_table_name_with_adjusting(str, link_idx, sql_type); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_explain_select_part( - const key_range *start_key, - const key_range *end_key, - ulong sql_type, - int link_idx -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_explain_select_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_OTHER_SQL: - str = &spider->result_list.sqls[link_idx]; - break; - default: - DBUG_RETURN(0); - } - error_num = - append_explain_select(str, start_key, end_key, sql_type, link_idx); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_explain_select( - spider_string *str, - const key_range *start_key, - const key_range *end_key, - ulong sql_type, - int link_idx -) { - int error_num; - DBUG_ENTER("spider_oracle_handler::append_explain_select"); - DBUG_PRINT("info",("spider this=%p", this)); - if (str->reserve(SPIDER_SQL_EXPLAIN_SELECT_LEN)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_EXPLAIN_SELECT_STR, SPIDER_SQL_EXPLAIN_SELECT_LEN); - if ( - (error_num = append_from(str, sql_type, link_idx)) || - (error_num = append_key_where(str, NULL, NULL, start_key, end_key, - sql_type, FALSE)) - ) { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - DBUG_RETURN(0); -} - -/******************************************************************** - * Determine whether the current query's projection list - * consists solely of the specified column. - * - * Params IN - field_index: - * Field index of the column of interest within - * its table. - * - * Returns TRUE - if the query's projection list consists - * solely of the specified column. - * FALSE - otherwise. - ********************************************************************/ -bool spider_oracle_handler::is_sole_projection_field( uint16 field_index ) -{ - // Determine whether the projection list consists solely of the field of interest - bool is_field_in_projection_list = FALSE; - TABLE* table = spider->get_table(); - uint16 projection_field_count = 0; - uint16 projection_field_index; - Field** field; - DBUG_ENTER( "spider_oracle_handler::is_sole_projection_field" ); - - for ( field = table->field; *field; field++ ) - { - projection_field_index = ( *field )->field_index; - - if ( !( minimum_select_bit_is_set( projection_field_index ) ) ) - { - // Current field is not in the projection list - continue; - } - - projection_field_count++; - - if ( !is_field_in_projection_list ) - { - if (field_index == projection_field_index) - { - // Field of interest is in the projection list - is_field_in_projection_list = TRUE; - } - } - - if ( is_field_in_projection_list && ( projection_field_count != 1 ) ) - { - // Field of interest is not the sole column in the projection list - DBUG_RETURN( FALSE ); - } - } - - if ( is_field_in_projection_list && ( projection_field_count == 1 ) ) - { - // Field of interest is the only column in the projection list - DBUG_RETURN( TRUE ); - } - - DBUG_RETURN( FALSE ); -} - -bool spider_oracle_handler::is_bulk_insert_exec_period( - bool bulk_end -) { - DBUG_ENTER("spider_oracle_handler::is_bulk_insert_exec_period"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_PRINT("info",("spider insert_sql.length=%u", insert_sql.length())); - DBUG_PRINT("info",("spider insert_pos=%d", insert_pos)); - DBUG_PRINT("info",("spider insert_sql=%s", insert_sql.c_ptr_safe())); - if ( -/* - (bulk_end || (int) insert_sql.length() >= spider->bulk_size) && -*/ - (int) insert_sql.length() > insert_pos - ) { - DBUG_RETURN(TRUE); - } - DBUG_RETURN(FALSE); -} - -bool spider_oracle_handler::sql_is_filled_up( - ulong sql_type -) { - DBUG_ENTER("spider_oracle_handler::sql_is_filled_up"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(filled_up); -} - -bool spider_oracle_handler::sql_is_empty( - ulong sql_type -) { - bool is_empty; - DBUG_ENTER("spider_oracle_handler::sql_is_empty"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - is_empty = (sql.length() == 0); - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - is_empty = (insert_sql.length() == 0); - break; - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - is_empty = (update_sql.length() == 0); - break; - case SPIDER_SQL_TYPE_TMP_SQL: - is_empty = (tmp_sql.length() == 0); - break; - case SPIDER_SQL_TYPE_HANDLER: - is_empty = (ha_sql.length() == 0); - break; - default: - is_empty = TRUE; - break; - } - DBUG_RETURN(is_empty); -} - -bool spider_oracle_handler::support_multi_split_read() -{ - DBUG_ENTER("spider_oracle_handler::support_multi_split_read"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(FALSE); -} - -bool spider_oracle_handler::support_bulk_update() -{ - DBUG_ENTER("spider_oracle_handler::support_bulk_update"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(FALSE); -} - -int spider_oracle_handler::bulk_tmp_table_insert() -{ - int error_num; - DBUG_ENTER("spider_oracle_handler::bulk_tmp_table_insert"); - DBUG_PRINT("info",("spider this=%p", this)); - error_num = store_sql_to_bulk_tmp_table(&update_sql, upd_tmp_tbl); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::bulk_tmp_table_insert( - int link_idx -) { - int error_num; - DBUG_ENTER("spider_oracle_handler::bulk_tmp_table_insert"); - DBUG_PRINT("info",("spider this=%p", this)); - error_num = store_sql_to_bulk_tmp_table( - &spider->result_list.update_sqls[link_idx], - spider->result_list.upd_tmp_tbls[link_idx]); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::bulk_tmp_table_end_bulk_insert() -{ - int error_num; - DBUG_ENTER("spider_oracle_handler::bulk_tmp_table_end_bulk_insert"); - DBUG_PRINT("info",("spider this=%p", this)); - if ((error_num = upd_tmp_tbl->file->ha_end_bulk_insert())) - { - DBUG_RETURN(error_num); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::bulk_tmp_table_rnd_init() -{ - int error_num; - DBUG_ENTER("spider_oracle_handler::bulk_tmp_table_rnd_init"); - DBUG_PRINT("info",("spider this=%p", this)); - upd_tmp_tbl->file->extra(HA_EXTRA_CACHE); - if ((error_num = upd_tmp_tbl->file->ha_rnd_init(TRUE))) - { - DBUG_RETURN(error_num); - } - reading_from_bulk_tmp_table = TRUE; - DBUG_RETURN(0); -} - -int spider_oracle_handler::bulk_tmp_table_rnd_next() -{ - int error_num; - DBUG_ENTER("spider_oracle_handler::bulk_tmp_table_rnd_next"); - DBUG_PRINT("info",("spider this=%p", this)); - error_num = upd_tmp_tbl->file->ha_rnd_next(upd_tmp_tbl->record[0]); - if (!error_num) - { - error_num = restore_sql_from_bulk_tmp_table(&insert_sql, upd_tmp_tbl); - } - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::bulk_tmp_table_rnd_end() -{ - int error_num; - DBUG_ENTER("spider_oracle_handler::bulk_tmp_table_rnd_end"); - DBUG_PRINT("info",("spider this=%p", this)); - reading_from_bulk_tmp_table = FALSE; - if ((error_num = upd_tmp_tbl->file->ha_rnd_end())) - { - DBUG_RETURN(error_num); - } - DBUG_RETURN(0); -} - -bool spider_oracle_handler::need_copy_for_update( - int link_idx -) { - int all_link_idx = spider->conn_link_idx[link_idx]; - DBUG_ENTER("spider_oracle_handler::need_copy_for_update"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(!oracle_share->same_db_table_name || - spider->share->link_statuses[all_link_idx] == SPIDER_LINK_STATUS_RECOVERY); -} - -bool spider_oracle_handler::bulk_tmp_table_created() -{ - DBUG_ENTER("spider_oracle_handler::bulk_tmp_table_created"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(upd_tmp_tbl); -} - -int spider_oracle_handler::mk_bulk_tmp_table_and_bulk_start() -{ - THD *thd = spider->wide_handler->trx->thd; - TABLE *table = spider->get_table(); - DBUG_ENTER("spider_oracle_handler::mk_bulk_tmp_table_and_bulk_start"); - DBUG_PRINT("info",("spider this=%p", this)); - if (!upd_tmp_tbl) - { -#ifdef SPIDER_use_LEX_CSTRING_for_Field_blob_constructor - LEX_CSTRING field_name = {STRING_WITH_LEN("a")}; - if (!(upd_tmp_tbl = spider_mk_sys_tmp_table( - thd, table, &upd_tmp_tbl_prm, &field_name, update_sql.charset()))) -#else - if (!(upd_tmp_tbl = spider_mk_sys_tmp_table( - thd, table, &upd_tmp_tbl_prm, "a", update_sql.charset()))) -#endif - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - upd_tmp_tbl->file->extra(HA_EXTRA_WRITE_CACHE); - upd_tmp_tbl->file->ha_start_bulk_insert((ha_rows) 0); - } - DBUG_RETURN(0); -} - -void spider_oracle_handler::rm_bulk_tmp_table() -{ - DBUG_ENTER("spider_oracle_handler::rm_bulk_tmp_table"); - DBUG_PRINT("info",("spider this=%p", this)); - if (upd_tmp_tbl) - { - spider_rm_sys_tmp_table(spider->wide_handler->trx->thd, upd_tmp_tbl, - &upd_tmp_tbl_prm); - upd_tmp_tbl = NULL; - } - DBUG_VOID_RETURN; -} - -int spider_oracle_handler::store_sql_to_bulk_tmp_table( - spider_string *str, - TABLE *tmp_table -) { - int error_num; - DBUG_ENTER("spider_oracle_handler::store_sql_to_bulk_tmp_table"); - DBUG_PRINT("info",("spider this=%p", this)); - tmp_table->field[0]->set_notnull(); - tmp_table->field[0]->store(str->ptr(), str->length(), str->charset()); - if ((error_num = tmp_table->file->ha_write_row(tmp_table->record[0]))) - DBUG_RETURN(error_num); - DBUG_RETURN(0); -} - -int spider_oracle_handler::restore_sql_from_bulk_tmp_table( - spider_string *str, - TABLE *tmp_table -) { - DBUG_ENTER("spider_oracle_handler::restore_sql_from_bulk_tmp_table"); - DBUG_PRINT("info",("spider this=%p", this)); - tmp_table->field[0]->val_str(str->get_str()); - str->mem_calc(); - DBUG_RETURN(0); -} - -int spider_oracle_handler::insert_lock_tables_list( - SPIDER_CONN *conn, - int link_idx -) { - spider_db_oracle *db_conn = (spider_db_oracle *) conn->db_conn; - SPIDER_LINK_FOR_HASH *tmp_link_for_hash2 = &link_for_hash[link_idx]; - DBUG_ENTER("spider_oracle_handler::insert_lock_tables_list"); - DBUG_PRINT("info",("spider this=%p", this)); - uint old_elements = - db_conn->lock_table_hash.array.max_element; - if (my_hash_insert(&db_conn->lock_table_hash, - (uchar*) tmp_link_for_hash2)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - if (db_conn->lock_table_hash.array.max_element > old_elements) - { - spider_alloc_calc_mem(spider_current_trx, - db_conn->lock_table_hash, - (db_conn->lock_table_hash.array.max_element - old_elements) * - db_conn->lock_table_hash.array.size_of_element); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_lock_tables_list( - SPIDER_CONN *conn, - int link_idx, - int *appended -) { - int error_num; - SPIDER_LINK_FOR_HASH *tmp_link_for_hash, *tmp_link_for_hash2; - int conn_link_idx = spider->conn_link_idx[link_idx]; - spider_db_oracle *db_conn = (spider_db_oracle *) conn->db_conn; - DBUG_ENTER("spider_oracle_handler::append_lock_tables_list"); - DBUG_PRINT("info",("spider this=%p", this)); - tmp_link_for_hash2 = &link_for_hash[link_idx]; - tmp_link_for_hash2->db_table_str = - &oracle_share->db_table_str[conn_link_idx]; - tmp_link_for_hash2->db_table_str_hash_value = - oracle_share->db_table_str_hash_value[conn_link_idx]; - if (!(tmp_link_for_hash = (SPIDER_LINK_FOR_HASH *) - my_hash_search_using_hash_value( - &db_conn->lock_table_hash, - tmp_link_for_hash2->db_table_str_hash_value, - (uchar*) tmp_link_for_hash2->db_table_str->ptr(), - tmp_link_for_hash2->db_table_str->length()))) - { - if ((error_num = insert_lock_tables_list(conn, link_idx))) - DBUG_RETURN(error_num); - *appended = 1; - } else { - if (tmp_link_for_hash->spider->wide_handler->lock_type < - spider->wide_handler->lock_type) - { - my_hash_delete(&db_conn->lock_table_hash, - (uchar*) tmp_link_for_hash); - uint old_elements = - db_conn->lock_table_hash.array.max_element; - if (my_hash_insert(&db_conn->lock_table_hash, - (uchar*) tmp_link_for_hash2)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - if (db_conn->lock_table_hash.array.max_element > old_elements) - { - spider_alloc_calc_mem(spider_current_trx, - db_conn->lock_table_hash, - (db_conn->lock_table_hash.array.max_element - old_elements) * - db_conn->lock_table_hash.array.size_of_element); - } - } - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::realloc_sql( - ulong *realloced -) { - THD *thd = spider->wide_handler->trx->thd; - st_spider_share *share = spider->share; - int init_sql_alloc_size = - spider_param_init_sql_alloc_size(thd, share->init_sql_alloc_size); - DBUG_ENTER("spider_oracle_handler::realloc_sql"); - DBUG_PRINT("info",("spider this=%p", this)); - if ((int) sql.alloced_length() > init_sql_alloc_size * 2) - { - sql.free(); - if (sql.real_alloc(init_sql_alloc_size)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - *realloced |= SPIDER_SQL_TYPE_SELECT_SQL; - } - if ((int) ha_sql.alloced_length() > init_sql_alloc_size * 2) - { - ha_sql.free(); - if (ha_sql.real_alloc(init_sql_alloc_size)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - *realloced |= SPIDER_SQL_TYPE_SELECT_SQL; - } - if ((int) dup_update_sql.alloced_length() > init_sql_alloc_size * 2) - { - dup_update_sql.free(); - if (dup_update_sql.real_alloc(init_sql_alloc_size)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - if ((int) insert_sql.alloced_length() > init_sql_alloc_size * 2) - { - insert_sql.free(); - if (insert_sql.real_alloc(init_sql_alloc_size)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - *realloced |= SPIDER_SQL_TYPE_INSERT_SQL; - } - if ((int) update_sql.alloced_length() > init_sql_alloc_size * 2) - { - update_sql.free(); - if (update_sql.real_alloc(init_sql_alloc_size)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - *realloced |= (SPIDER_SQL_TYPE_UPDATE_SQL | SPIDER_SQL_TYPE_DELETE_SQL); - } - update_sql.length(0); - if ((int) tmp_sql.alloced_length() > init_sql_alloc_size * 2) - { - tmp_sql.free(); - if (tmp_sql.real_alloc(init_sql_alloc_size)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - *realloced |= SPIDER_SQL_TYPE_TMP_SQL; - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::reset_sql( - ulong sql_type -) { - DBUG_ENTER("spider_oracle_handler::reset_sql"); - DBUG_PRINT("info",("spider this=%p", this)); - if (sql_type & SPIDER_SQL_TYPE_SELECT_SQL) - { - table_lock_mode = 0; - select_rownum_appended = FALSE; - sql.length(0); - } - if (sql_type & SPIDER_SQL_TYPE_INSERT_SQL) - { - insert_sql.length(0); - } - if (sql_type & (SPIDER_SQL_TYPE_UPDATE_SQL | SPIDER_SQL_TYPE_DELETE_SQL | - SPIDER_SQL_TYPE_BULK_UPDATE_SQL)) - { - update_rownum_appended = FALSE; - update_set_pos = 0; - update_sql.length(0); - } - if (sql_type & SPIDER_SQL_TYPE_TMP_SQL) - { - tmp_sql.length(0); - } - if (sql_type & SPIDER_SQL_TYPE_HANDLER) - { - ha_sql.length(0); - } - DBUG_RETURN(0); -} - - -bool spider_oracle_handler::need_lock_before_set_sql_for_exec( - ulong sql_type -) { - DBUG_ENTER("spider_oracle_handler::need_lock_before_set_sql_for_exec"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(FALSE); -} - -int spider_oracle_handler::set_sql_for_exec( - ulong sql_type, - int link_idx, - SPIDER_LINK_IDX_CHAIN *link_idx_chain -) { - int error_num; - SPIDER_RESULT_LIST *result_list = &spider->result_list; - int all_link_idx = spider->conn_link_idx[link_idx]; - DBUG_ENTER("spider_oracle_handler::set_sql_for_exec"); - DBUG_PRINT("info",("spider this=%p", this)); - if (sql_type & SPIDER_SQL_TYPE_SELECT_SQL) - { - if (table_lock_mode) - { - spider_string *str = &result_list->insert_sqls[link_idx]; - str->length(0); - if (str->reserve(SPIDER_SQL_LOCK_TABLE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_LOCK_TABLE_STR, SPIDER_SQL_LOCK_TABLE_LEN); - if ((error_num = oracle_share->append_table_name(str, all_link_idx))) - DBUG_RETURN(error_num); - if (table_lock_mode == SPIDER_LOCK_MODE_EXCLUSIVE) - { - if (str->reserve(SPIDER_SQL_LOCK_TABLE_EXCLUSIVE_MODE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_LOCK_TABLE_EXCLUSIVE_MODE_STR, - SPIDER_SQL_LOCK_TABLE_EXCLUSIVE_MODE_LEN); - } else if (table_lock_mode == SPIDER_LOCK_MODE_SHARED) - { - if (str->reserve(SPIDER_SQL_LOCK_TABLE_SHARE_MODE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_LOCK_TABLE_SHARE_MODE_STR, - SPIDER_SQL_LOCK_TABLE_SHARE_MODE_LEN); - } - exec_lock_sql = str; - } - - if ((error_num = spider_db_oracle_utility.reappend_tables( - spider->fields, link_idx_chain, &sql))) - DBUG_RETURN(error_num); - exec_sql = &sql; - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::set_sql_for_exec( - ulong sql_type, - int link_idx -) { - int error_num; - uint tmp_pos; - SPIDER_SHARE *share = spider->share; - SPIDER_RESULT_LIST *result_list = &spider->result_list; - int all_link_idx = spider->conn_link_idx[link_idx]; - DBUG_ENTER("spider_oracle_handler::set_sql_for_exec"); - DBUG_PRINT("info",("spider this=%p", this)); - if (sql_type & (SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_TMP_SQL)) - { - if (table_lock_mode) - { - spider_string *str = &result_list->insert_sqls[link_idx]; - str->length(0); - if (str->reserve(SPIDER_SQL_LOCK_TABLE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_LOCK_TABLE_STR, SPIDER_SQL_LOCK_TABLE_LEN); - if ((error_num = oracle_share->append_table_name(str, all_link_idx))) - DBUG_RETURN(error_num); - if (table_lock_mode == SPIDER_LOCK_MODE_EXCLUSIVE) - { - if (str->reserve(SPIDER_SQL_LOCK_TABLE_EXCLUSIVE_MODE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_LOCK_TABLE_EXCLUSIVE_MODE_STR, - SPIDER_SQL_LOCK_TABLE_EXCLUSIVE_MODE_LEN); - } else if (table_lock_mode == SPIDER_LOCK_MODE_SHARED) - { - if (str->reserve(SPIDER_SQL_LOCK_TABLE_SHARE_MODE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_LOCK_TABLE_SHARE_MODE_STR, - SPIDER_SQL_LOCK_TABLE_SHARE_MODE_LEN); - } - exec_lock_sql = str; - } - - if (oracle_share->same_db_table_name || link_idx == first_link_idx) - { - if (sql_type & SPIDER_SQL_TYPE_SELECT_SQL) - exec_sql = &sql; - if (sql_type & SPIDER_SQL_TYPE_TMP_SQL) - exec_tmp_sql = &tmp_sql; - } else { - char tmp_table_name[MAX_FIELD_WIDTH * 2], - tgt_table_name[MAX_FIELD_WIDTH * 2]; - int tmp_table_name_length; - spider_string tgt_table_name_str(tgt_table_name, - MAX_FIELD_WIDTH * 2, - oracle_share->db_names_str[link_idx].charset()); - const char *table_names[2], *table_aliases[2]; - uint table_name_lengths[2], table_alias_lengths[2]; - tgt_table_name_str.init_calc_mem(SPD_MID_ORACLE_HANDLER_SET_SQL_FOR_EXEC_1); - tgt_table_name_str.length(0); - if (result_list->tmp_table_join && spider->bka_mode != 2) - { - create_tmp_bka_table_name(tmp_table_name, &tmp_table_name_length, - link_idx); - append_table_name_with_adjusting(&tgt_table_name_str, link_idx, - SPIDER_SQL_TYPE_TMP_SQL); - table_names[0] = tmp_table_name; - table_names[1] = tgt_table_name_str.ptr(); - table_name_lengths[0] = tmp_table_name_length; - table_name_lengths[1] = tgt_table_name_str.length(); - table_aliases[0] = SPIDER_SQL_A_STR; - table_aliases[1] = SPIDER_SQL_B_STR; - table_alias_lengths[0] = SPIDER_SQL_A_LEN; - table_alias_lengths[1] = SPIDER_SQL_B_LEN; - } - if (sql_type & SPIDER_SQL_TYPE_SELECT_SQL) - { - exec_sql = &result_list->sqls[link_idx]; - if (exec_sql->copy(sql)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - else if (result_list->use_union) - { - if ((error_num = reset_union_table_name(exec_sql, link_idx, - SPIDER_SQL_TYPE_SELECT_SQL))) - DBUG_RETURN(error_num); - } else { - tmp_pos = exec_sql->length(); - exec_sql->length(table_name_pos); - if (result_list->tmp_table_join && spider->bka_mode != 2) - { - if ((error_num = spider_db_oracle_utility.append_from_with_alias( - exec_sql, table_names, table_name_lengths, - table_aliases, table_alias_lengths, 2, - &table_name_pos, TRUE)) - ) - DBUG_RETURN(error_num); - exec_sql->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - } else { - append_table_name_with_adjusting(exec_sql, link_idx, - SPIDER_SQL_TYPE_SELECT_SQL); - } - exec_sql->length(tmp_pos); - } - } - if (sql_type & SPIDER_SQL_TYPE_TMP_SQL) - { - exec_tmp_sql = &result_list->tmp_sqls[link_idx]; - if (result_list->tmp_table_join && spider->bka_mode != 2) - { - if (exec_tmp_sql->copy(tmp_sql)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - else { - tmp_pos = exec_tmp_sql->length(); - exec_tmp_sql->length(tmp_sql_pos1); - exec_tmp_sql->q_append(tmp_table_name, tmp_table_name_length); - exec_tmp_sql->length(tmp_sql_pos2); - exec_tmp_sql->q_append(tmp_table_name, tmp_table_name_length); - exec_tmp_sql->length(tmp_sql_pos3); - exec_tmp_sql->q_append(tmp_table_name, tmp_table_name_length); - exec_tmp_sql->length(tmp_pos); - } - } - } - } - } - if (sql_type & SPIDER_SQL_TYPE_INSERT_SQL) - { - if (oracle_share->same_db_table_name || link_idx == first_link_idx) - exec_insert_sql = &insert_sql; - else { - exec_insert_sql = &result_list->insert_sqls[link_idx]; - if (exec_insert_sql->copy(insert_sql)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - DBUG_PRINT("info",("spider exec_insert_sql=%s", - exec_insert_sql->c_ptr_safe())); - tmp_pos = exec_insert_sql->length(); - exec_insert_sql->length(insert_table_name_pos); - append_table_name_with_adjusting(exec_insert_sql, link_idx, - sql_type); - exec_insert_sql->length(tmp_pos); - DBUG_PRINT("info",("spider exec_insert_sql->length=%u", - exec_insert_sql->length())); - DBUG_PRINT("info",("spider exec_insert_sql=%s", - exec_insert_sql->c_ptr_safe())); - } - if (nextval_pos) - { - memcpy((uchar *) exec_insert_sql->ptr() + nextval_pos, - oracle_share->nextval_str[all_link_idx].ptr(), - oracle_share->nextval_max_length); - } - } - if (sql_type & SPIDER_SQL_TYPE_BULK_UPDATE_SQL) - { - if (reading_from_bulk_tmp_table) - { - if ( - oracle_share->same_db_table_name && - share->link_statuses[all_link_idx] != SPIDER_LINK_STATUS_RECOVERY - ) { - exec_update_sql = &insert_sql; - } else if (!spider->result_list.upd_tmp_tbls[link_idx]) - { - DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); - } else { - exec_update_sql = &spider->result_list.insert_sqls[link_idx]; - if ((error_num = restore_sql_from_bulk_tmp_table(exec_update_sql, - spider->result_list.upd_tmp_tbls[link_idx]))) - { - DBUG_RETURN(error_num); - } - } - } else { - if ( - oracle_share->same_db_table_name && - share->link_statuses[all_link_idx] != SPIDER_LINK_STATUS_RECOVERY - ) { - exec_update_sql = &update_sql; - } else { - exec_update_sql = &spider->result_list.update_sqls[link_idx]; - } - } - DBUG_PRINT("info",("spider exec_update_sql=%s", - exec_update_sql->c_ptr_safe())); - } else if (sql_type & - (SPIDER_SQL_TYPE_UPDATE_SQL | SPIDER_SQL_TYPE_DELETE_SQL)) - { - if (oracle_share->same_db_table_name || link_idx == first_link_idx) - exec_update_sql = &update_sql; - else { - exec_update_sql = &spider->result_list.update_sqls[link_idx]; - if (exec_update_sql->copy(update_sql)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - tmp_pos = exec_update_sql->length(); - exec_update_sql->length(table_name_pos); - append_table_name_with_adjusting(exec_update_sql, link_idx, - sql_type); - exec_update_sql->length(tmp_pos); - } - DBUG_PRINT("info",("spider exec_update_sql=%s", - exec_update_sql->c_ptr_safe())); - } - if (sql_type & SPIDER_SQL_TYPE_HANDLER) - { - if (spider->m_handler_id[link_idx] == ha_sql_handler_id) - exec_ha_sql = &ha_sql; - else { - exec_ha_sql = &result_list->sqls[link_idx]; - if (exec_ha_sql->copy(ha_sql)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - else { - tmp_pos = exec_ha_sql->length(); - exec_ha_sql->length(ha_table_name_pos); - append_table_name_with_adjusting(exec_ha_sql, link_idx, - SPIDER_SQL_TYPE_HANDLER); - exec_ha_sql->length(tmp_pos); - } - } - DBUG_PRINT("info",("spider exec_ha_sql=%s", - exec_ha_sql->c_ptr_safe())); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::set_sql_for_exec( - spider_db_copy_table *tgt_ct, - ulong sql_type -) { - spider_oracle_copy_table *oracle_ct = (spider_oracle_copy_table *) tgt_ct; - DBUG_ENTER("spider_oracle_handler::set_sql_for_exec"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_INSERT_SQL: - exec_insert_sql = &oracle_ct->sql; - break; - default: - DBUG_ASSERT(0); - break; - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::execute_sql( - ulong sql_type, - SPIDER_CONN *conn, - int quick_mode, - int *need_mon -) { - spider_string *tgt_sql; - uint tgt_length; - DBUG_ENTER("spider_oracle_handler::execute_sql"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - DBUG_PRINT("info",("spider SPIDER_SQL_TYPE_SELECT_SQL")); - tgt_sql = exec_sql; - tgt_length = tgt_sql->length(); - if (table_lock_mode) - { - DBUG_PRINT("info",("spider table_lock_mode=%d", table_lock_mode)); - spider_db_oracle *db_conn = (spider_db_oracle *) conn->db_conn; - db_conn->table_lock_mode = table_lock_mode; - db_conn->exec_lock_sql = exec_lock_sql; - table_lock_mode = 0; - } - break; - case SPIDER_SQL_TYPE_INSERT_SQL: - DBUG_PRINT("info",("spider SPIDER_SQL_TYPE_SELECT_SQL")); - tgt_sql = exec_insert_sql; - tgt_length = tgt_sql->length(); - break; - case SPIDER_SQL_TYPE_UPDATE_SQL: - case SPIDER_SQL_TYPE_DELETE_SQL: - case SPIDER_SQL_TYPE_BULK_UPDATE_SQL: - DBUG_PRINT("info",("spider %s", - sql_type == SPIDER_SQL_TYPE_UPDATE_SQL ? "SPIDER_SQL_TYPE_UPDATE_SQL" : - sql_type == SPIDER_SQL_TYPE_DELETE_SQL ? "SPIDER_SQL_TYPE_DELETE_SQL" : - "SPIDER_SQL_TYPE_BULK_UPDATE_SQL" - )); - tgt_sql = exec_update_sql; - tgt_length = tgt_sql->length(); - break; - case SPIDER_SQL_TYPE_TMP_SQL: - DBUG_PRINT("info",("spider SPIDER_SQL_TYPE_TMP_SQL")); - tgt_sql = exec_tmp_sql; - tgt_length = tgt_sql->length(); - break; - case SPIDER_SQL_TYPE_DROP_TMP_TABLE_SQL: - DBUG_PRINT("info",("spider SPIDER_SQL_TYPE_DROP_TMP_TABLE_SQL")); - tgt_sql = exec_tmp_sql; - tgt_length = tmp_sql_pos5; - break; - case SPIDER_SQL_TYPE_HANDLER: - DBUG_PRINT("info",("spider SPIDER_SQL_TYPE_HANDLER")); - tgt_sql = exec_ha_sql; - tgt_length = tgt_sql->length(); - break; - default: - /* nothing to do */ - DBUG_PRINT("info",("spider default")); - DBUG_RETURN(0); - } - DBUG_RETURN(spider_db_query( - conn, - tgt_sql->ptr(), - tgt_length, - quick_mode, - need_mon - )); -} - -int spider_oracle_handler::reset() -{ - DBUG_ENTER("spider_oracle_handler::reset"); - DBUG_PRINT("info",("spider this=%p", this)); - update_sql.length(0); - DBUG_RETURN(0); -} - -int spider_oracle_handler::sts_mode_exchange( - int sts_mode -) { - DBUG_ENTER("spider_oracle_handler::sts_mode_exchange"); - DBUG_PRINT("info",("spider sts_mode=%d", sts_mode)); - DBUG_RETURN(1); -} - -int spider_oracle_handler::show_table_status( - int link_idx, - int sts_mode, - uint flag -) { - int error_num; - SPIDER_CONN *conn = spider->conns[link_idx]; - SPIDER_DB_RESULT *res; - SPIDER_SHARE *share = spider->share; - uint pos = (2 * spider->conn_link_idx[link_idx]); - ulonglong auto_increment_value = 0; - DBUG_ENTER("spider_oracle_handler::show_table_status"); - DBUG_PRINT("info",("spider sts_mode=%d", sts_mode)); - if ( - (flag & HA_STATUS_AUTO) && - (error_num = show_autoinc(link_idx)) - ) { - DBUG_RETURN(error_num); - } - - if (sts_mode == 1) - { - if (!share->stat.records) - share->stat.records = 10000; - share->stat.mean_rec_length = 65535; - share->stat.data_file_length = 65535; - share->stat.max_data_file_length = 65535; - share->stat.index_file_length = 65535; - share->stat.create_time = (time_t) 0; - share->stat.update_time = (time_t) 0; - share->stat.check_time = (time_t) 0; - } else { - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = &spider->need_mons[link_idx]; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - if ( - (error_num = spider_db_set_names(spider, conn, link_idx)) || - ( - spider_db_query( - conn, - oracle_share->show_table_status[1 + pos].ptr(), - oracle_share->show_table_status[1 + pos].length(), - -1, - &spider->need_mons[link_idx]) && - (error_num = spider_db_errorno(conn)) - ) - ) { - if ( - error_num == ER_SPIDER_REMOTE_SERVER_GONE_AWAY_NUM && - !conn->disable_reconnect - ) { - /* retry */ - if ((error_num = spider_db_ping(spider, conn, link_idx))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(error_num); - } - if ((error_num = spider_db_set_names(spider, conn, link_idx))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(error_num); - } - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - if (spider_db_query( - conn, - oracle_share->show_table_status[1 + pos].ptr(), - oracle_share->show_table_status[1 + pos].length(), - -1, - &spider->need_mons[link_idx]) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - DBUG_RETURN(spider_db_errorno(conn)); - } - } else { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(error_num); - } - } - st_spider_db_request_key request_key; - request_key.spider_thread_id = spider->wide_handler->trx->spider_thread_id; - request_key.query_id = spider->wide_handler->trx->thd->query_id; - request_key.handler = spider; - request_key.request_id = 1; - request_key.next = NULL; - if (!(res = conn->db_conn->store_result(NULL, &request_key, &error_num))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - if (error_num || (error_num = spider_db_errorno(conn))) - DBUG_RETURN(error_num); - else - DBUG_RETURN(ER_QUERY_ON_FOREIGN_DATA_SOURCE); - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - error_num = res->fetch_table_status( - sts_mode, - share->stat - ); - auto_increment_value = share->stat.auto_increment_value; - res->free_result(); - delete res; - if (error_num) - DBUG_RETURN(error_num); - } - if (auto_increment_value > share->lgtm_tblhnd_share->auto_increment_value) - { - share->lgtm_tblhnd_share->auto_increment_value = auto_increment_value; - DBUG_PRINT("info",("spider auto_increment_value=%llu", - share->lgtm_tblhnd_share->auto_increment_value)); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::crd_mode_exchange( - int crd_mode -) { - DBUG_ENTER("spider_oracle_handler::crd_mode_exchange"); - DBUG_PRINT("info",("spider crd_mode=%d", crd_mode)); - DBUG_RETURN(1); -} - -int spider_oracle_handler::show_index( - int link_idx, - int crd_mode -) { - int error_num; - SPIDER_CONN *conn = spider->conns[link_idx]; - SPIDER_SHARE *share = spider->share; - TABLE *table = spider->get_table(); - SPIDER_DB_RESULT *res; - int roop_count; - longlong *tmp_cardinality; - uint pos = (2 * spider->conn_link_idx[link_idx]); - DBUG_ENTER("spider_oracle_handler::show_index"); - DBUG_PRINT("info",("spider crd_mode=%d", crd_mode)); - if (crd_mode == 1) - { - for (roop_count = 0, tmp_cardinality = share->cardinality; - roop_count < (int) table->s->fields; - roop_count++, tmp_cardinality++) - { - if (!spider_bit_is_set(share->cardinality_upd, roop_count)) - { - DBUG_PRINT("info", - ("spider init column cardinality id=%d", roop_count)); - *tmp_cardinality = 1; - } - } - } else { - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = &spider->need_mons[link_idx]; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - if ( - (error_num = spider_db_set_names(spider, conn, link_idx)) || - ( - spider_db_query( - conn, - oracle_share->show_index[1 + pos].ptr(), - oracle_share->show_index[1 + pos].length(), - -1, - &spider->need_mons[link_idx]) && - (error_num = spider_db_errorno(conn)) - ) - ) { - if ( - error_num == ER_SPIDER_REMOTE_SERVER_GONE_AWAY_NUM && - !conn->disable_reconnect - ) { - /* retry */ - if ((error_num = spider_db_ping(spider, conn, link_idx))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(error_num); - } - if ((error_num = spider_db_set_names(spider, conn, link_idx))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(error_num); - } - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - if (spider_db_query( - conn, - oracle_share->show_index[1 + pos].ptr(), - oracle_share->show_index[1 + pos].length(), - -1, - &spider->need_mons[link_idx]) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - DBUG_RETURN(spider_db_errorno(conn)); - } - } else { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(error_num); - } - } - st_spider_db_request_key request_key; - request_key.spider_thread_id = spider->wide_handler->trx->spider_thread_id; - request_key.query_id = spider->wide_handler->trx->thd->query_id; - request_key.handler = spider; - request_key.request_id = 1; - request_key.next = NULL; - if (!(res = conn->db_conn->store_result(NULL, &request_key, &error_num))) - { - if (error_num || (error_num = spider_db_errorno(conn))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(error_num); - } - /* no record is ok */ - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - if (res) - { - error_num = res->fetch_table_cardinality( - crd_mode, - table, - share->cardinality, - share->cardinality_upd, - share->bitmap_size - ); - } - for (roop_count = 0, tmp_cardinality = share->cardinality; - roop_count < (int) table->s->fields; - roop_count++, tmp_cardinality++) - { - if (!spider_bit_is_set(share->cardinality_upd, roop_count)) - { - DBUG_PRINT("info", - ("spider init column cardinality id=%d", roop_count)); - *tmp_cardinality = 1; - } - } - if (res) - { - res->free_result(); - delete res; - } - if (error_num) - DBUG_RETURN(error_num); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::show_records( - int link_idx -) { - int error_num; - SPIDER_CONN *conn = spider->conns[link_idx]; - SPIDER_DB_RESULT *res; - SPIDER_SHARE *share = spider->share; - uint pos = spider->conn_link_idx[link_idx]; - DBUG_ENTER("spider_oracle_handler::show_records"); - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = &spider->need_mons[link_idx]; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - if ( - (error_num = spider_db_set_names(spider, conn, link_idx)) || - ( - spider_db_query( - conn, - oracle_share->show_records[pos].ptr(), - oracle_share->show_records[pos].length(), - -1, - &spider->need_mons[link_idx]) && - (error_num = spider_db_errorno(conn)) - ) - ) { - if ( - error_num == ER_SPIDER_REMOTE_SERVER_GONE_AWAY_NUM && - !conn->disable_reconnect - ) { - /* retry */ - if ((error_num = spider_db_ping(spider, conn, link_idx))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_PRINT("info", ("spider error_num=%d 1", error_num)); - DBUG_RETURN(error_num); - } - if ((error_num = spider_db_set_names(spider, conn, link_idx))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_PRINT("info", ("spider error_num=%d 2", error_num)); - DBUG_RETURN(error_num); - } - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - if (spider_db_query( - conn, - oracle_share->show_records[pos].ptr(), - oracle_share->show_records[pos].length(), - -1, - &spider->need_mons[link_idx]) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - DBUG_PRINT("info", ("spider error_num=%d 3", error_num)); - DBUG_RETURN(spider_db_errorno(conn)); - } - } else { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_PRINT("info", ("spider error_num=%d 4", error_num)); - DBUG_RETURN(error_num); - } - } - st_spider_db_request_key request_key; - request_key.spider_thread_id = spider->wide_handler->trx->spider_thread_id; - request_key.query_id = spider->wide_handler->trx->thd->query_id; - request_key.handler = spider; - request_key.request_id = 1; - request_key.next = NULL; - if (!(res = conn->db_conn->store_result(NULL, &request_key, &error_num))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - if (error_num) - { - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_PRINT("info", ("spider error_num=%d 5", error_num)); - DBUG_RETURN(error_num); - } - else if (error_num || (error_num = spider_db_errorno(conn))) - { - DBUG_PRINT("info", ("spider error_num=%d 6", error_num)); - DBUG_RETURN(error_num); - } else { - DBUG_PRINT("info", ("spider error_num=%d 7", - ER_QUERY_ON_FOREIGN_DATA_SOURCE)); - DBUG_RETURN(ER_QUERY_ON_FOREIGN_DATA_SOURCE); - } - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - error_num = res->fetch_table_records( - 1, - spider->table_rows - ); - res->free_result(); - delete res; - if (error_num) - { - DBUG_PRINT("info", ("spider error_num=%d 7", error_num)); - DBUG_RETURN(error_num); - } - spider->wide_handler->trx->direct_aggregate_count++; - DBUG_RETURN(0); -} - -int spider_oracle_handler::show_autoinc( - int link_idx -) { - int error_num; - SPIDER_CONN *conn = spider->conns[link_idx]; - SPIDER_DB_RESULT *res; - SPIDER_SHARE *share = spider->share; - uint pos = spider->conn_link_idx[link_idx]; - ulonglong auto_increment_value; - DBUG_ENTER("spider_oracle_handler::show_autoinc"); - if (!oracle_share->show_autoinc) - DBUG_RETURN(0); - - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = &spider->need_mons[link_idx]; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - if ( - (error_num = spider_db_set_names(spider, conn, link_idx)) || - ( - spider_db_query( - conn, - oracle_share->show_autoinc[pos].ptr(), - oracle_share->show_autoinc[pos].length(), - -1, - &spider->need_mons[link_idx]) && - (error_num = spider_db_errorno(conn)) - ) - ) { - if ( - error_num == ER_SPIDER_REMOTE_SERVER_GONE_AWAY_NUM && - !conn->disable_reconnect - ) { - /* retry */ - if ((error_num = spider_db_ping(spider, conn, link_idx))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_PRINT("info", ("spider error_num=%d 1", error_num)); - DBUG_RETURN(error_num); - } - if ((error_num = spider_db_set_names(spider, conn, link_idx))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_PRINT("info", ("spider error_num=%d 2", error_num)); - DBUG_RETURN(error_num); - } - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - if (spider_db_query( - conn, - oracle_share->show_records[pos].ptr(), - oracle_share->show_records[pos].length(), - -1, - &spider->need_mons[link_idx]) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - DBUG_PRINT("info", ("spider error_num=%d 3", error_num)); - DBUG_RETURN(spider_db_errorno(conn)); - } - } else { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_PRINT("info", ("spider error_num=%d 4", error_num)); - DBUG_RETURN(error_num); - } - } - st_spider_db_request_key request_key; - request_key.spider_thread_id = spider->wide_handler->trx->spider_thread_id; - request_key.query_id = spider->wide_handler->trx->thd->query_id; - request_key.handler = spider; - request_key.request_id = 1; - request_key.next = NULL; - if (!(res = conn->db_conn->store_result(NULL, &request_key, &error_num))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - if (error_num) - { - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_PRINT("info", ("spider error_num=%d 5", error_num)); - DBUG_RETURN(error_num); - } - else if ((error_num = spider_db_errorno(conn))) - { - DBUG_PRINT("info", ("spider error_num=%d 6", error_num)); - DBUG_RETURN(error_num); - } else { - DBUG_PRINT("info", ("spider error_num=%d 7", - ER_QUERY_ON_FOREIGN_DATA_SOURCE)); - DBUG_RETURN(ER_QUERY_ON_FOREIGN_DATA_SOURCE); - } - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - error_num = res->fetch_table_records( - 1, - auto_increment_value - ); - res->free_result(); - delete res; - if (error_num) - { - DBUG_PRINT("info", ("spider error_num=%d 7", error_num)); - DBUG_RETURN(error_num); - } - if (auto_increment_value >= - share->lgtm_tblhnd_share->auto_increment_value) - { - share->lgtm_tblhnd_share->auto_increment_value = - auto_increment_value + 1; - DBUG_PRINT("info",("spider auto_increment_value=%llu", - share->lgtm_tblhnd_share->auto_increment_value)); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::show_last_insert_id( - int link_idx, - ulonglong &last_insert_id -) { - int error_num; - SPIDER_CONN *conn = spider->conns[link_idx]; - SPIDER_DB_RESULT *res; - uint pos = spider->conn_link_idx[link_idx]; - spider_db_oracle *db_oracle = (spider_db_oracle *) conn->db_conn; - DBUG_ENTER("spider_oracle_handler::show_last_insert_id"); - if (!oracle_share->show_last_insert_id) - { - DBUG_ASSERT(0); - last_insert_id = 0; - db_oracle->stored_last_insert_id = 0; - DBUG_RETURN(0); - } - - if ( - spider_db_query( - conn, - oracle_share->show_last_insert_id[pos].ptr(), - oracle_share->show_last_insert_id[pos].length(), - -1, - &spider->need_mons[link_idx]) && - (error_num = spider_db_errorno(conn)) - ) { - DBUG_PRINT("info", ("spider error_num=%d 4", error_num)); - DBUG_RETURN(error_num); - } - st_spider_db_request_key request_key; - request_key.spider_thread_id = spider->wide_handler->trx->spider_thread_id; - request_key.query_id = spider->wide_handler->trx->thd->query_id; - request_key.handler = spider; - request_key.request_id = 1; - request_key.next = NULL; - if (!(res = conn->db_conn->store_result(NULL, &request_key, &error_num))) - { - if (error_num || (error_num = spider_db_errorno(conn))) - { - DBUG_PRINT("info", ("spider error_num=%d 5", error_num)); - DBUG_RETURN(error_num); - } else { - DBUG_PRINT("info", ("spider error_num=%d 6", - ER_QUERY_ON_FOREIGN_DATA_SOURCE)); - DBUG_RETURN(ER_QUERY_ON_FOREIGN_DATA_SOURCE); - } - } - error_num = res->fetch_table_records( - 1, - last_insert_id - ); - res->free_result(); - delete res; - if (error_num) - { - DBUG_PRINT("info", ("spider error_num=%d 7", error_num)); - DBUG_RETURN(error_num); - } - db_oracle->stored_last_insert_id = last_insert_id; - DBUG_RETURN(0); -} - -ha_rows spider_oracle_handler::explain_select( - const key_range *start_key, - const key_range *end_key, - int link_idx -) { - int error_num; - SPIDER_CONN *conn = spider->conns[link_idx]; - SPIDER_RESULT_LIST *result_list = &spider->result_list; - spider_string *str = &result_list->sqls[link_idx]; - SPIDER_DB_RESULT *res; - ha_rows rows; - spider_db_handler *dbton_hdl = spider->dbton_handler[conn->dbton_id]; - DBUG_ENTER("spider_oracle_handler::explain_select"); - if ((error_num = dbton_hdl->append_explain_select_part( - start_key, end_key, SPIDER_SQL_TYPE_OTHER_SQL, link_idx))) - { - my_errno = error_num; - DBUG_RETURN(HA_POS_ERROR); - } - - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = &spider->need_mons[link_idx]; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - spider->share); - if ( - (error_num = spider_db_set_names(spider, conn, link_idx)) || - ( - spider_db_query( - conn, - str->ptr(), - str->length(), - -1, - &spider->need_mons[link_idx]) && - (error_num = spider_db_errorno(conn)) - ) - ) { - if ( - error_num == ER_SPIDER_REMOTE_SERVER_GONE_AWAY_NUM && - !conn->disable_reconnect - ) { - /* retry */ - if ((error_num = spider_db_ping(spider, conn, link_idx))) - { - if (spider->check_error_mode(error_num)) - my_errno = error_num; - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(HA_POS_ERROR); - } - if ((error_num = spider_db_set_names(spider, conn, link_idx))) - { - if (spider->check_error_mode(error_num)) - my_errno = error_num; - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(HA_POS_ERROR); - } - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - spider->share); - if (spider_db_query( - conn, - str->ptr(), - str->length(), - -1, - &spider->need_mons[link_idx]) - ) { - error_num = spider_db_errorno(conn); - if (spider->check_error_mode(error_num)) - my_errno = error_num; - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(HA_POS_ERROR); - } - } else { - if (spider->check_error_mode(error_num)) - my_errno = error_num; - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(HA_POS_ERROR); - } - } - st_spider_db_request_key request_key; - request_key.spider_thread_id = spider->wide_handler->trx->spider_thread_id; - request_key.query_id = spider->wide_handler->trx->thd->query_id; - request_key.handler = spider; - request_key.request_id = 1; - request_key.next = NULL; - if (!(res = conn->db_conn->store_result(NULL, &request_key, &error_num))) - { - if (error_num || (error_num = spider_db_errorno(conn))) - { - if (spider->check_error_mode(error_num)) - my_errno = error_num; - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(HA_POS_ERROR); - } else { - my_errno = ER_QUERY_ON_FOREIGN_DATA_SOURCE; - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(HA_POS_ERROR); - } - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - error_num = res->fetch_table_records( - 2, - rows - ); - res->free_result(); - delete res; - if (error_num) - { - my_errno = error_num; - DBUG_RETURN(HA_POS_ERROR); - } - DBUG_RETURN(rows); -} - -int spider_oracle_handler::lock_tables( - int link_idx -) { - int error_num; - SPIDER_CONN *conn = spider->conns[link_idx]; - spider_string *str = &sql; - DBUG_ENTER("spider_oracle_handler::lock_tables"); - do { - str->length(0); - if ((error_num = conn->db_conn->append_lock_tables(str))) - { - DBUG_RETURN(error_num); - } - if (str->length()) - { - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = &spider->need_mons[link_idx]; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - if ((error_num = spider_db_set_names(spider, conn, link_idx))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(error_num); - } - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - spider->share); - if (spider_db_query( - conn, - str->ptr(), - str->length(), - -1, - &spider->need_mons[link_idx]) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - DBUG_RETURN(spider_db_errorno(conn)); - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - } - if (!conn->table_locked) - { - conn->table_locked = TRUE; - spider->wide_handler->trx->locked_connections++; - } - } while (str->length()); - DBUG_RETURN(0); -} - -int spider_oracle_handler::unlock_tables( - int link_idx -) { - int error_num; - SPIDER_CONN *conn = spider->conns[link_idx]; - DBUG_ENTER("spider_oracle_handler::unlock_tables"); - if (conn->table_locked) - { - if ((error_num = conn->db_conn->commit(&spider->need_mons[link_idx]))) - { - DBUG_RETURN(error_num); - } - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::disable_keys( - SPIDER_CONN *conn, - int link_idx -) { - int error_num; - SPIDER_SHARE *share = spider->share; - spider_string *str = &spider->result_list.sqls[link_idx]; - DBUG_ENTER("spider_oracle_handler::disable_keys"); - DBUG_PRINT("info",("spider this=%p", this)); - str->length(0); - if ((error_num = append_disable_keys_part(SPIDER_SQL_TYPE_OTHER_HS, - link_idx))) - { - DBUG_RETURN(error_num); - } - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = &spider->need_mons[link_idx]; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - if ((error_num = spider_db_set_names(spider, conn, link_idx))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(error_num); - } - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - if (spider_db_query( - conn, - str->ptr(), - str->length(), - -1, - &spider->need_mons[link_idx]) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - error_num = spider_db_errorno(conn); - DBUG_RETURN(error_num); - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(0); -} - -int spider_oracle_handler::enable_keys( - SPIDER_CONN *conn, - int link_idx -) { - int error_num; - SPIDER_SHARE *share = spider->share; - spider_string *str = &spider->result_list.sqls[link_idx]; - DBUG_ENTER("spider_oracle_handler::enable_keys"); - DBUG_PRINT("info",("spider this=%p", this)); - str->length(0); - if ((error_num = append_enable_keys_part(SPIDER_SQL_TYPE_OTHER_HS, - link_idx))) - { - DBUG_RETURN(error_num); - } - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = &spider->need_mons[link_idx]; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - if ((error_num = spider_db_set_names(spider, conn, link_idx))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(error_num); - } - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - if (spider_db_query( - conn, - str->ptr(), - str->length(), - -1, - &spider->need_mons[link_idx]) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - error_num = spider_db_errorno(conn); - DBUG_RETURN(error_num); - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(0); -} - -int spider_oracle_handler::check_table( - SPIDER_CONN *conn, - int link_idx, - HA_CHECK_OPT* check_opt -) { - int error_num; - SPIDER_SHARE *share = spider->share; - spider_string *str = &spider->result_list.sqls[link_idx]; - DBUG_ENTER("spider_oracle_handler::check_table"); - DBUG_PRINT("info",("spider this=%p", this)); - str->length(0); - if ((error_num = append_check_table_part(SPIDER_SQL_TYPE_OTHER_HS, - link_idx, check_opt))) - { - DBUG_RETURN(error_num); - } - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = &spider->need_mons[link_idx]; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - if ((error_num = spider_db_set_names(spider, conn, link_idx))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(error_num); - } - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - if (spider_db_query( - conn, - str->ptr(), - str->length(), - -1, - &spider->need_mons[link_idx]) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - error_num = spider_db_errorno(conn); - DBUG_RETURN(error_num); - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(0); -} - -int spider_oracle_handler::repair_table( - SPIDER_CONN *conn, - int link_idx, - HA_CHECK_OPT* check_opt -) { - int error_num; - SPIDER_SHARE *share = spider->share; - spider_string *str = &spider->result_list.sqls[link_idx]; - DBUG_ENTER("spider_oracle_handler::repair_table"); - DBUG_PRINT("info",("spider this=%p", this)); - str->length(0); - if ((error_num = append_repair_table_part(SPIDER_SQL_TYPE_OTHER_HS, - link_idx, check_opt))) - { - DBUG_RETURN(error_num); - } - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = &spider->need_mons[link_idx]; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - if ((error_num = spider_db_set_names(spider, conn, link_idx))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(error_num); - } - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - if (spider_db_query( - conn, - str->ptr(), - str->length(), - -1, - &spider->need_mons[link_idx]) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - error_num = spider_db_errorno(conn); - DBUG_RETURN(error_num); - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(0); -} - -int spider_oracle_handler::analyze_table( - SPIDER_CONN *conn, - int link_idx -) { - int error_num; - SPIDER_SHARE *share = spider->share; - spider_string *str = &spider->result_list.sqls[link_idx]; - DBUG_ENTER("spider_oracle_handler::analyze_table"); - DBUG_PRINT("info",("spider this=%p", this)); - str->length(0); - if ((error_num = append_analyze_table_part(SPIDER_SQL_TYPE_OTHER_HS, - link_idx))) - { - DBUG_RETURN(error_num); - } - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = &spider->need_mons[link_idx]; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - if ((error_num = spider_db_set_names(spider, conn, link_idx))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(error_num); - } - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - if (spider_db_query( - conn, - str->ptr(), - str->length(), - -1, - &spider->need_mons[link_idx]) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - error_num = spider_db_errorno(conn); - DBUG_RETURN(error_num); - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(0); -} - -int spider_oracle_handler::optimize_table( - SPIDER_CONN *conn, - int link_idx -) { - int error_num; - SPIDER_SHARE *share = spider->share; - spider_string *str = &spider->result_list.sqls[link_idx]; - DBUG_ENTER("spider_oracle_handler::optimize_table"); - DBUG_PRINT("info",("spider this=%p", this)); - str->length(0); - if ((error_num = append_optimize_table_part(SPIDER_SQL_TYPE_OTHER_HS, - link_idx))) - { - DBUG_RETURN(error_num); - } - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = &spider->need_mons[link_idx]; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - if ((error_num = spider_db_set_names(spider, conn, link_idx))) - { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(error_num); - } - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - if (spider_db_query( - conn, - str->ptr(), - str->length(), - -1, - &spider->need_mons[link_idx]) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - error_num = spider_db_errorno(conn); - DBUG_RETURN(error_num); - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(0); -} - -int spider_oracle_handler::flush_tables( - SPIDER_CONN *conn, - int link_idx, - bool lock -) { - int error_num; - SPIDER_SHARE *share = spider->share; - spider_string *str = &spider->result_list.sqls[link_idx]; - DBUG_ENTER("spider_oracle_handler::flush_tables"); - DBUG_PRINT("info",("spider this=%p", this)); - str->length(0); - if ((error_num = append_flush_tables_part(SPIDER_SQL_TYPE_OTHER_HS, - link_idx, lock))) - { - DBUG_RETURN(error_num); - } - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = &spider->need_mons[link_idx]; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - if (spider_db_query( - conn, - str->ptr(), - str->length(), - -1, - &spider->need_mons[link_idx]) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - error_num = spider_db_errorno(conn); - DBUG_RETURN(error_num); - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(0); -} - -int spider_oracle_handler::flush_logs( - SPIDER_CONN *conn, - int link_idx -) { - int error_num; - SPIDER_SHARE *share = spider->share; - DBUG_ENTER("spider_oracle_handler::flush_logs"); - DBUG_PRINT("info",("spider this=%p", this)); - spider_conn_set_timeout_from_share(conn, link_idx, - spider->wide_handler->trx->thd, - share); - pthread_mutex_assert_not_owner(&conn->mta_conn_mutex); - pthread_mutex_lock(&conn->mta_conn_mutex); - conn->need_mon = &spider->need_mons[link_idx]; - DBUG_ASSERT(!conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = TRUE; - conn->mta_conn_mutex_unlock_later = TRUE; - if (spider_db_query( - conn, - SPIDER_SQL_FLUSH_LOGS_STR, - SPIDER_SQL_FLUSH_LOGS_LEN, - -1, - &spider->need_mons[link_idx]) - ) { - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - error_num = spider_db_errorno(conn); - DBUG_RETURN(error_num); - } - DBUG_ASSERT(conn->mta_conn_mutex_lock_already); - DBUG_ASSERT(conn->mta_conn_mutex_unlock_later); - conn->mta_conn_mutex_lock_already = FALSE; - conn->mta_conn_mutex_unlock_later = FALSE; - pthread_mutex_unlock(&conn->mta_conn_mutex); - DBUG_RETURN(0); -} - -int spider_oracle_handler::insert_opened_handler( - SPIDER_CONN *conn, - int link_idx -) { - spider_db_oracle *db_conn = (spider_db_oracle *) conn->db_conn; - SPIDER_LINK_FOR_HASH *tmp_link_for_hash = &link_for_hash[link_idx]; - DBUG_ASSERT(tmp_link_for_hash->spider == spider); - DBUG_ASSERT(tmp_link_for_hash->link_idx == link_idx); - uint old_elements = db_conn->handler_open_array.max_element; - DBUG_ENTER("spider_oracle_handler::insert_opened_handler"); - DBUG_PRINT("info",("spider this=%p", this)); - if (insert_dynamic(&db_conn->handler_open_array, - (uchar*) &tmp_link_for_hash)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - if (db_conn->handler_open_array.max_element > old_elements) - { - spider_alloc_calc_mem(spider_current_trx, - db_conn->handler_open_array, - (db_conn->handler_open_array.max_element - old_elements) * - db_conn->handler_open_array.size_of_element); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::delete_opened_handler( - SPIDER_CONN *conn, - int link_idx -) { - spider_db_oracle *db_conn = (spider_db_oracle *) conn->db_conn; - uint roop_count, elements = db_conn->handler_open_array.elements; - SPIDER_LINK_FOR_HASH *tmp_link_for_hash; - DBUG_ENTER("spider_oracle_handler::delete_opened_handler"); - DBUG_PRINT("info",("spider this=%p", this)); - for (roop_count = 0; roop_count < elements; roop_count++) - { - get_dynamic(&db_conn->handler_open_array, (uchar *) &tmp_link_for_hash, - roop_count); - if (tmp_link_for_hash == &link_for_hash[link_idx]) - { - delete_dynamic_element(&db_conn->handler_open_array, roop_count); - break; - } - } - DBUG_ASSERT(roop_count < elements); - DBUG_RETURN(0); -} - -int spider_oracle_handler::sync_from_clone_source( - spider_db_handler *dbton_hdl -) { - DBUG_ENTER("spider_oracle_handler::sync_from_clone_source"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(0); -} - -bool spider_oracle_handler::support_use_handler( - int use_handler -) { - DBUG_ENTER("spider_oracle_handler::support_use_handler"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(FALSE); -} - -void spider_oracle_handler::minimum_select_bitmap_create() -{ - TABLE *table = spider->get_table(); - Field **field_p; - DBUG_ENTER("spider_oracle_handler::minimum_select_bitmap_create"); - memset(minimum_select_bitmap, 0, no_bytes_in_map(table->read_set)); - if ( - spider->use_index_merge || - spider->is_clone - ) { - /* need preparing for cmp_ref */ - TABLE_SHARE *table_share = table->s; - if ( - table_share->primary_key == MAX_KEY - ) { - /* need all columns */ - memset(minimum_select_bitmap, 0xFF, no_bytes_in_map(table->read_set)); - DBUG_VOID_RETURN; - } else { - /* need primary key columns */ - uint roop_count; - KEY *key_info; - KEY_PART_INFO *key_part; - Field *field; - key_info = &table_share->key_info[table_share->primary_key]; - key_part = key_info->key_part; - for (roop_count = 0; - roop_count < spider_user_defined_key_parts(key_info); - roop_count++) - { - field = key_part[roop_count].field; - spider_set_bit(minimum_select_bitmap, field->field_index); - } - } - } - for (field_p = table->field; *field_p; field_p++) - { - uint field_index = (*field_p)->field_index; - if ( - spider_bit_is_set(spider->searched_bitmap, field_index) || - bitmap_is_set(table->read_set, field_index) || - bitmap_is_set(table->write_set, field_index) - ) { - spider_set_bit(minimum_select_bitmap, field_index); - } - } - DBUG_VOID_RETURN; -} - -bool spider_oracle_handler::minimum_select_bit_is_set( - uint field_index -) { - DBUG_ENTER("spider_oracle_handler::minimum_select_bit_is_set"); - DBUG_PRINT("info",("spider field_index=%u", field_index)); - DBUG_PRINT("info",("spider minimum_select_bitmap=%s", - spider_bit_is_set(minimum_select_bitmap, field_index) ? - "TRUE" : "FALSE")); - DBUG_RETURN(spider_bit_is_set(minimum_select_bitmap, field_index)); -} - -void spider_oracle_handler::copy_minimum_select_bitmap( - uchar *bitmap -) { - int roop_count; - TABLE *table = spider->get_table(); - DBUG_ENTER("spider_oracle_handler::copy_minimum_select_bitmap"); - for (roop_count = 0; - roop_count < (int) ((table->s->fields + 7) / 8); - roop_count++) - { - bitmap[roop_count] = - minimum_select_bitmap[roop_count]; - DBUG_PRINT("info",("spider roop_count=%d", roop_count)); - DBUG_PRINT("info",("spider bitmap=%d", - bitmap[roop_count])); - } - DBUG_VOID_RETURN; -} - -int spider_oracle_handler::init_union_table_name_pos() -{ - DBUG_ENTER("spider_oracle_handler::init_union_table_name_pos"); - DBUG_PRINT("info",("spider this=%p", this)); - if (!union_table_name_pos_first) - { - if (!spider_bulk_malloc(spider_current_trx, SPD_MID_ORACLE_HANDLER_INIT_UNION_TABLE_NAME_POS_1, MYF(MY_WME), - &union_table_name_pos_first, (uint) (sizeof(SPIDER_INT_HLD)), - NullS) - ) { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - union_table_name_pos_first->next = NULL; - } - union_table_name_pos_current = union_table_name_pos_first; - union_table_name_pos_current->tgt_num = 0; - DBUG_RETURN(0); -} - -int spider_oracle_handler::set_union_table_name_pos() -{ - DBUG_ENTER("spider_oracle_handler::set_union_table_name_pos"); - DBUG_PRINT("info",("spider this=%p", this)); - if (union_table_name_pos_current->tgt_num >= SPIDER_INT_HLD_TGT_SIZE) - { - if (!union_table_name_pos_current->next) - { - if (!spider_bulk_malloc(spider_current_trx, SPD_MID_ORACLE_HANDLER_SET_UNION_TABLE_NAME_POS_1, MYF(MY_WME), - &union_table_name_pos_current->next, (uint) (sizeof(SPIDER_INT_HLD)), - NullS) - ) { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - union_table_name_pos_current->next->next = NULL; - } - union_table_name_pos_current = union_table_name_pos_current->next; - union_table_name_pos_current->tgt_num = 0; - } - union_table_name_pos_current->tgt[union_table_name_pos_current->tgt_num] = - table_name_pos; - ++union_table_name_pos_current->tgt_num; - DBUG_RETURN(0); -} - -int spider_oracle_handler::reset_union_table_name( - spider_string *str, - int link_idx, - ulong sql_type -) { - DBUG_ENTER("spider_oracle_handler::reset_union_table_name"); - DBUG_PRINT("info",("spider this=%p", this)); - if (!union_table_name_pos_current) - DBUG_RETURN(0); - - SPIDER_INT_HLD *tmp_pos = union_table_name_pos_first; - uint cur_num, pos_backup = str->length(); - while(TRUE) - { - for (cur_num = 0; cur_num < tmp_pos->tgt_num; ++cur_num) - { - str->length(tmp_pos->tgt[cur_num]); - append_table_name_with_adjusting(str, link_idx, sql_type); - } - if (tmp_pos == union_table_name_pos_current) - break; - tmp_pos = tmp_pos->next; - } - str->length(pos_backup); - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_from_and_tables_part( - spider_fields *fields, - ulong sql_type -) { - int error_num; - spider_string *str; - SPIDER_TABLE_HOLDER *table_holder; - TABLE_LIST *table_list; - DBUG_ENTER("spider_oracle_handler::append_from_and_tables_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - fields->set_pos_to_first_table_holder(); - table_holder = fields->get_next_table_holder(); - table_list = table_holder->table->pos_in_table_list; - error_num = spider_db_oracle_utility.append_from_and_tables(fields, str, - table_list); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::reappend_tables_part( - spider_fields *fields, - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::reappend_tables_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = spider_db_oracle_utility.reappend_tables(fields, - link_idx_chain, str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_where_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_where_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = spider_db_oracle_utility.append_where(str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_having_part( - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_having_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = spider_db_oracle_utility.append_having(str); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_item_type_part( - Item *item, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields, - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_item_type_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = spider_db_print_item_type(item, NULL, spider, str, - alias, alias_length, spider_dbton_oracle.dbton_id, use_fields, fields); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_list_item_select_part( - List *select, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields, - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_list_item_select_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_list_item_select(select, str, alias, alias_length, - use_fields, fields); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_list_item_select( - List *select, - spider_string *str, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields -) { - int error_num; - uint dbton_id = spider_dbton_oracle.dbton_id, length; - uint32 begin; - List_iterator_fast it(*select); - Item *item; - Field *field; - const char *item_name; - DBUG_ENTER("spider_oracle_handler::append_list_item_select"); - DBUG_PRINT("info",("spider this=%p", this)); - begin = str->length(); - while ((item = it++)) - { - if (item->const_item()) - { - DBUG_PRINT("info",("spider const item")); - continue; - } - if ((error_num = spider_db_print_item_type(item, NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields))) - { - DBUG_RETURN(error_num); - } - field = *(fields->get_next_field_ptr()); - if (field) - { - item_name = SPIDER_field_name_str(field); - length = SPIDER_field_name_length(field); - } else { - item_name = SPIDER_item_name_str(item); - length = SPIDER_item_name_length(item); - } - if (str->reserve( - SPIDER_SQL_COMMA_LEN + /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + - SPIDER_SQL_SPACE_LEN + length - )) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - if ((error_num = spider_db_oracle_utility.append_escaped_name(str, - item_name, length))) - { - DBUG_RETURN(error_num); - } - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - if (begin == str->length()) - { - /* no columns */ - if (str->reserve(SPIDER_SQL_ONE_LEN)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - str->q_append(SPIDER_SQL_ONE_STR, SPIDER_SQL_ONE_LEN); - } else { - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_group_by_part( - ORDER *order, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields, - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_group_by_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_group_by(order, str, alias, alias_length, - use_fields, fields); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_group_by( - ORDER *order, - spider_string *str, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields -) { - int error_num; - uint dbton_id = spider_dbton_oracle.dbton_id; - DBUG_ENTER("spider_oracle_handler::append_group_by"); - DBUG_PRINT("info",("spider this=%p", this)); - if (order) - { - if (str->reserve(SPIDER_SQL_GROUP_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_GROUP_STR, SPIDER_SQL_GROUP_LEN); - for (; order; order = order->next) - { - if ((error_num = spider_db_print_item_type((*order->item), NULL, spider, - str, alias, alias_length, dbton_id, use_fields, fields))) - { - DBUG_RETURN(error_num); - } - if (str->reserve(SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - } - DBUG_RETURN(0); -} - -int spider_oracle_handler::append_order_by_part( - ORDER *order, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields, - ulong sql_type -) { - int error_num; - spider_string *str; - DBUG_ENTER("spider_oracle_handler::append_order_by_part"); - DBUG_PRINT("info",("spider this=%p", this)); - switch (sql_type) - { - case SPIDER_SQL_TYPE_SELECT_SQL: - str = &sql; - break; - default: - DBUG_RETURN(0); - } - error_num = append_order_by(order, str, alias, alias_length, - use_fields, fields); - DBUG_RETURN(error_num); -} - -int spider_oracle_handler::append_order_by( - ORDER *order, - spider_string *str, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields -) { - int error_num; - uint dbton_id = spider_dbton_oracle.dbton_id; - DBUG_ENTER("spider_oracle_handler::append_order_by"); - DBUG_PRINT("info",("spider this=%p", this)); - if (order) - { - if (str->reserve(SPIDER_SQL_ORDER_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN); - for (; order; order = order->next) - { - if ((error_num = spider_db_print_item_type((*order->item), NULL, spider, - str, alias, alias_length, dbton_id, use_fields, fields))) - { - DBUG_RETURN(error_num); - } -#ifdef SPIDER_ORDER_HAS_ENUM_ORDER - if (order->direction == ORDER::ORDER_DESC) -#else - if (!order->asc) -#endif - { - if (str->reserve(SPIDER_SQL_COMMA_LEN + SPIDER_SQL_DESC_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } else { - if (str->reserve(SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - str->length(str->length() - SPIDER_SQL_COMMA_LEN); - } - DBUG_RETURN(0); -} - -spider_oracle_copy_table::spider_oracle_copy_table( - spider_oracle_share *db_share -) : spider_db_copy_table( - db_share -), - oracle_share(db_share), - pos(0), - table_name_pos(0), - pos_diff(0), - table_lock_mode(0), - select_rownum_appended(FALSE), - first_str(NULL), - current_str(NULL) -{ - DBUG_ENTER("spider_oracle_copy_table::spider_oracle_copy_table"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_VOID_RETURN; -} - -spider_oracle_copy_table::~spider_oracle_copy_table() -{ - DBUG_ENTER("spider_oracle_copy_table::~spider_oracle_copy_table"); - DBUG_PRINT("info",("spider this=%p", this)); - while (first_str) - { - current_str = first_str; - first_str = first_str->next; - delete [] current_str; - } - DBUG_VOID_RETURN; -} - -int spider_oracle_copy_table::init() -{ - DBUG_ENTER("spider_oracle_copy_table::init"); - DBUG_PRINT("info",("spider this=%p", this)); - sql.init_calc_mem(SPD_MID_ORACLE_COPY_TABLE_INIT_1); - sql_part.init_calc_mem(SPD_MID_ORACLE_COPY_TABLE_INIT_2); - DBUG_RETURN(0); -} - -void spider_oracle_copy_table::set_sql_charset( - CHARSET_INFO *cs -) { - DBUG_ENTER("spider_oracle_copy_table::set_sql_charset"); - DBUG_PRINT("info",("spider this=%p", this)); - sql.set_charset(cs); - DBUG_VOID_RETURN; -} - -int spider_oracle_copy_table::append_select_str() -{ - DBUG_ENTER("spider_oracle_copy_table::append_select_str"); - DBUG_PRINT("info",("spider this=%p", this)); - if (sql.reserve(SPIDER_SQL_SELECT_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_SELECT_STR, SPIDER_SQL_SELECT_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::append_insert_str( - int insert_flg -) { - DBUG_ENTER("spider_oracle_copy_table::append_insert_str"); - DBUG_PRINT("info",("spider this=%p", this)); - if (sql.reserve(SPIDER_SQL_INSERT_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_INSERT_STR, SPIDER_SQL_INSERT_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::append_table_columns( - TABLE_SHARE *table_share -) { - int error_num; - Field **field; - DBUG_ENTER("spider_oracle_copy_table::append_table_columns"); - DBUG_PRINT("info",("spider this=%p", this)); - for (field = table_share->field; *field; field++) - { - if (sql.reserve(SPIDER_SQL_NAME_QUOTE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - if ((error_num = spider_db_append_name_with_quote_str(&sql, - (*field)->field_name, spider_dbton_oracle.dbton_id))) - DBUG_RETURN(error_num); - if (sql.reserve(SPIDER_SQL_NAME_QUOTE_LEN + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - sql.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - sql.length(sql.length() - SPIDER_SQL_COMMA_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::append_from_str() -{ - DBUG_ENTER("spider_oracle_copy_table::append_from_str"); - DBUG_PRINT("info",("spider this=%p", this)); - if (sql.reserve(SPIDER_SQL_FROM_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::append_table_name( - int link_idx -) { - int error_num; - DBUG_ENTER("spider_oracle_copy_table::append_table_name"); - DBUG_PRINT("info",("spider this=%p", this)); - table_name_pos = sql.length(); - error_num = oracle_share->append_table_name(&sql, link_idx); - store_link_idx = link_idx; - DBUG_RETURN(error_num); -} - -void spider_oracle_copy_table::set_sql_pos() -{ - DBUG_ENTER("spider_oracle_copy_table::set_sql_pos"); - DBUG_PRINT("info",("spider this=%p", this)); - pos = sql.length(); - DBUG_VOID_RETURN; -} - -void spider_oracle_copy_table::set_sql_to_pos() -{ - DBUG_ENTER("spider_oracle_copy_table::set_sql_to_pos"); - DBUG_PRINT("info",("spider this=%p", this)); - sql.length(pos); - DBUG_VOID_RETURN; -} - -int spider_oracle_copy_table::append_copy_where( - spider_db_copy_table *source_ct, - KEY *key_info, - ulong *last_row_pos, - ulong *last_lengths -) { - int error_num, roop_count, roop_count2; - DBUG_ENTER("spider_oracle_copy_table::append_copy_where"); - DBUG_PRINT("info",("spider this=%p", this)); - if (sql.reserve(SPIDER_SQL_WHERE_LEN + SPIDER_SQL_OPEN_PAREN_LEN)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - sql.q_append(SPIDER_SQL_WHERE_STR, SPIDER_SQL_WHERE_LEN); - sql.q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - Field *field; - KEY_PART_INFO *key_part = key_info->key_part; - for (roop_count = spider_user_defined_key_parts(key_info) - 1; - roop_count >= 0; roop_count--) - { - for (roop_count2 = 0; roop_count2 < roop_count; roop_count2++) - { - field = key_part[roop_count2].field; - if ((error_num = copy_key_row(source_ct, - field, &last_row_pos[field->field_index], - &last_lengths[field->field_index], - SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN))) - { - DBUG_RETURN(error_num); - } - } - field = key_part[roop_count2].field; - if ((error_num = copy_key_row(source_ct, - field, &last_row_pos[field->field_index], - &last_lengths[field->field_index], - SPIDER_SQL_GT_STR, SPIDER_SQL_GT_LEN))) - { - DBUG_RETURN(error_num); - } - sql.length(sql.length() - SPIDER_SQL_AND_LEN); - if (sql.reserve(SPIDER_SQL_CLOSE_PAREN_LEN + - SPIDER_SQL_OR_LEN + SPIDER_SQL_OPEN_PAREN_LEN)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - sql.q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); - sql.q_append(SPIDER_SQL_OR_STR, SPIDER_SQL_OR_LEN); - sql.q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - } - sql.length(sql.length() - SPIDER_SQL_OR_LEN - SPIDER_SQL_OPEN_PAREN_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::append_key_order_str( - KEY *key_info, - int start_pos, - bool desc_flg -) { - int length, error_num; - KEY_PART_INFO *key_part; - Field *field; - DBUG_ENTER("spider_oracle_copy_table::append_key_order_str"); - DBUG_PRINT("info",("spider this=%p", this)); - if (select_rownum_appended) - { - if (sql.reserve(SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_SELECT_WRAPPER_TAIL_STR, - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN); - DBUG_RETURN(0); - } - sql_part.length(0); - if (sql_part.reserve(sql.length() + SPIDER_SQL_SELECT_WRAPPER_HEAD_LEN + - SPIDER_SQL_ROW_NUMBER_HEAD_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_SELECT_WRAPPER_HEAD_STR, - SPIDER_SQL_SELECT_WRAPPER_HEAD_LEN); - sql_part.q_append(sql.ptr(), table_name_pos - SPIDER_SQL_FROM_LEN); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_HEAD_STR, - SPIDER_SQL_ROW_NUMBER_HEAD_LEN); - if ((int) spider_user_defined_key_parts(key_info) > start_pos) - { - if (desc_flg == TRUE) - { - for ( - key_part = key_info->key_part + start_pos, - length = 0; - length + start_pos < (int) spider_user_defined_key_parts(key_info); - key_part++, - length++ - ) { - field = key_part->field; - if (sql_part.reserve(SPIDER_SQL_NAME_QUOTE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_NAME_QUOTE_STR, - SPIDER_SQL_NAME_QUOTE_LEN); - if ((error_num = spider_db_append_name_with_quote_str(&sql_part, - field->field_name, spider_dbton_oracle.dbton_id))) - DBUG_RETURN(error_num); - if (key_part->key_part_flag & HA_REVERSE_SORT) - { - if (sql_part.reserve(SPIDER_SQL_NAME_QUOTE_LEN + - SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_NAME_QUOTE_STR, - SPIDER_SQL_NAME_QUOTE_LEN); - sql_part.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } else { - if (sql_part.reserve(SPIDER_SQL_NAME_QUOTE_LEN + - SPIDER_SQL_DESC_LEN + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_NAME_QUOTE_STR, - SPIDER_SQL_NAME_QUOTE_LEN); - sql_part.q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN); - sql_part.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - } else { - for ( - key_part = key_info->key_part + start_pos, - length = 0; - length + start_pos < (int) spider_user_defined_key_parts(key_info); - key_part++, - length++ - ) { - field = key_part->field; - if (sql_part.reserve(SPIDER_SQL_NAME_QUOTE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_NAME_QUOTE_STR, - SPIDER_SQL_NAME_QUOTE_LEN); - if ((error_num = spider_db_append_name_with_quote_str(&sql_part, - field->field_name, spider_dbton_oracle.dbton_id))) - DBUG_RETURN(error_num); - if (key_part->key_part_flag & HA_REVERSE_SORT) - { - if (sql_part.reserve(SPIDER_SQL_NAME_QUOTE_LEN + - SPIDER_SQL_DESC_LEN + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_NAME_QUOTE_STR, - SPIDER_SQL_NAME_QUOTE_LEN); - sql_part.q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN); - sql_part.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } else { - if (sql_part.reserve(SPIDER_SQL_NAME_QUOTE_LEN + - SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_NAME_QUOTE_STR, - SPIDER_SQL_NAME_QUOTE_LEN); - sql_part.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - } - } - if (desc_flg == TRUE) - { - if (sql_part.reserve(SPIDER_SQL_ROW_NUMBER_DESC_TAIL_LEN + - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN + sql.length() - table_name_pos + - SPIDER_SQL_FROM_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_DESC_TAIL_STR, - SPIDER_SQL_ROW_NUMBER_DESC_TAIL_LEN); - } else { - if (sql_part.reserve(SPIDER_SQL_ROW_NUMBER_TAIL_LEN + - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN + sql.length() - table_name_pos + - SPIDER_SQL_FROM_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_ROW_NUMBER_TAIL_STR, - SPIDER_SQL_ROW_NUMBER_TAIL_LEN); - } - pos_diff = sql_part.length() + SPIDER_SQL_FROM_LEN - table_name_pos; - sql_part.q_append(sql.ptr() + table_name_pos - SPIDER_SQL_FROM_LEN, - sql.length() - table_name_pos + SPIDER_SQL_FROM_LEN); - sql_part.q_append(SPIDER_SQL_SELECT_WRAPPER_TAIL_STR, - SPIDER_SQL_SELECT_WRAPPER_TAIL_LEN); - - if ((int) spider_user_defined_key_parts(key_info) > start_pos) - { - if (sql.reserve(SPIDER_SQL_ORDER_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN); - if (desc_flg == TRUE) - { - for ( - key_part = key_info->key_part + start_pos, - length = 0; - length + start_pos < (int) spider_user_defined_key_parts(key_info); - key_part++, - length++ - ) { - field = key_part->field; - if (sql.reserve(SPIDER_SQL_NAME_QUOTE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_NAME_QUOTE_STR, - SPIDER_SQL_NAME_QUOTE_LEN); - if ((error_num = spider_db_append_name_with_quote_str(&sql, - field->field_name, spider_dbton_oracle.dbton_id))) - DBUG_RETURN(error_num); - if (key_part->key_part_flag & HA_REVERSE_SORT) - { - if (sql.reserve(SPIDER_SQL_NAME_QUOTE_LEN + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_NAME_QUOTE_STR, - SPIDER_SQL_NAME_QUOTE_LEN); - sql.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } else { - if (sql.reserve(SPIDER_SQL_NAME_QUOTE_LEN + SPIDER_SQL_DESC_LEN + - SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_NAME_QUOTE_STR, - SPIDER_SQL_NAME_QUOTE_LEN); - sql.q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN); - sql.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - } else { - for ( - key_part = key_info->key_part + start_pos, - length = 0; - length + start_pos < (int) spider_user_defined_key_parts(key_info); - key_part++, - length++ - ) { - field = key_part->field; - if (sql.reserve(SPIDER_SQL_NAME_QUOTE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_NAME_QUOTE_STR, - SPIDER_SQL_NAME_QUOTE_LEN); - if ((error_num = spider_db_append_name_with_quote_str(&sql, - field->field_name, spider_dbton_oracle.dbton_id))) - DBUG_RETURN(error_num); - if (key_part->key_part_flag & HA_REVERSE_SORT) - { - if (sql.reserve(SPIDER_SQL_NAME_QUOTE_LEN + SPIDER_SQL_DESC_LEN + - SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_NAME_QUOTE_STR, - SPIDER_SQL_NAME_QUOTE_LEN); - sql.q_append(SPIDER_SQL_DESC_STR, SPIDER_SQL_DESC_LEN); - sql.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } else { - if (sql.reserve(SPIDER_SQL_NAME_QUOTE_LEN + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_NAME_QUOTE_STR, - SPIDER_SQL_NAME_QUOTE_LEN); - sql.q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - } - } - } - sql.length(sql.length() - SPIDER_SQL_COMMA_LEN); - } - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::append_limit( - longlong offset, - longlong limit -) { - char buf[SPIDER_LONGLONG_LEN + 1]; - uint32 length; - DBUG_ENTER("spider_oracle_copy_table::append_limit"); - DBUG_PRINT("info",("spider this=%p", this)); - if (offset || limit < 9223372036854775807LL) - { - if (!select_rownum_appended) - { - select_rownum_appended = TRUE; - table_name_pos = table_name_pos + pos_diff; - if (sql.copy(sql_part)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - pos = pos + pos_diff; - } - if (offset) - { - if (sql.reserve(SPIDER_SQL_BETWEEN_LEN + SPIDER_SQL_AND_LEN + - ((SPIDER_LONGLONG_LEN) * 2))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_BETWEEN_STR, SPIDER_SQL_BETWEEN_LEN); - length = (uint32) (my_charset_bin.longlong10_to_str)( - buf, SPIDER_LONGLONG_LEN + 1, -10, offset); - sql.q_append(buf, length); - sql.q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN); - length = (uint32) (my_charset_bin.longlong10_to_str)( - buf, SPIDER_LONGLONG_LEN + 1, -10, limit); - sql.q_append(buf, length); - } else { - if (sql.reserve(SPIDER_SQL_HS_LTEQUAL_LEN + - (SPIDER_LONGLONG_LEN))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_HS_LTEQUAL_STR, SPIDER_SQL_HS_LTEQUAL_LEN); - length = (uint32) (my_charset_bin.longlong10_to_str)( - buf, SPIDER_LONGLONG_LEN + 1, -10, limit); - sql.q_append(buf, length); - } - } - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::append_into_str() -{ - DBUG_ENTER("spider_oracle_copy_table::append_into_str"); - DBUG_PRINT("info",("spider this=%p", this)); - if (sql.reserve(SPIDER_SQL_INTO_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_INTO_STR, SPIDER_SQL_INTO_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::append_open_paren_str() -{ - DBUG_ENTER("spider_oracle_copy_table::append_open_paren_str"); - DBUG_PRINT("info",("spider this=%p", this)); - if (sql.reserve(SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::append_values_str() -{ - DBUG_ENTER("spider_oracle_copy_table::append_values_str"); - DBUG_PRINT("info",("spider this=%p", this)); - if (sql.reserve(SPIDER_SQL_CLOSE_PAREN_LEN + SPIDER_SQL_VALUES_LEN + - SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); - sql.q_append(SPIDER_SQL_VALUES_STR, SPIDER_SQL_VALUES_LEN); - sql.q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::append_select_lock_str( - int lock_mode -) { - DBUG_ENTER("spider_oracle_copy_table::append_select_lock_str"); - DBUG_PRINT("info",("spider this=%p", this)); - if (select_rownum_appended) - { - int error_num; - table_lock_mode = lock_mode; - sql_part.length(0); - if (sql_part.reserve(SPIDER_SQL_LOCK_TABLE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_LOCK_TABLE_STR, SPIDER_SQL_LOCK_TABLE_LEN); - if ((error_num = oracle_share->append_table_name(&sql_part, - store_link_idx))) - DBUG_RETURN(error_num); - if (lock_mode == SPIDER_LOCK_MODE_EXCLUSIVE) - { - if (sql_part.reserve(SPIDER_SQL_LOCK_TABLE_EXCLUSIVE_MODE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_LOCK_TABLE_EXCLUSIVE_MODE_STR, - SPIDER_SQL_LOCK_TABLE_EXCLUSIVE_MODE_LEN); - } else if (lock_mode == SPIDER_LOCK_MODE_SHARED) - { - if (sql_part.reserve(SPIDER_SQL_LOCK_TABLE_SHARE_MODE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql_part.q_append(SPIDER_SQL_LOCK_TABLE_SHARE_MODE_STR, - SPIDER_SQL_LOCK_TABLE_SHARE_MODE_LEN); - } - } else { - if (lock_mode == SPIDER_LOCK_MODE_EXCLUSIVE) - { - if (sql.reserve(SPIDER_SQL_FOR_UPDATE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_FOR_UPDATE_STR, SPIDER_SQL_FOR_UPDATE_LEN); - } else if (lock_mode == SPIDER_LOCK_MODE_SHARED) - { - if (sql.reserve(SPIDER_SQL_FOR_UPDATE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_FOR_UPDATE_STR, SPIDER_SQL_FOR_UPDATE_LEN); - } - } - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::exec_query( - SPIDER_CONN *conn, - int quick_mode, - int *need_mon -) { - int error_num = 0; - DBUG_ENTER("spider_oracle_copy_table::exec_query"); - DBUG_PRINT("info",("spider this=%p", this)); - if (current_str) - { - spider_string *tmp_str = first_str; - while (tmp_str && tmp_str != current_str) - { - if ( - (error_num = spider_db_query(conn, tmp_str->ptr(), tmp_str->length(), - quick_mode, need_mon)) && - error_num != HA_ERR_FOUND_DUPP_KEY - ) { - break; - } - tmp_str = tmp_str->next; - } - if (tmp_str == current_str) - { - error_num = spider_db_query(conn, tmp_str->ptr(), tmp_str->length(), - quick_mode, need_mon); - } - if (error_num == HA_ERR_FOUND_DUPP_KEY) - error_num = 0; - current_str = NULL; - } else { - if (table_lock_mode) - { - DBUG_PRINT("info",("spider table_lock_mode=%d", table_lock_mode)); - spider_db_oracle *db_conn = (spider_db_oracle *) conn->db_conn; - db_conn->table_lock_mode = table_lock_mode; - db_conn->exec_lock_sql = &sql_part; - table_lock_mode = 0; - } - error_num = spider_db_query(conn, sql.ptr(), sql.length(), quick_mode, - need_mon); - } - DBUG_RETURN(error_num); -} - -int spider_oracle_copy_table::copy_key_row( - spider_db_copy_table *source_ct, - Field *field, - ulong *row_pos, - ulong *length, - const char *joint_str, - const int joint_length -) { - int error_num; - spider_string *source_str = &((spider_oracle_copy_table *) source_ct)->sql; - DBUG_ENTER("spider_oracle_copy_table::copy_key_row"); - DBUG_PRINT("info",("spider this=%p", this)); - if (sql.reserve(SPIDER_SQL_NAME_QUOTE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - if ((error_num = spider_db_append_name_with_quote_str(&sql, - field->field_name, spider_dbton_oracle.dbton_id))) - DBUG_RETURN(error_num); - if (sql.reserve(SPIDER_SQL_NAME_QUOTE_LEN + joint_length + *length + - SPIDER_SQL_AND_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - sql.q_append(SPIDER_SQL_NAME_QUOTE_STR, SPIDER_SQL_NAME_QUOTE_LEN); - sql.q_append(joint_str, joint_length); - sql.q_append(source_str->ptr() + *row_pos, *length); - sql.q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::copy_row( - Field *field, - SPIDER_DB_ROW *row -) { - int error_num; - DBUG_ENTER("spider_oracle_copy_table::copy_row"); - DBUG_PRINT("info",("spider this=%p", this)); - if (row->is_null()) - { - DBUG_PRINT("info",("spider column is null")); - if (current_str->reserve(SPIDER_SQL_NULL_LEN + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - current_str->q_append(SPIDER_SQL_NULL_STR, SPIDER_SQL_NULL_LEN); - } else if (field->str_needs_quotes()) - { - DBUG_PRINT("info",("spider str_needs_quotes")); - if (current_str->reserve(SPIDER_SQL_VALUE_QUOTE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - current_str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, - SPIDER_SQL_VALUE_QUOTE_LEN); - if ((error_num = row->append_escaped_to_str(current_str, - spider_dbton_oracle.dbton_id))) - DBUG_RETURN(error_num); - if (current_str->reserve(SPIDER_SQL_VALUE_QUOTE_LEN + - SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - current_str->q_append(SPIDER_SQL_VALUE_QUOTE_STR, - SPIDER_SQL_VALUE_QUOTE_LEN); - } else { - DBUG_PRINT("info",("spider without_quotes")); - if ((error_num = row->append_to_str(current_str))) - DBUG_RETURN(error_num); - if (current_str->reserve(SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - current_str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::copy_rows( - TABLE *table, - SPIDER_DB_ROW *row, - ulong **last_row_pos, - ulong **last_lengths -) { - int error_num; - Field **field; - ulong *lengths2, *row_pos2; - DBUG_ENTER("spider_oracle_copy_table::copy_rows"); - DBUG_PRINT("info",("spider this=%p", this)); - if (!current_str) - { - if (!first_str) - { - if (!(first_str = new spider_string[1])) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - first_str->init_calc_mem(SPD_MID_ORACLE_COPY_TABLE_COPY_ROWS_1); - first_str->set_charset(sql.charset()); - if (first_str->reserve(sql.length())) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - first_str->q_append(sql.ptr(), sql.length()); - } else { - first_str->length(sql.length()); - } - current_str = first_str; - } else { - if (!current_str->next) - { - if (!(current_str->next = new spider_string[1])) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - current_str->next->init_calc_mem(SPD_MID_ORACLE_COPY_TABLE_COPY_ROWS_2); - current_str->next->set_charset(sql.charset()); - if (current_str->next->reserve(sql.length())) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - current_str->next->q_append(sql.ptr(), sql.length()); - } else { - current_str->next->length(sql.length()); - } - current_str = current_str->next; - } - row_pos2 = *last_row_pos; - lengths2 = *last_lengths; - - for ( - field = table->field; - *field; - field++, - lengths2++ - ) { - *row_pos2 = current_str->length(); - if ((error_num = - copy_row(*field, row))) - DBUG_RETURN(error_num); - *lengths2 = current_str->length() - *row_pos2 - SPIDER_SQL_COMMA_LEN; - row->next(); - row_pos2++; - } - current_str->length(current_str->length() - SPIDER_SQL_COMMA_LEN); - if (current_str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - current_str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - DBUG_PRINT("info",("spider current_str=%s", current_str->c_ptr_safe())); - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::copy_rows( - TABLE *table, - SPIDER_DB_ROW *row -) { - int error_num; - Field **field; - DBUG_ENTER("spider_oracle_copy_table::copy_rows"); - DBUG_PRINT("info",("spider this=%p", this)); - if (!current_str) - { - if (!first_str) - { - if (!(first_str = new spider_string[1])) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - first_str->init_calc_mem(SPD_MID_ORACLE_COPY_TABLE_COPY_ROWS_3); - first_str->set_charset(sql.charset()); - if (first_str->reserve(sql.length())) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - first_str->q_append(sql.ptr(), sql.length()); - } else { - first_str->length(sql.length()); - } - current_str = first_str; - } else { - if (!current_str->next) - { - if (!(current_str->next = new spider_string[1])) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - current_str->next->init_calc_mem(SPD_MID_ORACLE_COPY_TABLE_COPY_ROWS_4); - current_str->next->set_charset(sql.charset()); - if (current_str->next->reserve(sql.length())) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - current_str->next->q_append(sql.ptr(), sql.length()); - } else { - current_str->next->length(sql.length()); - } - current_str = current_str->next; - } - - for ( - field = table->field; - *field; - field++ - ) { - if ((error_num = - copy_row(*field, row))) - DBUG_RETURN(error_num); - row->next(); - } - current_str->length(current_str->length() - SPIDER_SQL_COMMA_LEN); - if (current_str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - current_str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - DBUG_PRINT("info",("spider current_str=%s", current_str->c_ptr_safe())); - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::append_insert_terminator() -{ - DBUG_ENTER("spider_oracle_copy_table::append_insert_terminator"); - DBUG_PRINT("info",("spider this=%p", this)); - DBUG_RETURN(0); -} - -int spider_oracle_copy_table::copy_insert_values( - spider_db_copy_table *source_ct -) { - spider_oracle_copy_table *tmp_ct = (spider_oracle_copy_table *) source_ct; - spider_string *source_str = &tmp_ct->sql; - int values_length = source_str->length() - tmp_ct->pos; - const char *values_ptr = source_str->ptr() + tmp_ct->pos; - DBUG_ENTER("spider_oracle_copy_table::copy_insert_values"); - DBUG_PRINT("info",("spider this=%p", this)); - if (sql.reserve(values_length)) - { - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - } - sql.q_append(values_ptr, values_length); - DBUG_RETURN(0); -} -#endif diff --git a/storage/spider/spd_db_oracle.h b/storage/spider/spd_db_oracle.h deleted file mode 100644 index 5f7f4e8ff1f..00000000000 --- a/storage/spider/spd_db_oracle.h +++ /dev/null @@ -1,1543 +0,0 @@ -/* Copyright (C) 2012-2018 Kentoku Shiba - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ - -class spider_db_oracle; -class spider_db_oracle_result; - -class spider_db_oracle_util: public spider_db_util -{ -public: - spider_db_oracle_util(); - ~spider_db_oracle_util(); - int append_name( - spider_string *str, - const char *name, - uint name_length - ); - int append_name_with_charset( - spider_string *str, - const char *name, - uint name_length, - CHARSET_INFO *name_charset - ); - int append_escaped_name( - spider_string *str, - const char *name, - uint name_length - ); - int append_escaped_name_with_charset( - spider_string *str, - const char *name, - uint name_length, - CHARSET_INFO *name_charset - ); - bool is_name_quote( - const char head_code - ); - int append_escaped_name_quote( - spider_string *str - ); - int append_column_value( - ha_spider *spider, - spider_string *str, - Field *field, - const uchar *new_ptr, - CHARSET_INFO *access_charset - ); - int append_from_with_alias( - spider_string *str, - const char **table_names, - uint *table_name_lengths, - const char **table_aliases, - uint *table_alias_lengths, - uint table_count, - int *table_name_pos, - bool over_write - ); - int append_trx_isolation( - spider_string *str, - int trx_isolation - ); - int append_autocommit( - spider_string *str, - bool autocommit - ); - int append_sql_log_off( - spider_string *str, - bool sql_log_off - ); - int append_wait_timeout( - spider_string *str, - int wait_timeout - ); - int append_sql_mode( - spider_string *str, - sql_mode_t sql_mode - ); - int append_time_zone( - spider_string *str, - Time_zone *time_zone - ); - int append_start_transaction( - spider_string *str - ); - int append_xa_start( - spider_string *str, - XID *xid - ); - int append_lock_table_head( - spider_string *str - ); - int append_lock_table_body( - spider_string *str, - const char *db_name, - uint db_name_length, - CHARSET_INFO *db_name_charset, - const char *table_name, - uint table_name_length, - CHARSET_INFO *table_name_charset, - int lock_type - ); - int append_lock_table_tail( - spider_string *str - ); - int append_unlock_table( - spider_string *str - ); - int open_item_func( - Item_func *item_func, - ha_spider *spider, - spider_string *str, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields - ); - int open_item_sum_func( - Item_sum *item_sum, - ha_spider *spider, - spider_string *str, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields - ); - size_t escape_string( - char *to, - const char *from, - size_t from_length, - CHARSET_INFO *access_charset - ); - int append_escaped_util( - spider_string *to, - String *from - ); - int append_from_and_tables( - ha_spider *spider, - spider_fields *fields, - spider_string *str, - TABLE_LIST *table_list, - uint table_count - ); - int reappend_tables( - spider_fields *fields, - SPIDER_LINK_IDX_CHAIN *link_idx_chain, - spider_string *str - ); - int append_where( - spider_string *str - ); - int append_having( - spider_string *str - ); -}; - -class spider_db_oracle_row: public spider_db_row -{ -public: - spider_db_oracle *db_conn; - spider_db_oracle_result *result; - sb2 *ind; - char **val; - ub2 *rlen; - sb2 *ind_first; - char **val_first; - ub2 *rlen_first; - spider_string *val_str; - spider_string *val_str_first; - OCIDefine **defnp; - OCILobLocator **lobhp; - OCIParam **colhp; - ub2 *coltp; - ub2 *colsz; - uint field_count; - uint record_size; - ulong *row_size; - ulong *row_size_first; - CHARSET_INFO *access_charset; - bool cloned; - spider_db_oracle_util util; - - spider_db_oracle_row(); - ~spider_db_oracle_row(); - int store_to_field( - Field *field, - CHARSET_INFO *access_charset - ); - int append_to_str( - spider_string *str - ); - int append_escaped_to_str( - spider_string *str, - uint dbton_id - ); - void first(); - void next(); - bool is_null(); - int val_int(); - double val_real(); - my_decimal *val_decimal( - my_decimal *decimal_value, - CHARSET_INFO *access_charset - ); - SPIDER_DB_ROW *clone(); - int store_to_tmp_table( - TABLE *tmp_table, - spider_string *str - ); - uint get_byte_size(); - /* for oracle */ - int init(); - void deinit(); - int define(); - int fetch(); -}; - -class spider_db_oracle_result: public spider_db_result -{ -public: - spider_db_oracle *db_conn; - OCIStmt *stmtp; - uint field_count; - CHARSET_INFO *access_charset; - bool fetched; - spider_db_oracle_row row; - int store_error_num; - - spider_db_oracle_result(SPIDER_DB_CONN *in_db_conn); - ~spider_db_oracle_result(); - bool has_result(); - void free_result(); - SPIDER_DB_ROW *current_row(); - SPIDER_DB_ROW *fetch_row(); - SPIDER_DB_ROW *fetch_row_from_result_buffer( - spider_db_result_buffer *spider_res_buf - ); - SPIDER_DB_ROW *fetch_row_from_tmp_table( - TABLE *tmp_table - ); - int fetch_table_status( - int mode, - ha_statistics &stat - ); - int fetch_table_records( - int mode, - ha_rows &records - ); - int fetch_table_cardinality( - int mode, - TABLE *table, - longlong *cardinality, - uchar *cardinality_upd, - int bitmap_size - ); - int fetch_table_mon_status( - int &status - ); - longlong num_rows(); - uint num_fields(); - void move_to_pos( - longlong pos - ); - int get_errno(); -#ifdef SPIDER_HAS_DISCOVER_TABLE_STRUCTURE - int fetch_columns_for_discover_table_structure( - spider_string *str, - CHARSET_INFO *access_charset - ); - int fetch_index_for_discover_table_structure( - spider_string *str, - CHARSET_INFO *access_charset - ); - int fetch_table_for_discover_table_structure( - spider_string *str, - SPIDER_SHARE *spider_share, - CHARSET_INFO *access_charset - ); -#endif - /* for oracle */ - int set_column_info(); -}; - -class spider_db_oracle: public spider_db_conn -{ -public: - OCIEnv *envhp; - OCIError *errhp; - OCIServer *srvhp; - OCISvcCtx *svchp; - OCISession *usrhp; - OCIStmt *stmtp; - OCITrans *txnhp; - spider_db_oracle_result *result; - int stored_error_num; - const char *stored_error; - uint update_rows; - int table_lock_mode; - spider_string *exec_lock_sql; - spider_db_oracle_util util; - ulonglong stored_last_insert_id; - HASH lock_table_hash; - bool lock_table_hash_inited; - uint lock_table_hash_id; - const char *lock_table_hash_func_name; - const char *lock_table_hash_file_name; - ulong lock_table_hash_line_no; - DYNAMIC_ARRAY handler_open_array; - bool handler_open_array_inited; - uint handler_open_array_id; - const char *handler_open_array_func_name; - const char *handler_open_array_file_name; - ulong handler_open_array_line_no; - - /* for bg_connect */ - char stored_error_msg[MYSQL_ERRMSG_SIZE]; - char *tgt_host; - char *tgt_username; - char *tgt_password; - long tgt_port; - char *tgt_socket; - char *server_name; - int connect_retry_count; - longlong connect_retry_interval; - - spider_db_oracle( - SPIDER_CONN *conn - ); - ~spider_db_oracle(); - int init(); - bool is_connected(); - void bg_connect(); - int connect( - char *tgt_host, - char *tgt_username, - char *tgt_password, - long tgt_port, - char *tgt_socket, - char *server_name, - int connect_retry_count, - longlong connect_retry_interval - ); - int ping(); - void bg_disconnect(); - void disconnect(); - int set_net_timeout(); - int exec_query( - const char *query, - uint length, - int quick_mode - ); - int get_errno(); - const char *get_error(); - bool is_server_gone_error( - int error_num - ); - bool is_dup_entry_error( - int error_num - ); - bool is_xa_nota_error( - int error_num - ); - spider_db_result *store_result( - spider_db_result_buffer **spider_res_buf, - st_spider_db_request_key *request_key, - int *error_num - ); - spider_db_result *use_result( - ha_spider *spider, - st_spider_db_request_key *request_key, - int *error_num - ); - int next_result(); - uint affected_rows(); - uint matched_rows(); - bool inserted_info( - spider_db_handler *handler, - ha_copy_info *copy_info - ); - ulonglong last_insert_id(); - int set_character_set( - const char *csname - ); - int select_db( - const char *dbname - ); - int consistent_snapshot( - int *need_mon - ); - bool trx_start_in_bulk_sql(); - int start_transaction( - int *need_mon - ); - int commit( - int *need_mon - ); - int rollback( - int *need_mon - ); - bool xa_start_in_bulk_sql(); - int xa_start( - XID *xid, - int *need_mon - ); - int xa_end( - XID *xid, - int *need_mon - ); - int xa_prepare( - XID *xid, - int *need_mon - ); - int xa_commit( - XID *xid, - int *need_mon - ); - int xa_rollback( - XID *xid, - int *need_mon - ); - bool set_trx_isolation_in_bulk_sql(); - int set_trx_isolation( - int trx_isolation, - int *need_mon - ); - bool set_autocommit_in_bulk_sql(); - int set_autocommit( - bool autocommit, - int *need_mon - ); - bool set_sql_log_off_in_bulk_sql(); - int set_sql_log_off( - bool sql_log_off, - int *need_mon - ); - bool set_wait_timeout_in_bulk_sql(); - int set_wait_timeout( - int wait_timeout, - int *need_mon - ); - bool set_sql_mode_in_bulk_sql(); - int set_sql_mode( - sql_mode_t sql_mode, - int *need_mon - ); - bool set_time_zone_in_bulk_sql(); - int set_time_zone( - Time_zone *time_zone, - int *need_mon - ); - int show_master_status( - SPIDER_TRX *trx, - SPIDER_SHARE *share, - int all_link_idx, - int *need_mon, - TABLE *table, - spider_string *str, - int mode, - SPIDER_DB_RESULT **res1, - SPIDER_DB_RESULT **res2 - ); - size_t escape_string( - char *to, - const char *from, - size_t from_length - ); - bool have_lock_table_list(); - int append_lock_tables( - spider_string *str - ); - int append_unlock_tables( - spider_string *str - ); - uint get_lock_table_hash_count(); - void reset_lock_table_hash(); - uint get_opened_handler_count(); - void reset_opened_handler(); - void set_dup_key_idx( - ha_spider *spider, - int link_idx - ); - bool cmp_request_key_to_snd( - st_spider_db_request_key *request_key - ); -private: - int set_error( - sword res, - dvoid *hndlp, - int error_num, - const char *error1, - const char *error2 - ); -}; - -class spider_oracle_share: public spider_db_share -{ -public: - spider_string *table_select; - int table_select_pos; - spider_string *key_select; - int *key_select_pos; - spider_string *key_hint; - spider_string *show_table_status; - spider_string *show_records; - spider_string *show_autoinc; - spider_string *show_last_insert_id; - spider_string *show_index; - spider_string *table_names_str; - spider_string *db_names_str; - spider_string *db_table_str; - spider_string *nextval_str; - my_hash_value_type *db_table_str_hash_value; - uint table_nm_max_length; - uint db_nm_max_length; - uint nextval_max_length; - spider_string *column_name_str; - bool same_db_table_name; - int first_all_link_idx; - - spider_oracle_share( - st_spider_share *share - ); - ~spider_oracle_share(); - int init(); - uint get_column_name_length( - uint field_index - ); - int append_column_name( - spider_string *str, - uint field_index - ); - int append_column_name_with_alias( - spider_string *str, - uint field_index, - const char *alias, - uint alias_length - ); - int append_table_name( - spider_string *str, - int all_link_idx - ); - int append_table_name_with_adjusting( - spider_string *str, - int all_link_idx - ); - int append_from_with_adjusted_table_name( - spider_string *str, - int *table_name_pos - ); - bool need_change_db_table_name(); -#ifdef SPIDER_HAS_DISCOVER_TABLE_STRUCTURE - int discover_table_structure( - SPIDER_TRX *trx, - SPIDER_SHARE *spider_share, - spider_string *str - ); -#endif -private: - int create_table_names_str(); - void free_table_names_str(); - int create_column_name_str(); - void free_column_name_str(); - int convert_key_hint_str(); - int append_show_table_status(); - void free_show_table_status(); - int append_show_records(); - void free_show_records(); - int append_show_autoinc(); - void free_show_autoinc(); - int append_show_last_insert_id(); - void free_show_last_insert_id(); - int append_show_index(); - void free_show_index(); - int append_table_select(); - int append_key_select( - uint idx - ); -}; - -class spider_oracle_handler: public spider_db_handler -{ - spider_string sql; - spider_string sql_part; - spider_string sql_part2; - spider_string ha_sql; - int where_pos; - int order_pos; - int limit_pos; -public: - int table_name_pos; -private: - int update_set_pos; - int ha_read_pos; - int ha_next_pos; - int ha_where_pos; - int ha_limit_pos; - int ha_table_name_pos; - uint ha_sql_handler_id; - spider_string insert_sql; - int insert_pos; - int insert_table_name_pos; - int nextval_pos; - spider_string update_sql; - TABLE *upd_tmp_tbl; - TMP_TABLE_PARAM upd_tmp_tbl_prm; - spider_string tmp_sql; - int tmp_sql_pos1; /* drop db nm pos at tmp_table_join */ - int tmp_sql_pos2; /* create db nm pos at tmp_table_join */ - int tmp_sql_pos3; /* insert db nm pos at tmp_table_join */ - int tmp_sql_pos4; /* insert val pos at tmp_table_join */ - int tmp_sql_pos5; /* end of drop tbl at tmp_table_join */ - spider_string dup_update_sql; - spider_string *exec_sql; - spider_string *exec_insert_sql; - spider_string *exec_update_sql; - spider_string *exec_tmp_sql; - spider_string *exec_ha_sql; - spider_string *exec_lock_sql; - int table_lock_mode; - bool reading_from_bulk_tmp_table; - bool filled_up; - bool select_rownum_appended; - bool update_rownum_appended; - SPIDER_INT_HLD *union_table_name_pos_first; - SPIDER_INT_HLD *union_table_name_pos_current; -public: - spider_oracle_share *oracle_share; - SPIDER_LINK_FOR_HASH *link_for_hash; - uchar *minimum_select_bitmap; - spider_oracle_handler( - ha_spider *spider, - spider_oracle_share *share - ); - ~spider_oracle_handler(); - int init(); - int spider_oracle_handler::append_index_hint( - spider_string *str, - int link_idx, - ulong sql_type - ); - int append_table_name_with_adjusting( - spider_string *str, - int link_idx, - ulong sql_type - ); - int append_key_column_types( - const key_range *start_key, - spider_string *str - ); - int append_key_join_columns_for_bka( - const key_range *start_key, - spider_string *str, - const char **table_aliases, - uint *table_alias_lengths - ); - int append_tmp_table_and_sql_for_bka( - const key_range *start_key - ); - int reuse_tmp_table_and_sql_for_bka(); - void create_tmp_bka_table_name( - char *tmp_table_name, - int *tmp_table_name_length, - int link_idx - ); - int append_create_tmp_bka_table( - const key_range *start_key, - spider_string *str, - char *tmp_table_name, - int tmp_table_name_length, - int *db_name_pos, - CHARSET_INFO *table_charset - ); - int append_drop_tmp_bka_table( - spider_string *str, - char *tmp_table_name, - int tmp_table_name_length, - int *db_name_pos, - int *drop_table_end_pos, - bool with_semicolon - ); - int append_insert_tmp_bka_table( - const key_range *start_key, - spider_string *str, - char *tmp_table_name, - int tmp_table_name_length, - int *db_name_pos - ); - int append_union_table_and_sql_for_bka( - const key_range *start_key - ); - int reuse_union_table_and_sql_for_bka(); - int append_insert_for_recovery( - ulong sql_type, - int link_idx - ); - int append_update( - const TABLE *table, - my_ptrdiff_t ptr_diff - ); - int append_update( - const TABLE *table, - my_ptrdiff_t ptr_diff, - int link_idx - ); - int append_delete( - const TABLE *table, - my_ptrdiff_t ptr_diff - ); - int append_delete( - const TABLE *table, - my_ptrdiff_t ptr_diff, - int link_idx - ); - int append_insert_part(); - int append_insert( - spider_string *str, - int link_idx - ); - int append_update_part(); - int append_update( - spider_string *str, - int link_idx - ); - int append_delete_part(); - int append_delete( - spider_string *str - ); - int append_update_set_part(); - int append_update_set( - spider_string *str - ); - int append_direct_update_set_part(); - int append_direct_update_set( - spider_string *str - ); - int append_dup_update_pushdown_part( - const char *alias, - uint alias_length - ); - int append_update_columns_part( - const char *alias, - uint alias_length - ); - int check_update_columns_part(); - int append_update_columns( - spider_string *str, - const char *alias, - uint alias_length - ); - int append_select_part( - ulong sql_type - ); - int append_select( - spider_string *str, - ulong sql_type - ); - int append_table_select_part( - ulong sql_type - ); - int append_table_select( - spider_string *str - ); - int append_key_select_part( - ulong sql_type, - uint idx - ); - int append_key_select( - spider_string *str, - uint idx - ); - int append_minimum_select_part( - ulong sql_type - ); - int append_minimum_select( - spider_string *str, - ulong sql_type - ); - int append_table_select_with_alias( - spider_string *str, - const char *alias, - uint alias_length - ); - int append_key_select_with_alias( - spider_string *str, - const KEY *key_info, - const char *alias, - uint alias_length - ); - int append_minimum_select_with_alias( - spider_string *str, - const char *alias, - uint alias_length - ); - int append_select_columns_with_alias( - spider_string *str, - const char *alias, - uint alias_length - ); - int append_hint_after_table_part( - ulong sql_type - ); - int append_hint_after_table( - spider_string *str - ); - void set_where_pos( - ulong sql_type - ); - void set_where_to_pos( - ulong sql_type - ); - int check_item_type( - Item *item - ); - int append_values_connector_part( - ulong sql_type - ); - int append_values_connector( - spider_string *str - ); - int append_values_terminator_part( - ulong sql_type - ); - int append_values_terminator( - spider_string *str - ); - int append_union_table_connector_part( - ulong sql_type - ); - int append_union_table_connector( - spider_string *str - ); - int append_union_table_terminator_part( - ulong sql_type - ); - int append_union_table_terminator( - spider_string *str - ); - int append_key_column_values_part( - const key_range *start_key, - ulong sql_type - ); - int append_key_column_values( - spider_string *str, - const key_range *start_key - ); - int append_key_column_values_with_name_part( - const key_range *start_key, - ulong sql_type - ); - int append_key_column_values_with_name( - spider_string *str, - const key_range *start_key - ); - int append_key_where_part( - const key_range *start_key, - const key_range *end_key, - ulong sql_type - ); - int append_key_where( - spider_string *str, - spider_string *str_part, - spider_string *str_part2, - const key_range *start_key, - const key_range *end_key, - ulong sql_type, - bool set_order - ); - int append_is_null_part( - ulong sql_type, - KEY_PART_INFO *key_part, - const key_range *key, - const uchar **ptr, - bool key_eq, - bool tgt_final - ); - int append_is_null( - ulong sql_type, - spider_string *str, - spider_string *str_part, - spider_string *str_part2, - KEY_PART_INFO *key_part, - const key_range *key, - const uchar **ptr, - bool key_eq, - bool tgt_final - ); - int append_where_terminator_part( - ulong sql_type, - bool set_order, - int key_count - ); - int append_where_terminator( - ulong sql_type, - spider_string *str, - spider_string *str_part, - spider_string *str_part2, - bool set_order, - int key_count - ); - int append_match_where_part( - ulong sql_type - ); - int append_match_where( - spider_string *str - ); - int append_update_where( - spider_string *str, - const TABLE *table, - my_ptrdiff_t ptr_diff - ); - int append_condition_part( - const char *alias, - uint alias_length, - ulong sql_type, - bool test_flg - ); - int append_condition( - spider_string *str, - const char *alias, - uint alias_length, - bool start_where, - ulong sql_type - ); - int append_match_against_part( - ulong sql_type, - st_spider_ft_info *ft_info, - const char *alias, - uint alias_length - ); - int append_match_against( - spider_string *str, - st_spider_ft_info *ft_info, - const char *alias, - uint alias_length - ); - int append_match_select_part( - ulong sql_type, - const char *alias, - uint alias_length - ); - int append_match_select( - spider_string *str, - const char *alias, - uint alias_length - ); - int append_sum_select_part( - ulong sql_type, - const char *alias, - uint alias_length - ); - int append_sum_select( - spider_string *str, - const char *alias, - uint alias_length - ); - void set_order_pos( - ulong sql_type - ); - void set_order_to_pos( - ulong sql_type - ); - int append_group_by_part( - const char *alias, - uint alias_length, - ulong sql_type - ); - int append_group_by( - spider_string *str, - const char *alias, - uint alias_length - ); - int append_key_order_for_merge_with_alias_part( - const char *alias, - uint alias_length, - ulong sql_type - ); - int append_key_order_for_merge_with_alias( - spider_string *str, - const char *alias, - uint alias_length - ); - int append_key_order_for_direct_order_limit_with_alias_part( - const char *alias, - uint alias_length, - ulong sql_type - ); - int append_key_order_for_direct_order_limit_with_alias( - spider_string *str, - const char *alias, - uint alias_length - ); - int append_key_order_with_alias_part( - const char *alias, - uint alias_length, - ulong sql_type - ); - int append_key_order_for_handler( - spider_string *str, - const char *alias, - uint alias_length - ); - int append_key_order_with_alias( - spider_string *str, - const char *alias, - uint alias_length - ); - int append_limit_part( - longlong offset, - longlong limit, - ulong sql_type - ); - int reappend_limit_part( - longlong offset, - longlong limit, - ulong sql_type - ); - int append_limit( - spider_string *str, - longlong offset, - longlong limit - ); - int append_select_lock_part( - ulong sql_type - ); - int append_select_lock( - spider_string *str - ); - int append_union_all_start_part( - ulong sql_type - ); - int append_union_all_start( - spider_string *str - ); - int append_union_all_part( - ulong sql_type - ); - int append_union_all( - spider_string *str - ); - int append_union_all_end_part( - ulong sql_type - ); - int append_union_all_end( - spider_string *str - ); - int append_multi_range_cnt_part( - ulong sql_type, - uint multi_range_cnt, - bool with_comma - ); - int append_multi_range_cnt( - spider_string *str, - uint multi_range_cnt, - bool with_comma - ); - int append_multi_range_cnt_with_name_part( - ulong sql_type, - uint multi_range_cnt - ); - int append_multi_range_cnt_with_name( - spider_string *str, - uint multi_range_cnt - ); - int append_open_handler_part( - ulong sql_type, - uint handler_id, - SPIDER_CONN *conn, - int link_idx - ); - int append_open_handler( - spider_string *str, - uint handler_id, - SPIDER_CONN *conn, - int link_idx - ); - int append_close_handler_part( - ulong sql_type, - int link_idx - ); - int append_close_handler( - spider_string *str, - int link_idx - ); - int append_insert_terminator_part( - ulong sql_type - ); - int append_insert_terminator( - spider_string *str - ); - int append_insert_values_part( - ulong sql_type - ); - int append_insert_values( - spider_string *str - ); - int append_into_part( - ulong sql_type - ); - int append_into( - spider_string *str - ); - void set_insert_to_pos( - ulong sql_type - ); - int append_from_part( - ulong sql_type, - int link_idx - ); - int append_from( - spider_string *str, - ulong sql_type, - int link_idx - ); - int append_flush_tables_part( - ulong sql_type, - int link_idx, - bool lock - ); - int append_flush_tables( - spider_string *str, - int link_idx, - bool lock - ); - int append_optimize_table_part( - ulong sql_type, - int link_idx - ); - int append_optimize_table( - spider_string *str, - int link_idx - ); - int append_analyze_table_part( - ulong sql_type, - int link_idx - ); - int append_analyze_table( - spider_string *str, - int link_idx - ); - int append_repair_table_part( - ulong sql_type, - int link_idx, - HA_CHECK_OPT* check_opt - ); - int append_repair_table( - spider_string *str, - int link_idx, - HA_CHECK_OPT* check_opt - ); - int append_check_table_part( - ulong sql_type, - int link_idx, - HA_CHECK_OPT* check_opt - ); - int append_check_table( - spider_string *str, - int link_idx, - HA_CHECK_OPT* check_opt - ); - int append_enable_keys_part( - ulong sql_type, - int link_idx - ); - int append_enable_keys( - spider_string *str, - int link_idx - ); - int append_disable_keys_part( - ulong sql_type, - int link_idx - ); - int append_disable_keys( - spider_string *str, - int link_idx - ); - int append_delete_all_rows_part( - ulong sql_type - ); - int append_delete_all_rows( - spider_string *str, - ulong sql_type - ); - int append_truncate( - spider_string *str, - ulong sql_type, - int link_idx - ); - int append_explain_select_part( - const key_range *start_key, - const key_range *end_key, - ulong sql_type, - int link_idx - ); - int append_explain_select( - spider_string *str, - const key_range *start_key, - const key_range *end_key, - ulong sql_type, - int link_idx - ); - bool is_sole_projection_field( - uint16 field_index - ); - bool is_bulk_insert_exec_period( - bool bulk_end - ); - bool sql_is_filled_up( - ulong sql_type - ); - bool sql_is_empty( - ulong sql_type - ); - bool support_multi_split_read(); - bool support_bulk_update(); - int bulk_tmp_table_insert(); - int bulk_tmp_table_insert( - int link_idx - ); - int bulk_tmp_table_end_bulk_insert(); - int bulk_tmp_table_rnd_init(); - int bulk_tmp_table_rnd_next(); - int bulk_tmp_table_rnd_end(); - bool need_copy_for_update( - int link_idx - ); - bool bulk_tmp_table_created(); - int mk_bulk_tmp_table_and_bulk_start(); - void rm_bulk_tmp_table(); - int store_sql_to_bulk_tmp_table( - spider_string *str, - TABLE *tmp_table - ); - int restore_sql_from_bulk_tmp_table( - spider_string *str, - TABLE *tmp_table - ); - int insert_lock_tables_list( - SPIDER_CONN *conn, - int link_idx - ); - int append_lock_tables_list( - SPIDER_CONN *conn, - int link_idx, - int *appended - ); - int realloc_sql( - ulong *realloced - ); - int reset_sql( - ulong sql_type - ); - bool need_lock_before_set_sql_for_exec( - ulong sql_type - ); - int set_sql_for_exec( - ulong sql_type, - int link_idx, - SPIDER_LINK_IDX_CHAIN *link_idx_chain - ); - int set_sql_for_exec( - ulong sql_type, - int link_idx - ); - int set_sql_for_exec( - spider_db_copy_table *tgt_ct, - ulong sql_type - ); - int execute_sql( - ulong sql_type, - SPIDER_CONN *conn, - int quick_mode, - int *need_mon - ); - int reset(); - int sts_mode_exchange( - int sts_mode - ); - int show_table_status( - int link_idx, - int sts_mode, - uint flag - ); - int crd_mode_exchange( - int crd_mode - ); - int show_index( - int link_idx, - int crd_mode - ); - int show_records( - int link_idx - ); - int show_autoinc( - int link_idx - ); - int show_last_insert_id( - int link_idx, - ulonglong &last_insert_id - ); - ha_rows explain_select( - const key_range *start_key, - const key_range *end_key, - int link_idx - ); - int lock_tables( - int link_idx - ); - int unlock_tables( - int link_idx - ); - int disable_keys( - SPIDER_CONN *conn, - int link_idx - ); - int enable_keys( - SPIDER_CONN *conn, - int link_idx - ); - int check_table( - SPIDER_CONN *conn, - int link_idx, - HA_CHECK_OPT* check_opt - ); - int repair_table( - SPIDER_CONN *conn, - int link_idx, - HA_CHECK_OPT* check_opt - ); - int analyze_table( - SPIDER_CONN *conn, - int link_idx - ); - int optimize_table( - SPIDER_CONN *conn, - int link_idx - ); - int flush_tables( - SPIDER_CONN *conn, - int link_idx, - bool lock - ); - int flush_logs( - SPIDER_CONN *conn, - int link_idx - ); - int insert_opened_handler( - SPIDER_CONN *conn, - int link_idx - ); - int delete_opened_handler( - SPIDER_CONN *conn, - int link_idx - ); - int sync_from_clone_source( - spider_db_handler *dbton_hdl - ); - bool support_use_handler( - int use_handler - ); - void minimum_select_bitmap_create(); - bool minimum_select_bit_is_set( - uint field_index - ); - void copy_minimum_select_bitmap( - uchar *bitmap - ); - int init_union_table_name_pos(); - int set_union_table_name_pos(); - int reset_union_table_name( - spider_string *str, - int link_idx, - ulong sql_type - ); - int append_from_and_tables_part( - spider_fields *fields, - ulong sql_type - ); - int reappend_tables_part( - spider_fields *fields, - ulong sql_type - ); - int append_where_part( - ulong sql_type - ); - int append_having_part( - ulong sql_type - ); - int append_item_type_part( - Item *item, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields, - ulong sql_type - ); - int append_list_item_select_part( - List *select, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields, - ulong sql_type - ); - int append_list_item_select( - List *select, - spider_string *str, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields - ); - int append_group_by_part( - ORDER *order, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields, - ulong sql_type - ); - int append_group_by( - ORDER *order, - spider_string *str, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields - ); - int append_order_by_part( - ORDER *order, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields, - ulong sql_type - ); - int append_order_by( - ORDER *order, - spider_string *str, - const char *alias, - uint alias_length, - bool use_fields, - spider_fields *fields - ); -}; - -class spider_oracle_copy_table: public spider_db_copy_table -{ -public: - spider_oracle_share *oracle_share; - spider_string sql; - spider_string sql_part; - uint pos; - uint table_name_pos; - uint pos_diff; - int table_lock_mode; - int store_link_idx; - bool select_rownum_appended; - spider_string *first_str; - spider_string *current_str; - spider_oracle_copy_table( - spider_oracle_share *db_share - ); - ~spider_oracle_copy_table(); - int init(); - void set_sql_charset( - CHARSET_INFO *cs - ); - int append_select_str(); - int append_insert_str( - int insert_flg - ); - int append_table_columns( - TABLE_SHARE *table_share - ); - int append_from_str(); - int append_table_name( - int link_idx - ); - void set_sql_pos(); - void set_sql_to_pos(); - int append_copy_where( - spider_db_copy_table *source_ct, - KEY *key_info, - ulong *last_row_pos, - ulong *last_lengths - ); - int append_key_order_str( - KEY *key_info, - int start_pos, - bool desc_flg - ); - int append_limit( - longlong offset, - longlong limit - ); - int append_into_str(); - int append_open_paren_str(); - int append_values_str(); - int append_select_lock_str( - int lock_mode - ); - int exec_query( - SPIDER_CONN *conn, - int quick_mode, - int *need_mon - ); - int copy_key_row( - spider_db_copy_table *source_ct, - Field *field, - ulong *row_pos, - ulong *length, - const char *joint_str, - const int joint_length - ); - int copy_row( - Field *field, - SPIDER_DB_ROW *row - ); - int copy_rows( - TABLE *table, - SPIDER_DB_ROW *row, - ulong **last_row_pos, - ulong **last_lengths - ); - int copy_rows( - TABLE *table, - SPIDER_DB_ROW *row - ); - int append_insert_terminator(); - int copy_insert_values( - spider_db_copy_table *source_ct - ); -}; diff --git a/storage/spider/spd_table.cc b/storage/spider/spd_table.cc index 5711de586d8..d1c08bfba85 100644 --- a/storage/spider/spd_table.cc +++ b/storage/spider/spd_table.cc @@ -128,9 +128,6 @@ handlerton *spider_hton_ptr; SPIDER_DBTON spider_dbton[SPIDER_DBTON_SIZE]; extern SPIDER_DBTON spider_dbton_mysql; extern SPIDER_DBTON spider_dbton_mariadb; -#ifdef HAVE_ORACLE_OCI -extern SPIDER_DBTON spider_dbton_oracle; -#endif #ifndef WITHOUT_SPIDER_BG_SEARCH SPIDER_THREAD *spider_table_sts_threads; SPIDER_THREAD *spider_table_crd_threads; @@ -6499,12 +6496,6 @@ int spider_db_init( spider_dbton_mariadb.db_util->dbton_id = dbton_id; spider_dbton[dbton_id] = spider_dbton_mariadb; ++dbton_id; -#ifdef HAVE_ORACLE_OCI - spider_dbton_oracle.dbton_id = dbton_id; - spider_dbton_oracle.db_util->dbton_id = dbton_id; - spider_dbton[dbton_id] = spider_dbton_oracle; - ++dbton_id; -#endif for (roop_count = 0; roop_count < SPIDER_DBTON_SIZE; roop_count++) { if (spider_dbton[roop_count].init) From e6daff40e470de33b994440c8d954ee23d7277f9 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Thu, 10 Oct 2024 16:03:14 +1100 Subject: [PATCH 033/121] MDEV-32524 [fixup] Fixup of spider mem alloc enums missed in a previous merge The merge was 10.4.34->10.5.25 --- storage/spider/ha_spider.cc | 4 ++-- storage/spider/spd_conn.cc | 8 ++++---- storage/spider/spd_db_conn.cc | 8 ++++---- storage/spider/spd_include.h | 12 ++++++++++-- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/storage/spider/ha_spider.cc b/storage/spider/ha_spider.cc index 2acf9a9d3af..25967862c4e 100644 --- a/storage/spider/ha_spider.cc +++ b/storage/spider/ha_spider.cc @@ -286,7 +286,7 @@ int ha_spider::open( uchar *rnd_write_bitmap; if (!(wide_handler = (SPIDER_WIDE_HANDLER *) #ifdef WITH_PARTITION_STORAGE_ENGINE - spider_bulk_malloc(spider_current_trx, 16, MYF(MY_WME | MY_ZEROFILL), + spider_bulk_malloc(spider_current_trx, SPD_MID_HA_SPIDER_OPEN_1, MYF(MY_WME | MY_ZEROFILL), &wide_handler, sizeof(SPIDER_WIDE_HANDLER), &searched_bitmap, (uint) sizeof(uchar) * no_bytes_in_map(table->read_set), @@ -306,7 +306,7 @@ int ha_spider::open( (uint) sizeof(SPIDER_PARTITION_HANDLER), NullS) #else - spider_bulk_malloc(spider_current_trx, 16, MYF(MY_WME | MY_ZEROFILL), + spider_bulk_malloc(spider_current_trx, SPD_MID_HA_SPIDER_OPEN_2, MYF(MY_WME | MY_ZEROFILL), &wide_handler, sizeof(SPIDER_WIDE_HANDLER), &searched_bitmap, (uint) sizeof(uchar) * no_bytes_in_map(table->read_set), diff --git a/storage/spider/spd_conn.cc b/storage/spider/spd_conn.cc index 8b7193ed94a..356d324cd1f 100644 --- a/storage/spider/spd_conn.cc +++ b/storage/spider/spd_conn.cc @@ -165,7 +165,7 @@ int spider_conn_init( ) { goto error_loop_checked_hash_init; } - spider_alloc_calc_mem_init(conn->loop_checked, 268); + spider_alloc_calc_mem_init(conn->loop_checked, SPD_MID_CONN_INIT_1); spider_alloc_calc_mem(spider_current_trx, conn->loop_checked, conn->loop_checked.array.max_element * @@ -176,7 +176,7 @@ int spider_conn_init( ) { goto error_loop_check_queue_hash_init; } - spider_alloc_calc_mem_init(conn->loop_check_queue, 269); + spider_alloc_calc_mem_init(conn->loop_check_queue, SPD_MID_CONN_INIT_2); spider_alloc_calc_mem(spider_current_trx, conn->loop_check_queue, conn->loop_check_queue.array.max_element * @@ -1108,7 +1108,7 @@ int spider_conn_queue_and_merge_loop_check( } else { /* Merge lcptr and lcqptr into a newly created lcrptr. */ DBUG_PRINT("info", ("spider append merged_value and replace")); - if (unlikely(!spider_bulk_malloc(spider_current_trx, 271, MYF(MY_WME), + if (unlikely(!spider_bulk_malloc(spider_current_trx, SPD_MID_CONN_QUEUE_AND_MERGE_LOOP_CHECK_1, MYF(MY_WME), &lcrptr, (uint) (sizeof(SPIDER_CONN_LOOP_CHECK)), &cur_name, (uint) (lcqptr->cur_name.length + 1), &to_name, (uint) (lcqptr->to_name.length + 1), @@ -1363,7 +1363,7 @@ int spider_conn_queue_loop_check( spider_free(spider_current_trx, lcptr, MYF(0)); } DBUG_PRINT("info", ("spider alloc_lcptr")); - if (unlikely(!spider_bulk_malloc(spider_current_trx, 272, MYF(MY_WME), + if (unlikely(!spider_bulk_malloc(spider_current_trx, SPD_MID_CONN_QUEUE_LOOP_CHECK_1, MYF(MY_WME), &lcptr, (uint) (sizeof(SPIDER_CONN_LOOP_CHECK)), &cur_name, (uint) (top_share->path.length + 1), &to_name, (uint) (to_str.length + 1), diff --git a/storage/spider/spd_db_conn.cc b/storage/spider/spd_db_conn.cc index c4259968b68..0d0f1bb2e08 100644 --- a/storage/spider/spd_db_conn.cc +++ b/storage/spider/spd_db_conn.cc @@ -4029,7 +4029,7 @@ int spider_db_store_result_for_reuse_cursor( if (!result_list->first) { if (!(result_list->first = (SPIDER_RESULT *) - spider_malloc(spider_current_trx, 4, sizeof(*result_list->first), + spider_malloc(spider_current_trx, SPD_MID_DB_STORE_RESULT_FOR_REUSE_CURSOR_1, sizeof(*result_list->first), MYF(MY_WME | MY_ZEROFILL))) ) { DBUG_RETURN(HA_ERR_OUT_OF_MEM); @@ -4055,7 +4055,7 @@ int spider_db_store_result_for_reuse_cursor( if (result_list->bgs_current == result_list->last) { if (!(result_list->last = (SPIDER_RESULT *) - spider_malloc(spider_current_trx, 5, sizeof(*result_list->last), + spider_malloc(spider_current_trx, SPD_MID_DB_STORE_RESULT_FOR_REUSE_CURSOR_2, sizeof(*result_list->last), MYF(MY_WME | MY_ZEROFILL))) ) { DBUG_RETURN(HA_ERR_OUT_OF_MEM); @@ -4084,7 +4084,7 @@ int spider_db_store_result_for_reuse_cursor( if (result_list->current == result_list->last) { if (!(result_list->last = (SPIDER_RESULT *) - spider_malloc(spider_current_trx, 6, sizeof(*result_list->last), + spider_malloc(spider_current_trx, SPD_MID_DB_STORE_RESULT_FOR_REUSE_CURSOR_3, sizeof(*result_list->last), MYF(MY_WME | MY_ZEROFILL))) ) { DBUG_RETURN(HA_ERR_OUT_OF_MEM); @@ -4213,7 +4213,7 @@ int spider_db_store_result_for_reuse_cursor( } current->field_count = field_count; if (!(position = (SPIDER_POSITION *) - spider_bulk_malloc(spider_current_trx, 7, MYF(MY_WME | MY_ZEROFILL), + spider_bulk_malloc(spider_current_trx, SPD_MID_DB_STORE_RESULT_FOR_REUSE_CURSOR_4, MYF(MY_WME | MY_ZEROFILL), &position, (uint) (sizeof(SPIDER_POSITION) * page_size), &tmp_row, (uint) (sizeof(SPIDER_DB_ROW) * field_count), NullS)) diff --git a/storage/spider/spd_include.h b/storage/spider/spd_include.h index 1643d1b350e..bb3dc92ed3a 100644 --- a/storage/spider/spd_include.h +++ b/storage/spider/spd_include.h @@ -166,7 +166,7 @@ typedef start_new_trans *SPIDER_Open_tables_backup; #define SPIDER_TMP_SHARE_LONG_COUNT 20 #define SPIDER_TMP_SHARE_LONGLONG_COUNT 3 -#define SPIDER_MEM_CALC_LIST_NUM 314 +#define SPIDER_MEM_CALC_LIST_NUM SPD_MID_LAST #define SPIDER_CONN_META_BUF_LEN 64 /* @@ -181,6 +181,10 @@ typedef start_new_trans *SPIDER_Open_tables_backup; */ enum spider_malloc_id { SPD_MID_CHECK_HS_PK_UPDATE_1, + SPD_MID_CONN_INIT_1, + SPD_MID_CONN_INIT_2, + SPD_MID_CONN_QUEUE_AND_MERGE_LOOP_CHECK_1, + SPD_MID_CONN_QUEUE_LOOP_CHECK_1, SPD_MID_COPY_TABLES_BODY_1, SPD_MID_COPY_TABLES_BODY_2, SPD_MID_COPY_TABLES_BODY_3, @@ -287,6 +291,9 @@ enum spider_malloc_id { SPD_MID_DB_STORE_RESULT_4, SPD_MID_DB_STORE_RESULT_5, SPD_MID_DB_STORE_RESULT_FOR_REUSE_CURSOR_1, + SPD_MID_DB_STORE_RESULT_FOR_REUSE_CURSOR_2, + SPD_MID_DB_STORE_RESULT_FOR_REUSE_CURSOR_3, + SPD_MID_DB_STORE_RESULT_FOR_REUSE_CURSOR_4, SPD_MID_DB_UDF_COPY_TABLES_1, SPD_MID_DB_UDF_PING_TABLE_1, SPD_MID_DB_UDF_PING_TABLE_2, @@ -438,7 +445,8 @@ enum spider_malloc_id { SPD_MID_UDF_DIRECT_SQL_CREATE_CONN_KEY_1, SPD_MID_UDF_DIRECT_SQL_CREATE_TABLE_LIST_1, SPD_MID_UDF_DIRECT_SQL_CREATE_TABLE_LIST_2, - SPD_MID_UDF_GET_COPY_TGT_TABLES_1 + SPD_MID_UDF_GET_COPY_TGT_TABLES_1, + SPD_MID_LAST }; #define SPIDER_BACKUP_DASTATUS \ From 77ed235d50bd9b1480f26d18ea0b70ca7480af23 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Tue, 15 Oct 2024 15:36:12 +1100 Subject: [PATCH 034/121] MDEV-26345 Spider GBH should execute original queries on the data node Stop skipping const items when selecting but skip them when storing their results to spider row to avoid storing in mismatching temporary table fields. Skip auxiliary fields in SELECTing, and do not store the (non-existing) results to the corresponding temporary table accordingly. When there are BOTH auxiliary fields AND const items in the auxiliary field items, do not use the spider GBH. This is a rare occasion if it happens at all and not worth the added complexity to cover it. Use the original item (item_ptr) in constructing GROUP BY and ORDER BY, which also means using item->name instead of field->field_name as aliases in constructing SELECT items. This fixes spurious regressions caused by the above changes in some tests using ORDER BY, such as mdev_24517.test. As a by-product, this also fixes MDEV-29546. Therefore we update mdev_29008.test to include the MDEV-29546 case. --- sql/group_by_handler.h | 7 +- sql/sql_select.cc | 4 +- sql/sql_select.h | 2 +- storage/spider/ha_spider.cc | 78 ++++--------------- storage/spider/ha_spider.h | 2 + .../spider/bugfix/r/mdev_20502.result | 8 +- .../spider/bugfix/r/mdev_26345.result | 48 ++++++++++++ .../spider/bugfix/r/mdev_29008.result | 15 ++++ .../bugfix/r/select_with_backquote.result | 2 +- .../spider/bugfix/t/mdev_26345.test | 63 +++++++++++++++ .../spider/bugfix/t/mdev_29008.test | 13 ++++ .../mysql-test/spider/r/direct_join.result | 2 +- .../spider/r/direct_join_using.result | 2 +- .../spider/r/direct_left_join.result | 2 +- .../spider/r/direct_right_join.result | 2 +- .../mysql-test/spider/r/timestamp.result | 2 +- storage/spider/spd_db_conn.cc | 10 ++- storage/spider/spd_db_include.h | 13 +++- storage/spider/spd_db_mysql.cc | 55 ++++++++----- storage/spider/spd_db_mysql.h | 8 +- storage/spider/spd_group_by_handler.cc | 47 +++++++++-- storage/spider/spd_group_by_handler.h | 10 ++- 22 files changed, 286 insertions(+), 109 deletions(-) create mode 100644 storage/spider/mysql-test/spider/bugfix/r/mdev_26345.result create mode 100644 storage/spider/mysql-test/spider/bugfix/t/mdev_26345.test diff --git a/sql/group_by_handler.h b/sql/group_by_handler.h index 5457cb778f5..2a51956f3c1 100644 --- a/sql/group_by_handler.h +++ b/sql/group_by_handler.h @@ -53,6 +53,8 @@ class Select_limit_counters; struct Query { List *select; + /* Number of auxiliary fields. */ + int n_aux; bool distinct; TABLE_LIST *from; Item *where; @@ -71,7 +73,10 @@ public: /* Temporary table where all results should be stored in record[0] - The table has a field for every item from the Query::select list. + The table has a field for every item from the Query::select list, + except for const items and some other exceptions, see + Create_tmp_table::add_fields() for which items are included and + which are skipped. */ TABLE *table; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index fcc1e4dbfea..37ec152141c 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -3400,7 +3400,9 @@ bool JOIN::make_aggr_tables_info() original DISTINCT. Thus, we set select_distinct || group_optimized_away to Query::distinct. */ - Query query= {&all_fields, select_distinct || group_optimized_away, + Query query= {&all_fields, + (int) all_fields.elements - (int) fields_list.elements, + select_distinct || group_optimized_away, tables_list, conds, group_list, order ? order : group_list, having, &select_lex->master_unit()->lim}; diff --git a/sql/sql_select.h b/sql/sql_select.h index 49632077ed8..86947fc0bc6 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -1473,7 +1473,7 @@ public: Then, ORDER/GROUP BY and Window Function code add columns that need to be saved to be available in the post-group-by context. These extra columns - are added to the front, because this->all_fields points to the suffix of + are added to the front, because this->fields_list points to the suffix of this list. */ List all_fields; diff --git a/storage/spider/ha_spider.cc b/storage/spider/ha_spider.cc index 25967862c4e..8aff2858c3a 100644 --- a/storage/spider/ha_spider.cc +++ b/storage/spider/ha_spider.cc @@ -52,13 +52,9 @@ extern pthread_mutex_t spider_lgtm_tblhnd_share_mutex; /* UTC time zone for timestamp columns */ extern Time_zone *UTC; -ha_spider::ha_spider( -) : handler(spider_hton_ptr, NULL) +void ha_spider::init_fields() { - DBUG_ENTER("ha_spider::ha_spider"); - DBUG_PRINT("info",("spider this=%p", this)); - spider_alloc_calc_mem_init(mem_calc, SPD_MID_HA_SPIDER_HA_SPIDER_1); - spider_alloc_calc_mem(spider_current_trx, mem_calc, sizeof(*this)); + DBUG_ENTER("ha_spider::init_fields"); share = NULL; conns = NULL; need_mons = NULL; @@ -113,6 +109,20 @@ ha_spider::ha_spider( result_list.casual_read = NULL; result_list.use_both_key = FALSE; result_list.in_cmp_ref = FALSE; + result_list.skips= NULL; + result_list.n_aux= 0; + ref_length = sizeof(SPIDER_POSITION); + DBUG_VOID_RETURN; +} + +ha_spider::ha_spider( +) : handler(spider_hton_ptr, NULL) +{ + DBUG_ENTER("ha_spider::ha_spider"); + DBUG_PRINT("info",("spider this=%p", this)); + spider_alloc_calc_mem_init(mem_calc, SPD_MID_HA_SPIDER_HA_SPIDER_1); + spider_alloc_calc_mem(spider_current_trx, mem_calc, sizeof(*this)); + init_fields(); DBUG_VOID_RETURN; } @@ -125,61 +135,7 @@ ha_spider::ha_spider( DBUG_PRINT("info",("spider this=%p", this)); spider_alloc_calc_mem_init(mem_calc, SPD_MID_HA_SPIDER_HA_SPIDER_2); spider_alloc_calc_mem(spider_current_trx, mem_calc, sizeof(*this)); - share = NULL; - conns = NULL; - need_mons = NULL; - blob_buff = NULL; - conn_keys = NULL; - spider_thread_id = 0; - trx_conn_adjustment = 0; - search_link_query_id = 0; -#ifdef WITH_PARTITION_STORAGE_ENGINE - partition_handler = NULL; -#endif -#ifdef HA_MRR_USE_DEFAULT_IMPL - multi_range_keys = NULL; - mrr_key_buff = NULL; -#endif - append_tblnm_alias = NULL; - use_index_merge = FALSE; - is_clone = FALSE; - pt_clone_source_handler = NULL; - pt_clone_last_searcher = NULL; - ft_handler = NULL; - ft_first = NULL; - ft_current = NULL; - ft_count = 0; - ft_init_without_index_init = FALSE; - sql_kinds = 0; - error_mode = 0; - use_spatial_index = FALSE; - use_fields = FALSE; - dml_inited = FALSE; - use_pre_call = FALSE; - use_pre_action = FALSE; - do_direct_update = FALSE; - prev_index_rnd_init = SPD_NONE; - direct_aggregate_item_first = NULL; - result_link_idx = 0; - result_list.have_sql_kind_backup = FALSE; - result_list.sqls = NULL; - result_list.insert_sqls = NULL; - result_list.update_sqls = NULL; - result_list.tmp_sqls = NULL; - result_list.tmp_tables_created = FALSE; - result_list.bgs_working = FALSE; - result_list.direct_order_limit = FALSE; - result_list.direct_limit_offset = FALSE; - result_list.set_split_read = FALSE; - result_list.insert_dup_update_pushdown = FALSE; - result_list.tmp_pos_row_first = NULL; - result_list.direct_aggregate = FALSE; - result_list.snap_direct_aggregate = FALSE; - result_list.direct_distinct = FALSE; - result_list.casual_read = NULL; - result_list.use_both_key = FALSE; - result_list.in_cmp_ref = FALSE; - ref_length = sizeof(SPIDER_POSITION); + init_fields(); DBUG_VOID_RETURN; } diff --git a/storage/spider/ha_spider.h b/storage/spider/ha_spider.h index 6d2e0e40c57..34fad7eee96 100644 --- a/storage/spider/ha_spider.h +++ b/storage/spider/ha_spider.h @@ -910,6 +910,8 @@ public: int append_lock_tables_list(); int lock_tables(); int dml_init(); +private: + void init_fields(); }; diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_20502.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_20502.result index e5f16b81329..beea6837bd9 100644 --- a/storage/spider/mysql-test/spider/bugfix/r/mdev_20502.result +++ b/storage/spider/mysql-test/spider/bugfix/r/mdev_20502.result @@ -54,13 +54,13 @@ m const val sq connection child2_1; SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; argument -select t0.`id` `id`,t0.`val` `val` from `auto_test_remote`.`tbl_a` t0 -select t0.`id` `id`,t0.`val` `val`,(t0.`val` + 10) `val+10` from `auto_test_remote`.`tbl_a` t0 +select t0.`id` `id`,0 `const`,t0.`val` `val` from `auto_test_remote`.`tbl_a` t0 +select `id`,`val` from `auto_test_remote`.`tbl_a` select (t0.`val` + 1) `tbl_a.val+1` from `auto_test_remote`.`tbl_a` t0 select `id`,`val` from `auto_test_remote`.`tbl_a` order by `id` desc limit 1 for update -select (t0.`val` + 10) `val+10`,t0.`val` `val` from `auto_test_remote`.`tbl_a` t0 group by t0.`val` order by t0.`val` +select `val` from `auto_test_remote`.`tbl_a` group by `val` select (t0.`val` + 1) `tbl_a.val+1` from `auto_test_remote`.`tbl_a` t0 limit 1 -select max(t0.`id`) `m`,t0.`val` `val` from `auto_test_remote`.`tbl_a` t0 group by t0.`val` order by t0.`val` +select max(`id`),min(`id`),`val` from `auto_test_remote`.`tbl_a` group by `val` select (t0.`val` + 1) `tbl_a.val+1` from `auto_test_remote`.`tbl_a` t0 limit 1 SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %' SELECT id, val FROM tbl_a ORDER BY id; diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_26345.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_26345.result new file mode 100644 index 00000000000..f7d78521472 --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/r/mdev_26345.result @@ -0,0 +1,48 @@ +for master_1 +for child2 +for child3 + +MDEV-26345 SELECT MIN on Spider table returns more rows than expected + +set spider_same_server_link= 1; +CREATE SERVER srv FOREIGN DATA WRAPPER mysql +OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root'); +create table t2 (a int, b int, PRIMARY KEY (a, b)); +create table t1 (a int, b int, PRIMARY KEY (a, b)) ENGINE=Spider +COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"'; +insert into t1 VALUES (1,4), (1,2), (2,11); +SELECT MIN(b), a FROM t1 WHERE a=1; +MIN(b) a +2 1 +SELECT MAX(b), a FROM t1 WHERE a<3; +MAX(b) a +11 1 +drop table t1, t2; +create table t2 (a int, b int, c int, PRIMARY KEY (a, b)); +create table t1 (a int, b int, c int, PRIMARY KEY (a, b)) ENGINE=Spider +COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"'; +insert into t2 VALUES (1,4,1), (1,2,2), (2,11,3); +SELECT MIN(b), a, c FROM t1 WHERE a=1; +MIN(b) a c +2 1 2 +drop table t1, t2; +create table t2 (a int, b int); +create table t1 ENGINE=Spider +COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"'; +insert into t1 VALUES (1,1), (1,1), (2,2), (2,2); +select distinct count(a) from t1 group by b; +count(a) +2 +drop table t1, t2; +create table t2 (c int); +create table t1 (c int) ENGINE=Spider +COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"'; +insert into t1 values (1),(3),(5),(7),(9),(11),(13),(15); +select count(c) as d from t1 having d > 5; +d +8 +drop table t1, t2; +drop server srv; +for master_1 +for child2 +for child3 diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_29008.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_29008.result index 66e33f42a7e..10bf1cc1d9c 100644 --- a/storage/spider/mysql-test/spider/bugfix/r/mdev_29008.result +++ b/storage/spider/mysql-test/spider/bugfix/r/mdev_29008.result @@ -15,6 +15,10 @@ a INT, b INT ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO tbl_a VALUES (1,2),(3,4); +set @old_general_log=@@global.general_log; +set global general_log=1; +set @old_log_output=@@global.log_output; +set global log_output="TABLE"; connection master_1; CREATE DATABASE auto_test_local; USE auto_test_local; @@ -26,9 +30,20 @@ SELECT MIN(t2.a) AS f1, t1.b AS f2 FROM tbl_a AS t1 JOIN tbl_a AS t2 GROUP BY f2 f1 f2 1 2 1 4 +SELECT MIN(t2.a) AS f1, t1.b AS f2 FROM tbl_a AS t1 JOIN tbl_a AS t2 GROUP BY f2 ORDER BY MIN(t2.a), MAX(t2.a), f2; +f1 f2 +1 2 +1 4 connection master_1; DROP DATABASE IF EXISTS auto_test_local; connection child2_1; +SELECT argument FROM mysql.general_log WHERE argument LIKE 'select %'; +argument +select min(t1.`a`) `f1`,t0.`b` `f2` from `auto_test_remote`.`tbl_a` t0 join `auto_test_remote`.`tbl_a` t1 group by `f2` order by `f1`,`f2` +select min(t1.`a`) `f1`,t0.`b` `f2` from `auto_test_remote`.`tbl_a` t0 join `auto_test_remote`.`tbl_a` t1 group by `f2` order by min(t1.`a`),max(t1.`a`),`f2` +SELECT argument FROM mysql.general_log WHERE argument LIKE 'select %' +set global log_output=@old_log_output; +set global general_log=@old_general_log; DROP DATABASE IF EXISTS auto_test_remote; for master_1 for child2 diff --git a/storage/spider/mysql-test/spider/bugfix/r/select_with_backquote.result b/storage/spider/mysql-test/spider/bugfix/r/select_with_backquote.result index 52f8c98bf98..732446f9fb1 100644 --- a/storage/spider/mysql-test/spider/bugfix/r/select_with_backquote.result +++ b/storage/spider/mysql-test/spider/bugfix/r/select_with_backquote.result @@ -44,7 +44,7 @@ connection child2_1; SET NAMES utf8; SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; argument -select t0.`pkey` `pkey`,(left(t0.`txt_utf8` , 4)) `LEFT(``txt_utf8``, 4)` from `auto_test_remote`.`tbl_a` t0 order by `LEFT(``txt_utf8``, 4)` limit 3 +select t0.`pkey` `pkey`,(left(t0.`txt_utf8` , 4)) `LEFT(``txt_utf8``, 4)` from `auto_test_remote`.`tbl_a` t0 order by (left(`txt_utf8` , 4)) limit 3 SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %' SELECT pkey, txt_utf8 FROM tbl_a ORDER BY pkey; pkey txt_utf8 diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_26345.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_26345.test new file mode 100644 index 00000000000..72069253e84 --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_26345.test @@ -0,0 +1,63 @@ +--disable_warnings +--disable_query_log +--disable_result_log +--source ../../t/test_init.inc +--enable_result_log +--enable_query_log +--enable_warnings + +--echo +--echo MDEV-26345 SELECT MIN on Spider table returns more rows than expected +--echo + +set spider_same_server_link= 1; +evalp CREATE SERVER srv FOREIGN DATA WRAPPER mysql +OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root'); + +# Case 1: implicit grouping: the const item is SELECTed, but its +# results discarded when storing to the temp table +create table t2 (a int, b int, PRIMARY KEY (a, b)); +create table t1 (a int, b int, PRIMARY KEY (a, b)) ENGINE=Spider +COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"'; +insert into t1 VALUES (1,4), (1,2), (2,11); +SELECT MIN(b), a FROM t1 WHERE a=1; +SELECT MAX(b), a FROM t1 WHERE a<3; +drop table t1, t2; + +# Case 2: implicit grouping: the const item is SELECTed, but its +# results discarded when storing to the temp table +create table t2 (a int, b int, c int, PRIMARY KEY (a, b)); +create table t1 (a int, b int, c int, PRIMARY KEY (a, b)) ENGINE=Spider +COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"'; +insert into t2 VALUES (1,4,1), (1,2,2), (2,11,3); +SELECT MIN(b), a, c FROM t1 WHERE a=1; +drop table t1, t2; + +# Case 3: auxiliary fields should not be SELECTed +create table t2 (a int, b int); +create table t1 ENGINE=Spider +COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"'; +insert into t1 VALUES (1,1), (1,1), (2,2), (2,2); +# b is an auxiliary field item. If it was SELECTed, two rows would +# return instead of one. +select distinct count(a) from t1 group by b; +drop table t1, t2; + +# Case 4: having should still work, despite referring to auxiliary +# field items which are not SELECTed +create table t2 (c int); +create table t1 (c int) ENGINE=Spider +COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"'; +insert into t1 values (1),(3),(5),(7),(9),(11),(13),(15); +select count(c) as d from t1 having d > 5; +drop table t1, t2; + +drop server srv; + +--disable_warnings +--disable_query_log +--disable_result_log +--source ../../t/test_deinit.inc +--enable_result_log +--enable_query_log +--enable_warnings diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_29008.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_29008.test index 28d9a9244e3..f36855d8e71 100644 --- a/storage/spider/mysql-test/spider/bugfix/t/mdev_29008.test +++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_29008.test @@ -17,6 +17,11 @@ eval CREATE TABLE tbl_a ( ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET; INSERT INTO tbl_a VALUES (1,2),(3,4); +set @old_general_log=@@global.general_log; +set global general_log=1; +set @old_log_output=@@global.log_output; +set global log_output="TABLE"; + --connection master_1 CREATE DATABASE auto_test_local; USE auto_test_local; @@ -25,11 +30,19 @@ eval CREATE TABLE tbl_a ( b INT ) $MASTER_1_ENGINE $MASTER_1_CHARSET COMMENT='table "tbl_a", srv "s_2_1"'; +--disable_ps2_protocol SELECT MIN(t2.a) AS f1, t1.b AS f2 FROM tbl_a AS t1 JOIN tbl_a AS t2 GROUP BY f2 ORDER BY f1, f2; +SELECT MIN(t2.a) AS f1, t1.b AS f2 FROM tbl_a AS t1 JOIN tbl_a AS t2 GROUP BY f2 ORDER BY MIN(t2.a), MAX(t2.a), f2; +--enable_ps2_protocol --connection master_1 DROP DATABASE IF EXISTS auto_test_local; --connection child2_1 +--disable_ps2_protocol +SELECT argument FROM mysql.general_log WHERE argument LIKE 'select %'; +--enable_ps2_protocol +set global log_output=@old_log_output; +set global general_log=@old_general_log; DROP DATABASE IF EXISTS auto_test_remote; --disable_query_log diff --git a/storage/spider/mysql-test/spider/r/direct_join.result b/storage/spider/mysql-test/spider/r/direct_join.result index 5c0f4c808a0..b5511cb8c9c 100644 --- a/storage/spider/mysql-test/spider/r/direct_join.result +++ b/storage/spider/mysql-test/spider/r/direct_join.result @@ -76,7 +76,7 @@ a b c connection child2_1; SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; argument -select t0.`b` `b`,t0.`a` `a`,t2.`b` `b`,t2.`c` `c` from `auto_test_remote`.`ta_r` t0 join `auto_test_remote`.`ta_r_3` t1 join `auto_test_remote`.`ta_r_int` t2 where ((t0.`a` = t1.`a`) and (t2.`a` = t1.`a`)) order by t0.`b` desc limit 1,2 +select t0.`a` `a`,t2.`b` `b`,t2.`c` `c` from `auto_test_remote`.`ta_r` t0 join `auto_test_remote`.`ta_r_3` t1 join `auto_test_remote`.`ta_r_int` t2 where ((t0.`a` = t1.`a`) and (t2.`a` = t1.`a`)) order by t0.`b` desc limit 1,2 SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %' SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_r ORDER BY a; a b date_format(c, '%Y-%m-%d %H:%i:%s') diff --git a/storage/spider/mysql-test/spider/r/direct_join_using.result b/storage/spider/mysql-test/spider/r/direct_join_using.result index 93df7b8cd3f..1a4708a739b 100644 --- a/storage/spider/mysql-test/spider/r/direct_join_using.result +++ b/storage/spider/mysql-test/spider/r/direct_join_using.result @@ -79,7 +79,7 @@ a b c connection child2_1; SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; argument -select t0.`b` `b`,t0.`a` `a`,t2.`b` `b`,t2.`c` `c` from `auto_test_remote`.`ta_r` t0 join `auto_test_remote`.`ta_r_3` t1 join `auto_test_remote`.`ta_r_int` t2 where ((t0.`a` = t1.`a`) and (t2.`a` = t1.`a`)) order by t0.`b` desc +select t0.`a` `a`,t2.`b` `b`,t2.`c` `c` from `auto_test_remote`.`ta_r` t0 join `auto_test_remote`.`ta_r_3` t1 join `auto_test_remote`.`ta_r_int` t2 where ((t0.`a` = t1.`a`) and (t2.`a` = t1.`a`)) order by t0.`b` desc SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %' SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_r ORDER BY a; a b date_format(c, '%Y-%m-%d %H:%i:%s') diff --git a/storage/spider/mysql-test/spider/r/direct_left_join.result b/storage/spider/mysql-test/spider/r/direct_left_join.result index b63f0661b2e..b2149436e03 100644 --- a/storage/spider/mysql-test/spider/r/direct_left_join.result +++ b/storage/spider/mysql-test/spider/r/direct_left_join.result @@ -79,7 +79,7 @@ a b c connection child2_1; SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; argument -select t0.`b` `b`,t0.`a` `a`,t2.`b` `b`,t2.`c` `c` from `auto_test_remote`.`ta_r` t0 left join `auto_test_remote`.`ta_r_3` t1 on (t1.`a` = t0.`a`) left join `auto_test_remote`.`ta_r_int` t2 on (t2.`a` = t0.`a`) where 1 order by t0.`b` desc +select t0.`a` `a`,t2.`b` `b`,t2.`c` `c` from `auto_test_remote`.`ta_r` t0 left join `auto_test_remote`.`ta_r_3` t1 on (t1.`a` = t0.`a`) left join `auto_test_remote`.`ta_r_int` t2 on (t2.`a` = t0.`a`) where 1 order by t0.`b` desc SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %' SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_r ORDER BY a; a b date_format(c, '%Y-%m-%d %H:%i:%s') diff --git a/storage/spider/mysql-test/spider/r/direct_right_join.result b/storage/spider/mysql-test/spider/r/direct_right_join.result index b42e40031e3..5504c4b557a 100644 --- a/storage/spider/mysql-test/spider/r/direct_right_join.result +++ b/storage/spider/mysql-test/spider/r/direct_right_join.result @@ -79,7 +79,7 @@ a b c connection child2_1; SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; argument -select t0.`b` `b`,t0.`a` `a`,t2.`b` `b`,t2.`c` `c` from `auto_test_remote`.`ta_r_int` t2 left join (`auto_test_remote`.`ta_r_3` t1 join `auto_test_remote`.`ta_r` t0) on ((t0.`a` = t2.`a`) and (t1.`a` = t2.`a`)) where 1 order by t0.`b` desc +select t0.`a` `a`,t2.`b` `b`,t2.`c` `c` from `auto_test_remote`.`ta_r_int` t2 left join (`auto_test_remote`.`ta_r_3` t1 join `auto_test_remote`.`ta_r` t0) on ((t0.`a` = t2.`a`) and (t1.`a` = t2.`a`)) where 1 order by t0.`b` desc SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %' SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_r ORDER BY a; a b date_format(c, '%Y-%m-%d %H:%i:%s') diff --git a/storage/spider/mysql-test/spider/r/timestamp.result b/storage/spider/mysql-test/spider/r/timestamp.result index 20e99dc02f8..c7a2a3ebe86 100644 --- a/storage/spider/mysql-test/spider/r/timestamp.result +++ b/storage/spider/mysql-test/spider/r/timestamp.result @@ -396,7 +396,7 @@ select t0.`col_d` `col_d`,t0.`col_t` `col_t` from `ts_test_remote`.`tbl_f` t0 select (timestamp(t0.`col_d` , t0.`col_t`)) `TIMESTAMP(col_d, col_t)` from `ts_test_remote`.`tbl_f` t0 select (timestamp('2018-06-25' , t0.`col_t`)) `TIMESTAMP('2018-06-25', col_t)` from `ts_test_remote`.`tbl_f` t0 select (timestamp(t0.`col_d` , '10:43:21')) `TIMESTAMP(col_d, '10:43:21')` from `ts_test_remote`.`tbl_f` t0 -select 1 from `ts_test_remote`.`tbl_f` t0 +select (timestamp('2018-06-25' , '10:43:21')) `TIMESTAMP('2018-06-25', '10:43:21')` from `ts_test_remote`.`tbl_f` t0 SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %' SELECT col_d, col_t FROM tbl_f; col_d col_t diff --git a/storage/spider/spd_db_conn.cc b/storage/spider/spd_db_conn.cc index 0d0f1bb2e08..72489a1777e 100644 --- a/storage/spider/spd_db_conn.cc +++ b/storage/spider/spd_db_conn.cc @@ -2827,6 +2827,7 @@ int spider_db_get_row_from_tmp_tbl_pos( DBUG_RETURN(0); } +/* Store one field result from a given row to a given table field. */ int spider_db_fetch_row( SPIDER_SHARE *share, Field *field, @@ -2851,6 +2852,10 @@ int spider_db_fetch_row( DBUG_RETURN(error_num); } +/* + Retrieve a result row and store the results from the row into the + given table +*/ int spider_db_fetch_table( ha_spider *spider, uchar *buf, @@ -2863,6 +2868,7 @@ int spider_db_fetch_table( SPIDER_RESULT *current = (SPIDER_RESULT*) result_list->current; SPIDER_DB_ROW *row; Field **field; + int n_aux= result_list->n_aux; DBUG_ENTER("spider_db_fetch_table"); if (result_list->quick_mode == 0) { @@ -2940,6 +2946,8 @@ int spider_db_fetch_table( *field; field++ ) { + if (n_aux-- > 0) + continue; if (( bitmap_is_set(table->read_set, (*field)->field_index) | bitmap_is_set(table->write_set, (*field)->field_index) @@ -3788,7 +3796,7 @@ int spider_db_store_result( } current->dbton_id = current->result->dbton_id; SPIDER_DB_ROW *row; - if (!(row = current->result->fetch_row())) + if (!(row = current->result->fetch_row(result_list->skips))) { error_num = current->result->get_errno(); DBUG_PRINT("info",("spider set finish_flg point 3")); diff --git a/storage/spider/spd_db_include.h b/storage/spider/spd_db_include.h index eb7875ac056..430cd8479be 100644 --- a/storage/spider/spd_db_include.h +++ b/storage/spider/spd_db_include.h @@ -801,6 +801,7 @@ public: SPIDER_DB_ROW *next_pos; spider_db_row(uint in_dbton_id) : dbton_id(in_dbton_id), next_pos(NULL) {} virtual ~spider_db_row() = default; + /* Store the current field result to a given field */ virtual int store_to_field( Field *field, CHARSET_INFO *access_charset @@ -813,6 +814,7 @@ public: uint dbton_id ) = 0; virtual void first() = 0; + /* Move to the next field result. */ virtual void next() = 0; virtual bool is_null() = 0; virtual int val_int() = 0; @@ -851,7 +853,7 @@ public: virtual bool has_result() = 0; virtual void free_result() = 0; virtual SPIDER_DB_ROW *current_row() = 0; - virtual SPIDER_DB_ROW *fetch_row() = 0; + virtual SPIDER_DB_ROW *fetch_row(MY_BITMAP *skips = NULL) = 0; virtual SPIDER_DB_ROW *fetch_row_from_result_buffer( spider_db_result_buffer *spider_res_buf ) = 0; @@ -1549,7 +1551,8 @@ public: uint alias_length, bool use_fields, spider_fields *fields, - ulong sql_type + ulong sql_type, + int n_aux=0 ) = 0; virtual int append_group_by_part( ORDER *order, @@ -1838,4 +1841,10 @@ typedef struct st_spider_result_list #endif SPIDER_RESULT *bgs_current; SPIDER_DB_ROW *tmp_pos_row_first; + /* + A bitmap marking fields to skip when storing results fetched from + the data node to a SPIDER_DB_ROW + */ + MY_BITMAP *skips; + int n_aux; } SPIDER_RESULT_LIST; diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc index 7e10b796f25..92885783daf 100644 --- a/storage/spider/spd_db_mysql.cc +++ b/storage/spider/spd_db_mysql.cc @@ -716,7 +716,13 @@ SPIDER_DB_ROW *spider_db_mbase_result::current_row() DBUG_RETURN((SPIDER_DB_ROW *) row.clone()); } -SPIDER_DB_ROW *spider_db_mbase_result::fetch_row() +/* + Fetch results from the data node and store them in a + SPIDER_DB_ROW + + @param skips A bitmap specifying which fields to skip storing +*/ +SPIDER_DB_ROW *spider_db_mbase_result::fetch_row(MY_BITMAP *skips) { DBUG_ENTER("spider_db_mbase_result::fetch_row"); DBUG_PRINT("info",("spider this=%p", this)); @@ -732,7 +738,22 @@ SPIDER_DB_ROW *spider_db_mbase_result::fetch_row() DBUG_RETURN(NULL); } row.lengths = mysql_fetch_lengths(db_result); - row.field_count = mysql_num_fields(db_result); + if (skips != NULL) + { + uint i= 0; + for (uint j= 0; j < mysql_num_fields(db_result); j++) + { + if (!bitmap_is_set(skips, j)) + { + row.row[i]= row.row[j]; + row.lengths[i]= row.lengths[j]; + i++; + } + } + row.field_count= i; + } + else + row.field_count = mysql_num_fields(db_result); row.row[row.field_count] = NULL; row.row_first = row.row; row.lengths_first = row.lengths; @@ -13944,7 +13965,8 @@ int spider_mbase_handler::append_list_item_select_part( uint alias_length, bool use_fields, spider_fields *fields, - ulong sql_type + ulong sql_type, + int n_aux ) { int error_num; spider_string *str; @@ -13959,7 +13981,7 @@ int spider_mbase_handler::append_list_item_select_part( DBUG_RETURN(0); } error_num = append_list_item_select(select, str, alias, alias_length, - use_fields, fields); + use_fields, fields, n_aux); DBUG_RETURN(error_num); } @@ -13969,38 +13991,29 @@ int spider_mbase_handler::append_list_item_select( const char *alias, uint alias_length, bool use_fields, - spider_fields *fields + spider_fields *fields, + int n_aux ) { int error_num; uint32 length, begin; List_iterator_fast it(*select); Item *item; - Field *field; const char *item_name; DBUG_ENTER("spider_mbase_handler::append_list_item_select"); DBUG_PRINT("info",("spider this=%p", this)); begin = str->length(); while ((item = it++)) { - if (item->const_item()) - { - DBUG_PRINT("info",("spider const item")); + fields->get_next_field_ptr(); + if (n_aux-- > 0) continue; - } if ((error_num = spider_db_print_item_type(item, NULL, spider, str, alias, alias_length, dbton_id, use_fields, fields))) { DBUG_RETURN(error_num); } - field = *(fields->get_next_field_ptr()); - if (field) - { - item_name = SPIDER_field_name_str(field); - length = SPIDER_field_name_length(field); - } else { - item_name = SPIDER_item_name_str(item); - length = SPIDER_item_name_length(item); - } + item_name = SPIDER_item_name_str(item); + length = SPIDER_item_name_length(item); if (str->reserve( SPIDER_SQL_COMMA_LEN + /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + SPIDER_SQL_SPACE_LEN + length @@ -14071,7 +14084,7 @@ int spider_mbase_handler::append_group_by( str->q_append(SPIDER_SQL_GROUP_STR, SPIDER_SQL_GROUP_LEN); for (; order; order = order->next) { - if ((error_num = spider_db_print_item_type((*order->item), NULL, spider, + if ((error_num = spider_db_print_item_type(order->item_ptr, NULL, spider, str, alias, alias_length, dbton_id, use_fields, fields))) { DBUG_RETURN(error_num); @@ -14128,7 +14141,7 @@ int spider_mbase_handler::append_order_by( str->q_append(SPIDER_SQL_ORDER_STR, SPIDER_SQL_ORDER_LEN); for (; order; order = order->next) { - if ((error_num = spider_db_print_item_type((*order->item), NULL, spider, + if ((error_num = spider_db_print_item_type(order->item_ptr, NULL, spider, str, alias, alias_length, dbton_id, use_fields, fields))) { DBUG_RETURN(error_num); diff --git a/storage/spider/spd_db_mysql.h b/storage/spider/spd_db_mysql.h index 028a69e843b..ac00217ff4c 100644 --- a/storage/spider/spd_db_mysql.h +++ b/storage/spider/spd_db_mysql.h @@ -294,7 +294,7 @@ public: bool has_result() override; void free_result() override; SPIDER_DB_ROW *current_row() override; - SPIDER_DB_ROW *fetch_row() override; + SPIDER_DB_ROW *fetch_row(MY_BITMAP *) override; SPIDER_DB_ROW *fetch_row_from_result_buffer( spider_db_result_buffer *spider_res_buf ) override; @@ -1493,7 +1493,8 @@ public: uint alias_length, bool use_fields, spider_fields *fields, - ulong sql_type + ulong sql_type, + int n_aux=0 ) override; int append_list_item_select( List *select, @@ -1501,7 +1502,8 @@ public: const char *alias, uint alias_length, bool use_fields, - spider_fields *fields + spider_fields *fields, + int n_aux ); int append_group_by_part( ORDER *order, diff --git a/storage/spider/spd_group_by_handler.cc b/storage/spider/spd_group_by_handler.cc index 2e4eb003371..f5889edc59e 100644 --- a/storage/spider/spd_group_by_handler.cc +++ b/storage/spider/spd_group_by_handler.cc @@ -978,13 +978,16 @@ int spider_fields::ping_table_mon_from_table( spider_group_by_handler::spider_group_by_handler( THD *thd_arg, Query *query_arg, - spider_fields *fields_arg + spider_fields *fields_arg, + const MY_BITMAP &skips1 ) : group_by_handler(thd_arg, spider_hton_ptr), query(*query_arg), fields(fields_arg) { DBUG_ENTER("spider_group_by_handler::spider_group_by_handler"); spider = fields->get_first_table_holder()->spider; trx = spider->wide_handler->trx; + my_bitmap_init(&skips, NULL, skips1.n_bits, TRUE); + bitmap_copy(&skips, &skips1); DBUG_VOID_RETURN; } @@ -993,11 +996,18 @@ spider_group_by_handler::~spider_group_by_handler() DBUG_ENTER("spider_group_by_handler::~spider_group_by_handler"); spider_free(spider_current_trx, fields->get_first_table_holder(), MYF(0)); delete fields; + my_bitmap_free(&skips); + /* + The `skips' bitmap may have been copied to the result_list field + of the same name + */ + spider->result_list.skips= NULL; + spider->result_list.n_aux= 0; DBUG_VOID_RETURN; } static int spider_prepare_init_scan( - const Query& query, spider_fields *fields, ha_spider *spider, + const Query& query, MY_BITMAP *skips, spider_fields *fields, ha_spider *spider, SPIDER_TRX *trx, longlong& offset_limit, THD *thd) { int error_num, link_idx; @@ -1072,6 +1082,8 @@ static int spider_prepare_init_scan( result_list->limit_num = result_list->internal_limit >= result_list->split_read ? result_list->split_read : result_list->internal_limit; + result_list->skips= skips; + result_list->n_aux= query.n_aux; if (select_lex->explicit_limit) { @@ -1101,7 +1113,8 @@ static int spider_make_query(const Query& query, spider_fields* fields, ha_spide DBUG_RETURN(error_num); fields->set_field_ptr(table->field); if ((error_num = dbton_hdl->append_list_item_select_part( - query.select, NULL, 0, TRUE, fields, SPIDER_SQL_TYPE_SELECT_SQL))) + query.select, NULL, 0, TRUE, fields, SPIDER_SQL_TYPE_SELECT_SQL, + query.n_aux))) DBUG_RETURN(error_num); if ((error_num = dbton_hdl->append_from_and_tables_part( fields, SPIDER_SQL_TYPE_SELECT_SQL))) @@ -1276,7 +1289,7 @@ int spider_group_by_handler::init_scan() } if ((error_num = spider_prepare_init_scan( - query, fields, spider, trx, offset_limit, thd))) + query, &skips, fields, spider, trx, offset_limit, thd))) DBUG_RETURN(error_num); if ((error_num = spider_make_query(query, fields, spider, table))) @@ -1397,6 +1410,7 @@ group_by_handler *spider_create_group_by_handler( SPIDER_TABLE_HOLDER *table_holder; uint table_idx, dbton_id, table_count= 0; long tgt_link_status; + MY_BITMAP skips; DBUG_ENTER("spider_create_group_by_handler"); switch (thd_sql_command(thd)) @@ -1543,13 +1557,30 @@ group_by_handler *spider_create_group_by_handler( fields_arg->set_table_holder(table_holder, table_count); keep_going = TRUE; it.init(*query->select); + my_bitmap_init(&skips, NULL, query->select->elements, TRUE); + int i= -1, n_aux= query->n_aux; while ((item = it++)) { + i++; + n_aux--; DBUG_PRINT("info",("spider select item=%p", item)); if (item->const_item()) { - DBUG_PRINT("info",("spider const item")); - continue; + /* + Do not handle the complex case where there's a const item + in the auxiliary fields. It is too unlikely (if at all) to + happen to be covered by the GBH. + + TODO: find an example covering this case or determine it + never happens and remove this consideration. + */ + if (n_aux >= 0) + { + spider_clear_bit(dbton_bitmap, roop_count); + keep_going= FALSE; + break; + } + bitmap_set_bit(&skips, i); } if (spider_db_print_item_type(item, NULL, spider, NULL, NULL, 0, roop_count, TRUE, fields_arg)) @@ -1823,11 +1854,12 @@ group_by_handler *spider_create_group_by_handler( fields->set_first_link_idx(); - if (!(group_by_handler = new spider_group_by_handler(thd, query, fields))) + if (!(group_by_handler = new spider_group_by_handler(thd, query, fields, skips))) { DBUG_PRINT("info",("spider can't create group_by_handler")); goto skip_free_fields; } + my_bitmap_free(&skips); query->distinct = FALSE; query->where = NULL; query->group_by = NULL; @@ -1839,5 +1871,6 @@ skip_free_fields: delete fields; skip_free_table_holder: spider_free(spider_current_trx, table_holder, MYF(0)); + my_bitmap_free(&skips); DBUG_RETURN(NULL); } diff --git a/storage/spider/spd_group_by_handler.h b/storage/spider/spd_group_by_handler.h index db100de92f2..0583229d4d7 100644 --- a/storage/spider/spd_group_by_handler.h +++ b/storage/spider/spd_group_by_handler.h @@ -23,12 +23,20 @@ class spider_group_by_handler: public group_by_handler bool first; longlong offset_limit; int store_error; + /* + Bitmap marking constant items among the select items. They are + SELECTed in the query executed at the data node, but not stored in + SPIDER_DB_ROW, because the temp table do not contain the + corresponding fields. + */ + MY_BITMAP skips; public: spider_group_by_handler( THD *thd_arg, Query *query_arg, - spider_fields *fields_arg + spider_fields *fields_arg, + const MY_BITMAP &skips1 ); ~spider_group_by_handler(); int init_scan() override; From 6aaae4c03b4937e75dec66182df0eb26549bdc9f Mon Sep 17 00:00:00 2001 From: Thirunarayanan Balathandayuthapani Date: Tue, 15 Oct 2024 12:04:37 +0530 Subject: [PATCH 035/121] MDEV-35122 Incorrect NULL value handling for instantly dropped BLOB columns Problem: ======= - Redundant table fails to insert into the table after instant drop blob column. Instant drop column only marking the column as hidden and consecutive insert statement tries to insert NULL value for the dropped BLOB column and returns the fixed length of the blob type as 65535. This lead to row size too large error. Fix: ==== For redundant table, if the non-fixed dropped column can be null then set the length of the field type as 0. --- mysql-test/suite/innodb/r/instant_alter_bugs.result | 9 +++++++++ mysql-test/suite/innodb/t/instant_alter_bugs.test | 10 ++++++++++ storage/innobase/row/row0row.cc | 8 ++++++++ 3 files changed, 27 insertions(+) diff --git a/mysql-test/suite/innodb/r/instant_alter_bugs.result b/mysql-test/suite/innodb/r/instant_alter_bugs.result index c74730599d3..f6244756c24 100644 --- a/mysql-test/suite/innodb/r/instant_alter_bugs.result +++ b/mysql-test/suite/innodb/r/instant_alter_bugs.result @@ -529,4 +529,13 @@ c INT as (b) VIRTUAL)ENGINE=InnoDB CHARACTER SET utf32; ALTER TABLE t1 DROP COLUMN a; ALTER TABLE t1 DROP COLUMN c; DROP TABLE t1; +# +# MDEV-35122 Incorrect NULL value handling for instantly +# dropped BLOB columns +# +CREATE TABLE t1 (c1 INT, c2 BLOB, c3 BLOB NOT NULL) ROW_FORMAT=REDUNDANT,ENGINE=InnoDB; +ALTER TABLE t1 DROP c2; +ALTER TABLE t1 DROP c3; +INSERT INTO t1 VALUES(1); +DROP TABLE t1; # End of 10.5 tests diff --git a/mysql-test/suite/innodb/t/instant_alter_bugs.test b/mysql-test/suite/innodb/t/instant_alter_bugs.test index c5f16736656..1858c05b01c 100644 --- a/mysql-test/suite/innodb/t/instant_alter_bugs.test +++ b/mysql-test/suite/innodb/t/instant_alter_bugs.test @@ -565,4 +565,14 @@ ALTER TABLE t1 DROP COLUMN a; ALTER TABLE t1 DROP COLUMN c; DROP TABLE t1; +--echo # +--echo # MDEV-35122 Incorrect NULL value handling for instantly +--echo # dropped BLOB columns +--echo # +CREATE TABLE t1 (c1 INT, c2 BLOB, c3 BLOB NOT NULL) ROW_FORMAT=REDUNDANT,ENGINE=InnoDB; +ALTER TABLE t1 DROP c2; +ALTER TABLE t1 DROP c3; +INSERT INTO t1 VALUES(1); +DROP TABLE t1; + --echo # End of 10.5 tests diff --git a/storage/innobase/row/row0row.cc b/storage/innobase/row/row0row.cc index ebd6b248721..80c00e48f94 100644 --- a/storage/innobase/row/row0row.cc +++ b/storage/innobase/row/row0row.cc @@ -250,6 +250,14 @@ row_build_index_entry_low( dict_col_copy_type(f.col, &dfield->type); if (f.col->is_nullable()) { dfield_set_null(dfield); + if (f.col->mtype == DATA_BINARY + && !dict_table_is_comp(index->table)) { + /* In case of redundant row format, + if the non-fixed dropped column + is null then set the length of the + field data type as 0 */ + dfield->type.len= 0; + } } else { dfield_set_data(dfield, field_ref_zero, f.fixed_len); From f27b69a447e94346a14cd8b74e0d8b659f653361 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Tue, 15 Oct 2024 09:25:05 +0200 Subject: [PATCH 036/121] fix MDEV-26459 test on 32bit systems. (where it test nothing but produce warnngs) --- mysql-test/main/delete.test | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mysql-test/main/delete.test b/mysql-test/main/delete.test index 4838663f700..d4f3233591e 100644 --- a/mysql-test/main/delete.test +++ b/mysql-test/main/delete.test @@ -632,7 +632,9 @@ drop table t1,t2,t3; --echo # SET @sort_buffer_size_save= @@sort_buffer_size; +--disable_warnings SET sort_buffer_size=1125899906842624; +--enable_warnings CREATE TABLE t1 (a INT,b CHAR,KEY(a,b)); DELETE a1 FROM t1 AS a1,t1 AS a2 WHERE a1.a=a2.a; DROP TABLE t1; From d797c9879ea7e6b8138fee22d7cd900996c368bc Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Tue, 15 Oct 2024 15:32:11 +1100 Subject: [PATCH 037/121] [fixup] Restore the Chinese error translation of ER_SET_PASSWORD_AUTH_PLUGIN It was removed in MDEV-18151 --- sql/share/errmsg-utf8.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index 96bdb38f335..5be526dbece 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7235,6 +7235,7 @@ ER_ACCESS_DENIED_NO_PASSWORD_ERROR 28000 ukr "Доступ заборонено для користувача: '%s'@'%s'" ER_SET_PASSWORD_AUTH_PLUGIN + chi "SET PASSWORD不适用于通过%s插件验证的用户" eng "SET PASSWORD is not applicable for users authenticating via %s plugin" ukr "SET PASSWORD не можна застосувати для користувачів, що автентифікуються з допомогою плагінy %s" From 44804c667efb0ae40c401c5544b41f87dddce5b7 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Tue, 15 Oct 2024 11:27:42 +0200 Subject: [PATCH 038/121] MDEV-18151 pam test result fix Fix result due to the new error message. --- mysql-test/suite/plugins/r/pam.result | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/suite/plugins/r/pam.result b/mysql-test/suite/plugins/r/pam.result index b8588916169..5b445a05372 100644 --- a/mysql-test/suite/plugins/r/pam.result +++ b/mysql-test/suite/plugins/r/pam.result @@ -103,7 +103,7 @@ select user(), current_user(), database(); user() current_user() database() pam_test@localhost pam_test@% test set password='foo'; -ERROR HY000: SET PASSWORD is ignored for users authenticating via pam plugin +ERROR HY000: SET PASSWORD is not applicable for users authenticating via pam plugin show create user; CREATE USER for pam_test@% CREATE USER `pam_test`@`%` IDENTIFIED VIA pam USING 'mariadb_mtr' From 7038382e1bd72bb851509481987218b358803dc6 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Tue, 15 Oct 2024 12:42:45 +0200 Subject: [PATCH 039/121] Fix grant5.test with view protocol --- mysql-test/main/grant5.result | 6 +++--- mysql-test/main/grant5.test | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mysql-test/main/grant5.result b/mysql-test/main/grant5.result index 817a58e6ec2..26982d428c6 100644 --- a/mysql-test/main/grant5.result +++ b/mysql-test/main/grant5.result @@ -174,7 +174,7 @@ drop user 'O\'Brien'@'localhost'; # CREATE USER 'test-user'; CREATE ROLE `r``o'l"e`; -select user from mysql.user where is_role='Y'; +select user as User from mysql.user where is_role='Y'; User r`o'l"e GRANT `r``o'l"e` TO 'test-user'; @@ -346,7 +346,7 @@ ERROR HY000: Password hash should be a 41-digit hexadecimal number set password for u7@h = old_password('pwd'); create user u8@h identified with 'mysql_old_password'; set password for u8@h = '78a302dd267f6044'; -select user,host,plugin,authentication_string from mysql.user where host='h'; +select user as User,host as Host,plugin,authentication_string from mysql.user where host='h'; User Host plugin authentication_string u1 h mysql_native_password *975B2CD4FF9AE554FE8AD33168FBFC326D2021DD u2 h mysql_native_password *975B2CD4FF9AE554FE8AD33168FBFC326D2021DD @@ -392,7 +392,7 @@ grant select on *.* to u5@h; grant select on *.* to u6@h; grant select on *.* to u7@h; grant select on *.* to u8@h; -select user,select_priv,plugin,authentication_string from mysql.user where user like 'u_'; +select user as User,select_priv as Select_priv,plugin,authentication_string from mysql.user where user like 'u_'; User Select_priv plugin authentication_string u1 Y mysql_native_password bad u2 Y mysql_native_password *975B2CD4FF9AE554FE8AD33168FBFC326D2021DD diff --git a/mysql-test/main/grant5.test b/mysql-test/main/grant5.test index 48cc3087ffc..a33cecbfc6d 100644 --- a/mysql-test/main/grant5.test +++ b/mysql-test/main/grant5.test @@ -131,7 +131,7 @@ drop user 'O\'Brien'@'localhost'; CREATE USER 'test-user'; CREATE ROLE `r``o'l"e`; -select user from mysql.user where is_role='Y'; +select user as User from mysql.user where is_role='Y'; GRANT `r``o'l"e` TO 'test-user'; SET DEFAULT ROLE `r``o'l"e` FOR 'test-user'; # it is expected that quotes won't be shown correctly @@ -310,7 +310,7 @@ set password for u7@h = old_password('pwd'); create user u8@h identified with 'mysql_old_password'; eval set password for u8@h = '$p'; sorted_result; -select user,host,plugin,authentication_string from mysql.user where host='h'; +select user as User,host as Host,plugin,authentication_string from mysql.user where host='h'; # test with invalid entries update mysql.global_priv set priv=json_set(priv, '$.authentication_string', 'bad') where user='u1'; update mysql.global_priv set priv=json_set(priv, '$.authentication_string', 'bad') where user='u5'; @@ -332,7 +332,7 @@ grant select on *.* to u5@h; grant select on *.* to u6@h; grant select on *.* to u7@h; grant select on *.* to u8@h; -select user,select_priv,plugin,authentication_string from mysql.user where user like 'u_'; +select user as User,select_priv as Select_priv,plugin,authentication_string from mysql.user where user like 'u_'; # but they still can be dropped drop user u1@h, u2@h, u3@h, u4@h, u5@h, u6@h, u7@h, u8@h; From 66b8d32b7514f46b1467d404d3f9ad688bbfeb4f Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Thu, 10 Oct 2024 12:33:59 +0300 Subject: [PATCH 040/121] MDEV-35072: Assertion with optimizer_join_limit_pref_ratio and 1-table select Variant for 11.2+: In recompute_join_cost_with_limit(), do not subtract the cost of checking the WHERE: pos->records_read* WHERE_COST_THD(join->thd) It is already included in pos->read_time. Also added comments about difference between this fix and the pre-11.2 variant. --- mysql-test/main/order_by_limit_join.result | 22 ++++++++++++++++------ mysql-test/main/order_by_limit_join.test | 11 ++++++++++- sql/sql_select.cc | 14 ++++++-------- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/mysql-test/main/order_by_limit_join.result b/mysql-test/main/order_by_limit_join.result index ed3f20e87f7..3fe56c98d48 100644 --- a/mysql-test/main/order_by_limit_join.result +++ b/mysql-test/main/order_by_limit_join.result @@ -114,7 +114,7 @@ JS "full_join_cost": "REPLACED", "risk_ratio": 10, "shortcut_join_cost": "REPLACED", - "shortcut_cost_with_risk": 0.492018616, + "shortcut_cost_with_risk": 0.495218616, "use_shortcut_cost": true } ] @@ -166,7 +166,7 @@ JS "full_join_cost": "REPLACED", "risk_ratio": 10, "shortcut_join_cost": "REPLACED", - "shortcut_cost_with_risk": 19.4241863, + "shortcut_cost_with_risk": 16.2273863, "use_shortcut_cost": true } ] @@ -254,7 +254,7 @@ JS "full_join_cost": "REPLACED", "risk_ratio": 10, "shortcut_join_cost": "REPLACED", - "shortcut_cost_with_risk": 199.426608, + "shortcut_cost_with_risk": 197.826608, "use_shortcut_cost": false } ] @@ -375,7 +375,7 @@ JS "full_join_cost": "REPLACED", "risk_ratio": 10, "shortcut_join_cost": "REPLACED", - "shortcut_cost_with_risk": 0.532449162, + "shortcut_cost_with_risk": 0.535649162, "use_shortcut_cost": true } ] @@ -463,11 +463,21 @@ JS "full_join_cost": "REPLACED", "risk_ratio": 10, "shortcut_join_cost": "REPLACED", - "shortcut_cost_with_risk": 0.492018616, + "shortcut_cost_with_risk": 0.495218616, "use_shortcut_cost": true } ] set optimizer_search_depth=@tmp_osd; set optimizer_trace=@tmp_os; -set optimizer_join_limit_pref_ratio=default; drop table t1, t10, t11; +# +# MDEV-35072: Assertion failure with optimizer_join_limit_pref_ratio and 1-table select +# +SET optimizer_join_limit_pref_ratio=1; +CREATE TABLE t1 (c1 INT, INDEX(c1)); +INSERT INTO t1 VALUES (1),(2); +SELECT * FROM t1 ORDER BY c1 LIMIT 1; +c1 +1 +DROP TABLE t1; +set optimizer_join_limit_pref_ratio=default; diff --git a/mysql-test/main/order_by_limit_join.test b/mysql-test/main/order_by_limit_join.test index f6fbb8d2ad4..e5bb45c3d2d 100644 --- a/mysql-test/main/order_by_limit_join.test +++ b/mysql-test/main/order_by_limit_join.test @@ -208,6 +208,15 @@ select json_detailed(json_extract(@trace, '$**.join_limit_shortcut_choice')) as set optimizer_search_depth=@tmp_osd; set optimizer_trace=@tmp_os; -set optimizer_join_limit_pref_ratio=default; drop table t1, t10, t11; +--echo # +--echo # MDEV-35072: Assertion failure with optimizer_join_limit_pref_ratio and 1-table select +--echo # +SET optimizer_join_limit_pref_ratio=1; +CREATE TABLE t1 (c1 INT, INDEX(c1)); +INSERT INTO t1 VALUES (1),(2); +SELECT * FROM t1 ORDER BY c1 LIMIT 1; +DROP TABLE t1; + +set optimizer_join_limit_pref_ratio=default; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index c6b60542dbb..7ed57f4c72b 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -11626,6 +11626,8 @@ double recompute_join_cost_with_limit(const JOIN *join, bool skip_sorting, POSITION *pos= join->best_positions + join->const_tables; /* Generally, we assume that producing X% of output takes X% of the cost. + (Note: before 11.0, we subtracted COST_EPS here. In 11.0+, there's no need + to do this) */ double partial_join_cost= join->best_read * fraction; @@ -11646,10 +11648,11 @@ double recompute_join_cost_with_limit(const JOIN *join, bool skip_sorting, { /* Subtract the remainder of the first table's cost we had in - join->best_read: + join->best_read. + (Before 11.0, we also subtracted pos->records_read/TIME_FOR_COMPARE. + In 11.0+, that time is already included in pos->read_time) */ partial_join_cost -= pos->read_time*fraction; - partial_join_cost -= pos->records_read*fraction * WHERE_COST_THD(join->thd); /* Add the cost of the new access method we've got: */ partial_join_cost= COST_ADD(partial_join_cost, *first_table_cost); @@ -11666,12 +11669,7 @@ double recompute_join_cost_with_limit(const JOIN *join, bool skip_sorting, table. Do the same for costs of checking the WHERE. */ double extra_first_table_cost= pos->read_time * (1.0 - fraction); - double extra_first_table_where= pos->records_read * (1.0 - fraction) * - WHERE_COST_THD(join->thd); - - partial_join_cost= COST_ADD(partial_join_cost, - COST_ADD(extra_first_table_cost, - extra_first_table_where)); + partial_join_cost= COST_ADD(partial_join_cost, extra_first_table_cost); } return partial_join_cost; } From 649e08f8b3c62414b31b23c64d960b9e3269c415 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Tue, 15 Oct 2024 14:17:24 +0200 Subject: [PATCH 041/121] new libfmt 11.0.2 --- cmake/libfmt.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/libfmt.cmake b/cmake/libfmt.cmake index 78a0df6f911..a9dc6937b86 100644 --- a/cmake/libfmt.cmake +++ b/cmake/libfmt.cmake @@ -15,8 +15,8 @@ MACRO(BUNDLE_LIBFMT) ExternalProject_Add( libfmt PREFIX "${dir}" - URL "https://github.com/fmtlib/fmt/releases/download/11.0.1/fmt-11.0.1.zip" - URL_MD5 5f3915e2eff60e7f70c558120592100d + URL "https://github.com/fmtlib/fmt/releases/download/11.0.2/fmt-11.0.2.zip" + URL_MD5 c622dca45ec3fc95254c48370a9f7a1d INSTALL_COMMAND "" CONFIGURE_COMMAND "" BUILD_COMMAND "" From 5619f2938406e737e199bf66e10eedab5621c117 Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Thu, 10 Oct 2024 16:11:37 +0300 Subject: [PATCH 042/121] Replace 0.001 with symbolic name COST_EPS optimize_straight_join and best_extension_by_limited_search() use 0.001 to make choice between plans with identical cost deterministic. Use COST_EPS instead of 0.001, like it's done in newer versions. --- sql/sql_select.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index cc3d0a8d1bd..7f16598840e 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -9662,7 +9662,7 @@ optimize_straight_join(JOIN *join, table_map remaining_tables) memcpy((uchar*) join->best_positions, (uchar*) join->positions, sizeof(POSITION)*idx); join->join_record_count= record_count; - join->best_read= read_time - 0.001; + join->best_read= read_time - COST_EPS; } @@ -11093,7 +11093,7 @@ best_extension_by_limited_search(JOIN *join, memcpy((uchar*) join->best_positions, (uchar*) join->positions, sizeof(POSITION) * (idx + 1)); join->join_record_count= partial_join_cardinality; - join->best_read= current_read_time - 0.001; + join->best_read= current_read_time - COST_EPS; } DBUG_EXECUTE("opt", print_plan(join, idx+1, current_record_count, From 9849e3f948c7c0337220353fd34460b2f383a287 Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Wed, 9 Oct 2024 15:32:24 +0300 Subject: [PATCH 043/121] MDEV-35072: Assertion with optimizer_join_limit_pref_ratio and 1-table select Pre-11.0 variant: 1. In recompute_join_cost_with_limit(), add an assertion that that partial_join_cost >= 0.0. 2. best_extension_by_limited_search() subtracts COST_EPS from join->best_read. But it is not subtracted from join->positions[0].read_time, add it back. 2. We could get very small negative partial_join_cost due to rounding errors. For fraction=1.0, we were computing essentially this (denote as EXPR-1): $row_read_cost + $where_cost - ($row_read_cost + $where_cost) which should compute to 0. But the computation was done in the following order (left-to-right): EXPR-2: ($row_read_cost + $where_cost) - $row_read_cost - $where_cost this produced a value of -1.1102230246251565e-16 due to a rounding error. Change the computation use EXPR-1 instead of EXPR-2. --- mysql-test/main/order_by_limit_join.result | 22 ++++++++++++++++------ mysql-test/main/order_by_limit_join.test | 11 ++++++++++- sql/sql_select.cc | 21 ++++++++++++++++++--- 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/mysql-test/main/order_by_limit_join.result b/mysql-test/main/order_by_limit_join.result index 2b9fb6b97da..23a66090e70 100644 --- a/mysql-test/main/order_by_limit_join.result +++ b/mysql-test/main/order_by_limit_join.result @@ -111,7 +111,7 @@ JS "full_join_cost": "REPLACED", "risk_ratio": 10, "shortcut_join_cost": "REPLACED", - "shortcut_cost_with_risk": 972.8224614, + "shortcut_cost_with_risk": 972.8224714, "use_shortcut_cost": true } ] @@ -163,7 +163,7 @@ JS "full_join_cost": "REPLACED", "risk_ratio": 10, "shortcut_join_cost": "REPLACED", - "shortcut_cost_with_risk": 20972.81246, + "shortcut_cost_with_risk": 20972.81247, "use_shortcut_cost": true } ] @@ -247,7 +247,7 @@ JS "full_join_cost": "REPLACED", "risk_ratio": 10, "shortcut_join_cost": "REPLACED", - "shortcut_cost_with_risk": 240591.2698, + "shortcut_cost_with_risk": 240591.2748, "use_shortcut_cost": false } ] @@ -366,7 +366,7 @@ JS "full_join_cost": "REPLACED", "risk_ratio": 10, "shortcut_join_cost": "REPLACED", - "shortcut_cost_with_risk": 982.9697856, + "shortcut_cost_with_risk": 982.9697956, "use_shortcut_cost": true } ] @@ -451,11 +451,21 @@ JS "full_join_cost": "REPLACED", "risk_ratio": 10, "shortcut_join_cost": "REPLACED", - "shortcut_cost_with_risk": 972.8224614, + "shortcut_cost_with_risk": 972.8224714, "use_shortcut_cost": true } ] set optimizer_search_depth=@tmp_osd; set optimizer_trace=@tmp_os; -set optimizer_join_limit_pref_ratio=default; drop table t1, t10, t11; +# +# MDEV-35072: Assertion failure with optimizer_join_limit_pref_ratio and 1-table select +# +SET optimizer_join_limit_pref_ratio=1; +CREATE TABLE t1 (c1 INT, INDEX(c1)); +INSERT INTO t1 VALUES (1),(2); +SELECT * FROM t1 ORDER BY c1 LIMIT 1; +c1 +1 +DROP TABLE t1; +set optimizer_join_limit_pref_ratio=default; diff --git a/mysql-test/main/order_by_limit_join.test b/mysql-test/main/order_by_limit_join.test index 3b60581871c..03cd9727294 100644 --- a/mysql-test/main/order_by_limit_join.test +++ b/mysql-test/main/order_by_limit_join.test @@ -208,6 +208,15 @@ select json_detailed(json_extract(@trace, '$**.join_limit_shortcut_choice')) as set optimizer_search_depth=@tmp_osd; set optimizer_trace=@tmp_os; -set optimizer_join_limit_pref_ratio=default; drop table t1, t10, t11; +--echo # +--echo # MDEV-35072: Assertion failure with optimizer_join_limit_pref_ratio and 1-table select +--echo # +SET optimizer_join_limit_pref_ratio=1; +CREATE TABLE t1 (c1 INT, INDEX(c1)); +INSERT INTO t1 VALUES (1),(2); +SELECT * FROM t1 ORDER BY c1 LIMIT 1; +DROP TABLE t1; + +set optimizer_join_limit_pref_ratio=default; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 7f16598840e..e14302e41fc 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -10616,8 +10616,11 @@ double recompute_join_cost_with_limit(const JOIN *join, bool skip_sorting, POSITION *pos= join->best_positions + join->const_tables; /* Generally, we assume that producing X% of output takes X% of the cost. + + best_extension_by_limited_search() subtracts COST_EPS from + join->best_read, add it back. */ - double partial_join_cost= join->best_read * fraction; + double partial_join_cost= (join->best_read + COST_EPS) * fraction; if (skip_sorting) { @@ -10634,12 +10637,20 @@ double recompute_join_cost_with_limit(const JOIN *join, bool skip_sorting, */ if (first_table_cost) { + /* + Compute the cost of accessing the first table in the same way as + it was done in greedy_search(): + */ + double prev_first_table_cost; + prev_first_table_cost= pos->read_time + + (double)pos->records_read / TIME_FOR_COMPARE; + prev_first_table_cost *= fraction; /* Subtract the remainder of the first table's cost we had in join->best_read: */ - partial_join_cost -= pos->read_time*fraction; - partial_join_cost -= pos->records_read*fraction / TIME_FOR_COMPARE; + partial_join_cost -= prev_first_table_cost; + DBUG_ASSERT(partial_join_cost >= 0.0); /* Add the cost of the new access method we've got: */ partial_join_cost= COST_ADD(partial_join_cost, *first_table_cost); @@ -11093,6 +11104,10 @@ best_extension_by_limited_search(JOIN *join, memcpy((uchar*) join->best_positions, (uchar*) join->positions, sizeof(POSITION) * (idx + 1)); join->join_record_count= partial_join_cardinality; + /* + note: recompute_join_cost_with_limit() relies on this COST_EPS + subtraction: + */ join->best_read= current_read_time - COST_EPS; } DBUG_EXECUTE("opt", print_plan(join, idx+1, From e9c71f3a255f2076591fa862ec9dc82fcddace69 Mon Sep 17 00:00:00 2001 From: Dave Gosselin Date: Wed, 9 Oct 2024 17:48:22 -0400 Subject: [PATCH 044/121] MDEV-34814 mysqld hangs on startup when --init-file target does not exist Set select_thread_in_use only when we're about to enter into the polling loop, not sooner, allowing early proces aborts to exist cleanly: the process won't be waiting for a polling loop that isn't yet polling. --- sql/mysqld.cc | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 39d7f60527b..eed6b31324b 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -5344,6 +5344,26 @@ static void test_lc_time_sz() #endif//DBUG_OFF +static void run_main_loop() +{ + select_thread=pthread_self(); + mysql_mutex_lock(&LOCK_start_thread); + select_thread_in_use=1; + mysql_mutex_unlock(&LOCK_start_thread); + +#ifdef _WIN32 + handle_connections_win(); +#else + handle_connections_sockets(); + + mysql_mutex_lock(&LOCK_start_thread); + select_thread_in_use=0; + mysql_cond_broadcast(&COND_start_thread); + mysql_mutex_unlock(&LOCK_start_thread); +#endif /* _WIN32 */ +} + + #ifdef __WIN__ int win_main(int argc, char **argv) #else @@ -5540,9 +5560,6 @@ int mysqld_main(int argc, char **argv) SYSVAR_AUTOSIZE(my_thread_stack_size, new_thread_stack_size); } - select_thread=pthread_self(); - select_thread_in_use=1; - #ifdef HAVE_LIBWRAP libwrapName= my_progname+dirname_length(my_progname); openlog(libwrapName, LOG_PID, LOG_AUTH); @@ -5596,7 +5613,6 @@ int mysqld_main(int argc, char **argv) // Recover and exit. if (wsrep_recovery) { - select_thread_in_use= 0; if (WSREP_ON) wsrep_recover(); else @@ -5671,7 +5687,6 @@ int mysqld_main(int argc, char **argv) if (opt_bootstrap) { - select_thread_in_use= 0; // Allow 'kill' to work int bootstrap_error= bootstrap(mysql_stdin); if (!abort_loop) unireg_abort(bootstrap_error); @@ -5751,16 +5766,7 @@ int mysqld_main(int argc, char **argv) /* Memory used when everything is setup */ start_memory_used= global_status_var.global_memory_used; -#ifdef _WIN32 - handle_connections_win(); -#else - handle_connections_sockets(); - - mysql_mutex_lock(&LOCK_start_thread); - select_thread_in_use=0; - mysql_cond_broadcast(&COND_start_thread); - mysql_mutex_unlock(&LOCK_start_thread); -#endif /* _WIN32 */ + run_main_loop(); /* Shutdown requested */ char *user= shutdown_user.load(std::memory_order_relaxed); From 171c4aa4791dfbaa3dfa4cbaa15d2a8eb45f78fc Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 24 Sep 2024 08:58:16 +1000 Subject: [PATCH 045/121] MDEV-34340 move get_exepath to mysys as my_get_exepath Original implementation was from MDEV-13466 (commit d471469bd2a6de0d8d68343bcf374a382c5bfd92) --- extra/mariabackup/xtrabackup.cc | 31 ++---------------- include/my_sys.h | 2 ++ mysys/CMakeLists.txt | 1 + mysys/my_getexe.c | 57 +++++++++++++++++++++++++++++++++ 4 files changed, 62 insertions(+), 29 deletions(-) create mode 100644 mysys/my_getexe.c diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc index 4a6a4ad9afc..d8015a0e331 100644 --- a/extra/mariabackup/xtrabackup.cc +++ b/extra/mariabackup/xtrabackup.cc @@ -6792,7 +6792,6 @@ void handle_options(int argc, char **argv, char ***argv_server, } static int main_low(char** argv); -static int get_exepath(char *buf, size_t size, const char *argv0); /* ================= main =================== */ int main(int argc, char **argv) @@ -6803,8 +6802,8 @@ int main(int argc, char **argv) my_getopt_prefix_matching= 0; - if (get_exepath(mariabackup_exe,FN_REFLEN, argv[0])) - strncpy(mariabackup_exe,argv[0], FN_REFLEN-1); + if (my_get_exepath(mariabackup_exe, FN_REFLEN, argv[0])) + strncpy(mariabackup_exe, argv[0], FN_REFLEN-1); if (argc > 1 ) @@ -7101,32 +7100,6 @@ static int main_low(char** argv) } -static int get_exepath(char *buf, size_t size, const char *argv0) -{ -#ifdef _WIN32 - DWORD ret = GetModuleFileNameA(NULL, buf, (DWORD)size); - if (ret > 0) - return 0; -#elif defined(__linux__) - ssize_t ret = readlink("/proc/self/exe", buf, size-1); - if(ret > 0) - return 0; -#elif defined(__APPLE__) - size_t ret = proc_pidpath(getpid(), buf, static_cast(size)); - if (ret > 0) { - buf[ret] = 0; - return 0; - } -#elif defined(__FreeBSD__) - int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1}; - if (sysctl(mib, 4, buf, &size, NULL, 0) == 0) { - return 0; - } -#endif - - return my_realpath(buf, argv0, 0); -} - #if defined (__SANITIZE_ADDRESS__) && defined (__linux__) /* Avoid LeakSanitizer's false positives. */ diff --git a/include/my_sys.h b/include/my_sys.h index 74231be6746..2f4fd2e380a 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -640,6 +640,8 @@ extern size_t my_fwrite(FILE *stream,const uchar *Buffer,size_t Count, extern my_off_t my_fseek(FILE *stream,my_off_t pos,int whence,myf MyFlags); extern my_off_t my_ftell(FILE *stream,myf MyFlags); +extern int my_get_exepath(char *buf, size_t size, const char *argv0); + /* implemented in my_memmem.c */ extern void *my_memmem(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen); diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt index bf3984a1ffc..39561c328f8 100644 --- a/mysys/CMakeLists.txt +++ b/mysys/CMakeLists.txt @@ -27,6 +27,7 @@ SET(MYSYS_SOURCES array.c charset-def.c charset.c my_default.c my_alloc.c my_bit.c my_bitmap.c my_chsize.c my_compress.c my_copy.c my_create.c my_delete.c my_div.c my_error.c my_file.c my_fopen.c my_fstream.c + my_getexe.c my_gethwaddr.c my_getopt.c my_getsystime.c my_getwd.c my_compare.c my_init.c my_lib.c my_lock.c my_malloc.c my_mess.c my_mkdir.c my_mmap.c my_once.c my_open.c my_pread.c my_pthread.c diff --git a/mysys/my_getexe.c b/mysys/my_getexe.c new file mode 100644 index 00000000000..50c91e94a33 --- /dev/null +++ b/mysys/my_getexe.c @@ -0,0 +1,57 @@ +/* Copyright (c) 2017, MariaDB Plc + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ + +#include +#include + +#ifdef _WIN32 +#elif defined(__linux__) +#include +#elif defined(__APPLE__) +#include +#elif defined(__FreeBSD__) +#include +#endif + +/** Fill the buffer with the executable program name +@param[out] buf buffer to place obtained executable name. +@param[in] size size available in the buffer. +@param[in] argv0 the argv0 from which the executable argv might be used. +@return 0, for successful filling of buf, non-zero for failure. */ +int my_get_exepath(char *buf, size_t size, const char *argv0) +{ +#ifdef _WIN32 + DWORD ret = GetModuleFileNameA(NULL, buf, (DWORD)size); + if (ret > 0) + return 0; +#elif defined(__linux__) + ssize_t ret = readlink("/proc/self/exe", buf, size-1); + if(ret > 0) + return 0; +#elif defined(__APPLE__) + size_t ret = proc_pidpath(getpid(), buf, (uint32_t)size); + if (ret > 0) { + buf[ret] = 0; + return 0; + } +#elif defined(__FreeBSD__) + int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1}; + if (sysctl(mib, 4, buf, &size, NULL, 0) == 0) { + return 0; + } +#endif + + return my_realpath(buf, argv0, 0); +} From f9f1d26f2a69251a4f0b93c4c9b6970cdb348510 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 24 Sep 2024 10:12:02 +1000 Subject: [PATCH 046/121] MDEV-34340: MariaDB backup fail on NetBSD If argv0 is null to my_get_exe then don't let the fallback in my_realpath handle this. This was the cause of the original SEGV on NetBSD so we don't want this to be the path for any unimplemented ports of this function. --- mysys/my_getexe.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mysys/my_getexe.c b/mysys/my_getexe.c index 50c91e94a33..4b4a2c81460 100644 --- a/mysys/my_getexe.c +++ b/mysys/my_getexe.c @@ -53,5 +53,7 @@ int my_get_exepath(char *buf, size_t size, const char *argv0) } #endif - return my_realpath(buf, argv0, 0); + if (argv0) + return my_realpath(buf, argv0, 0); + return 1; } From 3a4bc9aa3596edea734a0206e380107a3fcf5bf3 Mon Sep 17 00:00:00 2001 From: Thomas Klausner Date: Tue, 24 Sep 2024 09:35:08 +1000 Subject: [PATCH 047/121] MDEV-34340 mariadb-backup immediately dumps core on NetBSD Provided implementation for my_get_exepath for NetBSD to avoid segfaults in execution of mariadb-backup. --- mysys/my_getexe.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mysys/my_getexe.c b/mysys/my_getexe.c index 4b4a2c81460..cb843ca7271 100644 --- a/mysys/my_getexe.c +++ b/mysys/my_getexe.c @@ -23,6 +23,9 @@ #include #elif defined(__FreeBSD__) #include +#elif defined(__NetBSD__) +#include +#include #endif /** Fill the buffer with the executable program name @@ -51,6 +54,10 @@ int my_get_exepath(char *buf, size_t size, const char *argv0) if (sysctl(mib, 4, buf, &size, NULL, 0) == 0) { return 0; } +#elif defined(__NetBSD__) + int mib[4] = {CTL_KERN, KERN_PROC_ARGS, -1, KERN_PROC_PATHNAME }; + if (sysctl(mib, 4, buf, &size, NULL, 0) == 0) + return 0; #endif if (argv0) From e927e28ebed2fed76ab970bf969ed06094956d92 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 24 Sep 2024 09:56:08 +1000 Subject: [PATCH 048/121] Remove HAVE_BROKEN_REALPATH Was only applicable to FreeBSD < ~5.1.9 per: 33173fbe827ed435066a3253a87866a0994503e4 --- cmake/os/FreeBSD.cmake | 3 --- mysys/my_symlink.c | 2 +- sql/mysqld.cc | 11 ++++------- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/cmake/os/FreeBSD.cmake b/cmake/os/FreeBSD.cmake index 9eccdd90c34..c15ae715241 100644 --- a/cmake/os/FreeBSD.cmake +++ b/cmake/os/FreeBSD.cmake @@ -20,9 +20,6 @@ # #Legacy option, maybe not needed anymore , taken as is from autotools build # ADD_DEFINITIONS(-DNET_RETRY_COUNT=1000000) -# The below was used for really old versions of FreeBSD, roughly: before 5.1.9 -# ADD_DEFINITIONS(-DHAVE_BROKEN_REALPATH) - # Find libexecinfo (library that contains backtrace_symbols etc) SET(EXECINFO_ROOT /usr/local CACHE INTERNAL "Where to find execinfo library and header") INCLUDE_DIRECTORIES(${EXECINFO_ROOT}/include) diff --git a/mysys/my_symlink.c b/mysys/my_symlink.c index 8238e501e7f..57d4e9749b4 100644 --- a/mysys/my_symlink.c +++ b/mysys/my_symlink.c @@ -141,7 +141,7 @@ int my_is_symlink(const char *filename __attribute__((unused))) int my_realpath(char *to, const char *filename, myf MyFlags) { -#if defined(HAVE_REALPATH) && !defined(HAVE_BROKEN_REALPATH) +#if defined(HAVE_REALPATH) int result=0; char buff[BUFF_LEN]; char *ptr; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index eed6b31324b..9bf53982eb9 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -7781,7 +7781,7 @@ static int mysql_init_variables(void) /* Things reset to zero */ opt_skip_slave_start= opt_reckless_slave = 0; mysql_home[0]= pidfile_name[0]= log_error_file[0]= 0; -#if defined(HAVE_REALPATH) && !defined(HAVE_valgrind) && !defined(HAVE_BROKEN_REALPATH) +#if defined(HAVE_REALPATH) && !defined(HAVE_valgrind) /* We can only test for sub paths if my_symlink.c is using realpath */ mysys_test_invalid_symlink= path_starts_from_data_home_dir; #endif @@ -7882,6 +7882,8 @@ static int mysql_init_variables(void) lc_messages= (char*) "en_US"; lc_time_names_name= (char*) "en_US"; + have_symlink= SHOW_OPTION_YES; + /* Variables that depends on compile options */ #ifndef DBUG_OFF default_dbug_option=IF_WIN("d:t:i:O,\\mariadbd.trace", @@ -7905,11 +7907,6 @@ static int mysql_init_variables(void) #else have_openssl= have_ssl= SHOW_OPTION_NO; #endif -#ifdef HAVE_BROKEN_REALPATH - have_symlink=SHOW_OPTION_NO; -#else - have_symlink=SHOW_OPTION_YES; -#endif #ifdef HAVE_DLOPEN have_dlopen=SHOW_OPTION_YES; #else @@ -8669,7 +8666,7 @@ static int get_options(int *argc_ptr, char ***argv_ptr) global_system_variables.sql_mode= expand_sql_mode(global_system_variables.sql_mode); -#if !defined(HAVE_REALPATH) || defined(HAVE_BROKEN_REALPATH) +#if !defined(HAVE_REALPATH) my_use_symdir=0; my_disable_symlinks=1; have_symlink=SHOW_OPTION_NO; From 8ae462a220b6dee3f493de3cb2fecacfc6ae610c Mon Sep 17 00:00:00 2001 From: Kristian Nielsen Date: Thu, 10 Oct 2024 20:52:45 +0200 Subject: [PATCH 049/121] MDEV-35019 Provide a way to enable "rollback XA on disconnect" behavior we had before 10.5.2 Implement variable legacy_xa_rollback_at_disconnect to support backwards compatibility for applications that rely on the pre-10.5 behavior for connection disconnect, which is to rollback the transaction (in violation of the XA specification). Signed-off-by: Kristian Nielsen --- mysql-test/main/mysqld--help.result | 8 +++++++ mysql-test/main/xa.result | 16 +++++++++++++ mysql-test/main/xa.test | 19 +++++++++++++++ mysql-test/suite/rpl/r/rpl_xa.result | 24 +++++++++++++++++++ .../rpl/r/rpl_xa_gtid_pos_auto_engine.result | 24 +++++++++++++++++++ mysql-test/suite/rpl/t/rpl_xa.inc | 23 ++++++++++++++++++ .../sys_vars/r/sysvars_server_embedded.result | 10 ++++++++ .../r/sysvars_server_notembedded.result | 10 ++++++++ sql/sql_class.cc | 7 +++++- sql/sql_class.h | 1 + sql/sys_vars.cc | 10 ++++++++ sql/xa.h | 1 + 12 files changed, 152 insertions(+), 1 deletion(-) diff --git a/mysql-test/main/mysqld--help.result b/mysql-test/main/mysqld--help.result index 83a93a197a6..0d6c747ae58 100644 --- a/mysql-test/main/mysqld--help.result +++ b/mysql-test/main/mysqld--help.result @@ -433,6 +433,13 @@ The following specify which files/extra groups are read (specified before remain --lc-time-names=name Set the language used for the month names and the days of the week. + --legacy-xa-rollback-at-disconnect + If a user session disconnects after putting a transaction + into the XA PREPAREd state, roll back the transaction. + Can be used for backwards compatibility to enable this + pre-10.5 behavior for applications that expect it. Note + that this violates the XA specification and should not be + used for new code --local-infile Enable LOAD DATA LOCAL INFILE (Defaults to on; use --skip-local-infile to disable.) --lock-wait-timeout=# @@ -1572,6 +1579,7 @@ large-pages FALSE lc-messages en_US lc-messages-dir MYSQL_SHAREDIR/ lc-time-names en_US +legacy-xa-rollback-at-disconnect FALSE local-infile TRUE lock-wait-timeout 86400 log-bin foo diff --git a/mysql-test/main/xa.result b/mysql-test/main/xa.result index faabf1cf695..58ad2a54edd 100644 --- a/mysql-test/main/xa.result +++ b/mysql-test/main/xa.result @@ -592,6 +592,22 @@ formatID gtrid_length bqual_length data xa rollback '4'; ERROR XA100: XA_RBROLLBACK: Transaction branch was rolled back set @@global.read_only=@sav_read_only; +# MDEV-35019: Provide a way to enable "rollback XA on disconnect" behavior we had before 10.5.2 +# Test legacy_xa_rollback_at_disconnect option. +CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1, 0); +connect con1,localhost,root,,; +SET SESSION legacy_xa_rollback_at_disconnect= 1; +XA START '5'; +INSERT INTO t1 VALUES (2, 0); +XA END '5'; +XA PREPARE '5'; +disconnect con1; +connection default; +INSERT INTO t1 VALUES (3, 0); +XA ROLLBACK '5'; +ERROR XAE04: XAER_NOTA: Unknown XID +DROP TABLE t1; # # End of 10.5 tests # diff --git a/mysql-test/main/xa.test b/mysql-test/main/xa.test index e1ca39be9ab..dfc97002168 100644 --- a/mysql-test/main/xa.test +++ b/mysql-test/main/xa.test @@ -747,6 +747,25 @@ xa rollback '4'; set @@global.read_only=@sav_read_only; +--echo # MDEV-35019: Provide a way to enable "rollback XA on disconnect" behavior we had before 10.5.2 +--echo # Test legacy_xa_rollback_at_disconnect option. +CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1, 0); +connect (con1,localhost,root,,); +SET SESSION legacy_xa_rollback_at_disconnect= 1; +XA START '5'; +INSERT INTO t1 VALUES (2, 0); +XA END '5'; +XA PREPARE '5'; +disconnect con1; + +connection default; +--source include/wait_until_count_sessions.inc +INSERT INTO t1 VALUES (3, 0); +--error ER_XAER_NOTA +XA ROLLBACK '5'; +DROP TABLE t1; + --echo # --echo # End of 10.5 tests --echo # diff --git a/mysql-test/suite/rpl/r/rpl_xa.result b/mysql-test/suite/rpl/r/rpl_xa.result index 061c7b360d0..7b58d3d6e06 100644 --- a/mysql-test/suite/rpl/r/rpl_xa.result +++ b/mysql-test/suite/rpl/r/rpl_xa.result @@ -280,4 +280,28 @@ disconnect con1; connection master; xa commit '1'; drop table t2, t1; +# MDEV-35019 Provide a way to enable "rollback XA on disconnect" behavior we had before 10.5.2 +CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1), (3); +connect con1, localhost,root; +SET SESSION legacy_xa_rollback_at_disconnect= 1; +XA START '3'; +INSERT INTO t1 VALUES (2); +XA END '3'; +XA PREPARE '3'; +disconnect con1; +connection master; +include/save_master_gtid.inc +SELECT * FROM t1 ORDER BY a; +a +1 +3 +connection slave; +include/sync_with_master_gtid.inc +SELECT * FROM t1 ORDER BY a; +a +1 +3 +connection master; +DROP TABLE t1; include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_xa_gtid_pos_auto_engine.result b/mysql-test/suite/rpl/r/rpl_xa_gtid_pos_auto_engine.result index 35625cc7026..2cb9b6c4290 100644 --- a/mysql-test/suite/rpl/r/rpl_xa_gtid_pos_auto_engine.result +++ b/mysql-test/suite/rpl/r/rpl_xa_gtid_pos_auto_engine.result @@ -289,6 +289,30 @@ disconnect con1; connection master; xa commit '1'; drop table t2, t1; +# MDEV-35019 Provide a way to enable "rollback XA on disconnect" behavior we had before 10.5.2 +CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1), (3); +connect con1, localhost,root; +SET SESSION legacy_xa_rollback_at_disconnect= 1; +XA START '3'; +INSERT INTO t1 VALUES (2); +XA END '3'; +XA PREPARE '3'; +disconnect con1; +connection master; +include/save_master_gtid.inc +SELECT * FROM t1 ORDER BY a; +a +1 +3 +connection slave; +include/sync_with_master_gtid.inc +SELECT * FROM t1 ORDER BY a; +a +1 +3 +connection master; +DROP TABLE t1; connection slave; include/stop_slave.inc SET @@global.gtid_pos_auto_engines=""; diff --git a/mysql-test/suite/rpl/t/rpl_xa.inc b/mysql-test/suite/rpl/t/rpl_xa.inc index 5925de24f44..e695f5712f0 100644 --- a/mysql-test/suite/rpl/t/rpl_xa.inc +++ b/mysql-test/suite/rpl/t/rpl_xa.inc @@ -434,3 +434,26 @@ disconnect con1; connection master; xa commit '1'; drop table t2, t1; + +--echo # MDEV-35019 Provide a way to enable "rollback XA on disconnect" behavior we had before 10.5.2 +CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1), (3); + +connect con1, localhost,root; +SET SESSION legacy_xa_rollback_at_disconnect= 1; +XA START '3'; +INSERT INTO t1 VALUES (2); +XA END '3'; +XA PREPARE '3'; +--disconnect con1 + +--connection master +--source include/save_master_gtid.inc +SELECT * FROM t1 ORDER BY a; + +--connection slave +--source include/sync_with_master_gtid.inc +SELECT * FROM t1 ORDER BY a; + +--connection master +DROP TABLE t1; diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result index a5a02bfa1bc..a2d9549b718 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result +++ b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result @@ -1532,6 +1532,16 @@ NUMERIC_BLOCK_SIZE NULL ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT NULL +VARIABLE_NAME LEGACY_XA_ROLLBACK_AT_DISCONNECT +VARIABLE_SCOPE SESSION +VARIABLE_TYPE BOOLEAN +VARIABLE_COMMENT If a user session disconnects after putting a transaction into the XA PREPAREd state, roll back the transaction. Can be used for backwards compatibility to enable this pre-10.5 behavior for applications that expect it. Note that this violates the XA specification and should not be used for new code +NUMERIC_MIN_VALUE NULL +NUMERIC_MAX_VALUE NULL +NUMERIC_BLOCK_SIZE NULL +ENUM_VALUE_LIST OFF,ON +READ_ONLY NO +COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME LICENSE VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result index 50dd4ae23a3..f40c0d0863f 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result +++ b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result @@ -1642,6 +1642,16 @@ NUMERIC_BLOCK_SIZE NULL ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT NULL +VARIABLE_NAME LEGACY_XA_ROLLBACK_AT_DISCONNECT +VARIABLE_SCOPE SESSION +VARIABLE_TYPE BOOLEAN +VARIABLE_COMMENT If a user session disconnects after putting a transaction into the XA PREPAREd state, roll back the transaction. Can be used for backwards compatibility to enable this pre-10.5 behavior for applications that expect it. Note that this violates the XA specification and should not be used for new code +NUMERIC_MIN_VALUE NULL +NUMERIC_MAX_VALUE NULL +NUMERIC_BLOCK_SIZE NULL +ENUM_VALUE_LIST OFF,ON +READ_ONLY NO +COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME LICENSE VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR diff --git a/sql/sql_class.cc b/sql/sql_class.cc index fc04f5436f3..321c1684c75 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -1553,7 +1553,12 @@ void THD::cleanup(void) close_temporary_tables(); if (transaction->xid_state.is_explicit_XA()) - trans_xa_detach(this); + { + if (unlikely(variables.legacy_xa_rollback_at_disconnect)) + xa_trans_force_rollback(this); + else + trans_xa_detach(this); + } else trans_rollback(this); diff --git a/sql/sql_class.h b/sql/sql_class.h index 6baf796fb8b..0da311533d3 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -788,6 +788,7 @@ typedef struct system_variables my_bool binlog_annotate_row_events; my_bool binlog_direct_non_trans_update; my_bool column_compression_zlib_wrap; + my_bool legacy_xa_rollback_at_disconnect; plugin_ref table_plugin; plugin_ref tmp_table_plugin; diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 93298ff7b04..53b2d9901ad 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -6788,3 +6788,13 @@ static Sys_var_ulonglong Sys_max_rowid_filter_size( SESSION_VAR(max_rowid_filter_size), CMD_LINE(REQUIRED_ARG), VALID_RANGE(1024, (ulonglong)~(intptr)0), DEFAULT(128*1024), BLOCK_SIZE(1)); + +static Sys_var_mybool Sys_legacy_xa_rollback_at_disconnect( + "legacy_xa_rollback_at_disconnect", + "If a user session disconnects after putting a transaction into the XA " + "PREPAREd state, roll back the transaction. Can be used for backwards " + "compatibility to enable this pre-10.5 behavior for applications that " + "expect it. Note that this violates the XA specification and should not " + "be used for new code", + SESSION_VAR(legacy_xa_rollback_at_disconnect), CMD_LINE(OPT_ARG), + DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG); diff --git a/sql/xa.h b/sql/xa.h index 5f21e9e9b55..04ac98149aa 100644 --- a/sql/xa.h +++ b/sql/xa.h @@ -46,6 +46,7 @@ bool xid_cache_insert(XID *xid); bool xid_cache_insert(THD *thd, XID_STATE *xid_state, XID *xid); void xid_cache_delete(THD *thd, XID_STATE *xid_state); +bool xa_trans_force_rollback(THD *thd); bool trans_xa_start(THD *thd); bool trans_xa_end(THD *thd); bool trans_xa_prepare(THD *thd); From 5ebda30ccc7616443a5e29bca806a1095b7d90cc Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 16 Oct 2024 13:23:47 +0200 Subject: [PATCH 050/121] Revert "MDEV-35019 Provide a way to enable "rollback XA on disconnect" behavior we had before 10.5.2" This reverts commit 8ae462a220b6dee3f493de3cb2fecacfc6ae610c. --- mysql-test/main/mysqld--help.result | 8 ------- mysql-test/main/xa.result | 16 ------------- mysql-test/main/xa.test | 19 --------------- mysql-test/suite/rpl/r/rpl_xa.result | 24 ------------------- .../rpl/r/rpl_xa_gtid_pos_auto_engine.result | 24 ------------------- mysql-test/suite/rpl/t/rpl_xa.inc | 23 ------------------ .../sys_vars/r/sysvars_server_embedded.result | 10 -------- .../r/sysvars_server_notembedded.result | 10 -------- sql/sql_class.cc | 7 +----- sql/sql_class.h | 1 - sql/sys_vars.cc | 10 -------- sql/xa.h | 1 - 12 files changed, 1 insertion(+), 152 deletions(-) diff --git a/mysql-test/main/mysqld--help.result b/mysql-test/main/mysqld--help.result index 0d6c747ae58..83a93a197a6 100644 --- a/mysql-test/main/mysqld--help.result +++ b/mysql-test/main/mysqld--help.result @@ -433,13 +433,6 @@ The following specify which files/extra groups are read (specified before remain --lc-time-names=name Set the language used for the month names and the days of the week. - --legacy-xa-rollback-at-disconnect - If a user session disconnects after putting a transaction - into the XA PREPAREd state, roll back the transaction. - Can be used for backwards compatibility to enable this - pre-10.5 behavior for applications that expect it. Note - that this violates the XA specification and should not be - used for new code --local-infile Enable LOAD DATA LOCAL INFILE (Defaults to on; use --skip-local-infile to disable.) --lock-wait-timeout=# @@ -1579,7 +1572,6 @@ large-pages FALSE lc-messages en_US lc-messages-dir MYSQL_SHAREDIR/ lc-time-names en_US -legacy-xa-rollback-at-disconnect FALSE local-infile TRUE lock-wait-timeout 86400 log-bin foo diff --git a/mysql-test/main/xa.result b/mysql-test/main/xa.result index 58ad2a54edd..faabf1cf695 100644 --- a/mysql-test/main/xa.result +++ b/mysql-test/main/xa.result @@ -592,22 +592,6 @@ formatID gtrid_length bqual_length data xa rollback '4'; ERROR XA100: XA_RBROLLBACK: Transaction branch was rolled back set @@global.read_only=@sav_read_only; -# MDEV-35019: Provide a way to enable "rollback XA on disconnect" behavior we had before 10.5.2 -# Test legacy_xa_rollback_at_disconnect option. -CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB; -INSERT INTO t1 VALUES (1, 0); -connect con1,localhost,root,,; -SET SESSION legacy_xa_rollback_at_disconnect= 1; -XA START '5'; -INSERT INTO t1 VALUES (2, 0); -XA END '5'; -XA PREPARE '5'; -disconnect con1; -connection default; -INSERT INTO t1 VALUES (3, 0); -XA ROLLBACK '5'; -ERROR XAE04: XAER_NOTA: Unknown XID -DROP TABLE t1; # # End of 10.5 tests # diff --git a/mysql-test/main/xa.test b/mysql-test/main/xa.test index dfc97002168..e1ca39be9ab 100644 --- a/mysql-test/main/xa.test +++ b/mysql-test/main/xa.test @@ -747,25 +747,6 @@ xa rollback '4'; set @@global.read_only=@sav_read_only; ---echo # MDEV-35019: Provide a way to enable "rollback XA on disconnect" behavior we had before 10.5.2 ---echo # Test legacy_xa_rollback_at_disconnect option. -CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB; -INSERT INTO t1 VALUES (1, 0); -connect (con1,localhost,root,,); -SET SESSION legacy_xa_rollback_at_disconnect= 1; -XA START '5'; -INSERT INTO t1 VALUES (2, 0); -XA END '5'; -XA PREPARE '5'; -disconnect con1; - -connection default; ---source include/wait_until_count_sessions.inc -INSERT INTO t1 VALUES (3, 0); ---error ER_XAER_NOTA -XA ROLLBACK '5'; -DROP TABLE t1; - --echo # --echo # End of 10.5 tests --echo # diff --git a/mysql-test/suite/rpl/r/rpl_xa.result b/mysql-test/suite/rpl/r/rpl_xa.result index 7b58d3d6e06..061c7b360d0 100644 --- a/mysql-test/suite/rpl/r/rpl_xa.result +++ b/mysql-test/suite/rpl/r/rpl_xa.result @@ -280,28 +280,4 @@ disconnect con1; connection master; xa commit '1'; drop table t2, t1; -# MDEV-35019 Provide a way to enable "rollback XA on disconnect" behavior we had before 10.5.2 -CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; -INSERT INTO t1 VALUES (1), (3); -connect con1, localhost,root; -SET SESSION legacy_xa_rollback_at_disconnect= 1; -XA START '3'; -INSERT INTO t1 VALUES (2); -XA END '3'; -XA PREPARE '3'; -disconnect con1; -connection master; -include/save_master_gtid.inc -SELECT * FROM t1 ORDER BY a; -a -1 -3 -connection slave; -include/sync_with_master_gtid.inc -SELECT * FROM t1 ORDER BY a; -a -1 -3 -connection master; -DROP TABLE t1; include/rpl_end.inc diff --git a/mysql-test/suite/rpl/r/rpl_xa_gtid_pos_auto_engine.result b/mysql-test/suite/rpl/r/rpl_xa_gtid_pos_auto_engine.result index 2cb9b6c4290..35625cc7026 100644 --- a/mysql-test/suite/rpl/r/rpl_xa_gtid_pos_auto_engine.result +++ b/mysql-test/suite/rpl/r/rpl_xa_gtid_pos_auto_engine.result @@ -289,30 +289,6 @@ disconnect con1; connection master; xa commit '1'; drop table t2, t1; -# MDEV-35019 Provide a way to enable "rollback XA on disconnect" behavior we had before 10.5.2 -CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; -INSERT INTO t1 VALUES (1), (3); -connect con1, localhost,root; -SET SESSION legacy_xa_rollback_at_disconnect= 1; -XA START '3'; -INSERT INTO t1 VALUES (2); -XA END '3'; -XA PREPARE '3'; -disconnect con1; -connection master; -include/save_master_gtid.inc -SELECT * FROM t1 ORDER BY a; -a -1 -3 -connection slave; -include/sync_with_master_gtid.inc -SELECT * FROM t1 ORDER BY a; -a -1 -3 -connection master; -DROP TABLE t1; connection slave; include/stop_slave.inc SET @@global.gtid_pos_auto_engines=""; diff --git a/mysql-test/suite/rpl/t/rpl_xa.inc b/mysql-test/suite/rpl/t/rpl_xa.inc index e695f5712f0..5925de24f44 100644 --- a/mysql-test/suite/rpl/t/rpl_xa.inc +++ b/mysql-test/suite/rpl/t/rpl_xa.inc @@ -434,26 +434,3 @@ disconnect con1; connection master; xa commit '1'; drop table t2, t1; - ---echo # MDEV-35019 Provide a way to enable "rollback XA on disconnect" behavior we had before 10.5.2 -CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB; -INSERT INTO t1 VALUES (1), (3); - -connect con1, localhost,root; -SET SESSION legacy_xa_rollback_at_disconnect= 1; -XA START '3'; -INSERT INTO t1 VALUES (2); -XA END '3'; -XA PREPARE '3'; ---disconnect con1 - ---connection master ---source include/save_master_gtid.inc -SELECT * FROM t1 ORDER BY a; - ---connection slave ---source include/sync_with_master_gtid.inc -SELECT * FROM t1 ORDER BY a; - ---connection master -DROP TABLE t1; diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result index a2d9549b718..a5a02bfa1bc 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result +++ b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result @@ -1532,16 +1532,6 @@ NUMERIC_BLOCK_SIZE NULL ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT NULL -VARIABLE_NAME LEGACY_XA_ROLLBACK_AT_DISCONNECT -VARIABLE_SCOPE SESSION -VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT If a user session disconnects after putting a transaction into the XA PREPAREd state, roll back the transaction. Can be used for backwards compatibility to enable this pre-10.5 behavior for applications that expect it. Note that this violates the XA specification and should not be used for new code -NUMERIC_MIN_VALUE NULL -NUMERIC_MAX_VALUE NULL -NUMERIC_BLOCK_SIZE NULL -ENUM_VALUE_LIST OFF,ON -READ_ONLY NO -COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME LICENSE VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result index f40c0d0863f..50dd4ae23a3 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result +++ b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result @@ -1642,16 +1642,6 @@ NUMERIC_BLOCK_SIZE NULL ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT NULL -VARIABLE_NAME LEGACY_XA_ROLLBACK_AT_DISCONNECT -VARIABLE_SCOPE SESSION -VARIABLE_TYPE BOOLEAN -VARIABLE_COMMENT If a user session disconnects after putting a transaction into the XA PREPAREd state, roll back the transaction. Can be used for backwards compatibility to enable this pre-10.5 behavior for applications that expect it. Note that this violates the XA specification and should not be used for new code -NUMERIC_MIN_VALUE NULL -NUMERIC_MAX_VALUE NULL -NUMERIC_BLOCK_SIZE NULL -ENUM_VALUE_LIST OFF,ON -READ_ONLY NO -COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME LICENSE VARIABLE_SCOPE GLOBAL VARIABLE_TYPE VARCHAR diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 321c1684c75..fc04f5436f3 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -1553,12 +1553,7 @@ void THD::cleanup(void) close_temporary_tables(); if (transaction->xid_state.is_explicit_XA()) - { - if (unlikely(variables.legacy_xa_rollback_at_disconnect)) - xa_trans_force_rollback(this); - else - trans_xa_detach(this); - } + trans_xa_detach(this); else trans_rollback(this); diff --git a/sql/sql_class.h b/sql/sql_class.h index 0da311533d3..6baf796fb8b 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -788,7 +788,6 @@ typedef struct system_variables my_bool binlog_annotate_row_events; my_bool binlog_direct_non_trans_update; my_bool column_compression_zlib_wrap; - my_bool legacy_xa_rollback_at_disconnect; plugin_ref table_plugin; plugin_ref tmp_table_plugin; diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 53b2d9901ad..93298ff7b04 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -6788,13 +6788,3 @@ static Sys_var_ulonglong Sys_max_rowid_filter_size( SESSION_VAR(max_rowid_filter_size), CMD_LINE(REQUIRED_ARG), VALID_RANGE(1024, (ulonglong)~(intptr)0), DEFAULT(128*1024), BLOCK_SIZE(1)); - -static Sys_var_mybool Sys_legacy_xa_rollback_at_disconnect( - "legacy_xa_rollback_at_disconnect", - "If a user session disconnects after putting a transaction into the XA " - "PREPAREd state, roll back the transaction. Can be used for backwards " - "compatibility to enable this pre-10.5 behavior for applications that " - "expect it. Note that this violates the XA specification and should not " - "be used for new code", - SESSION_VAR(legacy_xa_rollback_at_disconnect), CMD_LINE(OPT_ARG), - DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG); diff --git a/sql/xa.h b/sql/xa.h index 04ac98149aa..5f21e9e9b55 100644 --- a/sql/xa.h +++ b/sql/xa.h @@ -46,7 +46,6 @@ bool xid_cache_insert(XID *xid); bool xid_cache_insert(THD *thd, XID_STATE *xid_state, XID *xid); void xid_cache_delete(THD *thd, XID_STATE *xid_state); -bool xa_trans_force_rollback(THD *thd); bool trans_xa_start(THD *thd); bool trans_xa_end(THD *thd); bool trans_xa_prepare(THD *thd); From a4d2cc931d74914d429961312206fbc1c07947c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Wed, 16 Oct 2024 14:37:44 +0300 Subject: [PATCH 051/121] MDEV-35174 Possible hang in trx_undo_prev_version() In commit b7b9f3ce825a08f16ad851c16f603365ae473195 (MDEV-34515) we accidentally made the InnoDB MVCC code acquire a shared purge_sys.latch twice. Recursive shared latch acquisition may cause a deadlock of InnoDB threads if another thread in between will start waiting for an exclusive latch. purge_sys_t::latch: In debug builds, use srw_lock_debug instead of srw_spin_lock, so that bugs like this will result in debug assertion failures. trx_undo_report_row_operation(): Pass the view_guard to trx_undo_prev_version() and the rest of the arguments in the same order, so that the work to permute argument registers is minimized. --- storage/innobase/include/trx0purge.h | 3 ++- storage/innobase/trx/trx0rec.cc | 17 +++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/storage/innobase/include/trx0purge.h b/storage/innobase/include/trx0purge.h index 760c98bc677..fd355758eba 100644 --- a/storage/innobase/include/trx0purge.h +++ b/storage/innobase/include/trx0purge.h @@ -125,7 +125,8 @@ class purge_sys_t public: /** latch protecting view, m_enabled */ - alignas(CPU_LEVEL1_DCACHE_LINESIZE) mutable srw_spin_lock latch; + alignas(CPU_LEVEL1_DCACHE_LINESIZE) + mutable IF_DBUG(srw_lock_debug,srw_spin_lock) latch; private: /** Read view at the start of a purge batch. Any encountered index records that are older than view will be removed. */ diff --git a/storage/innobase/trx/trx0rec.cc b/storage/innobase/trx/trx0rec.cc index 2ff6135227b..e04e8a51f07 100644 --- a/storage/innobase/trx/trx0rec.cc +++ b/storage/innobase/trx/trx0rec.cc @@ -2040,8 +2040,10 @@ err_exit: static dberr_t trx_undo_prev_version(const rec_t *rec, dict_index_t *index, rec_offs *offsets, mem_heap_t *heap, - rec_t **old_vers, mem_heap_t *v_heap, - dtuple_t **vrow, ulint v_status, + rec_t **old_vers, + const purge_sys_t::view_guard &check, + ulint v_status, + mem_heap_t *v_heap, dtuple_t **vrow, const trx_undo_rec_t *undo_rec); inline const buf_block_t * @@ -2142,7 +2144,8 @@ dberr_t trx_undo_prev_version_build(const rec_t *rec, dict_index_t *index, if (UNIV_UNLIKELY(end > offset && end < srv_page_size - FIL_PAGE_DATA_END)) err= trx_undo_prev_version(rec, index, offsets, heap, - old_vers, v_heap, vrow, v_status, undo_rec); + old_vers, check, v_status, v_heap, vrow, + undo_rec); } } @@ -2152,8 +2155,10 @@ dberr_t trx_undo_prev_version_build(const rec_t *rec, dict_index_t *index, static dberr_t trx_undo_prev_version(const rec_t *rec, dict_index_t *index, rec_offs *offsets, mem_heap_t *heap, - rec_t **old_vers, mem_heap_t *v_heap, - dtuple_t **vrow, ulint v_status, + rec_t **old_vers, + const purge_sys_t::view_guard &check, + ulint v_status, + mem_heap_t *v_heap, dtuple_t **vrow, const trx_undo_rec_t *undo_rec) { byte type, cmpl_info; @@ -2223,7 +2228,7 @@ static dberr_t trx_undo_prev_version(const rec_t *rec, dict_index_t *index, the BLOB. */ if (update->info_bits & REC_INFO_DELETED_FLAG - && purge_sys.is_purgeable(trx_id)) { + && check.view().changes_visible(trx_id)) { return DB_SUCCESS; } From 89493a9980c1afcfffcdd5a46fbe2664f2c070fc Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Tue, 15 Oct 2024 17:35:27 +0300 Subject: [PATCH 052/121] MDEV-34993: fix merge into 10.6: OPTIMIZER_ADJ_FIX_CARD_MULT should be ON by default --- mysql-test/main/mysqld--help.result | 2 +- mysql-test/main/secondary_key_costs.result | 2 +- .../main/selectivity_innodb_notembedded.result | 12 +++++++----- mysql-test/main/selectivity_notembedded.result | 12 +++++++----- sql/sql_priv.h | 2 ++ sql/sys_vars.cc | 2 +- 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/mysql-test/main/mysqld--help.result b/mysql-test/main/mysqld--help.result index 0e6945f5455..352063ece38 100644 --- a/mysql-test/main/mysqld--help.result +++ b/mysql-test/main/mysqld--help.result @@ -1709,7 +1709,7 @@ old-alter-table DEFAULT old-mode UTF8_IS_UTF8MB3 old-passwords FALSE old-style-user-limits FALSE -optimizer-adjust-secondary-key-costs fix_reuse_range_for_ref +optimizer-adjust-secondary-key-costs fix_reuse_range_for_ref,fix_card_multiplier optimizer-join-limit-pref-ratio 0 optimizer-max-sel-arg-weight 32000 optimizer-max-sel-args 16000 diff --git a/mysql-test/main/secondary_key_costs.result b/mysql-test/main/secondary_key_costs.result index 3a5b883068c..09c6fa31cab 100644 --- a/mysql-test/main/secondary_key_costs.result +++ b/mysql-test/main/secondary_key_costs.result @@ -82,7 +82,7 @@ json_detailed(json_extract(@trace, '$**.considered_access_paths')) drop table t1, name, flag2; select @@optimizer_adjust_secondary_key_costs; @@optimizer_adjust_secondary_key_costs -fix_reuse_range_for_ref +fix_reuse_range_for_ref,fix_card_multiplier set @@optimizer_adjust_secondary_key_costs=7; select @@optimizer_adjust_secondary_key_costs; @@optimizer_adjust_secondary_key_costs diff --git a/mysql-test/main/selectivity_innodb_notembedded.result b/mysql-test/main/selectivity_innodb_notembedded.result index 8e7920cb4ee..04450f1b348 100644 --- a/mysql-test/main/selectivity_innodb_notembedded.result +++ b/mysql-test/main/selectivity_innodb_notembedded.result @@ -250,7 +250,9 @@ JS { "index_name": "key1", "selectivity_from_index": 0.399, - "selectivity_multiplier": 90.9091 + "selectivity_multiplier": 90.9091, + "note": "multiplier too high, clipping", + "clipped_multiplier": 2.506265664 } ] ] @@ -266,16 +268,16 @@ JS [ { "access_type": "range", - "resulting_rows": 181.3636545, - "cost": 1.79769e308, + "resulting_rows": 5, + "cost": 6.83879845, "chosen": true } ], "chosen_access_method": { "type": "range", - "records": 181.3636545, - "cost": 1.79769e308, + "records": 5, + "cost": 6.83879845, "uses_join_buffering": false } } diff --git a/mysql-test/main/selectivity_notembedded.result b/mysql-test/main/selectivity_notembedded.result index d8dbb80fa59..02d557ca793 100644 --- a/mysql-test/main/selectivity_notembedded.result +++ b/mysql-test/main/selectivity_notembedded.result @@ -245,7 +245,9 @@ JS { "index_name": "key1", "selectivity_from_index": 0.391, - "selectivity_multiplier": 90.9091 + "selectivity_multiplier": 90.9091, + "note": "multiplier too high, clipping", + "clipped_multiplier": 2.557544757 } ] ] @@ -261,16 +263,16 @@ JS [ { "access_type": "range", - "resulting_rows": 177.7272905, - "cost": 1.79769e308, + "resulting_rows": 5, + "cost": 6.647684891, "chosen": true } ], "chosen_access_method": { "type": "range", - "records": 177.7272905, - "cost": 1.79769e308, + "records": 5, + "cost": 6.647684891, "uses_join_buffering": false } } diff --git a/sql/sql_priv.h b/sql/sql_priv.h index a15b7bbebfe..251da05b420 100644 --- a/sql/sql_priv.h +++ b/sql/sql_priv.h @@ -278,6 +278,8 @@ #define OPTIMIZER_ADJ_FIX_REUSE_RANGE_FOR_REF (16) #define OPTIMIZER_ADJ_FIX_CARD_MULT (32) +#define OPTIMIZER_ADJ_DEFAULT (OPTIMIZER_ADJ_FIX_REUSE_RANGE_FOR_REF | \ + OPTIMIZER_ADJ_FIX_CARD_MULT) /* Replication uses 8 bytes to store SQL_MODE in the binary log. The day you use strictly more than 64 bits by adding one more define above, you should diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 630726c5cb8..cb35386f883 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -2860,7 +2860,7 @@ static Sys_var_set Sys_optimizer_adjust_secondary_key_costs( "This variable will be deleted in MariaDB 11.0 as it is not needed with the " "new 11.0 optimizer.", SESSION_VAR(optimizer_adjust_secondary_key_costs), CMD_LINE(REQUIRED_ARG), - adjust_secondary_key_cost, DEFAULT(OPTIMIZER_ADJ_FIX_REUSE_RANGE_FOR_REF)); + adjust_secondary_key_cost, DEFAULT(OPTIMIZER_ADJ_DEFAULT)); static Sys_var_charptr_fscs Sys_pid_file( From c1fc59277a98149123d0feb6917b8d6850aa1033 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Tue, 15 Oct 2024 18:54:53 +0200 Subject: [PATCH 053/121] MDEV-34929 page-compressed tables do not work on Windows Remove workaround for MDEV-13941, it served for 5 years,and all affected pre-release 10.2 installation should have been already fixed in between. Apparently Innodb is using is_sparse parameter in os_file_set_size() inconsistently, and it passes is_sparse=false now during first file extension. With MDEV-13941 workaround in place, it would unsparse the file, which is makes compression not to work at all anymore. --- .../innodb/r/page_compression_windows.result | 6 ++++++ .../suite/innodb/t/page_compression_windows.opt | 1 + .../suite/innodb/t/page_compression_windows.test | 7 +++++++ storage/innobase/os/os0file.cc | 16 +--------------- 4 files changed, 15 insertions(+), 15 deletions(-) create mode 100644 mysql-test/suite/innodb/r/page_compression_windows.result create mode 100644 mysql-test/suite/innodb/t/page_compression_windows.opt create mode 100644 mysql-test/suite/innodb/t/page_compression_windows.test diff --git a/mysql-test/suite/innodb/r/page_compression_windows.result b/mysql-test/suite/innodb/r/page_compression_windows.result new file mode 100644 index 00000000000..229050db913 --- /dev/null +++ b/mysql-test/suite/innodb/r/page_compression_windows.result @@ -0,0 +1,6 @@ +create table t_compressed(b longblob) engine=InnoDB page_compressed=1; +insert into t_compressed values(repeat(1,1000000)); +select allocated_size < file_size from information_schema.innodb_sys_tablespaces where name='test/t_compressed'; +allocated_size < file_size +1 +drop table t_compressed; diff --git a/mysql-test/suite/innodb/t/page_compression_windows.opt b/mysql-test/suite/innodb/t/page_compression_windows.opt new file mode 100644 index 00000000000..66bceccc683 --- /dev/null +++ b/mysql-test/suite/innodb/t/page_compression_windows.opt @@ -0,0 +1 @@ +--innodb-sys-tablespaces diff --git a/mysql-test/suite/innodb/t/page_compression_windows.test b/mysql-test/suite/innodb/t/page_compression_windows.test new file mode 100644 index 00000000000..4400afd6171 --- /dev/null +++ b/mysql-test/suite/innodb/t/page_compression_windows.test @@ -0,0 +1,7 @@ +--source include/have_innodb.inc +--source include/windows.inc +create table t_compressed(b longblob) engine=InnoDB page_compressed=1; +insert into t_compressed values(repeat(1,1000000)); +# Check that compression worked, i.e allocated size (physical file size) < logical file size +select allocated_size < file_size from information_schema.innodb_sys_tablespaces where name='test/t_compressed'; +drop table t_compressed; diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index beaf2c172d7..6134a44b771 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -3210,22 +3210,8 @@ os_file_set_size( #ifdef _WIN32 /* On Windows, changing file size works well and as expected for both - sparse and normal files. - - However, 10.2 up until 10.2.9 made every file sparse in innodb, - causing NTFS fragmentation issues(MDEV-13941). We try to undo - the damage, and unsparse the file.*/ - - if (!is_sparse && os_is_sparse_file_supported(file)) { - if (!os_file_set_sparse_win32(file, false)) - /* Unsparsing file failed. Fallback to writing binary - zeros, to avoid even higher fragmentation.*/ - goto fallback; - } - + sparse and normal files. */ return os_file_change_size_win32(name, file, size); - -fallback: #else struct stat statbuf; From bddbef3573349b0565c43c27beba47c89358f39f Mon Sep 17 00:00:00 2001 From: Monty Date: Tue, 1 Oct 2024 17:07:48 +0300 Subject: [PATCH 054/121] MDEV-34533 asan error about stack overflow when writing record in Aria The problem was that when using clang + asan, we do not get a correct value for the thread stack as some local variables are not allocated at the normal stack. It looks like that for example clang 18.1.3, when compiling with -O2 -fsanitize=addressan it puts local variables and things allocated by alloca() in other areas than on the stack. The following code shows the issue Thread 6 "mariadbd" hit Breakpoint 3, do_handle_one_connection (connect=0x5080000027b8, put_in_cache=) at sql/sql_connect.cc:1399 THD *thd; 1399 thd->thread_stack= (char*) &thd; (gdb) p &thd (THD **) 0x7fffedee7060 (gdb) p $sp (void *) 0x7fffef4e7bc0 The address of thd is 24M away from the stack pointer (gdb) info reg ... rsp 0x7fffef4e7bc0 0x7fffef4e7bc0 ... r13 0x7fffedee7060 140737185214560 r13 is pointing to the address of the thd. Probably some kind of "local stack" used by the sanitizer I have verified this with gdb on a recursive call that calls alloca() in a loop. In this case all objects was stored in a local heap, not on the stack. To solve this issue in a portable way, I have added two functions: my_get_stack_pointer() returns the address of the current stack pointer. The code is using asm instructions for intel 32/64 bit, powerpc, arm 32/64 bit and sparc 32/64 bit. Supported compilers are gcc, clang and MSVC. For MSVC 64 bit we are using _AddressOfReturnAddress() As a fallback for other compilers/arch we use the address of a local variable. my_get_stack_bounds() that will return the address of the base stack and stack size using pthread_attr_getstack() or NtCurrentTed() with fallback to using the address of a local variable and user provided stack size. Server changes are: - Moving setting of thread_stack to THD::store_globals() using my_get_stack_bounds(). - Removing setting of thd->thread_stack, except in functions that allocates a lot on the stack before calling store_globals(). When using estimates for stack start, we reduce stack_size with MY_STACK_SAFE_MARGIN (8192) to take into account the stack used before calling store_globals(). I also added a unittest, stack_allocation-t, to verify the new code. Reviewed-by: Sergei Golubchik --- config.h.cmake | 1 + configure.cmake | 1 + include/my_stack_alloc.h | 84 +++++++++++++++++-- mysys/CMakeLists.txt | 2 +- mysys/my_stack.c | 95 ++++++++++++++++++++++ sql/event_scheduler.cc | 7 +- sql/events.cc | 6 -- sql/log.cc | 1 - sql/rpl_mi.cc | 1 - sql/rpl_parallel.cc | 1 - sql/semisync_master_ack_receiver.cc | 1 - sql/slave.cc | 11 ++- sql/sql_acl.cc | 2 - sql/sql_base.cc | 4 +- sql/sql_class.cc | 16 ++-- sql/sql_class.h | 6 +- sql/sql_connect.cc | 10 --- sql/sql_insert.cc | 1 - sql/sql_parse.cc | 5 +- sql/sql_plugin.cc | 2 +- sql/sql_prepare.cc | 3 +- sql/sql_reload.cc | 3 - sql/sql_servers.cc | 1 - sql/sql_table.cc | 1 - sql/sql_udf.cc | 2 +- sql/threadpool_common.cc | 1 - sql/tztime.cc | 2 +- sql/wsrep_mysqld.cc | 1 - sql/wsrep_schema.cc | 1 - sql/wsrep_server_service.cc | 2 +- sql/wsrep_sst.cc | 1 - sql/wsrep_thd.cc | 4 +- sql/wsrep_utils.cc | 1 - unittest/mysys/CMakeLists.txt | 2 +- unittest/mysys/stack_allocation-t.c | 120 ++++++++++++++++++++++++++++ 35 files changed, 328 insertions(+), 74 deletions(-) create mode 100644 mysys/my_stack.c create mode 100644 unittest/mysys/stack_allocation-t.c diff --git a/config.h.cmake b/config.h.cmake index 2c421798c33..2d26fc6b66a 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -195,6 +195,7 @@ #cmakedefine HAVE_PTHREAD_ATTR_GETSTACKSIZE 1 #cmakedefine HAVE_PTHREAD_ATTR_SETSCOPE 1 #cmakedefine HAVE_PTHREAD_ATTR_SETSTACKSIZE 1 +#cmakedefine HAVE_PTHREAD_GETATTR_NP 1 #cmakedefine HAVE_PTHREAD_CONDATTR_CREATE 1 #cmakedefine HAVE_PTHREAD_GETAFFINITY_NP 1 #cmakedefine HAVE_PTHREAD_KEY_DELETE 1 diff --git a/configure.cmake b/configure.cmake index 31e20aa664c..774e2554be8 100644 --- a/configure.cmake +++ b/configure.cmake @@ -379,6 +379,7 @@ CHECK_FUNCTION_EXISTS (pthread_attr_getguardsize HAVE_PTHREAD_ATTR_GETGUARDSIZE) CHECK_FUNCTION_EXISTS (pthread_attr_setstacksize HAVE_PTHREAD_ATTR_SETSTACKSIZE) CHECK_FUNCTION_EXISTS (pthread_condattr_create HAVE_PTHREAD_CONDATTR_CREATE) CHECK_FUNCTION_EXISTS (pthread_getaffinity_np HAVE_PTHREAD_GETAFFINITY_NP) +CHECK_FUNCTION_EXISTS (pthread_getattr_np HAVE_PTHREAD_GETATTR_NP) CHECK_FUNCTION_EXISTS (pthread_key_delete HAVE_PTHREAD_KEY_DELETE) CHECK_FUNCTION_EXISTS (pthread_rwlock_rdlock HAVE_PTHREAD_RWLOCK_RDLOCK) CHECK_FUNCTION_EXISTS (pthread_sigmask HAVE_PTHREAD_SIGMASK) diff --git a/include/my_stack_alloc.h b/include/my_stack_alloc.h index 95e746d6fe7..796bb69f877 100644 --- a/include/my_stack_alloc.h +++ b/include/my_stack_alloc.h @@ -17,6 +17,65 @@ #ifndef _my_stack_alloc_h #define _my_stack_alloc_h +#ifdef _MSC_VER +#include // For MSVC-specific intrinsics +#else +#include +#endif + + +/* + Get the address of the current stack. + This will fallback to using an estimate for the stack pointer + in the cases where either the compiler or the architecture is + not supported. +*/ + +static inline void *my_get_stack_pointer(void *default_stack) +{ + void *stack_ptr= NULL; + +#if defined(__GNUC__) || defined(__clang__) /* GCC and Clang compilers */ +#if defined(__i386__) /* Intel x86 (32-bit) */ + __asm__ volatile ("movl %%esp, %0" : "=r" (stack_ptr)); +#elif defined(__x86_64__) /* Intel x86-64 (64-bit) */ + __asm__ volatile ("movq %%rsp, %0" : "=r" (stack_ptr)); +#elif defined(__powerpc__) /* PowerPC (32-bit) */ + __asm__ volatile ("mr %0, 1" : "=r" (stack_ptr)); /* GPR1 is the stack pointer */ +#elif defined(__ppc64__) /* PowerPC (64-bit) */ + __asm__ volatile ("mr %0, 1" : "=r" (stack_ptr)); +#elif defined(__arm__) /* ARM 32-bit */ + __asm__ volatile ("mov %0, sp" : "=r" (stack_ptr)); +#elif defined(__aarch64__) /* ARM 64-bit */ + __asm__ volatile ("mov %0, sp" : "=r" (stack_ptr)); +#elif defined(__sparc__) /* SPARC 32-bit */ + __asm__ volatile ("mov %%sp, %0" : "=r" (stack_ptr)); +#elif defined(__sparc64__) /* SPARC 64-bit */ + __asm__ volatile ("mov %%sp, %0" : "=r" (stack_ptr)); +#elif defined(__s390x__) + stack_ptr= __builtin_frame_address(0); +#else + /* Generic fallback for unsupported architectures in GCC/Clang */ + stack_ptr= default_stack ? default_stack : (void*) &stack_ptr; +#endif +#elif defined(_MSC_VER) /* MSVC compiler (Intel only) */ +#if defined(_M_IX86) /* Intel x86 (32-bit) */ + __asm { mov stack_ptr, esp } +#elif defined(_M_X64) /* Intel x86-64 (64-bit) */ + /* rsp can’t be accessed directly in MSVC x64 */ + stack_ptr= _AddressOfReturnAddress(); +#else + /* Generic fallback for unsupported architectures in MSVC */ + stack_ptr= default_stack ? default_stack : (void*) &stack_ptr; +#endif +#else + /* Generic fallback for unsupported compilers */ + stack_ptr= default_stack ? default_stack : (void*) &stack_ptr; +#endif + return stack_ptr; +} + + /* Do allocation through alloca if there is enough stack available. If not, use my_malloc() instead. @@ -42,7 +101,7 @@ /* Allocate small blocks as long as there is this much left */ #define STACK_ALLOC_SMALL_BLOCK 1024*32 -/* Allocate small blocks as long as there is this much left */ +/* Allocate small blocks as long as the block size is not bigger than */ #define STACK_ALLOC_SMALL_BLOCK_SIZE 4096 /* @@ -56,11 +115,11 @@ do \ { \ size_t alloc_size= (size); \ - size_t stack_left= available_stack_size(&alloc_size, (stack_end)); \ - if (stack_left > alloc_size && \ - (STACK_ALLOC_BIG_BLOCK < stack_left - alloc_size || \ - ((STACK_ALLOC_SMALL_BLOCK < stack_left - alloc_size) && \ - (STACK_ALLOC_SMALL_BLOCK_SIZE <= alloc_size)))) \ + void *stack= my_get_stack_pointer(0); \ + size_t stack_left= available_stack_size(stack, (stack_end)); \ + if (stack_left > alloc_size + STACK_ALLOC_SMALL_BLOCK && \ + (stack_left > alloc_size + STACK_ALLOC_BIG_BLOCK || \ + (STACK_ALLOC_SMALL_BLOCK_SIZE >= alloc_size))) \ { \ (must_be_freed)= 0; \ (res)= alloca(size); \ @@ -90,3 +149,16 @@ static inline void stack_alloc_free(void *res, my_bool must_be_freed) my_free(res); } #endif /* _my_stack_alloc_h */ + + +/* Get start and end of stack */ + +/* + This is used in the case when we not know the exact stack start + and have to estimate stack start with get_stack_pointer() +*/ +#define MY_STACK_SAFE_MARGIN 8192 + +extern void my_get_stack_bounds(void **stack_start, void **stack_end, + void *fallback_stack_start, + size_t fallback_stack_size); diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt index 39561c328f8..405c0deabcd 100644 --- a/mysys/CMakeLists.txt +++ b/mysys/CMakeLists.txt @@ -36,7 +36,7 @@ SET(MYSYS_SOURCES array.c charset-def.c charset.c my_default.c my_basename.c my_write.c ptr_cmp.c queues.c stacktrace.c string.c thr_alarm.c thr_lock.c thr_mutex.c - thr_rwlock.c thr_timer.c + thr_rwlock.c thr_timer.c my_stack.c tree.c typelib.c base64.c my_memmem.c my_getpagesize.c guess_malloc_library.c diff --git a/mysys/my_stack.c b/mysys/my_stack.c new file mode 100644 index 00000000000..3eec01092ac --- /dev/null +++ b/mysys/my_stack.c @@ -0,0 +1,95 @@ +/* Copyright 2024 MariaDB corporation AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA +*/ + + +/* + Get start and end of stack + + Note that the code depends on STACK_DIRECTION that is defined by cmake. + In general, STACK_DIRECTION should be 1 except in case of + an upward-growing stack that can happen on sparc or hpux platforms. +*/ + + +#include "my_global.h" +#include "my_sys.h" +#include "my_stack_alloc.h" + +#ifdef _WIN_ +#include +#include +#include +#endif + +/* Get start and end of stack */ + +extern void my_get_stack_bounds(void **stack_start, void **stack_end, + void *fallback_stack_start, + size_t fallback_stack_size) +{ +#if defined(__GNUC__) || defined(__clang__) /* GCC or Clang compilers */ + size_t stack_size; +#if defined(HAVE_PTHREAD_GETATTR_NP) + /* POSIX-compliant system (Linux, macOS, etc.) */ + pthread_attr_t attr; + pthread_t thread= pthread_self(); + void *stack_base; + + /* Get the thread attributes */ + if (pthread_getattr_np(thread, &attr) == 0) + { + /* Get stack base and size */ + pthread_attr_getstack(&attr, &stack_base, &stack_size); + /* + stack_base points to start of the stack region to which the + stack grows to + */ + *stack_start= stack_base - stack_size * STACK_DIRECTION; + pthread_attr_destroy(&attr); /* Clean up */ + } + else + { + /* + Fallback: + Use the current stack pointer as an approximation of the start + */ + *stack_start= my_get_stack_pointer(fallback_stack_start); + stack_size= (fallback_stack_size - + MY_MIN(fallback_stack_size, MY_STACK_SAFE_MARGIN)); + } +#else + /* Platform does not have pthread_getattr_np */ + *stack_start= my_get_stack_pointer(fallback_stack_start); + stack_size= (fallback_stack_size - + MY_MIN(fallback_stack_size, MY_STACK_SAFE_MARGIN)); +#endif /* defined(HAVE_PTHREAD_GETATTR_NP) */ + *stack_end= *stack_start + stack_size * STACK_DIRECTION; + +#elif defined(_MSC_VER) && defined(_WIN32) + /* Windows platform (MSVC) */ + NT_TIB* teb= (NT_TIB*)NtCurrentTeb(); + + *stack_start= teb->StackBase; /* Start of the stack */ + *stack_end= teb->StackLimit; /* End of the stack (stack limit) */ +#else + /* Unsupported platform / compiler */ + *stack_start= my_get_stack_pointer(fallback_stack_start); + *stack_end= (*stack_start + + (fallback_stack_size - + MY_MIN(fallback_stack_size, MY_STACK_SAFE_MARGIN)) * + STACK_DIRECTON); +#endif /* defined(__GNUC__) || defined(__clang__) */ +} diff --git a/sql/event_scheduler.cc b/sql/event_scheduler.cc index 9015c1b2655..a890c98c361 100644 --- a/sql/event_scheduler.cc +++ b/sql/event_scheduler.cc @@ -219,12 +219,10 @@ pre_init_event_thread(THD* thd) pthread_handler_t event_scheduler_thread(void *arg) { - /* needs to be first for thread_stack */ THD *thd= (THD *) ((struct scheduler_param *) arg)->thd; Event_scheduler *scheduler= ((struct scheduler_param *) arg)->scheduler; bool res; - - thd->thread_stack= (char *)&thd; // remember where our stack is + thd->reset_stack(); mysql_thread_set_psi_id(thd->thread_id); @@ -285,8 +283,6 @@ event_worker_thread(void *arg) void Event_worker_thread::run(THD *thd, Event_queue_element_for_exec *event) { - /* needs to be first for thread_stack */ - char my_stack; Event_job_data job_data; bool res; @@ -302,7 +298,6 @@ Event_worker_thread::run(THD *thd, Event_queue_element_for_exec *event) thd->charset(), NULL); #endif - thd->thread_stack= &my_stack; // remember where our stack is res= post_init_event_thread(thd); DBUG_ENTER("Event_worker_thread::run"); diff --git a/sql/events.cc b/sql/events.cc index 6fe0974430c..e7ea1cca5c6 100644 --- a/sql/events.cc +++ b/sql/events.cc @@ -901,12 +901,6 @@ Events::init(THD *thd, bool opt_noacl_or_bootstrap) res= TRUE; goto end; } - /* - The thread stack does not start from this function but we cannot - guess the real value. So better some value that doesn't assert than - no value. - */ - thd->thread_stack= (char*) &thd; thd->store_globals(); /* Set current time for the thread that handles events. diff --git a/sql/log.cc b/sql/log.cc index 4f74900e59a..a0f865dc7e0 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -10461,7 +10461,6 @@ binlog_background_thread(void *arg __attribute__((unused))) thd= new THD(next_thread_id()); thd->system_thread= SYSTEM_THREAD_BINLOG_BACKGROUND; - thd->thread_stack= (char*) &thd; /* Set approximate stack start */ thd->store_globals(); thd->security_ctx->skip_grants(); thd->set_command(COM_DAEMON); diff --git a/sql/rpl_mi.cc b/sql/rpl_mi.cc index 3c6db4f0aad..7a9dcd49493 100644 --- a/sql/rpl_mi.cc +++ b/sql/rpl_mi.cc @@ -1111,7 +1111,6 @@ bool Master_info_index::init_all_master_info() } thd= new THD(next_thread_id()); /* Needed by start_slave_threads */ - thd->thread_stack= (char*) &thd; thd->store_globals(); reinit_io_cache(&index_file, READ_CACHE, 0L,0,0); diff --git a/sql/rpl_parallel.cc b/sql/rpl_parallel.cc index 9c4222d7817..ca469e3b6c7 100644 --- a/sql/rpl_parallel.cc +++ b/sql/rpl_parallel.cc @@ -1195,7 +1195,6 @@ handle_rpl_parallel_thread(void *arg) my_thread_init(); thd = new THD(next_thread_id()); - thd->thread_stack = (char*)&thd; server_threads.insert(thd); set_current_thd(thd); pthread_detach_this_thread(); diff --git a/sql/semisync_master_ack_receiver.cc b/sql/semisync_master_ack_receiver.cc index a76e3447ac8..10604926bca 100644 --- a/sql/semisync_master_ack_receiver.cc +++ b/sql/semisync_master_ack_receiver.cc @@ -201,7 +201,6 @@ void Ack_receiver::run() sql_print_information("Starting ack receiver thread"); thd->system_thread= SYSTEM_THREAD_SEMISYNC_MASTER_BACKGROUND; - thd->thread_stack= (char*) &thd; thd->store_globals(); thd->security_ctx->skip_grants(); thd->set_command(COM_DAEMON); diff --git a/sql/slave.cc b/sql/slave.cc index 1a6a5a6efdb..27dfcbf162d 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -367,7 +367,6 @@ end: static THD *new_bg_THD() { THD *thd= new THD(next_thread_id()); - thd->thread_stack= (char*) &thd; thd->store_globals(); thd->system_thread = SYSTEM_THREAD_SLAVE_BACKGROUND; thd->security_ctx->skip_grants(); @@ -628,7 +627,6 @@ int init_slave() { int error; THD *thd= new THD(next_thread_id()); - thd->thread_stack= (char*) &thd; thd->store_globals(); error= start_slave_threads(0, /* No active thd */ @@ -4724,7 +4722,12 @@ pthread_handler_t handle_slave_io(void *arg) thd->set_psi(PSI_CALL_get_thread()); pthread_detach_this_thread(); - thd->thread_stack= (char*) &thd; // remember where our stack is + /* + Remember where our stack is. This is needed for this function as + there are a lot of stack variables. It will be fixed in store_globals() + called by init_slave_thread(). + */ + thd->thread_stack= (void*) &thd; // remember where our stack is mi->clear_error(); if (init_slave_thread(thd, mi, SLAVE_THD_IO)) { @@ -5348,7 +5351,7 @@ pthread_handler_t handle_slave_sql(void *arg) serial_rgi= new rpl_group_info(rli); thd = new THD(next_thread_id()); // note that contructor of THD uses DBUG_ ! - thd->thread_stack = (char*)&thd; // remember where our stack is + thd->thread_stack= (void*) &thd; // Big stack, remember where our stack is thd->system_thread_info.rpl_sql_info= &sql_info; DBUG_ASSERT(rli->inited); diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index cd579be8010..28858277308 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -2509,7 +2509,6 @@ bool acl_init(bool dont_read_acl_tables) */ if (!(thd=new THD(0))) DBUG_RETURN(1); /* purecov: inspected */ - thd->thread_stack= (char*) &thd; thd->store_globals(); /* It is safe to call acl_reload() since acl_* arrays and hashes which @@ -7942,7 +7941,6 @@ bool grant_init() if (!(thd= new THD(0))) DBUG_RETURN(1); /* purecov: deadcode */ - thd->thread_stack= (char*) &thd; thd->store_globals(); return_val= grant_reload(thd); delete thd; diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 29daca40acb..0bfae16b23e 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -8985,17 +8985,17 @@ fill_record_n_invoke_before_triggers(THD *thd, TABLE *table, Field **ptr, my_bool mysql_rm_tmp_tables(void) { + THD *thd; uint i, idx; char path[FN_REFLEN], *tmpdir, path_copy[FN_REFLEN]; MY_DIR *dirp; FILEINFO *file; TABLE_SHARE share; - THD *thd; DBUG_ENTER("mysql_rm_tmp_tables"); if (!(thd= new THD(0))) DBUG_RETURN(1); - thd->thread_stack= (char*) &thd; + thd->thread_stack= (void*) &thd; // Big stack thd->store_globals(); for (i=0; i<=mysql_tmpdir_list.max; i++) diff --git a/sql/sql_class.cc b/sql/sql_class.cc index fc04f5436f3..de688b4cb31 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -2202,12 +2202,6 @@ void THD::reset_killed() void THD::store_globals() { - /* - Assert that thread_stack is initialized: it's necessary to be able - to track stack overrun. - */ - DBUG_ASSERT(thread_stack); - set_current_thd(this); /* mysys_var is concurrently readable by a killer thread. @@ -2239,8 +2233,11 @@ void THD::store_globals() os_thread_id= 0; #endif real_id= pthread_self(); // For debugging - mysys_var->stack_ends_here= thread_stack + // for consistency, see libevent_thread_proc - STACK_DIRECTION * (long)my_thread_stack_size; + + /* Set stack start and stack end */ + my_get_stack_bounds(&thread_stack, &mysys_var->stack_ends_here, + thread_stack, my_thread_stack_size); + if (net.vio) { net.thd= this; @@ -2252,6 +2249,7 @@ void THD::store_globals() thr_lock_info_init(&lock_info, mysys_var); } + /** Untie THD from current thread @@ -5018,7 +5016,6 @@ TABLE *find_fk_open_table(THD *thd, const char *db, size_t db_len, MYSQL_THD create_thd() { THD *thd= new THD(next_thread_id()); - thd->thread_stack= (char*) &thd; thd->store_globals(); thd->set_command(COM_DAEMON); thd->system_thread= SYSTEM_THREAD_GENERIC; @@ -5095,7 +5092,6 @@ void *thd_attach_thd(MYSQL_THD thd) auto save_mysysvar= pthread_getspecific(THR_KEY_mysys); pthread_setspecific(THR_KEY_mysys, thd->mysys_var); - thd->thread_stack= (char *) &thd; thd->store_globals(); return save_mysysvar; } diff --git a/sql/sql_class.h b/sql/sql_class.h index 6baf796fb8b..e1c6b83c448 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -2526,7 +2526,7 @@ public: A pointer to the stack frame of handle_one_connection(), which is called first in the thread for handling a client */ - char *thread_stack; + void *thread_stack; /** Currently selected catalog. @@ -3596,6 +3596,10 @@ public: void free_connection(); void reset_for_reuse(); void store_globals(); + void reset_stack() + { + thread_stack= 0; + } void reset_globals(); bool trace_started() { diff --git a/sql/sql_connect.cc b/sql/sql_connect.cc index 824f68890c0..825491cad44 100644 --- a/sql/sql_connect.cc +++ b/sql/sql_connect.cc @@ -1387,16 +1387,6 @@ void do_handle_one_connection(CONNECT *connect, bool put_in_cache) thd->thr_create_utime= thr_create_utime; /* We need to set this because of time_out_user_resource_limits */ thd->start_utime= thr_create_utime; - - /* - handle_one_connection() is normally the only way a thread would - start and would always be on the very high end of the stack , - therefore, the thread stack always starts at the address of the - first local variable of handle_one_connection, which is thd. We - need to know the start of the stack so that we could check for - stack overruns. - */ - thd->thread_stack= (char*) &thd; setup_connection_thread_globals(thd); for (;;) diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index d635ba7085b..2dccf7af587 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -3219,7 +3219,6 @@ pthread_handler_t handle_delayed_insert(void *arg) else { DBUG_ENTER("handle_delayed_insert"); - thd->thread_stack= (char*) &thd; if (init_thr_lock()) { thd->get_stmt_da()->set_error_status(ER_OUT_OF_RESOURCES); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index e0c87ec2117..0ed938eb63e 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -996,7 +996,6 @@ int bootstrap(MYSQL_FILE *file) #endif /* The following must be called before DBUG_ENTER */ - thd->thread_stack= (char*) &thd; thd->store_globals(); thd->security_ctx->user= (char*) my_strdup(key_memory_MPVIO_EXT_auth_info, @@ -7630,7 +7629,9 @@ check_stack_overrun(THD *thd, long margin, uchar *buf __attribute__((unused))) #ifndef __SANITIZE_ADDRESS__ long stack_used; DBUG_ASSERT(thd == current_thd); - if ((stack_used= available_stack_size(thd->thread_stack, &stack_used)) >= + DBUG_ASSERT(thd->thread_stack); + if ((stack_used= available_stack_size(thd->thread_stack, + my_get_stack_pointer(&stack_used))) >= (long) (my_thread_stack_size - margin)) { thd->is_fatal_error= 1; diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 22767d3025e..5f58c6707b7 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -1887,7 +1887,7 @@ static void plugin_load(MEM_ROOT *tmp_root) if (global_system_variables.log_warnings >= 9) sql_print_information("Initializing installed plugins"); - new_thd->thread_stack= (char*) &tables; + new_thd->thread_stack= (void*) &tables; // Big stack new_thd->store_globals(); new_thd->db= MYSQL_SCHEMA_NAME; bzero((char*) &new_thd->net, sizeof(new_thd->net)); diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 405464c119b..8647db0e766 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -6133,7 +6133,7 @@ loc_advanced_command(MYSQL *mysql, enum enum_server_command command, { THD *thd_orig= current_thd; set_current_thd(p->thd); - p->thd->thread_stack= (char*) &result; + p->thd->thread_stack= (void*) &result; // Big stack p->thd->set_time(); result= execute_server_code(p->thd, (const char *)arg, arg_length); p->thd->cleanup_after_query(); @@ -6313,7 +6313,6 @@ extern "C" MYSQL *mysql_real_connect_local(MYSQL *mysql) new_thd= new THD(0); local_connection_thread_count++; - new_thd->thread_stack= (char*) &thd_orig; new_thd->store_globals(); new_thd->security_ctx->skip_grants(); new_thd->query_cache_is_applicable= 0; diff --git a/sql/sql_reload.cc b/sql/sql_reload.cc index 3a9b8e4641d..dd81907b150 100644 --- a/sql/sql_reload.cc +++ b/sql/sql_reload.cc @@ -88,10 +88,7 @@ bool reload_acl_and_cache(THD *thd, unsigned long long options, allocate temporary THD for execution of acl_reload()/grant_reload(). */ if (unlikely(!thd) && (thd= (tmp_thd= new THD(0)))) - { - thd->thread_stack= (char*) &tmp_thd; thd->store_globals(); - } if (likely(thd)) { diff --git a/sql/sql_servers.cc b/sql/sql_servers.cc index d63b0d66a5e..6e59feddc3b 100644 --- a/sql/sql_servers.cc +++ b/sql/sql_servers.cc @@ -251,7 +251,6 @@ bool servers_init(bool dont_read_servers_table) */ if (!(thd=new THD(0))) DBUG_RETURN(TRUE); - thd->thread_stack= (char*) &thd; thd->store_globals(); /* It is safe to call servers_reload() since servers_* arrays and hashes which diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 4425157047c..c0f2502d61d 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1686,7 +1686,6 @@ void execute_ddl_log_recovery() */ if (!(thd=new THD(0))) DBUG_VOID_RETURN; - thd->thread_stack= (char*) &thd; thd->store_globals(); thd->set_query(recover_query_string, strlen(recover_query_string)); diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc index 02f068e9bbc..f5eab105335 100644 --- a/sql/sql_udf.cc +++ b/sql/sql_udf.cc @@ -179,7 +179,7 @@ void udf_init() DBUG_VOID_RETURN; } initialized = 1; - new_thd->thread_stack= (char*) &new_thd; + new_thd->thread_stack= (void*) &new_thd; // Big stack new_thd->store_globals(); new_thd->set_db(&MYSQL_SCHEMA_NAME); diff --git a/sql/threadpool_common.cc b/sql/threadpool_common.cc index 7c800696344..b5ae855deff 100644 --- a/sql/threadpool_common.cc +++ b/sql/threadpool_common.cc @@ -152,7 +152,6 @@ static void thread_attach(THD* thd) wsrep_wait_rollback_complete_and_acquire_ownership(thd); #endif /* WITH_WSREP */ set_mysys_var(thd->mysys_var); - thd->thread_stack=(char*)&thd; thd->store_globals(); PSI_CALL_set_thread(thd->get_psi()); mysql_socket_set_thread_owner(thd->net.vio->mysql_socket); diff --git a/sql/tztime.cc b/sql/tztime.cc index 9885fa88cf8..b8f3846a06c 100644 --- a/sql/tztime.cc +++ b/sql/tztime.cc @@ -1621,7 +1621,7 @@ my_tz_init(THD *org_thd, const char *default_tzname, my_bool bootstrap) */ if (!(thd= new THD(0))) DBUG_RETURN(1); - thd->thread_stack= (char*) &thd; + thd->thread_stack= (void*) &thd; // Big stack thd->store_globals(); /* Init all memory structures that require explicit destruction */ diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc index bc6c185c8d0..1be48c7c120 100644 --- a/sql/wsrep_mysqld.cc +++ b/sql/wsrep_mysqld.cc @@ -3301,7 +3301,6 @@ void* start_wsrep_THD(void *arg) (long long)thd->thread_id)); /* now that we've called my_thread_init(), it is safe to call DBUG_* */ - thd->thread_stack= (char*) &thd; wsrep_assign_from_threadvars(thd); wsrep_store_threadvars(thd); diff --git a/sql/wsrep_schema.cc b/sql/wsrep_schema.cc index 4cb839053c3..08e516b2a7a 100644 --- a/sql/wsrep_schema.cc +++ b/sql/wsrep_schema.cc @@ -692,7 +692,6 @@ int Wsrep_schema::init() WSREP_ERROR("Unable to get thd"); DBUG_RETURN(1); } - thd->thread_stack= (char*)&thd; wsrep_init_thd_for_schema(thd); if (Wsrep_schema_impl::execute_SQL(thd, create_cluster_table_str.c_str(), diff --git a/sql/wsrep_server_service.cc b/sql/wsrep_server_service.cc index 6184ba2df59..a2879b59789 100644 --- a/sql/wsrep_server_service.cc +++ b/sql/wsrep_server_service.cc @@ -34,7 +34,7 @@ #include "sql_base.h" /* close_thread_tables */ #include "debug_sync.h" -static void init_service_thd(THD* thd, char* thread_stack) +static void init_service_thd(THD* thd, void* thread_stack) { thd->thread_stack= thread_stack; thd->real_id= pthread_self(); diff --git a/sql/wsrep_sst.cc b/sql/wsrep_sst.cc index e9d2e158e39..cb2d61b7543 100644 --- a/sql/wsrep_sst.cc +++ b/sql/wsrep_sst.cc @@ -740,7 +740,6 @@ err: unireg_abort(1); } - thd->thread_stack= (char*) &thd; thd->security_ctx->skip_grants(); thd->system_thread= SYSTEM_THREAD_GENERIC; thd->real_id= pthread_self(); diff --git a/sql/wsrep_thd.cc b/sql/wsrep_thd.cc index f27b13b5874..1c51d05c56a 100644 --- a/sql/wsrep_thd.cc +++ b/sql/wsrep_thd.cc @@ -162,7 +162,7 @@ static void wsrep_rollback_high_priority(THD *thd, THD *rollbacker) { WSREP_DEBUG("Rollbacker aborting SR applier thd (%llu %lu)", thd->thread_id, thd->real_id); - char* orig_thread_stack= thd->thread_stack; + void* orig_thread_stack= thd->thread_stack; thd->thread_stack= rollbacker->thread_stack; DBUG_ASSERT(thd->wsrep_cs().mode() == Wsrep_client_state::m_high_priority); /* Must be streaming and must have been removed from the @@ -193,7 +193,7 @@ static void wsrep_rollback_local(THD *thd, THD *rollbacker) { WSREP_DEBUG("Rollbacker aborting local thd (%llu %lu)", thd->thread_id, thd->real_id); - char* orig_thread_stack= thd->thread_stack; + void* orig_thread_stack= thd->thread_stack; thd->thread_stack= rollbacker->thread_stack; if (thd->wsrep_trx().is_streaming()) { diff --git a/sql/wsrep_utils.cc b/sql/wsrep_utils.cc index a679304c40a..fb14f59bc86 100644 --- a/sql/wsrep_utils.cc +++ b/sql/wsrep_utils.cc @@ -421,7 +421,6 @@ thd::thd (my_bool won, bool system_thread) : init(), ptr(new THD(0)) { if (ptr) { - ptr->thread_stack= (char*) &ptr; wsrep_assign_from_threadvars(ptr); wsrep_store_threadvars(ptr); ptr->variables.option_bits&= ~OPTION_BIN_LOG; // disable binlog diff --git a/unittest/mysys/CMakeLists.txt b/unittest/mysys/CMakeLists.txt index 9dd5e5dbd9c..e35f9d72062 100644 --- a/unittest/mysys/CMakeLists.txt +++ b/unittest/mysys/CMakeLists.txt @@ -15,7 +15,7 @@ MY_ADD_TESTS(bitmap base64 my_atomic my_rdtsc lf my_malloc my_getopt dynstring byte_order - queues stacktrace crc32 LINK_LIBRARIES mysys) + queues stacktrace stack_allocation crc32 LINK_LIBRARIES mysys) MY_ADD_TESTS(my_vsnprintf LINK_LIBRARIES strings mysys) MY_ADD_TESTS(aes LINK_LIBRARIES mysys mysys_ssl) ADD_DEFINITIONS(${SSL_DEFINES}) diff --git a/unittest/mysys/stack_allocation-t.c b/unittest/mysys/stack_allocation-t.c new file mode 100644 index 00000000000..911bbd8de7a --- /dev/null +++ b/unittest/mysys/stack_allocation-t.c @@ -0,0 +1,120 @@ +/* Copyright (c) 2024, MariaDB Corporation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ + +#include +#include +#include +#include +#include +#include + +/* + Test of stack detection + The test is run with a stacks of STACK_ALLOC_SMALL_BLOCK_SIZE+1 and + STACK_ALLOC_SMALL_BLOCK_SIZE-1. + This is becasue of the function alloc_on_stack() has + different limits of how much it will allocate from the stack + based on the allocation size. +*/ + +/* + Common stack size in MariaDB. Cannot be bigger than system default + stack (common is 8M) +*/ +size_t my_stack_size= 299008; +size_t stack_allocation_total= 0; +extern long call_counter; +long call_counter; + +ATTRIBUTE_NOINLINE +int test_stack(void *stack_start, void *stack_end, int iteration, size_t stack_allocation) +{ + void *res, *stack; + my_bool must_be_freed; + + stack= my_get_stack_pointer(&must_be_freed); + if (stack_start < stack_end) + { + if (stack < stack_start || stack > stack_end) + return 1; + } + else + { + if (stack < stack_end || stack > stack_start) + return 1; + } + alloc_on_stack(stack_end, res, must_be_freed, stack_allocation); + bfill(res, stack_allocation, (char) iteration); + if (!must_be_freed) + { + stack_allocation_total+= stack_allocation; + test_stack(stack_start, stack_end, iteration+1, stack_allocation); + } + else + my_free(res); /* Was allocated with my_malloc */ + call_counter++; /* Avoid tail recursion optimization */ + return 0; +} + +void test_stack_detection(int stage, size_t stack_allocation) +{ + void *stack_start, *stack_end; + int res; + my_get_stack_bounds(&stack_start, &stack_end, + (void*) &stack_start, my_stack_size); + stack_allocation_total= 0; + res= test_stack(stack_start, stack_end, 1, stack_allocation); + if (!res) + ok(1, "%ld bytes allocated on stack of size %ld with %ld alloc size", + stack_allocation_total, + (long) available_stack_size(stack_start, stack_end), + (long) stack_allocation); + else + ok(0, "stack checking failed"); +} + +pthread_handler_t thread_stack_check(void *arg __attribute__((unused))) +{ + my_thread_init(); + test_stack_detection(1, STACK_ALLOC_SMALL_BLOCK_SIZE-1); + test_stack_detection(2, STACK_ALLOC_SMALL_BLOCK_SIZE+1); + my_thread_end(); + pthread_exit(0); + return 0; +} + +int main(int argc __attribute__((unused)), char **argv) +{ + pthread_attr_t thr_attr; + pthread_t check_thread; + void *value; + + MY_INIT(argv[0]); + + plan(4); + test_stack_detection(3, STACK_ALLOC_SMALL_BLOCK_SIZE-1); + test_stack_detection(4, STACK_ALLOC_SMALL_BLOCK_SIZE+1); + + /* Create a thread and run the same test */ + (void) pthread_attr_init(&thr_attr); + pthread_attr_setscope(&thr_attr,PTHREAD_SCOPE_SYSTEM); + (void) my_setstacksize(&thr_attr, my_stack_size); + pthread_create(&check_thread, &thr_attr, thread_stack_check, 0); + pthread_join(check_thread, &value); + (void) pthread_attr_destroy(&thr_attr); + + my_end(0); + return exit_status(); +} From a8010e76894ab9a4a5d249293e30409d3338496d Mon Sep 17 00:00:00 2001 From: Monty Date: Wed, 2 Oct 2024 23:30:17 +0300 Subject: [PATCH 055/121] Fixes buildbot issue with plugin.fulltext_plugin The test is using features not in the embedded server. Fixed by including not_embedded.inc --- mysql-test/suite/plugins/t/fulltext_plugin.test | 1 + 1 file changed, 1 insertion(+) diff --git a/mysql-test/suite/plugins/t/fulltext_plugin.test b/mysql-test/suite/plugins/t/fulltext_plugin.test index c0e1d8e17bf..4023bca8b41 100644 --- a/mysql-test/suite/plugins/t/fulltext_plugin.test +++ b/mysql-test/suite/plugins/t/fulltext_plugin.test @@ -1,4 +1,5 @@ --source include/have_simple_parser.inc +--source include/not_embedded.inc --echo # --echo # BUG#39746 - Debug flag breaks struct definition (server crash) From ee908140ac723b62016e849c07cecf6241289a19 Mon Sep 17 00:00:00 2001 From: Monty Date: Thu, 3 Oct 2024 17:23:50 +0300 Subject: [PATCH 056/121] Fixed bug in main.connect test where Connection_errors showed wrong value --- mysql-test/main/connect.result | 4 +++- mysql-test/main/connect.test | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/mysql-test/main/connect.result b/mysql-test/main/connect.result index fb63b2d5175..f6fd4c4b1c7 100644 --- a/mysql-test/main/connect.result +++ b/mysql-test/main/connect.result @@ -457,11 +457,13 @@ Connection_errors_max_connections 0 Connection_errors_peer_address 0 Connection_errors_select 0 Connection_errors_tcpwrap 0 +show global status like 'Threads_connected'; +Variable_name Value +Threads_connected 1 set @max_con.save= @@max_connections; set global max_connections= 10; # ERROR 1040 # ERROR 1040 -connection default; show global status like 'Connection_errors%'; Variable_name Value Connection_errors_accept 0 diff --git a/mysql-test/main/connect.test b/mysql-test/main/connect.test index 9a121384d6e..0ed60bbacbe 100644 --- a/mysql-test/main/connect.test +++ b/mysql-test/main/connect.test @@ -517,6 +517,7 @@ SET GLOBAL connect_timeout= @save_connect_timeout; flush status; show global status like 'Connection_errors%'; +show global status like 'Threads_connected'; set @max_con.save= @@max_connections; set global max_connections= 10; @@ -534,9 +535,25 @@ while ($n) --dec $n } +connection default; +let $n= 10; +let $c= 12; +while ($n) +{ + disconnect con$c; + --dec $n + --dec $c +} + +# Wait until all connections has terminated to ensure +# that Connection_errors is correct + +let $status_var=Threads_connected; +let $status_var_value= 1; +--source include/wait_for_status_var.inc + --enable_result_log --enable_query_log ---connection default show global status like 'Connection_errors%'; set global max_connections= @max_con.save; From 2c52fdd28a917c5095e5f89eaf372c002b819ab4 Mon Sep 17 00:00:00 2001 From: Monty Date: Tue, 8 Oct 2024 18:20:46 +0300 Subject: [PATCH 057/121] MDEV-32350 Can't selectively restore sequences using innodb tables from backup Added support for sequences to do discard and import tablespace --- mysql-test/suite/sql_sequence/alter.result | 41 ++++++++++++++++++++++ mysql-test/suite/sql_sequence/alter.test | 39 ++++++++++++++++++++ sql/ha_sequence.cc | 15 ++++++++ sql/ha_sequence.h | 2 +- sql/sql_sequence.cc | 38 ++++++++++++++++++-- 5 files changed, 131 insertions(+), 4 deletions(-) diff --git a/mysql-test/suite/sql_sequence/alter.result b/mysql-test/suite/sql_sequence/alter.result index d4e930ebb92..10f106553e3 100644 --- a/mysql-test/suite/sql_sequence/alter.result +++ b/mysql-test/suite/sql_sequence/alter.result @@ -301,3 +301,44 @@ drop sequence s; # # End of 10.4 tests # +# +# MDEV-32350 Can't selectively restore sequences using innodb tables from +# backup +# +create sequence s2 engine=innodb; +alter table s2 discard tablespace; +SELECT NEXTVAL(s2); +ERROR HY000: Got error 194 "Tablespace is missing for a table" from storage engine InnoDB +create sequence s1 engine=innodb; +select * from s1; +next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count +1 1 9223372036854775806 1 1 1000 0 0 +flush tables s1 for export; +unlock tables; +select * from s2; +ERROR HY000: Got error 194 "Tablespace is missing for a table" from storage engine InnoDB +SELECT NEXTVAL(s2); +ERROR HY000: Got error 194 "Tablespace is missing for a table" from storage engine InnoDB +alter sequence s2 restart; +ERROR HY000: Got error 194 "Tablespace is missing for a table" from storage engine InnoDB +alter table s2 import tablespace; +select * from s2; +next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count +1 1 9223372036854775806 1 1 1000 0 0 +SELECT NEXTVAL(s2); +NEXTVAL(s2) +1 +select NEXTVAL(s1); +NEXTVAL(s1) +1 +flush table s1,s2; +select * from s1; +next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count +1001 1 9223372036854775806 1 1 1000 0 0 +select * from s2; +next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count +1001 1 9223372036854775806 1 1 1000 0 0 +drop sequence s1,s2; +# +# End of 10.5 tests +# diff --git a/mysql-test/suite/sql_sequence/alter.test b/mysql-test/suite/sql_sequence/alter.test index 015aba22af6..ffdb67186db 100644 --- a/mysql-test/suite/sql_sequence/alter.test +++ b/mysql-test/suite/sql_sequence/alter.test @@ -202,3 +202,42 @@ drop sequence s; --echo # --echo # End of 10.4 tests --echo # + +--echo # +--echo # MDEV-32350 Can't selectively restore sequences using innodb tables from +--echo # backup +--echo # + +--disable_ps_protocol + +create sequence s2 engine=innodb; +alter table s2 discard tablespace; +--error ER_GET_ERRNO +SELECT NEXTVAL(s2); +create sequence s1 engine=innodb; +select * from s1; +flush tables s1 for export; +--let $MYSQLD_DATADIR= `select @@datadir` +--move_file $MYSQLD_DATADIR/test/s1.cfg $MYSQLD_DATADIR/test/s2.cfg +--copy_file $MYSQLD_DATADIR/test/s1.ibd $MYSQLD_DATADIR/test/s2.ibd +unlock tables; +--error ER_GET_ERRNO +select * from s2; +--error ER_GET_ERRNO +SELECT NEXTVAL(s2); +--error ER_GET_ERRNO +alter sequence s2 restart; +alter table s2 import tablespace; +select * from s2; +SELECT NEXTVAL(s2); +select NEXTVAL(s1); +flush table s1,s2; +select * from s1; +select * from s2; +drop sequence s1,s2; + +--enable_ps_protocol + +--echo # +--echo # End of 10.5 tests +--echo # diff --git a/sql/ha_sequence.cc b/sql/ha_sequence.cc index 92b307ff217..3803042bec5 100644 --- a/sql/ha_sequence.cc +++ b/sql/ha_sequence.cc @@ -367,6 +367,21 @@ int ha_sequence::external_lock(THD *thd, int lock_type) return error; } +int ha_sequence::discard_or_import_tablespace(my_bool discard) +{ + int error= file->discard_or_import_tablespace(discard); + if (!error && !discard) + { + /* Doing import table space. Read the imported values */ + if (!(error= table->s->sequence->read_stored_values(table))) + { + table->s->sequence->initialized= SEQUENCE::SEQ_READY_TO_USE; + memcpy(table->record[1], table->s->default_values, table->s->reclength); + } + } + return error; +} + /* Squence engine error deal method */ diff --git a/sql/ha_sequence.h b/sql/ha_sequence.h index 320f8e301ee..c1810ac2351 100644 --- a/sql/ha_sequence.h +++ b/sql/ha_sequence.h @@ -143,7 +143,7 @@ public: { file->unbind_psi(); } void rebind_psi() override { file->rebind_psi(); } - + int discard_or_import_tablespace(my_bool discard) override; bool auto_repair(int error) const override { return file->auto_repair(error); } int repair(THD* thd, HA_CHECK_OPT* check_opt) override diff --git a/sql/sql_sequence.cc b/sql/sql_sequence.cc index b1d59aac984..273a22f9292 100644 --- a/sql/sql_sequence.cc +++ b/sql/sql_sequence.cc @@ -529,7 +529,30 @@ int SEQUENCE::read_initial_values(TABLE *table) /* - Do the actiual reading of data from sequence table and + This class is here to allow one to use import table space on sequences +*/ + +class Silence_table_space_errors : public Internal_error_handler +{ +public: + Silence_table_space_errors() {} + ~Silence_table_space_errors() override = default; + bool handle_condition(THD *thd, + uint sql_errno, + const char* sql_state, + Sql_condition::enum_warning_level *level, + const char* msg, + Sql_condition ** cond_hdl) override + { + if (sql_errno == ER_TABLESPACE_DISCARDED || HA_ERR_TABLESPACE_MISSING) + return true; // Silence it + return false; + } +}; + + +/* + Do the actual reading of data from sequence table and update values in the sequence object. Called once from when table is opened @@ -538,14 +561,21 @@ int SEQUENCE::read_initial_values(TABLE *table) int SEQUENCE::read_stored_values(TABLE *table) { int error; + Silence_table_space_errors error_handler; + THD *thd= table->in_use; DBUG_ENTER("SEQUENCE::read_stored_values"); + thd->push_internal_handler(&error_handler); + MY_BITMAP *save_read_set= tmp_use_all_columns(table, &table->read_set); error= table->file->ha_read_first_row(table->record[0], MAX_KEY); tmp_restore_column_map(&table->read_set, save_read_set); if (unlikely(error)) { + thd->pop_internal_handler(); + if (error == HA_ERR_TABLESPACE_MISSING && thd->tablespace_op) + DBUG_RETURN(0); // Ignore error for ALTER TABLESPACE table->file->print_error(error, MYF(0)); DBUG_RETURN(error); } @@ -553,6 +583,7 @@ int SEQUENCE::read_stored_values(TABLE *table) adjust_values(reserved_until); all_values_used= 0; + thd->pop_internal_handler(); DBUG_RETURN(0); } @@ -775,8 +806,9 @@ longlong SEQUENCE::next_value(TABLE *table, bool second_round, int *error) DBUG_RETURN(next_value(table, 1, error)); } - if (unlikely((*error= write(table, thd->variables.binlog_row_image != - BINLOG_ROW_IMAGE_MINIMAL)))) + if (unlikely((*error= write(table, + (thd->variables.binlog_row_image != + BINLOG_ROW_IMAGE_MINIMAL))))) { reserved_until= org_reserved_until; next_free_value= res_value; From 0de2613e7aa22391760cb90a9c7338a9c085ecea Mon Sep 17 00:00:00 2001 From: Monty Date: Mon, 14 Oct 2024 15:12:02 +0300 Subject: [PATCH 058/121] Fixed that SHOW CREATE TABLE for sequences shows used table options --- mysql-test/suite/sql_sequence/create.result | 31 +++++++++++++++++++++ mysql-test/suite/sql_sequence/create.test | 20 +++++++++++++ sql/ha_sequence.h | 2 ++ sql/handler.h | 6 ++++ sql/sql_show.cc | 2 +- 5 files changed, 60 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/sql_sequence/create.result b/mysql-test/suite/sql_sequence/create.result index 61a0dfa7557..dff4dfaf3ec 100644 --- a/mysql-test/suite/sql_sequence/create.result +++ b/mysql-test/suite/sql_sequence/create.result @@ -724,3 +724,34 @@ ERROR HY000: Sequence 'test.s' table structure is invalid (Wrong number of colum # # End of 10.4 test # +# +# Ensure that SHOW CREATE TABLE shows used table options +# +SET @@innodb_compression_default=ON; +CREATE TABLE seq ( +`next_not_cached_value` bigint(21) NOT NULL, +`minimum_value` bigint(21) NOT NULL, +`maximum_value` bigint(21) NOT NULL, +`start_value` bigint(21) NOT NULL, +`increment` bigint(21) NOT NULL, +`cache_size` bigint(21) unsigned NOT NULL, +`cycle_option` tinyint(1) unsigned NOT NULL, +`cycle_count` bigint(21) NOT NULL +) engine=innodb,sequence=1; +show create sequence seq; +Table Create Table +seq CREATE SEQUENCE `seq` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle ENGINE=InnoDB `PAGE_COMPRESSED`='ON' +show create table seq; +Table Create Table +seq CREATE TABLE `seq` ( + `next_not_cached_value` bigint(21) NOT NULL, + `minimum_value` bigint(21) NOT NULL, + `maximum_value` bigint(21) NOT NULL, + `start_value` bigint(21) NOT NULL, + `increment` bigint(21) NOT NULL, + `cache_size` bigint(21) unsigned NOT NULL, + `cycle_option` tinyint(1) unsigned NOT NULL, + `cycle_count` bigint(21) NOT NULL +) ENGINE=InnoDB SEQUENCE=1 `PAGE_COMPRESSED`='ON' +drop sequence seq; +SET @@innodb_compression_default=DEFAULT; diff --git a/mysql-test/suite/sql_sequence/create.test b/mysql-test/suite/sql_sequence/create.test index 4cece26de8e..625f3083487 100644 --- a/mysql-test/suite/sql_sequence/create.test +++ b/mysql-test/suite/sql_sequence/create.test @@ -565,3 +565,23 @@ create table s sequence=1 as select 1; --echo # --echo # End of 10.4 test --echo # + +--echo # +--echo # Ensure that SHOW CREATE TABLE shows used table options +--echo # + +SET @@innodb_compression_default=ON; +CREATE TABLE seq ( + `next_not_cached_value` bigint(21) NOT NULL, + `minimum_value` bigint(21) NOT NULL, + `maximum_value` bigint(21) NOT NULL, + `start_value` bigint(21) NOT NULL, + `increment` bigint(21) NOT NULL, + `cache_size` bigint(21) unsigned NOT NULL, + `cycle_option` tinyint(1) unsigned NOT NULL, + `cycle_count` bigint(21) NOT NULL +) engine=innodb,sequence=1; +show create sequence seq; +show create table seq; +drop sequence seq; +SET @@innodb_compression_default=DEFAULT; diff --git a/sql/ha_sequence.h b/sql/ha_sequence.h index c1810ac2351..24fcc6baa31 100644 --- a/sql/ha_sequence.h +++ b/sql/ha_sequence.h @@ -65,6 +65,8 @@ public: ha_sequence(handlerton *hton, TABLE_SHARE *share); ~ha_sequence(); + virtual handlerton *storage_ht() const override + { return file->ht; } /* virtual function that are re-implemented for sequence */ int open(const char *name, int mode, uint test_if_locked) override; diff --git a/sql/handler.h b/sql/handler.h index d204d9f1f9d..3d9db017a5b 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -4987,6 +4987,12 @@ public: /* XXX to be removed, see ha_partition::partition_ht() */ virtual handlerton *partition_ht() const { return ht; } + /* + Used with 'wrapper' engines, like SEQUENCE, to access to the + underlaying engine used for storage. + */ + virtual handlerton *storage_ht() const + { return ht; } inline int ha_write_tmp_row(uchar *buf); inline int ha_delete_tmp_row(uchar *buf); inline int ha_update_tmp_row(const uchar * old_data, uchar * new_data); diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 9057ff8712f..e8b4bc5e447 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1838,7 +1838,7 @@ static void add_table_options(THD *thd, TABLE *table, hton= table->part_info->default_engine_type; else #endif - hton= table->file->ht; + hton= table->file->storage_ht(); bzero((char*) &create_info, sizeof(create_info)); /* Allow update_create_info to update row type, page checksums and options */ From 8b057fee62222769f4eac624c81d730b0c02ee85 Mon Sep 17 00:00:00 2001 From: Monty Date: Tue, 8 Oct 2024 18:21:24 +0300 Subject: [PATCH 059/121] Fixed core dump in mysqltest in move-file when using wrong paths --- client/mysqltest.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 5934b928455..c47b33e97f7 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -3867,9 +3867,9 @@ void do_move_file(struct st_command *command) is_sub_path(ds_to_file.str, to_plen, vardir)) || (is_sub_path(ds_from_file.str, from_plen, tmpdir) && is_sub_path(ds_to_file.str, to_plen, tmpdir)))) { - report_or_die("Paths '%s' and '%s' are not both under MYSQLTEST_VARDIR '%s'" - "or both under MYSQL_TMP_DIR '%s'", - ds_from_file, ds_to_file, vardir, tmpdir); + report_or_die("Paths '%s' and '%s' are not both under " + "MYSQLTEST_VARDIR '%s' or both under MYSQL_TMP_DIR '%s'", + ds_from_file.str, ds_to_file.str, vardir, tmpdir); DBUG_VOID_RETURN; } From 864847d1cc707a59f1d7d2d1e2544555f8e9df84 Mon Sep 17 00:00:00 2001 From: Monty Date: Tue, 8 Oct 2024 21:01:30 +0300 Subject: [PATCH 060/121] Fixed safe_strcpy_truncated() to get rid of compiler warnings. --- include/m_string.h | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/include/m_string.h b/include/m_string.h index ddfaf84b2d0..86659b0f636 100644 --- a/include/m_string.h +++ b/include/m_string.h @@ -285,12 +285,19 @@ static inline void safe_strcpy(char *dst, size_t dst_size, const char *src) static inline int safe_strcpy_truncated(char *dst, size_t dst_size, const char *src) { - DBUG_ASSERT(dst_size > 0); - strncpy(dst, src, dst_size); - if (dst[dst_size - 1]) + DBUG_ASSERT(dst_size > 0); + if (dst_size == 0) + return 1; + /* + We do not want to use strncpy() as we do not want to rely on + strncpy() filling the unused dst with 0. + We cannot use strmake() here as it in debug mode fills the buffers + with 'Z'. + */ + if (strnmov(dst, src, dst_size) == dst+dst_size) { - dst[dst_size - 1]= 0; + dst[dst_size-1]= 0; return 1; } return 0; @@ -306,7 +313,7 @@ static inline int safe_strcpy_truncated(char *dst, size_t dst_size, static inline int safe_strcat(char *dst, size_t dst_size, const char *src) { size_t init_len= strlen(dst); - if (unlikely(init_len > dst_size)) + if (unlikely(init_len >= dst_size)) return 1; return safe_strcpy_truncated(dst + init_len, dst_size - init_len, src); } From 0403313bdb4e891f42dcd19ac1d9d7a33a7e5d55 Mon Sep 17 00:00:00 2001 From: Monty Date: Wed, 16 Oct 2024 16:59:41 +0300 Subject: [PATCH 061/121] Fixed connect to not call strlen() over and over again in a loop --- storage/connect/tabfmt.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/storage/connect/tabfmt.cpp b/storage/connect/tabfmt.cpp index 05799cb3d87..443d5a9c87f 100644 --- a/storage/connect/tabfmt.cpp +++ b/storage/connect/tabfmt.cpp @@ -856,6 +856,7 @@ bool TDBCSV::SkipHeader(PGLOBAL g) int hlen = 0; bool q = Qot && Quoted > 0; PCOLDEF cdp; + char *pos, *end; // Estimate the length of the header list for (cdp = To_Def->GetCols(); cdp; cdp = cdp->GetNext()) { @@ -871,23 +872,26 @@ bool TDBCSV::SkipHeader(PGLOBAL g) // File is empty, write a header record memset(To_Line, 0, Lrecl); + pos= To_Line; + end= To_Line + Lrecl-1; // The column order in the file is given by the offset value for (i = 1; i <= n; i++) for (cdp = To_Def->GetCols(); cdp; cdp = cdp->GetNext()) if (cdp->GetOffset() == i) { - if (q) - To_Line[strlen(To_Line)] = Qot; + if (q && pos < end) + *pos++= Qot; - safe_strcat(To_Line, Lrecl, cdp->GetName()); + pos= strnmov(pos, cdp->GetName(), (size_t) (end-pos)); - if (q) - To_Line[strlen(To_Line)] = Qot; + if (q && pos < end) + *pos++= Qot; - if (i < n) - To_Line[strlen(To_Line)] = Sep; + if (i < n && pos < end) + *pos++= Sep; } // endif Offset + *pos= 0; rc = (Txfp->WriteBuffer(g) == RC_FX); } // endif !FileLength From 7e5ad5dd9e4379f778325c8aef6c9a16b0eb3242 Mon Sep 17 00:00:00 2001 From: Monty Date: Tue, 8 Oct 2024 21:48:30 +0300 Subject: [PATCH 062/121] Replace some usage of safe_strcat() with strxnmov() --- sql/mysqld.cc | 27 +++++++++++++-------------- sql/mysqld.h | 2 +- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 9bf53982eb9..f82e8e111c2 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -5728,12 +5728,11 @@ int mysqld_main(int argc, char **argv) mysqld_port, MYSQL_COMPILATION_COMMENT); else { - char real_server_version[2 * SERVER_VERSION_LENGTH + 10]; + char real_server_version[2 * SERVER_VERSION_LENGTH + 10], *pos; - set_server_version(real_server_version, sizeof(real_server_version)); - safe_strcat(real_server_version, sizeof(real_server_version), "' as '"); - safe_strcat(real_server_version, sizeof(real_server_version), - server_version); + pos= set_server_version(real_server_version, sizeof(real_server_version)-1); + strxnmov(pos, sizeof(real_server_version) - 1 - (pos-real_server_version), + "' as '", server_version, NullS); sql_print_information(ER_DEFAULT(ER_STARTUP), my_progname, real_server_version, @@ -8797,7 +8796,7 @@ static int get_options(int *argc_ptr, char ***argv_ptr) (MYSQL_SERVER_SUFFIX is set by the compilation environment) */ -void set_server_version(char *buf, size_t size) +char *set_server_version(char *buf, size_t size) { bool is_log= opt_log || global_system_variables.sql_log_slow || opt_bin_log; bool is_debug= IF_DBUG(!strstr(MYSQL_SERVER_SUFFIX_STR, "-debug"), 0); @@ -8806,14 +8805,14 @@ void set_server_version(char *buf, size_t size) !strstr(MYSQL_SERVER_SUFFIX_STR, "-valgrind") ? "-valgrind" : #endif ""; - strxnmov(buf, size - 1, - MYSQL_SERVER_VERSION, - MYSQL_SERVER_SUFFIX_STR, - IF_EMBEDDED("-embedded", ""), - is_valgrind, - is_debug ? "-debug" : "", - is_log ? "-log" : "", - NullS); + return strxnmov(buf, size - 1, + MYSQL_SERVER_VERSION, + MYSQL_SERVER_SUFFIX_STR, + IF_EMBEDDED("-embedded", ""), + is_valgrind, + is_debug ? "-debug" : "", + is_log ? "-log" : "", + NullS); } diff --git a/sql/mysqld.h b/sql/mysqld.h index bb6d32fdee6..bb71c377147 100644 --- a/sql/mysqld.h +++ b/sql/mysqld.h @@ -928,7 +928,7 @@ inline void table_case_convert(char * name, uint length) files_charset_info->casedn(name, length, name, length); } -extern void set_server_version(char *buf, size_t size); +extern char *set_server_version(char *buf, size_t size); #define current_thd _current_thd() void set_current_thd(THD *thd); From 4955f6018a1af8cbaf491c22f8da7cde56321ba0 Mon Sep 17 00:00:00 2001 From: Monty Date: Wed, 9 Oct 2024 18:07:57 +0300 Subject: [PATCH 063/121] MDEV-29351 SIGSEGV when doing forward reference of item in select list The reason for the crash was the code assumed that SELECT_LEX.ref_pointer_array would be initialized with zero, which was not the case. This cause the test of if (!select->ref_pointer_array[counter]) in item.cc to be unpredictable and causes crashes. Fixed by zero-filling ref_pointer_array on allocation. --- mysql-test/main/group_by.result | 12 ++++++++++++ mysql-test/main/group_by.test | 15 +++++++++++++++ sql/sql_lex.cc | 2 +- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/mysql-test/main/group_by.result b/mysql-test/main/group_by.result index b7bbab6dd47..881febb13a4 100644 --- a/mysql-test/main/group_by.result +++ b/mysql-test/main/group_by.result @@ -2987,3 +2987,15 @@ drop table t20, t21, t22; # # End of 10.3 tests # +# +# MDEV-29351 SIGSEGV when doing forward reference of item in select list +# +CREATE TABLE t1 (a INT); +UPDATE t1 SET c=1 ORDER BY (SELECT c); +ERROR 42S22: Reference 'c' not supported (forward reference in item list) +UPDATE t1 SET c=1 ORDER BY (SELECT c); +ERROR 42S22: Reference 'c' not supported (forward reference in item list) +DROP TABLE t1; +# +# End of 10.5 tests +# diff --git a/mysql-test/main/group_by.test b/mysql-test/main/group_by.test index 6c2b99c90be..eaa0d060fe9 100644 --- a/mysql-test/main/group_by.test +++ b/mysql-test/main/group_by.test @@ -2140,3 +2140,18 @@ drop table t20, t21, t22; --echo # --echo # End of 10.3 tests --echo # + +--echo # +--echo # MDEV-29351 SIGSEGV when doing forward reference of item in select list +--echo # + +CREATE TABLE t1 (a INT); +--error ER_ILLEGAL_REFERENCE +UPDATE t1 SET c=1 ORDER BY (SELECT c); +--error ER_ILLEGAL_REFERENCE +UPDATE t1 SET c=1 ORDER BY (SELECT c); +DROP TABLE t1; + +--echo # +--echo # End of 10.5 tests +--echo # diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 385131642b0..023da3567e8 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -3632,7 +3632,7 @@ bool st_select_lex::setup_ref_array(THD *thd, uint order_group_num) return false; Item **array= static_cast( - thd->active_stmt_arena_to_use()->alloc(sizeof(Item*) * n_elems)); + thd->active_stmt_arena_to_use()->calloc(sizeof(Item*) * n_elems)); if (likely(array != NULL)) ref_pointer_array= Ref_ptr_array(array, n_elems); return array == NULL; From 4a1ded61a4061f9f0400880bbacf03b006fb1287 Mon Sep 17 00:00:00 2001 From: Thirunarayanan Balathandayuthapani Date: Wed, 16 Oct 2024 21:34:24 +0530 Subject: [PATCH 064/121] MDEV-34529 Shrink the system tablespace when system tablespace contains MDEV-30671 leaked undo pages - InnoDB fails to shrink the system tablespace when it contains the leaked undo log pages caused by MDEV-30671. - InnoDB does free the unused segment in system tablespace before shrinking the tablespace. InnoDB fails to free the unused segment if XA PREPARE transaction exist or if the previous shutdown was not with innodb_fast_shutdown=0 inode_info: Structure to store the inode page and offsets. fil_space_t::garbage_collect(): Frees the system tablespace unused segment fsp_get_sys_used_segment(): Iterates through all default file segment and index segment present in system tablespace. trx_sys_t::is_xa_exist(): Returns true if the XA transaction exist in the undo logs fseg_inode_free(): Frees the extents, fragment pages for the given index node and ignores any error similar to trx_purge_free_segment() trx_sys_t::reset_page(): Retain the TRX_SYS_FSEG_HEADER value in trx_sys page while resetting the page. --- .../suite/innodb/r/recovery_shutdown.result | 1 + .../suite/innodb/r/sys_truncate_debug.result | 9 +- mysql-test/suite/innodb/r/undo_leak.result | 25 + .../suite/innodb/r/undo_leak_fail.result | 94 +++ .../suite/innodb/t/recovery_shutdown.test | 1 + .../suite/innodb/t/sys_truncate_debug.test | 12 + mysql-test/suite/innodb/t/undo_leak.opt | 2 + mysql-test/suite/innodb/t/undo_leak.test | 26 + mysql-test/suite/innodb/t/undo_leak_fail.opt | 3 + mysql-test/suite/innodb/t/undo_leak_fail.test | 119 +++ storage/innobase/dict/dict0load.cc | 44 +- storage/innobase/fsp/fsp0fsp.cc | 675 ++++++++++++++---- storage/innobase/include/dict0load.h | 8 + storage/innobase/include/fil0fil.h | 4 + storage/innobase/include/fsp0fsp.h | 5 +- storage/innobase/include/fsp0sysspace.h | 9 + storage/innobase/include/trx0sys.h | 3 + storage/innobase/srv/srv0srv.cc | 5 +- storage/innobase/srv/srv0start.cc | 22 +- storage/innobase/trx/trx0purge.cc | 5 +- 20 files changed, 917 insertions(+), 155 deletions(-) create mode 100644 mysql-test/suite/innodb/r/undo_leak.result create mode 100644 mysql-test/suite/innodb/r/undo_leak_fail.result create mode 100644 mysql-test/suite/innodb/t/undo_leak.opt create mode 100644 mysql-test/suite/innodb/t/undo_leak.test create mode 100644 mysql-test/suite/innodb/t/undo_leak_fail.opt create mode 100644 mysql-test/suite/innodb/t/undo_leak_fail.test diff --git a/mysql-test/suite/innodb/r/recovery_shutdown.result b/mysql-test/suite/innodb/r/recovery_shutdown.result index 6f7ca6e0d1d..85b6ae51a42 100644 --- a/mysql-test/suite/innodb/r/recovery_shutdown.result +++ b/mysql-test/suite/innodb/r/recovery_shutdown.result @@ -1,5 +1,6 @@ FLUSH TABLES; call mtr.add_suppression("Found 1 prepared XA transactions"); +call mtr.add_suppression("InnoDB: Cannot free the unused segments in system tablespace because a previous shutdown was not with innodb_fast_shutdown=0 or XA PREPARE transactions exist"); # # MDEV-13797 InnoDB may hang if shutdown is initiated soon after startup # while rolling back recovered incomplete transactions diff --git a/mysql-test/suite/innodb/r/sys_truncate_debug.result b/mysql-test/suite/innodb/r/sys_truncate_debug.result index f122e9446e8..b198d449a76 100644 --- a/mysql-test/suite/innodb/r/sys_truncate_debug.result +++ b/mysql-test/suite/innodb/r/sys_truncate_debug.result @@ -19,13 +19,20 @@ InnoDB 0 transactions not purged SELECT NAME, FILE_SIZE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE SPACE = 0; NAME FILE_SIZE innodb_system 540016640 -# restart: --debug_dbug=+d,shrink_buffer_pool_full +# restart: --debug_dbug=+d,traversal_extent_fail FOUND 1 /\[Warning\] InnoDB: Cannot shrink the system tablespace/ in mysqld.1.err SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE engine = 'innodb' AND support IN ('YES', 'DEFAULT', 'ENABLED'); ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS InnoDB YES Supports transactions, row-level locking, foreign keys and encryption for tables YES YES YES +# restart: --debug_dbug=+d,shrink_buffer_pool_full +FOUND 2 /\[Warning\] InnoDB: Cannot shrink the system tablespace/ in mysqld.1.err +SELECT * FROM INFORMATION_SCHEMA.ENGINES +WHERE engine = 'innodb' +AND support IN ('YES', 'DEFAULT', 'ENABLED'); +ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS +InnoDB YES Supports transactions, row-level locking, foreign keys and encryption for tables YES YES YES # restart: --debug_dbug=+d,mtr_log_max_size FOUND 1 /\[ERROR\] InnoDB: Cannot shrink the system tablespace/ in mysqld.1.err SELECT * FROM INFORMATION_SCHEMA.ENGINES diff --git a/mysql-test/suite/innodb/r/undo_leak.result b/mysql-test/suite/innodb/r/undo_leak.result new file mode 100644 index 00000000000..491ec7c9279 --- /dev/null +++ b/mysql-test/suite/innodb/r/undo_leak.result @@ -0,0 +1,25 @@ +# restart: --debug_dbug=d,undo_segment_leak +SET GLOBAL INNODB_FILE_PER_TABLE=0; +Warnings: +Warning 1287 '@@innodb_file_per_table' is deprecated and will be removed in a future release +CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL)ENGINE=InnoDB; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +UPDATE t1 SET f1 = f1 + 1 WHERE f1 > 1000; +UPDATE t1 SET f2 = f2 + 1 WHERE f1 > 1000; +UPDATE t1 SET f1 = f2 + 1 WHERE f1 > 1000; +UPDATE t1 SET f2 = f1 + 1 WHERE f1 > 1000; +DELETE FROM t1; +DROP TABLE t1; +set GLOBAL innodb_fast_shutdown=0; +SELECT NAME, FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE SPACE = 0; +NAME FILE_SIZE +innodb_system 79691776 +# restart +SELECT NAME, FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE SPACE = 0; +NAME FILE_SIZE +innodb_system 12582912 diff --git a/mysql-test/suite/innodb/r/undo_leak_fail.result b/mysql-test/suite/innodb/r/undo_leak_fail.result new file mode 100644 index 00000000000..6aa89ec7d3d --- /dev/null +++ b/mysql-test/suite/innodb/r/undo_leak_fail.result @@ -0,0 +1,94 @@ +call mtr.add_suppression("InnoDB: Cannot free the unused segments in system tablespace because a previous shutdown was not with innodb_fast_shutdown=0"); +call mtr.add_suppression("InnoDB: :autoshrink failed to read the used segment"); +call mtr.add_suppression("InnoDB: :autoshrink failed due to .* in FSP_SEG_INODES_FULL list"); +call mtr.add_suppression("InnoDB: :autoshrink failed due to .* in FSP_SEG_INODES_FREE list"); +call mtr.add_suppression("InnoDB: :autoshrink failed to free the segment"); +call mtr.add_suppression("Found .* prepared XA transactions"); +SELECT NAME, FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE SPACE = 0; +NAME FILE_SIZE +innodb_system 10485760 +SET GLOBAL INNODB_FILE_PER_TABLE=0; +Warnings: +Warning 1287 '@@innodb_file_per_table' is deprecated and will be removed in a future release +CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL)STATS_PERSISTENT=0, ENGINE=InnoDB; +XA START 'x'; +insert into t1 values (1, 1); +XA END 'x'; +XA PREPARE 'x'; +set GLOBAL innodb_fast_shutdown=0; +# restart +# Fail to free the segment due to XA PREPARE transaction +FOUND 2 /InnoDB: Cannot free the unused segments in system tablespace because a previous shutdown was not with innodb_fast_shutdown=0/ in mysqld.1.err +XA COMMIT 'x'; +DROP TABLE t1; +# restart: --debug_dbug=d,undo_segment_leak +SET GLOBAL INNODB_FILE_PER_TABLE=0; +Warnings: +Warning 1287 '@@innodb_file_per_table' is deprecated and will be removed in a future release +CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL)STATS_PERSISTENT=0, ENGINE=InnoDB; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +UPDATE t1 SET f1 = f1 + 1 WHERE f1 > 1000; +UPDATE t1 SET f2 = f2 + 1 WHERE f1 > 1000; +UPDATE t1 SET f1 = f2 + 1 WHERE f1 > 1000; +UPDATE t1 SET f2 = f1 + 1 WHERE f1 > 1000; +DELETE FROM t1; +DROP TABLE t1; +SELECT NAME, FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE SPACE = 0; +NAME FILE_SIZE +innodb_system 77594624 +# restart: --debug_dbug=d,unused_undo_free_fail_1 +# Fail to free the segment due to previous shutdown +FOUND 4 /InnoDB: Cannot free the unused segments in system tablespace because a previous shutdown was not with innodb_fast_shutdown=0/ in mysqld.1.err +SELECT NAME, FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE SPACE = 0; +NAME FILE_SIZE +innodb_system 15728640 +SET GLOBAL innodb_fast_shutdown= 0; +# Fail to free the segment while finding the used segments +# restart: --debug_dbug=d,unused_undo_free_fail_2 +SELECT IF(file_size>10485760,'ok',file_size) FROM information_schema.innodb_sys_tablespaces WHERE space=0; +IF(file_size>10485760,'ok',file_size) +ok +FOUND 1 /InnoDB: :autoshrink failed to read the used segment/ in mysqld.1.err +FOUND 1 /InnoDB: :autoshrink failed due to .* in FSP_SEG_INODES_FULL list/ in mysqld.1.err +SET GLOBAL innodb_fast_shutdown= 0; +# Fail to free the segment while finding the used segments +# restart: --debug_dbug=d,unused_undo_free_fail_3 +SELECT IF(file_size>10485760,'ok',file_size) FROM information_schema.innodb_sys_tablespaces WHERE space=0; +IF(file_size>10485760,'ok',file_size) +ok +FOUND 1 /InnoDB: :autoshrink failed due to .* in FSP_SEG_INODES_FREE list/ in mysqld.1.err +SET GLOBAL innodb_fast_shutdown= 0; +# Fail to free the segment while freeing the unused segments +# restart: --debug_dbug=d,unused_undo_free_fail_4 +SELECT IF(file_size>10485760,'ok',file_size) FROM information_schema.innodb_sys_tablespaces WHERE space=0; +IF(file_size>10485760,'ok',file_size) +ok +FOUND 1 /InnoDB: :autoshrink failed to free the segment .* in page .*/ in mysqld.1.err +SET GLOBAL innodb_fast_shutdown= 0; +# Fail to free the segment while freeing the used segments +# restart: --debug_dbug=d,unused_undo_free_fail_5 +SELECT IF(file_size>10485760,'ok',file_size) FROM information_schema.innodb_sys_tablespaces WHERE space=0; +IF(file_size>10485760,'ok',file_size) +ok +FOUND 1 /InnoDB: :autoshrink failed to free the segment .* in page .*/ in mysqld.1.err +SET GLOBAL innodb_fast_shutdown= 0; +# restart +SELECT NAME, FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE SPACE = 0; +NAME FILE_SIZE +innodb_system 10485760 +# Fail to reset the TRX_SYS_FSEG_HEADER during undo tablespace +# reinitialization. garbage_collect() shouldn't free the +# TRX_SYS_FSEG_HEADER index node +set global innodb_fast_shutdown=0; +# restart: --innodb_undo_tablespaces=2 --debug_dbug=d,sys_fseg_header_fail +FOUND 1 /InnoDB: :autoshrink freed the segment .* in page .*/ in mysqld.1.err +set global innodb_fast_shutdown=0; +# restart +SELECT NAME, FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE SPACE = 0; +NAME FILE_SIZE +innodb_system 10485760 diff --git a/mysql-test/suite/innodb/t/recovery_shutdown.test b/mysql-test/suite/innodb/t/recovery_shutdown.test index 968ea62833a..bdf0bb090b3 100644 --- a/mysql-test/suite/innodb/t/recovery_shutdown.test +++ b/mysql-test/suite/innodb/t/recovery_shutdown.test @@ -6,6 +6,7 @@ # Flush any open myisam tables from previous tests FLUSH TABLES; call mtr.add_suppression("Found 1 prepared XA transactions"); +call mtr.add_suppression("InnoDB: Cannot free the unused segments in system tablespace because a previous shutdown was not with innodb_fast_shutdown=0 or XA PREPARE transactions exist"); --echo # --echo # MDEV-13797 InnoDB may hang if shutdown is initiated soon after startup diff --git a/mysql-test/suite/innodb/t/sys_truncate_debug.test b/mysql-test/suite/innodb/t/sys_truncate_debug.test index b3363f105e3..20fa981685d 100644 --- a/mysql-test/suite/innodb/t/sys_truncate_debug.test +++ b/mysql-test/suite/innodb/t/sys_truncate_debug.test @@ -23,6 +23,18 @@ DROP TABLE t1; --source include/wait_all_purged.inc SELECT NAME, FILE_SIZE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE SPACE = 0; +# Corruption during traversal of extent +let $restart_parameters=--debug_dbug=+d,traversal_extent_fail; +--source include/restart_mysqld.inc + +--let SEARCH_PATTERN= \[Warning\] InnoDB: Cannot shrink the system tablespace +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err; +--source include/search_pattern_in_file.inc + +SELECT * FROM INFORMATION_SCHEMA.ENGINES +WHERE engine = 'innodb' +AND support IN ('YES', 'DEFAULT', 'ENABLED'); + # Ran out of buffer pool let $restart_parameters=--debug_dbug=+d,shrink_buffer_pool_full; --source include/restart_mysqld.inc diff --git a/mysql-test/suite/innodb/t/undo_leak.opt b/mysql-test/suite/innodb/t/undo_leak.opt new file mode 100644 index 00000000000..e8459f850f8 --- /dev/null +++ b/mysql-test/suite/innodb/t/undo_leak.opt @@ -0,0 +1,2 @@ +--innodb_undo_tablespaces=0 +--innodb_sys_tablespaces diff --git a/mysql-test/suite/innodb/t/undo_leak.test b/mysql-test/suite/innodb/t/undo_leak.test new file mode 100644 index 00000000000..760ad7e3ec7 --- /dev/null +++ b/mysql-test/suite/innodb/t/undo_leak.test @@ -0,0 +1,26 @@ +--source include/have_innodb.inc +--source include/have_sequence.inc +--source include/have_debug.inc +--source include/not_embedded.inc + +let $restart_parameters=--debug_dbug=d,undo_segment_leak; +--source include/restart_mysqld.inc +SET GLOBAL INNODB_FILE_PER_TABLE=0; +CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL)ENGINE=InnoDB; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +UPDATE t1 SET f1 = f1 + 1 WHERE f1 > 1000; +UPDATE t1 SET f2 = f2 + 1 WHERE f1 > 1000; +UPDATE t1 SET f1 = f2 + 1 WHERE f1 > 1000; +UPDATE t1 SET f2 = f1 + 1 WHERE f1 > 1000; +DELETE FROM t1; +DROP TABLE t1; +set GLOBAL innodb_fast_shutdown=0; +SELECT NAME, FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE SPACE = 0; +let $restart_parameters=; +--source include/restart_mysqld.inc +SELECT NAME, FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE SPACE = 0; diff --git a/mysql-test/suite/innodb/t/undo_leak_fail.opt b/mysql-test/suite/innodb/t/undo_leak_fail.opt new file mode 100644 index 00000000000..79a79a9cd1d --- /dev/null +++ b/mysql-test/suite/innodb/t/undo_leak_fail.opt @@ -0,0 +1,3 @@ +--innodb_data_file_path=ibdata1:10M:autoextend:autoshrink +--innodb_undo_tablespaces=0 +--innodb_sys_tablespaces diff --git a/mysql-test/suite/innodb/t/undo_leak_fail.test b/mysql-test/suite/innodb/t/undo_leak_fail.test new file mode 100644 index 00000000000..0346293eda2 --- /dev/null +++ b/mysql-test/suite/innodb/t/undo_leak_fail.test @@ -0,0 +1,119 @@ +--source include/have_innodb.inc +--source include/have_sequence.inc +--source include/have_debug.inc +--source include/not_embedded.inc + +call mtr.add_suppression("InnoDB: Cannot free the unused segments in system tablespace because a previous shutdown was not with innodb_fast_shutdown=0"); +call mtr.add_suppression("InnoDB: :autoshrink failed to read the used segment"); +call mtr.add_suppression("InnoDB: :autoshrink failed due to .* in FSP_SEG_INODES_FULL list"); +call mtr.add_suppression("InnoDB: :autoshrink failed due to .* in FSP_SEG_INODES_FREE list"); +call mtr.add_suppression("InnoDB: :autoshrink failed to free the segment"); +call mtr.add_suppression("Found .* prepared XA transactions"); +SELECT NAME, FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE SPACE = 0; + +SET GLOBAL INNODB_FILE_PER_TABLE=0; +CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL)STATS_PERSISTENT=0, ENGINE=InnoDB; +XA START 'x'; +insert into t1 values (1, 1); +XA END 'x'; +XA PREPARE 'x'; +set GLOBAL innodb_fast_shutdown=0; +--source include/restart_mysqld.inc +--echo # Fail to free the segment due to XA PREPARE transaction +let SEARCH_PATTERN= InnoDB: Cannot free the unused segments in system tablespace because a previous shutdown was not with innodb_fast_shutdown=0; +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err; +--source include/search_pattern_in_file.inc +XA COMMIT 'x'; +DROP TABLE t1; + +let $restart_parameters=--debug_dbug=d,undo_segment_leak; +--source include/restart_mysqld.inc +SET GLOBAL INNODB_FILE_PER_TABLE=0; +CREATE TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL)STATS_PERSISTENT=0, ENGINE=InnoDB; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_4096; +UPDATE t1 SET f1 = f1 + 1 WHERE f1 > 1000; +UPDATE t1 SET f2 = f2 + 1 WHERE f1 > 1000; +UPDATE t1 SET f1 = f2 + 1 WHERE f1 > 1000; +UPDATE t1 SET f2 = f1 + 1 WHERE f1 > 1000; +DELETE FROM t1; +DROP TABLE t1; +SELECT NAME, FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE SPACE = 0; +let $shutdown_timeout=0; +let $restart_parameters=--debug_dbug=d,unused_undo_free_fail_1; +--source include/restart_mysqld.inc + +let $shutdown_timeout=; +--echo # Fail to free the segment due to previous shutdown +--let SEARCH_PATTERN= InnoDB: Cannot free the unused segments in system tablespace because a previous shutdown was not with innodb_fast_shutdown=0 + +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err; +--source include/search_pattern_in_file.inc + +SELECT NAME, FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE SPACE = 0; +SET GLOBAL innodb_fast_shutdown= 0; + +--echo # Fail to free the segment while finding the used segments +let $restart_parameters=--debug_dbug=d,unused_undo_free_fail_2; +--source include/restart_mysqld.inc +SELECT IF(file_size>10485760,'ok',file_size) FROM information_schema.innodb_sys_tablespaces WHERE space=0; +let SEARCH_PATTERN= InnoDB: :autoshrink failed to read the used segment; +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err; +--source include/search_pattern_in_file.inc + +let SEARCH_PATTERN= InnoDB: :autoshrink failed due to .* in FSP_SEG_INODES_FULL list; +--source include/search_pattern_in_file.inc +SET GLOBAL innodb_fast_shutdown= 0; + +--echo # Fail to free the segment while finding the used segments +let $restart_parameters=--debug_dbug=d,unused_undo_free_fail_3; +--source include/restart_mysqld.inc +SELECT IF(file_size>10485760,'ok',file_size) FROM information_schema.innodb_sys_tablespaces WHERE space=0; + +let SEARCH_PATTERN= InnoDB: :autoshrink failed due to .* in FSP_SEG_INODES_FREE list; +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err; +--source include/search_pattern_in_file.inc +SET GLOBAL innodb_fast_shutdown= 0; + +--echo # Fail to free the segment while freeing the unused segments +let $restart_parameters=--debug_dbug=d,unused_undo_free_fail_4; +--source include/restart_mysqld.inc +SELECT IF(file_size>10485760,'ok',file_size) FROM information_schema.innodb_sys_tablespaces WHERE space=0; + +let SEARCH_PATTERN= InnoDB: :autoshrink failed to free the segment .* in page .*; +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err; +--source include/search_pattern_in_file.inc + +SET GLOBAL innodb_fast_shutdown= 0; + +--echo # Fail to free the segment while freeing the used segments +let $restart_parameters=--debug_dbug=d,unused_undo_free_fail_5; +--source include/restart_mysqld.inc +SELECT IF(file_size>10485760,'ok',file_size) FROM information_schema.innodb_sys_tablespaces WHERE space=0; + +let SEARCH_PATTERN= InnoDB: :autoshrink failed to free the segment .* in page .*; +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err; +--source include/search_pattern_in_file.inc + +SET GLOBAL innodb_fast_shutdown= 0; +let $restart_parameters=; +--source include/restart_mysqld.inc +SELECT NAME, FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE SPACE = 0; + +--echo # Fail to reset the TRX_SYS_FSEG_HEADER during undo tablespace +--echo # reinitialization. garbage_collect() shouldn't free the +--echo # TRX_SYS_FSEG_HEADER index node +set global innodb_fast_shutdown=0; +let $restart_parameters=--innodb_undo_tablespaces=2 --debug_dbug=d,sys_fseg_header_fail; +--source include/restart_mysqld.inc +let SEARCH_PATTERN= InnoDB: :autoshrink freed the segment .* in page .*; +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err; +--source include/search_pattern_in_file.inc +let $restart_parameters=; +set global innodb_fast_shutdown=0; +--source include/restart_mysqld.inc +SELECT NAME, FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE SPACE = 0; diff --git a/storage/innobase/dict/dict0load.cc b/storage/innobase/dict/dict0load.cc index 645e0c79490..d336a007d44 100644 --- a/storage/innobase/dict/dict0load.cc +++ b/storage/innobase/dict/dict0load.cc @@ -172,36 +172,24 @@ name_of_col_is( } #endif /* UNIV_DEBUG */ -/********************************************************************//** -This function gets the next system table record as it scans the table. -@return the next record if found, NULL if end of scan */ -static const rec_t* -dict_getnext_system_low( -/*====================*/ - btr_pcur_t* pcur, /*!< in/out: persistent cursor to the - record*/ - mtr_t* mtr) /*!< in: the mini-transaction */ +dict_getnext_system_low(btr_pcur_t *pcur, mtr_t *mtr) { - rec_t* rec = NULL; - - while (!rec) { - btr_pcur_move_to_next_user_rec(pcur, mtr); - - rec = btr_pcur_get_rec(pcur); - - if (!btr_pcur_is_on_user_rec(pcur)) { - /* end of index */ - btr_pcur_close(pcur); - - return(NULL); - } - } - - /* Get a record, let's save the position */ - btr_pcur_store_position(pcur, mtr); - - return(rec); + rec_t *rec = nullptr; + while (!rec) + { + btr_pcur_move_to_next_user_rec(pcur, mtr); + rec = btr_pcur_get_rec(pcur); + if (!btr_pcur_is_on_user_rec(pcur)) + { + /* end of index */ + btr_pcur_close(pcur); + return nullptr; + } + } + /* Get a record, let's save the position */ + btr_pcur_store_position(pcur, mtr); + return rec; } /********************************************************************//** diff --git a/storage/innobase/fsp/fsp0fsp.cc b/storage/innobase/fsp/fsp0fsp.cc index 8cb2793e7b4..05de5823f25 100644 --- a/storage/innobase/fsp/fsp0fsp.cc +++ b/storage/innobase/fsp/fsp0fsp.cc @@ -25,11 +25,8 @@ Created 11/29/1995 Heikki Tuuri ***********************************************************************/ #include "fsp0fsp.h" -#include "buf0buf.h" -#include "fil0fil.h" #include "fil0crypt.h" #include "mtr0log.h" -#include "ut0byte.h" #include "page0page.h" #include "srv0srv.h" #include "srv0start.h" @@ -37,12 +34,16 @@ Created 11/29/1995 Heikki Tuuri #include "btr0sea.h" #include "dict0boot.h" #include "log0log.h" +#include "dict0load.h" #include "dict0mem.h" -#include "fsp0types.h" +#include "btr0pcur.h" +#include "trx0sys.h" #include "log.h" #ifndef DBUG_OFF # include "trx0purge.h" #endif +#include +#include "trx0undo.h" /** Returns the first extent descriptor for a segment. We think of the extent lists of the segment catenated in the order @@ -1477,19 +1478,19 @@ MY_ATTRIBUTE((nonnull)) @param[in,out] inode segment inode @param[in,out] iblock segment inode page @param[in,out] mtr mini-transaction */ -static void fsp_free_seg_inode(fil_space_t *space, fseg_inode_t *inode, - buf_block_t *iblock, mtr_t *mtr) +static dberr_t fsp_free_seg_inode(fil_space_t *space, fseg_inode_t *inode, + buf_block_t *iblock, mtr_t *mtr) { ut_d(space->modify_check(*mtr)); dberr_t err; buf_block_t *header= fsp_get_header(space, mtr, &err); if (!header) - return; + return err; if (UNIV_UNLIKELY(memcmp(FSEG_MAGIC_N_BYTES, FSEG_MAGIC_N + inode, 4))) { space->set_corrupted(); - return; + return DB_CORRUPTION; } const ulint physical_size= space->physical_size(); @@ -1499,24 +1500,27 @@ static void fsp_free_seg_inode(fil_space_t *space, fseg_inode_t *inode, physical_size)) { /* Move the page to another list */ - if (flst_remove(header, FSP_HEADER_OFFSET + FSP_SEG_INODES_FULL, - iblock, FSEG_INODE_PAGE_NODE, limit, mtr) != DB_SUCCESS) - return; - if (flst_add_last(header, FSP_HEADER_OFFSET + FSP_SEG_INODES_FREE, - iblock, FSEG_INODE_PAGE_NODE, limit, mtr) != DB_SUCCESS) - return; + err= flst_remove(header, FSP_HEADER_OFFSET + FSP_SEG_INODES_FULL, + iblock, FSEG_INODE_PAGE_NODE, limit, mtr); + if (err == DB_SUCCESS) + err= flst_add_last(header, FSP_HEADER_OFFSET + FSP_SEG_INODES_FREE, + iblock, FSEG_INODE_PAGE_NODE, limit, mtr); + if (err) + return err; } mtr->memset(iblock, page_offset(inode) + FSEG_ID, FSEG_INODE_SIZE, 0); if (ULINT_UNDEFINED != fsp_seg_inode_page_find_used(iblock->page.frame, physical_size)) - return; + return DB_SUCCESS; /* There are no other used headers left on the page: free it */ - if (flst_remove(header, FSP_HEADER_OFFSET + FSP_SEG_INODES_FREE, - iblock, FSEG_INODE_PAGE_NODE, limit, mtr) == DB_SUCCESS) - fsp_free_page(space, iblock->page.id().page_no(), mtr); + err= flst_remove(header, FSP_HEADER_OFFSET + FSP_SEG_INODES_FREE, + iblock, FSEG_INODE_PAGE_NODE, limit, mtr); + if (err != DB_SUCCESS) + return err; + return fsp_free_page(space, iblock->page.id().page_no(), mtr); } MY_ATTRIBUTE((nonnull(1,4,5), warn_unused_result)) @@ -2510,20 +2514,21 @@ try_to_extend: MY_ATTRIBUTE((nonnull, warn_unused_result)) /** Frees a single page of a segment. -@param[in] seg_inode segment inode @param[in,out] space tablespace -@param[in] offset page number +@param[in] seg_inode segment inode +@param[in,out] iblock block where segment inode are kept @param[in,out] mtr mini-transaction +@param[in] offset page number @param[in] ahi Drop adaptive hash index @return error code */ static dberr_t fseg_free_page_low( + fil_space_t* space, fseg_inode_t* seg_inode, buf_block_t* iblock, - fil_space_t* space, - uint32_t offset, - mtr_t* mtr + mtr_t* mtr, + uint32_t offset #ifdef BTR_CUR_HASH_ADAPT ,bool ahi=false #endif /* BTR_CUR_HASH_ADAPT */ @@ -2656,7 +2661,7 @@ dberr_t fseg_free_page(fseg_header_t *seg_header, fil_space_t *space, { if (!space->full_crc32()) fil_block_check_type(*iblock, FIL_PAGE_INODE, mtr); - return fseg_free_page_low(seg_inode, iblock, space, offset, mtr); + return fseg_free_page_low(space, seg_inode, iblock, mtr, offset); } return err; @@ -2812,6 +2817,71 @@ remove: return DB_SUCCESS; } +/** Free the extent and fragment page associated with +the segment. +@param space tablespace where segment resides +@param inode index node information +@param iblock page where segment header are placed +@param mtr mini-transaction +@param hdr_page_no segment header page number field +@param ahi adaptive hash index +@return DB_SUCCESS_LOCKED_REC when freeing wasn't completed +@return DB_SUCCESS or other error code when freeing was completed */ +static +dberr_t fseg_free_step_low(fil_space_t *space, fseg_inode_t *inode, + buf_block_t *iblock, mtr_t *mtr, + const byte *hdr_page_no +#ifdef BTR_CUR_HASH_ADAPT + , bool ahi=false +#endif /* BTR_CUR_HASH_ADAPT */ + ) +{ + dberr_t err= DB_SUCCESS; + if (xdes_t *descr= fseg_get_first_extent(inode, space, mtr, &err)) + { + err= fseg_free_extent(inode, iblock, space, + xdes_get_offset(descr), mtr +#ifdef BTR_CUR_HASH_ADAPT + , ahi +#endif /* BTR_CUR_HASH_ADAPT */ + ); + return err == DB_SUCCESS ? DB_SUCCESS_LOCKED_REC : err; + } + + if (err != DB_SUCCESS) + return err; + + /* Free a fragment page. If there are no fragment pages + exist in the array then free the file segment inode */ + ulint n = fseg_find_last_used_frag_page_slot(inode); + if (UNIV_UNLIKELY(n == ULINT_UNDEFINED)) + return hdr_page_no + ? DB_SUCCESS + : fsp_free_seg_inode(space, inode, iblock, mtr); + + if (hdr_page_no && !memcmp_aligned<2>(hdr_page_no + FIL_PAGE_OFFSET, + inode + FSEG_FRAG_ARR + + n * FSEG_FRAG_SLOT_SIZE, 4)) + /* header_page_no is only passed by fseg_free_step_not_header(). + In that case, the header page must be preserved, to be freed + when we're finally called by fseg_free_step(). */ + return DB_SUCCESS; + + uint32_t page_no= fseg_get_nth_frag_page_no(inode, n); + err= fseg_free_page_low(space, inode, iblock, mtr, page_no +#ifdef BTR_CUR_HASH_ADAPT + , ahi +#endif /* BTR_CUR_HASH_ADAPT */ + ); + if (err != DB_SUCCESS) + return err; + buf_page_free(space, page_no, mtr); + if (!hdr_page_no && + fseg_find_last_used_frag_page_slot(inode) == ULINT_UNDEFINED) + return fsp_free_seg_inode(space, inode, iblock, mtr); + return DB_SUCCESS_LOCKED_REC; +} + /** Frees part of a segment. This function can be used to free a segment by repeatedly calling this function in different mini-transactions. Doing the freeing in a single mini-transaction @@ -2831,7 +2901,6 @@ fseg_free_step( #endif /* BTR_CUR_HASH_ADAPT */ ) { - ulint n; fseg_inode_t* inode; const uint32_t space_id = page_get_space_id(page_align(header)); @@ -2864,54 +2933,11 @@ fseg_free_step( fil_block_check_type(*iblock, FIL_PAGE_INODE, mtr); } - dberr_t err; - descr = fseg_get_first_extent(inode, space, mtr, &err); - - if (descr) { - /* Free the extent held by the segment */ - return fseg_free_extent(inode, iblock, space, - xdes_get_offset(descr), mtr + return fseg_free_step_low(space, inode, iblock, mtr, nullptr #ifdef BTR_CUR_HASH_ADAPT - , ahi + , ahi #endif /* BTR_CUR_HASH_ADAPT */ - ) != DB_SUCCESS; - } - - if (err != DB_SUCCESS || space->is_stopping()) { - return true; - } - - /* Free a frag page */ - n = fseg_find_last_used_frag_page_slot(inode); - - if (n == ULINT_UNDEFINED) { - /* Freeing completed: free the segment inode */ - fsp_free_seg_inode(space, inode, iblock, mtr); - return true; - } - - uint32_t page_no = fseg_get_nth_frag_page_no(inode, n); - - if (fseg_free_page_low(inode, iblock, space, page_no, mtr -#ifdef BTR_CUR_HASH_ADAPT - , ahi -#endif /* BTR_CUR_HASH_ADAPT */ - ) != DB_SUCCESS) { - return true; - } - - buf_page_free(space, page_no, mtr); - - n = fseg_find_last_used_frag_page_slot(inode); - - if (n == ULINT_UNDEFINED) { - /* Freeing completed: free the segment inode */ - fsp_free_seg_inode(space, inode, iblock, mtr); - - return true; - } - - return false; + ) != DB_SUCCESS_LOCKED_REC; } bool @@ -2923,16 +2949,16 @@ fseg_free_step_not_header( #endif /* BTR_CUR_HASH_ADAPT */ ) { - fseg_inode_t* inode; - - const uint32_t space_id = page_get_space_id(page_align(header)); + const page_t *page = page_align(header); + const uint32_t space_id = page_get_space_id(page); ut_ad(mtr->is_named_space(space_id)); fil_space_t* space = mtr->x_lock_space(space_id); buf_block_t* iblock; - inode = fseg_inode_try_get(header, space_id, space->zip_size(), - mtr, &iblock); + fseg_inode_t *inode = fseg_inode_try_get(header, space_id, + space->zip_size(), + mtr, &iblock); if (space->is_stopping()) { return true; } @@ -2940,7 +2966,7 @@ fseg_free_step_not_header( if (!inode) { ib::warn() << "Double free of " << page_id_t(space_id, - page_get_page_no(page_align(header))); + page_get_page_no(page)); return true; } @@ -2948,43 +2974,11 @@ fseg_free_step_not_header( fil_block_check_type(*iblock, FIL_PAGE_INODE, mtr); } - dberr_t err; - if (xdes_t* descr = fseg_get_first_extent(inode, space, mtr, &err)) { - /* Free the extent held by the segment */ - return fseg_free_extent(inode, iblock, space, - xdes_get_offset(descr), - mtr + return fseg_free_step_low(space, inode, iblock, mtr, page #ifdef BTR_CUR_HASH_ADAPT - , ahi + , ahi #endif /* BTR_CUR_HASH_ADAPT */ - ) != DB_SUCCESS; - } else if (err != DB_SUCCESS) { - return true; - } - - /* Free a frag page */ - - ulint n = fseg_find_last_used_frag_page_slot(inode); - - if (UNIV_UNLIKELY(n == ULINT_UNDEFINED)) { - return true; - } - - uint32_t page_no = fseg_get_nth_frag_page_no(inode, n); - - if (page_no == page_get_page_no(page_align(header))) { - return true; - } - - if (fseg_free_page_low(inode, iblock, space, page_no, mtr -#ifdef BTR_CUR_HASH_ADAPT - , ahi -#endif /* BTR_CUR_HASH_ADAPT */ - ) != DB_SUCCESS) { - return true; - } - buf_page_free(space, page_no, mtr); - return false; + ) != DB_SUCCESS_LOCKED_REC; } /** Returns the first extent descriptor for a segment. @@ -3577,22 +3571,463 @@ dberr_t fsp_sys_tablespace_validate() } #endif /* UNIV_DEBUG */ -void fsp_system_tablespace_truncate() +/** Store the inode information which basically stores +the page and offset */ +struct inode_info : private std::unordered_set +{ +public: + /** Register an inode + @param page index node page + @param offset index node offset within the page + @retval true in case of successful registeration + @retval false in case of invalid entry or already inserted inode */ + __attribute__((warn_unused_result)) + bool insert_inode(uint32_t page, uint16_t offset) + { + return page < fil_system.sys_space->free_limit && + offset >= FIL_PAGE_DATA && offset < srv_page_size - FIL_PAGE_DATA_END && + emplace(uint64_t{page} << 32 | offset).second; + } + + /** Register an inode + @param inode index node information + @retval true in case of successful registeration + @retval false in case of invalid entry or already inserted inode */ + __attribute__((warn_unused_result)) + bool insert_seg(const byte *inode) + { + return insert_inode(mach_read_from_4(inode + 4), + mach_read_from_2(inode + 8)); + } + + __attribute__((warn_unused_result)) + bool find(uint32_t page, uint16_t offset) const + { + return std::unordered_set::find(uint64_t{page} << 32 | + offset) != end(); + } + + /** Get the unused inode segment header from the list of index + node pages. + @param boffset offset for the FSP_SEG_INODES_FULL + or FSP_SEG_INODES_FREE list in fsp header page + @param unused store the unused information + @return error code */ + dberr_t get_unused(uint16_t boffset, inode_info *unused) const + { + dberr_t err= DB_SUCCESS; + buf_block_t *block= buf_pool.page_fix(page_id_t{0, 0}, &err, + buf_pool_t::FIX_WAIT_READ); + if (!block) + return err; + buf_block_t *header= block; + const uint32_t len= flst_get_len(block->page.frame + boffset); + fil_addr_t addr= flst_get_first(block->page.frame + boffset); + ulint n_inode_per_page= + FSP_SEG_INODES_PER_PAGE(fil_system.sys_space->physical_size()); + for (uint32_t i= len; i--; ) + { + if (addr.boffset < FIL_PAGE_DATA || + addr.boffset >= block->physical_size() - FIL_PAGE_DATA_END) + { + err= DB_CORRUPTION; + break; + } + + block= buf_pool.page_fix(page_id_t{0, addr.page}, &err, + buf_pool_t::FIX_WAIT_READ); + if (!block) + break; + + fil_addr_t next_addr= flst_get_next_addr(block->page.frame + + addr.boffset); + for (uint32_t i= 0; i < n_inode_per_page; i++) + { + const fseg_inode_t *inode= + fsp_seg_inode_page_get_nth_inode(block->page.frame, i); + ulint seg_id= mach_read_from_8(FSEG_ID + inode); + /* Consider TRX_SYS_FSEG_HEADER as used segment. + While reinitializing the undo tablespace, InnoDB + fail to reset the value of TRX_SYS_FSEG_HEADER + in TRX_SYS page. so InnoDB shouldn't consider + this segment as unused one */ + if (seg_id == 0 || seg_id == 2) + continue; + uint16_t offset= uint16_t(inode - block->page.frame); + if (offset < FIL_PAGE_DATA || + offset >= block->physical_size() - FIL_PAGE_DATA_END) + { + err= DB_CORRUPTION; + break; + } + + if (!find(addr.page, offset) && + !unused->insert_inode(addr.page, offset)) + { + err= DB_DUPLICATE_KEY; + break; + } + } + addr= next_addr; + block->page.unfix(); + if (err) + break; + } + ut_ad(addr.page == FIL_NULL || err != DB_SUCCESS); + header->page.unfix(); + return err; + } + + /** Free the segment information present in the set + @return error code */ + dberr_t free_segs(); +}; + +/** Get the file segments from root page +@param inodes store the index nodes information +@param root root page +@return error code */ +static dberr_t fsp_table_inodes_root(inode_info *inodes, uint32_t root) +{ + if (root == FIL_NULL) + return DB_SUCCESS; + + dberr_t err= DB_SUCCESS; + buf_block_t *block= buf_pool.page_fix(page_id_t{0, root}, &err, + buf_pool_t::FIX_WAIT_READ); + if (!block) + return err; + + if (!inodes->insert_seg(block->page.frame + PAGE_HEADER + PAGE_BTR_SEG_TOP)) + err= DB_CORRUPTION; + + if (!inodes->insert_seg(block->page.frame + PAGE_HEADER + PAGE_BTR_SEG_LEAF)) + err= DB_CORRUPTION; + + block->page.unfix(); + return err; +} + +/** Add the file segment of all root pages in table +@param inodes store the index nodes information +@param table table to be read +@return error code */ +static dberr_t add_index_root_pages(inode_info *inodes, dict_table_t *table) +{ + dberr_t err= DB_SUCCESS; + for (auto i= UT_LIST_GET_FIRST(table->indexes); + i != nullptr && err == DB_SUCCESS; i= UT_LIST_GET_NEXT(indexes, i)) + err= fsp_table_inodes_root(inodes, i->page); + return err; +} + +/** Determine the inodes used by tables in the system tablespace. +@param inodes store the index nodes information +@param mtr mini-transaction +@return error code */ +static dberr_t fsp_table_inodes(inode_info *inodes, mtr_t *mtr) +{ + btr_pcur_t pcur; + ulint len; + const auto savepoint= mtr->get_savepoint(); + dberr_t err= DB_SUCCESS; + dict_sys.freeze(SRW_LOCK_CALL); + for (const rec_t *rec= dict_startscan_system(&pcur, mtr, + dict_sys.sys_indexes); + rec; rec= dict_getnext_system_low(&pcur, mtr)) + { + const byte *field= + rec_get_nth_field_old(rec, DICT_FLD__SYS_INDEXES__SPACE, &len); + if (len != 4) + { + err= DB_CORRUPTION; + break; + } + uint32_t space= mach_read_from_4(field); + if (space > 0) continue; + + field= rec_get_nth_field_old(rec, DICT_FLD__SYS_INDEXES__PAGE_NO, &len); + if (len != 4) + { + err= DB_CORRUPTION; + break; + } + err= fsp_table_inodes_root(inodes, mach_read_from_4(field)); + if (err) + break; + } + mtr->rollback_to_savepoint(savepoint); + dict_sys.unfreeze(); + + if (err == DB_SUCCESS) + err= add_index_root_pages(inodes, dict_sys.sys_tables); + if (err == DB_SUCCESS) + err= add_index_root_pages(inodes, dict_sys.sys_indexes); + if (err == DB_SUCCESS) + err= add_index_root_pages(inodes, dict_sys.sys_columns); + if (err == DB_SUCCESS) + err= add_index_root_pages(inodes, dict_sys.sys_fields); + return err; +} + +/* Get the used inode from the system tablespace +@param inodes inode information used found in system tablespace +@param mtr mini-transaction +@return error code */ +static dberr_t fsp_get_sys_used_segment(inode_info *inodes, mtr_t *mtr) +{ + dberr_t err= DB_SUCCESS; + buf_block_t *block= nullptr; + /* Get TRX_SYS_FSEG_HEADER, TRX_SYS_DOUBLEWRITE_FSEG from + TRX_SYS_PAGE */ + block= buf_pool.page_fix(page_id_t{0, TRX_SYS_PAGE_NO}, &err, + buf_pool_t::FIX_WAIT_READ); + if (!block) + return err; + + fil_addr_t sys_fseg_addr= flst_read_addr(block->page.frame + + TRX_SYS + TRX_SYS_FSEG_HEADER + 4); + if (sys_fseg_addr.page == 0 && sys_fseg_addr.boffset == 0) + { + /* While reinitializing the undo tablespace, InnoDB fail + to reset the TRX_SYS_FSEG_HEADER offset in TRX_SYS page */ + } + else if (!inodes->insert_inode(sys_fseg_addr.page, sys_fseg_addr.boffset)) + err= DB_CORRUPTION; + + if (!inodes->insert_seg(block->page.frame + TRX_SYS_DOUBLEWRITE + + TRX_SYS_DOUBLEWRITE_FSEG)) + err= DB_CORRUPTION; + + block->page.unfix(); + + if (err) + return err; + + block= buf_pool.page_fix(page_id_t{0, DICT_HDR_PAGE_NO}, &err, + buf_pool_t::FIX_WAIT_READ); + if (!block) + return err; + + if (!inodes->insert_seg(block->page.frame + DICT_HDR + DICT_HDR_FSEG_HEADER)) + err= DB_CORRUPTION; + + block->page.unfix(); + + if (err) + return err; + + block= buf_pool.page_fix(page_id_t{0, FSP_IBUF_HEADER_PAGE_NO}, + &err, buf_pool_t::FIX_WAIT_READ); + if (!block) + return err; + if (!inodes->insert_seg(block->page.frame + PAGE_DATA)) + err= DB_CORRUPTION; + + block->page.unfix(); + + /* Get rollback segment header page */ + for (ulint rseg_id= 0; rseg_id < TRX_SYS_N_RSEGS && err == DB_SUCCESS; + rseg_id++) + { + trx_rseg_t *rseg= &trx_sys.rseg_array[rseg_id]; + if (rseg->space->id == 0) + { + block= buf_pool.page_fix(rseg->page_id(), &err, + buf_pool_t::FIX_WAIT_READ); + if (!block) + break; + if (!inodes->insert_seg(block->page.frame + TRX_RSEG + + TRX_RSEG_FSEG_HEADER)) + err= DB_CORRUPTION; + block->page.unfix(); + + /* Even after slow shutdown, there is a possiblity that + cached undo log can exist. So store the segment as used one */ + for (trx_undo_t *undo= UT_LIST_GET_FIRST(rseg->undo_cached); + undo && err == DB_SUCCESS; + undo= UT_LIST_GET_NEXT(undo_list, undo)) + { + block= buf_pool.page_fix(page_id_t{0, undo->hdr_page_no}, &err, + buf_pool_t::FIX_WAIT_READ); + if (!block) + return err; + if (!inodes->insert_seg(block->page.frame + TRX_UNDO_SEG_HDR + + TRX_UNDO_FSEG_HEADER)) + err= DB_CORRUPTION; + block->page.unfix(); + } + } + } + + if (err == DB_SUCCESS) + err= fsp_table_inodes(inodes, mtr); + return err; +} + +/** Free the extents, fragment page from the given inode +@param page_no index node page number +@param offset index node offset within page +@return error code */ +static dberr_t fseg_inode_free(uint32_t page_no, uint16_t offset) +{ + fil_space_t *space= fil_system.sys_space; + dberr_t err= DB_SUCCESS; + mtr_t mtr; + mtr.start(); + mtr.x_lock_space(space); + buf_block_t *iblock= buf_page_get_gen(page_id_t{0, page_no}, 0, + RW_X_LATCH, nullptr, BUF_GET, + &mtr, &err); + + fseg_inode_t *inode= nullptr; + DBUG_EXECUTE_IF("unused_undo_free_fail_4", + iblock= nullptr; err= DB_CORRUPTION;); + if (!iblock) + goto func_exit; + + inode= iblock->page.frame + offset; + while ((err= fseg_free_step_low(space, inode, iblock, + &mtr, nullptr)) == DB_SUCCESS_LOCKED_REC) + { + DBUG_EXECUTE_IF("unused_undo_free_fail_5", + err= DB_CORRUPTION; + goto func_exit;); + iblock->fix(); + mtr.commit(); + + mtr.start(); + mtr.x_lock_space(space); + iblock->page.lock.x_lock(); + mtr.memo_push(iblock, MTR_MEMO_PAGE_X_FIX); + } + /* These are all leaked undo log segments. That means there is no + way to access these undo log segments other than traversing + the index node page. Above fseg_free_step_low() clears + the undo segment header page as well. */ +func_exit: + mtr.commit(); + return err; +} + +/** Free the unused segment +@return error code */ +dberr_t inode_info::free_segs() +{ + for (auto i : *this) + { + uint32_t page= uint32_t(i >> 32); + uint16_t offset= uint16_t(i); + if (dberr_t err= fseg_inode_free(page, offset)) + { + sql_print_error("InnoDB: :autoshrink failed to free the " + "segment %u in page " UINT32PF, unsigned{offset}, + page); + return err; + } + sql_print_information("InnoDB: :autoshrink freed the segment " + "%u in page " UINT32PF, unsigned{offset}, page); + } + return DB_SUCCESS; +} + +bool trx_sys_t::is_xa_exist() noexcept +{ + for (const trx_rseg_t &rseg : trx_sys.rseg_array) + { + if (rseg.page_no == FIL_NULL) + continue; + const trx_undo_t *undo= UT_LIST_GET_FIRST(rseg.undo_list); + while (undo) + { + if (undo->state == TRX_UNDO_PREPARED) + return true; + undo= UT_LIST_GET_NEXT(undo_list, undo); + } + } + return false; +} + +/** Remove the unused segment in tablespace. This function +used only during shrinking of system tablespace +@param shutdown called during slow shutdown +@return error code */ +dberr_t fil_space_t::garbage_collect(bool shutdown) +{ + if ((shutdown && trx_sys_t::is_xa_exist()) || + (!shutdown && !trx_sys.is_undo_empty())) + { + sql_print_warning("InnoDB: Cannot free the unused segments" + " in system tablespace because a previous" + " shutdown was not with innodb_fast_shutdown=0" + " or XA PREPARE transactions exist"); + return DB_SUCCESS; + } + + ut_a(id == 0); + /* Collect all the used segment inode entries */ + mtr_t mtr; + mtr.start(); + inode_info used_inodes, unused_inodes; + dberr_t err= fsp_get_sys_used_segment(&used_inodes, &mtr); + DBUG_EXECUTE_IF("unused_undo_free_fail_1", err= DB_CORRUPTION;); + if (err) + { + sql_print_error("InnoDB: :autoshrink failed to read the " + "used segment due to %s", ut_strerr(err)); + mtr.commit(); + return err; + } + + const char *ctx= "in FSP_SEG_INODES_FULL list"; + err= used_inodes.get_unused(FSP_HEADER_OFFSET + FSP_SEG_INODES_FULL, + &unused_inodes); + DBUG_EXECUTE_IF("unused_undo_free_fail_2", err= DB_CORRUPTION;); + + if (err == DB_SUCCESS) + { + ctx= "in FSP_SEG_INODES_FREE list"; + err= used_inodes.get_unused(FSP_HEADER_OFFSET + FSP_SEG_INODES_FREE, + &unused_inodes); + DBUG_EXECUTE_IF("unused_undo_free_fail_3", err= DB_CORRUPTION;); + } + + mtr.commit(); + if (err) + { + sql_print_error("InnoDB: :autoshrink failed due to " + "%s %s ", ut_strerr(err), ctx); + return err; + } + + return unused_inodes.free_segs(); +} + +void fsp_system_tablespace_truncate(bool shutdown) { ut_ad(!purge_sys.enabled()); ut_ad(!srv_undo_sources); uint32_t last_used_extent= 0; fil_space_t *space= fil_system.sys_space; + dberr_t err= space->garbage_collect(shutdown); + if (err) + { + srv_sys_space.set_shrink_fail(); + return; + } + mtr_t mtr; mtr.start(); mtr.x_lock_space(space); - dberr_t err= fsp_traverse_extents(space, &last_used_extent, &mtr); + err= fsp_traverse_extents(space, &last_used_extent, &mtr); + DBUG_EXECUTE_IF("traversal_extent_fail", err= DB_CORRUPTION;); if (err != DB_SUCCESS) { -func_exit: +err_exit: + mtr.commit(); sql_print_warning("InnoDB: Cannot shrink the system tablespace " "due to %s", ut_strerr(err)); - mtr.commit(); + srv_sys_space.set_shrink_fail(); return; } uint32_t fixed_size= srv_sys_space.get_min_size(), @@ -3643,7 +4078,7 @@ func_exit: header= fsp_get_latched_xdes_page(0, &mtr, &err); if (!header) - goto func_exit; + goto err_exit; mtr.write<4, mtr_t::FORCED>( *header, FSP_HEADER_OFFSET + FSP_SIZE + header->page.frame, @@ -3656,16 +4091,16 @@ func_exit: err= fsp_shrink_list( header, FSP_HEADER_OFFSET + FSP_FREE, last_used_extent, &mtr); if (err != DB_SUCCESS) - goto func_exit; + goto err_exit; err= fsp_shrink_list( header, FSP_HEADER_OFFSET + FSP_FREE_FRAG, last_used_extent, &mtr); if (err != DB_SUCCESS) - goto func_exit; + goto err_exit; err= fsp_xdes_reset(space, last_used_extent, &mtr); if (err != DB_SUCCESS) - goto func_exit; + goto err_exit; mtr.trim_pages(page_id_t(0, last_used_extent)); size_t shrink_redo_size= mtr.get_log_size(); diff --git a/storage/innobase/include/dict0load.h b/storage/innobase/include/dict0load.h index c774a792f0b..69ccd3f816c 100644 --- a/storage/innobase/include/dict0load.h +++ b/storage/innobase/include/dict0load.h @@ -213,4 +213,12 @@ dict_process_sys_foreign_col_rec( in referenced table */ ulint* pos); /*!< out: column position */ +/** This function gets the next system table record as it scans +the table. +@param pcur persistent cursor +@param mtr mini-transaction +@return the next record if found +@retval nullptr at the end of the table */ +const rec_t* +dict_getnext_system_low(btr_pcur_t *pcur, mtr_t *mtr); #endif diff --git a/storage/innobase/include/fil0fil.h b/storage/innobase/include/fil0fil.h index 950aa3c5256..358297f3f23 100644 --- a/storage/innobase/include/fil0fil.h +++ b/storage/innobase/include/fil0fil.h @@ -988,6 +988,10 @@ public: /** Update the data structures on write completion */ void complete_write(); + /** Free the unused segment for the tablespace + @param shutdown called during slow shutdown + @return error code */ + dberr_t garbage_collect(bool shutdown); private: /** @return whether the file is usable for io() */ ATTRIBUTE_COLD bool prepare_acquired(); diff --git a/storage/innobase/include/fsp0fsp.h b/storage/innobase/include/fsp0fsp.h index 4e7b8b8c8de..5a088a1685f 100644 --- a/storage/innobase/include/fsp0fsp.h +++ b/storage/innobase/include/fsp0fsp.h @@ -555,8 +555,9 @@ inline void fsp_init_file_page( mtr->init(block); } -/** Truncate the system tablespace */ -void fsp_system_tablespace_truncate(); +/** Truncate the system tablespace +@param shutdown Called during shutdown */ +void fsp_system_tablespace_truncate(bool shutdown); #ifndef UNIV_DEBUG # define fsp_init_file_page(space, block, mtr) fsp_init_file_page(block, mtr) diff --git a/storage/innobase/include/fsp0sysspace.h b/storage/innobase/include/fsp0sysspace.h index 3ff0e864182..cace0c087c3 100644 --- a/storage/innobase/include/fsp0sysspace.h +++ b/storage/innobase/include/fsp0sysspace.h @@ -174,6 +174,11 @@ public: ulint* sum_new_sizes) MY_ATTRIBUTE((warn_unused_result)); + /** @return whether shrinking failed during + previous attempt of system tablespace shrinking */ + bool is_shrink_fail() noexcept { return m_auto_shrink_fail; } + + void set_shrink_fail() noexcept { m_auto_shrink_fail= true; } private: /** Check the tablespace header for this tablespace. @return DB_SUCCESS or error code */ @@ -271,6 +276,10 @@ private: /** Shrink the system tablespace if the value is enabled */ bool m_auto_shrink; + + /** Set to true only when InnoDB system tablespace + shrink fails during startup */ + bool m_auto_shrink_fail; }; /* GLOBAL OBJECTS */ diff --git a/storage/innobase/include/trx0sys.h b/storage/innobase/include/trx0sys.h index b4a3decd1c5..81a8583b07e 100644 --- a/storage/innobase/include/trx0sys.h +++ b/storage/innobase/include/trx0sys.h @@ -1202,6 +1202,9 @@ public: /** Get the undo log empty value */ bool is_undo_empty() const { return !undo_log_nonempty; } + /** @return whether XA transaction is in PREPARED state */ + static bool is_xa_exist() noexcept; + /* Reset the trx_sys page and retain the dblwr information, system rollback segment header page @return error code */ diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index db5dc5a4a3d..08f87ff29db 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -1578,7 +1578,8 @@ void srv_purge_shutdown() purge_sys.coordinator_shutdown(); srv_shutdown_purge_tasks(); if (!srv_fast_shutdown && !high_level_read_only && srv_was_started && - !opt_bootstrap && srv_operation == SRV_OPERATION_NORMAL) - fsp_system_tablespace_truncate(); + !opt_bootstrap && srv_operation == SRV_OPERATION_NORMAL && + !srv_sys_space.is_shrink_fail()) + fsp_system_tablespace_truncate(true); } } diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc index 08c3dc9f30b..fe89cdb7b55 100644 --- a/storage/innobase/srv/srv0start.cc +++ b/storage/innobase/srv/srv0start.cc @@ -333,6 +333,15 @@ inline dberr_t trx_sys_t::reset_page(mtr_t *mtr) if (!sys_header) return err; + if (mach_read_from_4(sys_header->page.frame + TRX_SYS + + TRX_SYS_FSEG_HEADER) != TRX_SYS_SPACE) + return DB_CORRUPTION; + + /* Store the TRX_SYS_FSEG_HEADER page, offset */ + char fseg_addr[6]; + memcpy(fseg_addr, + sys_header->page.frame + TRX_SYS + TRX_SYS_FSEG_HEADER + 4, 6); + const bool dblwr_enabled= mach_read_from_4(TRX_SYS_DOUBLEWRITE_MAGIC + TRX_SYS_DOUBLEWRITE + sys_header->page.frame) @@ -347,6 +356,17 @@ inline dberr_t trx_sys_t::reset_page(mtr_t *mtr) mtr->write<2>(*sys_header, FIL_PAGE_TYPE + sys_header->page.frame, FIL_PAGE_TYPE_TRX_SYS); + DBUG_EXECUTE_IF("sys_fseg_header_fail", + { + fseg_addr[4]= 0; + fseg_addr[5]= 0; + }); + + /** Write the TRX_SYS_FSEG_HEADER only if it is not zero-filled */ + if (!memcmp(fseg_addr + 4, "00", 2)) + mtr->memcpy(*sys_header, + sys_header->page.frame + TRX_SYS + TRX_SYS_FSEG_HEADER + 4, + fseg_addr, 6); mtr->write<4>(*sys_header, TRX_SYS + TRX_SYS_RSEGS + TRX_SYS_RSEG_PAGE_NO + sys_header->page.frame, FSP_FIRST_RSEG_PAGE_NO); @@ -1781,7 +1801,7 @@ dberr_t srv_start(bool create_new_db) if (!high_level_read_only && srv_sys_space.can_auto_shrink()) { - fsp_system_tablespace_truncate(); + fsp_system_tablespace_truncate(false); DBUG_EXECUTE_IF("crash_after_sys_truncate", return srv_init_abort(DB_ERROR);); } diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc index f53e76f9f72..d543468d465 100644 --- a/storage/innobase/trx/trx0purge.cc +++ b/storage/innobase/trx/trx0purge.cc @@ -482,6 +482,7 @@ loop: free_segment: ut_ad(rseg.curr_size >= seg_size); rseg.curr_size-= seg_size; + DBUG_EXECUTE_IF("undo_segment_leak", goto skip_purge_free;); trx_purge_free_segment(rseg_hdr, b, mtr); break; case TRX_UNDO_CACHED: @@ -509,7 +510,9 @@ loop: goto free_segment; } } - +#ifndef DBUG_OFF +skip_purge_free: +#endif /* !DBUG_OFF */ hdr_addr= prev_hdr_addr; mtr.commit(); From 41b036bff0bcabf54b61747fe87853497e0a8a74 Mon Sep 17 00:00:00 2001 From: Julius Goryavsky Date: Thu, 17 Oct 2024 03:21:51 +0200 Subject: [PATCH 065/121] This commit adds package dependencies for socat which is needed for testing galera. --- cmake/cpack_rpm.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/cpack_rpm.cmake b/cmake/cpack_rpm.cmake index 66645a6676d..50a08f475f7 100644 --- a/cmake/cpack_rpm.cmake +++ b/cmake/cpack_rpm.cmake @@ -222,7 +222,8 @@ IF(WITH_WSREP) SETA(CPACK_RPM_server_PACKAGE_REQUIRES "galera-4" "rsync" "grep" "gawk" "iproute" "coreutils" "findutils" "tar") - SETA(CPACK_RPM_server_PACKAGE_RECOMMENDS "lsof") + SETA(CPACK_RPM_server_PACKAGE_RECOMMENDS "lsof" "socat") + SETA(CPACK_RPM_test_PACKAGE_REQUIRES "socat") ENDIF() SET(CPACK_RPM_server_PRE_INSTALL_SCRIPT_FILE ${CMAKE_SOURCE_DIR}/support-files/rpm/server-prein.sh) From 740519e15acbbc116cea517e927bb2bd31d12e10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Thu, 17 Oct 2024 09:10:45 +0300 Subject: [PATCH 066/121] MDEV-35125: Unnecessary buf_pool.page_hash lookups dict_index_t::clear(), btr_drop_temporary_table(): Make use of the root page guess if it is available. btr_read_autoinc(): Invoke btr_root_block_get() to access the root page. btr_blob_free(): Retain a buffer-fix on the page across mtr_t::commit() in order to avoid a buf_pool.page_hash lookup. dict_load_table_one(): Remove a redundant check for page id. It was already validated in buf_page_t::read_complete(). trx_t::apply_log(): Make use of buf_pool.page_fix() to avoid some mtr_t related overhead. Reviewed by: Thirunarayanan Balathandayuthapani --- storage/innobase/btr/btr0btr.cc | 57 +++++++++++++++++------------- storage/innobase/btr/btr0cur.cc | 19 ++++++---- storage/innobase/dict/dict0load.cc | 29 +++++++-------- storage/innobase/trx/trx0undo.cc | 20 +++-------- 4 files changed, 63 insertions(+), 62 deletions(-) diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc index b1ecdc9cbaa..7ab880ad21d 100644 --- a/storage/innobase/btr/btr0btr.cc +++ b/storage/innobase/btr/btr0btr.cc @@ -278,7 +278,7 @@ btr_root_block_get( guess= #endif block= - buf_page_get_gen(page_id_t{index->table->space->id, index->page}, + buf_page_get_gen({index->table->space->id, index->page}, index->table->space->zip_size(), mode, guess, BUF_GET, mtr, err, false); ut_ad(!block == (*err != DB_SUCCESS)); @@ -1202,10 +1202,17 @@ dberr_t dict_index_t::clear(que_thr_t *thr) mtr_sx_lock_index(this, &mtr); dberr_t err; - if (buf_block_t *root_block= - buf_page_get_gen(page_id_t(table->space->id, page), - table->space->zip_size(), - RW_X_LATCH, nullptr, BUF_GET, &mtr, &err)) + buf_block_t *root_block; +#ifndef BTR_CUR_ADAPT + static constexpr buf_block_t *guess= nullptr; +#else + buf_block_t *&guess= btr_search_get_info(this)->root_guess; + guess= +#endif + root_block= buf_page_get_gen({table->space_id, page}, + table->space->zip_size(), + RW_X_LATCH, guess, BUF_GET, &mtr, &err); + if (root_block) { btr_free_but_not_root(root_block, mtr.get_log_mode() #ifdef BTR_CUR_HASH_ADAPT @@ -1258,9 +1265,14 @@ void btr_drop_temporary_table(const dict_table_t &table) for (const dict_index_t *index= table.indexes.start; index; index= dict_table_get_next_index(index)) { - if (buf_block_t *block= buf_page_get_low({SRV_TMP_SPACE_ID, index->page}, 0, - RW_X_LATCH, nullptr, BUF_GET, &mtr, - nullptr, false)) +#ifndef BTR_CUR_ADAPT + static constexpr buf_block_t *guess= nullptr; +#else + buf_block_t *guess= index->search_info->root_guess; +#endif + if (buf_block_t *block= buf_page_get_low({SRV_TMP_SPACE_ID, index->page}, + 0, RW_X_LATCH, guess, BUF_GET, + &mtr, nullptr, false)) { btr_free_but_not_root(block, MTR_LOG_NO_REDO); mtr.set_log_mode(MTR_LOG_NO_REDO); @@ -1279,22 +1291,19 @@ void btr_drop_temporary_table(const dict_table_t &table) ib_uint64_t btr_read_autoinc(dict_index_t* index) { - ut_ad(index->is_primary()); - ut_ad(index->table->persistent_autoinc); - ut_ad(!index->table->is_temporary()); - mtr_t mtr; - mtr.start(); - ib_uint64_t autoinc; - if (buf_block_t* block = buf_page_get( - page_id_t(index->table->space_id, index->page), - index->table->space->zip_size(), - RW_S_LATCH, &mtr)) { - autoinc = page_get_autoinc(block->page.frame); - } else { - autoinc = 0; - } - mtr.commit(); - return autoinc; + ut_ad(index->is_primary()); + ut_ad(index->table->persistent_autoinc); + ut_ad(!index->table->is_temporary()); + mtr_t mtr; + mtr.start(); + dberr_t err; + uint64_t autoinc; + if (buf_block_t *root= btr_root_block_get(index, RW_S_LATCH, &mtr, &err)) + autoinc= page_get_autoinc(root->page.frame); + else + autoinc= 0; + mtr.commit(); + return autoinc; } dict_index_t *dict_table_t::get_index(const dict_col_t &col) const diff --git a/storage/innobase/btr/btr0cur.cc b/storage/innobase/btr/btr0cur.cc index 9fb5bb4597a..0e8dd5c603b 100644 --- a/storage/innobase/btr/btr0cur.cc +++ b/storage/innobase/btr/btr0cur.cc @@ -5899,18 +5899,23 @@ btr_blob_get_next_page_no( @param mtr mini-transaction to commit */ static void btr_blob_free(buf_block_t *block, bool all, mtr_t *mtr) { - const page_id_t page_id(block->page.id()); ut_ad(mtr->memo_contains_flagged(block, MTR_MEMO_PAGE_X_FIX)); + block->page.fix(); +#ifdef UNIV_DEBUG + const page_id_t page_id{block->page.id()}; + buf_pool_t::hash_chain &chain= buf_pool.page_hash.cell_get(page_id.fold()); +#endif mtr->commit(); - buf_pool_t::hash_chain &chain= buf_pool.page_hash.cell_get(page_id.fold()); mysql_mutex_lock(&buf_pool.mutex); + block->page.unfix(); + ut_ad(block->page.id() == page_id); + ut_ad(&block->page == buf_pool.page_hash.get(page_id, chain)); - if (buf_page_t *bpage= buf_pool.page_hash.get(page_id, chain)) - if (!buf_LRU_free_page(bpage, all) && all && bpage->zip.data) - /* Attempt to deallocate the redundant copy of the uncompressed page - if the whole ROW_FORMAT=COMPRESSED block cannot be deallocted. */ - buf_LRU_free_page(bpage, false); + if (!buf_LRU_free_page(&block->page, all) && all && block->page.zip.data) + /* Attempt to deallocate the redundant copy of the uncompressed page + if the whole ROW_FORMAT=COMPRESSED block cannot be deallocted. */ + buf_LRU_free_page(&block->page, false); mysql_mutex_unlock(&buf_pool.mutex); } diff --git a/storage/innobase/dict/dict0load.cc b/storage/innobase/dict/dict0load.cc index d79d3eab8c3..8d4c0774002 100644 --- a/storage/innobase/dict/dict0load.cc +++ b/storage/innobase/dict/dict0load.cc @@ -2474,24 +2474,21 @@ corrupted: only to delete the .ibd files. */ goto corrupted; } else { - const page_id_t page_id{table->space->id, pk->page}; mtr.start(); - buf_block_t* block = buf_page_get( - page_id, table->space->zip_size(), - RW_S_LATCH, &mtr); - const bool corrupted = !block - || page_get_space_id(block->page.frame) - != page_id.space() - || page_get_page_no(block->page.frame) - != page_id.page_no() - || (mach_read_from_2(FIL_PAGE_TYPE - + block->page.frame) - != FIL_PAGE_INDEX - && mach_read_from_2(FIL_PAGE_TYPE - + block->page.frame) - != FIL_PAGE_TYPE_INSTANT); + bool ok = false; + if (buf_block_t* b = buf_page_get( + page_id_t(table->space->id, pk->page), + table->space->zip_size(), + RW_S_LATCH, &mtr)) { + switch (mach_read_from_2(FIL_PAGE_TYPE + + b->page.frame)) { + case FIL_PAGE_INDEX: + case FIL_PAGE_TYPE_INSTANT: + ok = true; + } + } mtr.commit(); - if (corrupted) { + if (!ok) { goto corrupted; } diff --git a/storage/innobase/trx/trx0undo.cc b/storage/innobase/trx/trx0undo.cc index 5626b88dcf6..4da3cea8e79 100644 --- a/storage/innobase/trx/trx0undo.cc +++ b/storage/innobase/trx/trx0undo.cc @@ -351,16 +351,11 @@ ATTRIBUTE_COLD void trx_t::apply_log() const trx_undo_t *undo= rsegs.m_redo.undo; if (!undo || !undo_no) return; - page_id_t page_id{rsegs.m_redo.rseg->space->id, undo->hdr_page_no}; + const page_id_t page_id{rsegs.m_redo.rseg->space->id, undo->hdr_page_no}; page_id_t next_page_id(page_id); - mtr_t mtr; - mtr.start(); - buf_block_t *block= buf_page_get(page_id, 0, RW_S_LATCH, &mtr); + buf_block_t *block= buf_pool.page_fix(page_id, nullptr, buf_pool_t::FIX_WAIT_READ); if (UNIV_UNLIKELY(!block)) - { - mtr.commit(); return; - } UndorecApplier log_applier(page_id, id); @@ -370,13 +365,9 @@ ATTRIBUTE_COLD void trx_t::apply_log() undo->hdr_offset); while (rec) { - block->page.fix(); - mtr.commit(); /* Since we are the only thread who could write to this undo page, it is safe to dereference rec while only holding a buffer-fix. */ log_applier.apply_undo_rec(rec); - mtr.start(); - mtr.page_lock(block, RW_S_LATCH); rec= trx_undo_page_get_next_rec(block, page_offset(rec), page_id.page_no(), undo->hdr_offset); } @@ -384,17 +375,16 @@ ATTRIBUTE_COLD void trx_t::apply_log() uint32_t next= mach_read_from_4(TRX_UNDO_PAGE_HDR + TRX_UNDO_PAGE_NODE + FLST_NEXT + FIL_ADDR_PAGE + block->page.frame); + block->page.unfix(); if (next == FIL_NULL) break; next_page_id.set_page_no(next); - mtr.commit(); - mtr.start(); - block= buf_page_get_gen(next_page_id, 0, RW_S_LATCH, block, BUF_GET, &mtr); + block= buf_pool.page_fix(next_page_id, nullptr, buf_pool_t::FIX_WAIT_READ); if (UNIV_UNLIKELY(!block)) break; log_applier.assign_next(next_page_id); } - mtr.commit(); + apply_online_log= false; } From 6b436cba01ffecbdcc3320528ae3baf8335ac6fb Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 17 Oct 2024 09:11:47 +0200 Subject: [PATCH 067/121] Revert "Fixes buildbot issue with plugin.fulltext_plugin" This reverts commit a8010e76894ab9a4a5d249293e30409d3338496d. The test doesn't require embedded after ab15628bbc05 --- mysql-test/suite/plugins/t/fulltext_plugin.test | 1 - 1 file changed, 1 deletion(-) diff --git a/mysql-test/suite/plugins/t/fulltext_plugin.test b/mysql-test/suite/plugins/t/fulltext_plugin.test index 4023bca8b41..c0e1d8e17bf 100644 --- a/mysql-test/suite/plugins/t/fulltext_plugin.test +++ b/mysql-test/suite/plugins/t/fulltext_plugin.test @@ -1,5 +1,4 @@ --source include/have_simple_parser.inc ---source include/not_embedded.inc --echo # --echo # BUG#39746 - Debug flag breaks struct definition (server crash) From 7842cab8c0a239a7509acfed4ce0c28675318732 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sat, 14 Sep 2024 08:01:31 +0200 Subject: [PATCH 068/121] MDEV-34318 post-merge fix --- client/mysqldump.c | 4 ++-- mysql-test/suite/versioning/r/data.result | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/client/mysqldump.c b/client/mysqldump.c index c736a5e80f5..6d872ae533c 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -4279,7 +4279,7 @@ static void dump_table(const char *table, const char *db, const uchar *hash_key, if (versioned && !opt_xml && opt_dump_history) { - fprintf(md_result_file,"/*!101100 SET @old_system_versioning_insert_history=@@session.system_versioning_insert_history, @@session.system_versioning_insert_history=1 */;\n"); + fprintf(md_result_file,"/*M!101100 SET @old_system_versioning_insert_history=@@session.system_versioning_insert_history, @@session.system_versioning_insert_history=1 */;\n"); check_io(md_result_file); } if (opt_lock) @@ -4581,7 +4581,7 @@ static void dump_table(const char *table, const char *db, const uchar *hash_key, } if (versioned && !opt_xml && opt_dump_history) { - fprintf(md_result_file,"/*!101100 SET system_versioning_insert_history=@old_system_versioning_insert_history */;\n"); + fprintf(md_result_file,"/*M!101100 SET system_versioning_insert_history=@old_system_versioning_insert_history */;\n"); check_io(md_result_file); } mysql_free_result(res); diff --git a/mysql-test/suite/versioning/r/data.result b/mysql-test/suite/versioning/r/data.result index 9832292a7e1..b21e44f391f 100644 --- a/mysql-test/suite/versioning/r/data.result +++ b/mysql-test/suite/versioning/r/data.result @@ -98,10 +98,10 @@ CREATE TABLE `t1` ( `x` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci WITH SYSTEM VERSIONING; /*!40101 SET character_set_client = @saved_cs_client */; -/*!101100 SET @old_system_versioning_insert_history=@@session.system_versioning_insert_history, @@session.system_versioning_insert_history=1 */; +/*M!101100 SET @old_system_versioning_insert_history=@@session.system_versioning_insert_history, @@session.system_versioning_insert_history=1 */; INSERT INTO `t1` (`x`, row_start, row_end) VALUES (1,'2010-10-10 10:10:10.101010','2011-11-11 11:11:11.111111'), (2,'2010-10-10 10:10:10.101010','2038-01-19 03:14:07.999999'); -/*!101100 SET system_versioning_insert_history=@old_system_versioning_insert_history */; +/*M!101100 SET system_versioning_insert_history=@old_system_versioning_insert_history */; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `t2` ( @@ -111,10 +111,10 @@ CREATE TABLE `t2` ( PERIOD FOR SYSTEM_TIME (`row_start`, `row_end`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci WITH SYSTEM VERSIONING; /*!40101 SET character_set_client = @saved_cs_client */; -/*!101100 SET @old_system_versioning_insert_history=@@session.system_versioning_insert_history, @@session.system_versioning_insert_history=1 */; +/*M!101100 SET @old_system_versioning_insert_history=@@session.system_versioning_insert_history, @@session.system_versioning_insert_history=1 */; INSERT INTO `t2` (`x`, `row_start`, `row_end`) VALUES (1,'2010-10-10 10:10:10.101010','2011-11-11 11:11:11.111111'), (2,'2010-10-10 10:10:10.101010','2038-01-19 03:14:07.999999'); -/*!101100 SET system_versioning_insert_history=@old_system_versioning_insert_history */; +/*M!101100 SET system_versioning_insert_history=@old_system_versioning_insert_history */; mariadb-dump: --dump-history can't be used with --as-of. mariadb-dump: --dump-history can't be used with --replace. mariadb-dump: --xml can't be used with --dump-history. From 3b58c6b93f2d69588307f1a6b7014fa2da112465 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Fri, 4 Oct 2024 18:40:34 +0200 Subject: [PATCH 069/121] MDEV-35079 Migrate MySQL5.7 to MariaDB 10.4, then to MariaDB 10.11 Failed correctly detect when partitioning is disabled --- mysql-test/main/mysql57nopart.result | 13 +++++++++++++ mysql-test/main/mysql57nopart.test | 11 +++++++++++ mysql-test/std_data/mysql57part.frm | Bin 0 -> 9318 bytes sql/table.cc | 13 ++++++------- 4 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 mysql-test/main/mysql57nopart.result create mode 100644 mysql-test/main/mysql57nopart.test create mode 100644 mysql-test/std_data/mysql57part.frm diff --git a/mysql-test/main/mysql57nopart.result b/mysql-test/main/mysql57nopart.result new file mode 100644 index 00000000000..2b902f27947 --- /dev/null +++ b/mysql-test/main/mysql57nopart.result @@ -0,0 +1,13 @@ +# +# MDEV-35079 Migrate MySQL5.7 to MariaDB 10.4, then to MariaDB 10.11 Failed +# +select table_name, concat('<',table_comment,'>') from information_schema.tables +where table_schema='test'; +table_name concat('<',table_comment,'>') +mysql57part +Warnings: +Warning 1290 The MariaDB server is running with the --skip-partition option so it cannot execute this statement +drop table mysql57part; +Warnings: +Warning 1932 Table 'test.mysql57part' doesn't exist in engine +# End of 10.11 tests diff --git a/mysql-test/main/mysql57nopart.test b/mysql-test/main/mysql57nopart.test new file mode 100644 index 00000000000..93df68cee5f --- /dev/null +++ b/mysql-test/main/mysql57nopart.test @@ -0,0 +1,11 @@ +source include/have_innodb.inc; +--echo # +--echo # MDEV-35079 Migrate MySQL5.7 to MariaDB 10.4, then to MariaDB 10.11 Failed +--echo # +let $datadir=`select @@datadir`; +copy_file std_data/mysql57part.frm $datadir/test/mysql57part.frm; +select table_name, concat('<',table_comment,'>') from information_schema.tables + where table_schema='test'; +drop table mysql57part; + +--echo # End of 10.11 tests diff --git a/mysql-test/std_data/mysql57part.frm b/mysql-test/std_data/mysql57part.frm new file mode 100644 index 0000000000000000000000000000000000000000..9a2e577997344f8c14dd5f3c1493e6fb7e066d40 GIT binary patch literal 9318 zcmeHN-A)rh82z@ih3=M8Xf-ByvBVpim;i&KCYrcPgEdeHRK-M7*LIMNWlP$kaJP?O zqTcubzJae`yy4zQ@EN#p{APAbSD0kHAjY4Wi)Hrkoo{AOPnYeX-wiW61dulXW&sY< zPm>G>@R9fc8GsbQ>4*UEaF_Xa%$aS^=$qRzNGD70?Q3 z1+)TM0j+>m;Ez=xg&*h_aCf7Sz@rgh7H}6o?hgfN1K!+Dfdd3E8vrwy!h(Pxa3p|4 zU?Cjvlav5rl%xQLg9`>s21#IR>y;H}{W0r$J?i;Qy3gE}+u7+I>{8aD4eGt3^`5sw zL)h(hX)lZ*a0NZI0$KsBfL1^&pi+Q+Q&s#2zYq8|iUXhYN6??>pIU+6rvQI+{AWfQ zD!$)dyz?6W`DL#;>$OU)vRbw8Jhs=J>QdRBKA>)AI{rXgDw)%R!d)^uH*Y_5mLHTi z?B(*thF!boRPAXFm+W$NsZuT5x9o6{%Vul|&b%ULUQsiz%9&Ty%mq1fLCw4-XI@h? zugjU&)yx}m<_#s2%u1PLR?VD~Gw0MyB4-jcQ|=+6_7IVKh^Re8zEHgWQ%Py(1d+uP|@67px;@$c$p zzy#bhKH(kxY4Ypw*4N-Xz2{rres8Zs zG1D=5;!LyMD^VriVBH7OP%)K zE)*c+b;Cj^;&RmQ)!I(2eIL$2j_%XOUe9a$^)Bu(nJE@Q1WG972!4koWi1}zzQf1U zF$B`1g#w7A3Bd^jhO-D*7(E3MFp{+_{_T`W4h&&MCWk;V2ACWWNmEo|jbo3Cu^w4# zk--!`itrwM*-?`a5P4PvU<(UsiNPvkCIXu=AfHFzNemb_%M70J&@AdP!J9tA%MBu+ zkTDE+I|K>-2Fv5JMGJv<2)v1ab2;Y=ypK`B01RKmysql_version >= 50600 && share->mysql_version <= 50799) { share->keep_original_mysql_version= 1; - if (change_to_partiton_engine(&se_name, &se_plugin)) + if (change_to_partiton_engine(&se_plugin)) goto err; } } From c00145de58411c385f96b8b75a3e5dc3d0edacb1 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Thu, 17 Oct 2024 08:03:56 +0200 Subject: [PATCH 070/121] fix signed/unsigned and size_t issue --- unittest/mysys/stack_allocation-t.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/unittest/mysys/stack_allocation-t.c b/unittest/mysys/stack_allocation-t.c index 911bbd8de7a..2b044c80f42 100644 --- a/unittest/mysys/stack_allocation-t.c +++ b/unittest/mysys/stack_allocation-t.c @@ -77,10 +77,10 @@ void test_stack_detection(int stage, size_t stack_allocation) stack_allocation_total= 0; res= test_stack(stack_start, stack_end, 1, stack_allocation); if (!res) - ok(1, "%ld bytes allocated on stack of size %ld with %ld alloc size", - stack_allocation_total, + ok(1, "%llu bytes allocated on stack of size %ld with %lu alloc size", + (unsigned long long) stack_allocation_total, (long) available_stack_size(stack_start, stack_end), - (long) stack_allocation); + (unsigned long) stack_allocation); else ok(0, "stack checking failed"); } From 600c42ea8619b361388b32db35c9eb51f7385adb Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Wed, 16 Oct 2024 13:28:20 +0200 Subject: [PATCH 071/121] MDEV-34883 LOAD DATA INFILE with geometry data fails We write field using field data charset, so we should read it using the field charset. --- mysql-test/main/loaddata.result | 41 +++++++++++++++++++++++ mysql-test/main/loaddata.test | 58 +++++++++++++++++++++++++++++++++ sql/sql_load.cc | 18 +++++++--- 3 files changed, 112 insertions(+), 5 deletions(-) diff --git a/mysql-test/main/loaddata.result b/mysql-test/main/loaddata.result index d00eb034505..a8ac29fdfa0 100644 --- a/mysql-test/main/loaddata.result +++ b/mysql-test/main/loaddata.result @@ -686,3 +686,44 @@ SELECT * FROM t1; id 1 DROP TABLE t1; +# +# MDEV-34883: LOAD DATA INFILE with geometry data fails +# +CREATE OR REPLACE TABLE t1 ( +p point NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +INSERT INTO t1 VALUES (GeomFromText('POINT(37.646944 -75.761111)')); +SELECT * FROM t1 INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/t1.tsv'; +Warnings: +Warning 1287 ' INTO FROM...' instead +CREATE OR REPLACE TABLE t2 LIKE t1; +LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/t1.tsv' INTO TABLE t2; +drop table t1, t2; +CREATE OR REPLACE TABLE t1 ( +p point NOT NULL, +chr char(20) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +INSERT INTO t1 VALUES (GeomFromText('POINT(37.646944 -75.761111)'),"їєі"); +SELECT * FROM t1 INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/t1.tsv'; +Warnings: +Warning 1287 ' INTO FROM...' instead +CREATE OR REPLACE TABLE t2 LIKE t1; +LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/t1.tsv' INTO TABLE t2 CHARACTER SET latin1; +select ST_AsText(p), chr from t1; +ST_AsText(p) chr +POINT(37.646944 -75.761111) їєі +# incorrect string (but correct geom) +select ST_AsText(p), chr from t2; +ST_AsText(p) chr +POINT(37.646944 -75.761111) їєі +delete from t2; +LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/t1.tsv' INTO TABLE t2 CHARACTER SET utf8mb4; +select ST_AsText(p), chr from t1; +ST_AsText(p) chr +POINT(37.646944 -75.761111) їєі +# all is correct +select ST_AsText(p), chr from t2; +ST_AsText(p) chr +POINT(37.646944 -75.761111) їєі +drop table t1, t2; +# End of 10.5 tests diff --git a/mysql-test/main/loaddata.test b/mysql-test/main/loaddata.test index ef1496787d4..e88a9b3cf01 100644 --- a/mysql-test/main/loaddata.test +++ b/mysql-test/main/loaddata.test @@ -832,3 +832,61 @@ CREATE TABLE t1 (id integer not null auto_increment primary key); LOAD DATA INFILE '../../std_data/loaddata/nl.txt' INTO TABLE t1 FIELDS TERMINATED BY ''; SELECT * FROM t1; DROP TABLE t1; + + +--echo # +--echo # MDEV-34883: LOAD DATA INFILE with geometry data fails +--echo # + +CREATE OR REPLACE TABLE t1 ( + p point NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +INSERT INTO t1 VALUES (GeomFromText('POINT(37.646944 -75.761111)')); + +--disable_ps2_protocol +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval SELECT * FROM t1 INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1.tsv'; +--enable_ps2_protocol + +CREATE OR REPLACE TABLE t2 LIKE t1; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1.tsv' INTO TABLE t2; + +--remove_file '$MYSQLTEST_VARDIR/tmp/t1.tsv' +drop table t1, t2; + + +CREATE OR REPLACE TABLE t1 ( + p point NOT NULL, + chr char(20) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +INSERT INTO t1 VALUES (GeomFromText('POINT(37.646944 -75.761111)'),"їєі"); +--disable_ps2_protocol +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval SELECT * FROM t1 INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/t1.tsv'; +--enable_ps2_protocol + +CREATE OR REPLACE TABLE t2 LIKE t1; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1.tsv' INTO TABLE t2 CHARACTER SET latin1; + +select ST_AsText(p), chr from t1; +--echo # incorrect string (but correct geom) +select ST_AsText(p), chr from t2; + +delete from t2; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/t1.tsv' INTO TABLE t2 CHARACTER SET utf8mb4; + +select ST_AsText(p), chr from t1; +--echo # all is correct +select ST_AsText(p), chr from t2; + +--remove_file '$MYSQLTEST_VARDIR/tmp/t1.tsv' +drop table t1, t2; + +--echo # End of 10.5 tests diff --git a/sql/sql_load.cc b/sql/sql_load.cc index 7329a7d2db5..3ccb6f48994 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -245,7 +245,7 @@ public: String &field_term,String &line_start,String &line_term, String &enclosed,int escape,bool get_it_from_net, bool is_fifo); ~READ_INFO(); - int read_field(); + int read_field(CHARSET_INFO *cs); int read_fixed_length(void); int next_line(void); char unescape(char chr); @@ -1124,7 +1124,15 @@ read_sep_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list, { uint length; uchar *pos; - if (read_info.read_field()) + CHARSET_INFO *cs; + /* + Avoiding of handling binary data as a text + */ + if(item->charset_for_protocol() == &my_charset_bin) + cs= &my_charset_bin; + else + cs= read_info.charset(); + if (read_info.read_field(cs)) break; /* If this line is to be skipped we don't want to fill field or var */ @@ -1497,7 +1505,7 @@ inline bool READ_INFO::terminator(const uchar *ptr, uint length) must make sure to use escapes properly. */ -int READ_INFO::read_field() +int READ_INFO::read_field(CHARSET_INFO *cs) { int chr,found_enclosed_char; @@ -1533,7 +1541,7 @@ int READ_INFO::read_field() for (;;) { // Make sure we have enough space for the longest multi-byte character. - while (data.length() + charset()->mbmaxlen <= data.alloced_length()) + while (data.length() + cs->mbmaxlen <= data.alloced_length()) { chr = GET; if (chr == my_b_EOF) @@ -1619,7 +1627,7 @@ int READ_INFO::read_field() } } data.append(chr); - if (charset()->use_mb() && read_mbtail(&data)) + if (cs->use_mb() && read_mbtail(&data)) goto found_eof; } /* From 973e641c32c9f7b304ece25aae4cb4a46eba6428 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sat, 14 Sep 2024 08:05:12 +0200 Subject: [PATCH 072/121] MDEV-34318 post-merge fix --- client/mysqldump.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/mysqldump.cc b/client/mysqldump.cc index 8a06a283957..174d3a77543 100644 --- a/client/mysqldump.cc +++ b/client/mysqldump.cc @@ -2024,7 +2024,7 @@ static MYSQL* connect_to_db(char *host, char *user,char *passwd) goto err; /* Set server side timeout between client commands to server compiled-in default */ - if(mysql_query_with_error_report(con,0, "/*!100100 SET WAIT_TIMEOUT=DEFAULT */")) + if(mysql_query_with_error_report(con,0, "/*M!100100 SET WAIT_TIMEOUT=DEFAULT */")) goto err; DBUG_RETURN(con); From bb47e575de2bdad06d04f74b65c2a22d07f83cc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Thu, 17 Oct 2024 17:24:20 +0300 Subject: [PATCH 073/121] MDEV-34830: LSN in the future is not being treated as serious corruption The invariant of write-ahead logging is that before any change to a page is written to the data file, the corresponding log record must must first have been durably written. On crash recovery, there were some sloppy checks for this. Let us implement accurate checks and flag an inconsistency as a hard error, so that we can avoid further corruption of a corrupted database. For data extraction from the corrupted database, innodb_force_recovery can be used. Before recovery is reading any data pages or invoking buf_dblwr_t::recover() to recover torn pages from the doublewrite buffer, InnoDB will have parsed the log until the final LSN and updated log_sys.lsn to that. So, we can rely on log_sys.lsn at all times. The doublewrite buffer recovery has been refactored in such a way that the recv_sys.dblwr.pages may be consulted while discovering files and their page sizes, but nothing will be written back to data files before buf_dblwr_t::recover() is invoked. A section of the test mariabackup.innodb_redo_overwrite that is parsing some mariadb-backup --backup output has been removed, because that output "redo log block is overwritten" would often be missing in a Microsoft Windows environment as a result of these changes. recv_max_page_lsn, recv_lsn_checks_on: Remove. recv_sys_t::validate_checkpoint(): Validate the write-ahead-logging condition at the end of the recovery. recv_dblwr_t::validate_page(): Keep track of the maximum LSN (if we are checking a non-doublewrite copy of a page) but do not complain LSN being in the future. The doublewrite buffer is a special case, because it will be read early during recovery. Besides, starting with commit 762bcb81b5bf9bbde61fed59afb26417f4ce1e86 the dblwr=true copies of pages may legitimately be "too new". recv_dblwr_t::find_page(): Find a valid page with the smallest FIL_PAGE_LSN that is in the valid range for recovery. recv_dblwr_t::restore_first_page(): Replaced by find_page(). Only buf_dblwr_t::recover() will write to data files. buf_dblwr_t::recover(): Simplify the message output. Do attempt doublewrite recovery on user page read error. Ignore doublewrite pages whose FIL_PAGE_LSN is outside the usable bounds. Previously, we could wrongly recover a too new page from the doublewrite buffer. It is unlikely that this could have lead to an actual error. Write back all recovered pages from the doublewrite buffer here, including for the first page of any tablespace. buf_page_is_corrupted(): Distinguish the return values CORRUPTED_FUTURE_LSN and CORRUPTED_OTHER. buf_page_check_corrupt(): Return the error code DB_CORRUPTION in case the LSN is in the future. Datafile::read_first_page(): Handle FSP_SPACE_FLAGS=0xffffffff in the same way on both 32-bit and 64-bit architectures. Datafile::read_first_page_flags(): Split from read_first_page(). Take a copy of the first page as a parameter. recv_sys_t::free_corrupted_page(): Take the file as a parameter and return whether a message was displayed. This avoids some duplicated and incomplete error messages. buf_page_t::read_complete(): Remove some redundant output and always display the name of the corrupted file. Never return DB_FAIL; use it only in internal error handling. IORequest::read_complete(): Assume that buf_page_t::read_complete() will have reported any error. fil_space_t::set_corrupted(): Return whether this is the first time the tablespace had been flagged as corrupted. Datafile::validate_first_page(), fil_node_open_file_low(), fil_node_open_file(), fil_space_t::read_page0(), fil_node_t::read_page0(): Add a parameter for a copy of the first page, and a parameter to indicate whether the FIL_PAGE_LSN check should be suppressed. Before buf_dblwr_t::recover() is invoked, we cannot validate the FIL_PAGE_LSN, but we can trust the FSP_SPACE_FLAGS and the tablespace ID that may be present in a potentially too new copy of a page. Reviewed by: Debarun Banerjee --- extra/innochecksum.cc | 2 +- extra/mariabackup/fil_cur.cc | 8 +- extra/mariabackup/xtrabackup.cc | 7 +- .../encryption/r/innodb-bad-key-change.result | 3 +- .../r/innodb-bad-key-change2.result | 2 + .../r/innodb-bad-key-change4.result | 2 + .../r/innodb-compressed-blob.result | 2 +- .../r/innodb-encryption-disable.result | 2 + .../encryption/r/innodb-force-corrupt.result | 5 +- .../encryption/r/innodb-missing-key.result | 2 + .../encryption/r/innodb-redo-badkey.result | 1 + .../t/corrupted_during_recovery.test | 4 +- .../encryption/t/innodb-bad-key-change.test | 3 +- .../encryption/t/innodb-bad-key-change2.test | 2 + .../encryption/t/innodb-bad-key-change4.test | 2 + .../encryption/t/innodb-compressed-blob.test | 2 +- .../t/innodb-encryption-disable.test | 2 + .../encryption/t/innodb-force-corrupt.test | 5 +- .../encryption/t/innodb-missing-key.test | 2 + .../encryption/t/innodb-redo-badkey.test | 2 + .../innodb/r/corrupted_during_recovery.result | 6 +- mysql-test/suite/innodb/r/doublewrite.result | 6 +- .../suite/innodb/r/doublewrite_debug.result | 4 +- .../suite/innodb/r/innodb-wl5522-debug.result | 4 +- .../innodb/r/page_id_innochecksum.result | 1 + .../suite/innodb/r/undo_space_dblwr.result | 2 +- .../innodb/t/corrupted_during_recovery.test | 74 +++++- mysql-test/suite/innodb/t/doublewrite.test | 48 +++- .../suite/innodb/t/doublewrite_debug.test | 8 +- .../suite/innodb/t/innodb-wl5522-debug.test | 4 +- .../suite/innodb/t/innodb_bug14147491.test | 2 +- .../leaf_page_corrupted_during_recovery.test | 3 +- .../suite/innodb/t/page_id_innochecksum.test | 1 + .../suite/innodb/t/undo_space_dblwr.test | 2 +- .../innodb_zip/r/wl5522_debug_zip.result | 4 +- .../suite/innodb_zip/t/wl5522_debug_zip.test | 4 +- .../encrypted_page_compressed.result | 2 + .../encrypted_page_compressed.test | 2 + .../encrypted_page_corruption.result | 2 + .../encrypted_page_corruption.test | 2 + .../mariabackup/innodb_redo_overwrite.result | 1 - .../mariabackup/innodb_redo_overwrite.test | 6 +- .../unencrypted_page_compressed.result | 2 + .../unencrypted_page_compressed.test | 2 + storage/innobase/buf/buf0buf.cc | 201 ++++++++------ storage/innobase/buf/buf0dblwr.cc | 93 ++++--- storage/innobase/buf/buf0lru.cc | 5 +- storage/innobase/buf/buf0rea.cc | 4 +- storage/innobase/fil/fil0fil.cc | 74 +++--- storage/innobase/fsp/fsp0file.cc | 216 +++++++++------ storage/innobase/fsp/fsp0sysspace.cc | 34 ++- storage/innobase/include/buf0buf.h | 20 +- storage/innobase/include/fil0fil.h | 15 +- storage/innobase/include/fsp0file.h | 11 +- storage/innobase/include/log0recv.h | 53 ++-- storage/innobase/log/log0recv.cc | 246 ++++++------------ storage/innobase/os/os0file.cc | 57 ++-- storage/innobase/srv/srv0start.cc | 82 +++--- 58 files changed, 799 insertions(+), 564 deletions(-) diff --git a/extra/innochecksum.cc b/extra/innochecksum.cc index e67bcc13f0b..74df94180e9 100644 --- a/extra/innochecksum.cc +++ b/extra/innochecksum.cc @@ -523,7 +523,7 @@ is_page_corrupted( normal method. */ if (is_encrypted && key_version != 0) { is_corrupted = use_full_crc32 - ? buf_page_is_corrupted(true, buf, flags) + ? !!buf_page_is_corrupted(false, buf, flags) : !fil_space_verify_crypt_checksum(buf, zip_size); if (is_corrupted && log_file) { diff --git a/extra/mariabackup/fil_cur.cc b/extra/mariabackup/fil_cur.cc index 6f31583072b..871cc7508c0 100644 --- a/extra/mariabackup/fil_cur.cc +++ b/extra/mariabackup/fil_cur.cc @@ -291,7 +291,7 @@ static bool page_is_corrupted(const byte *page, ulint page_no, } if (space->full_crc32()) { - return buf_page_is_corrupted(true, page, space->flags); + return buf_page_is_corrupted(false, page, space->flags); } /* Validate encrypted pages. The first page is never encrypted. @@ -324,7 +324,7 @@ static bool page_is_corrupted(const byte *page, ulint page_no, } if (page_type != FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED) { - return buf_page_is_corrupted(true, tmp_page, + return buf_page_is_corrupted(false, tmp_page, space->flags); } } @@ -344,11 +344,11 @@ static bool page_is_corrupted(const byte *page, ulint page_no, && cursor->zip_size) || page_type == FIL_PAGE_PAGE_COMPRESSED || page_type == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED - || buf_page_is_corrupted(true, tmp_page, + || buf_page_is_corrupted(false, tmp_page, space->flags)); } - return buf_page_is_corrupted(true, page, space->flags); + return buf_page_is_corrupted(false, page, space->flags); } PRAGMA_REENABLE_CHECK_STACK_FRAME diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc index fea69b6dbb0..13d56020b7c 100644 --- a/extra/mariabackup/xtrabackup.cc +++ b/extra/mariabackup/xtrabackup.cc @@ -3472,7 +3472,6 @@ static void xb_load_single_table_tablespace(const char *dirname, size_t dirlen = dirname == NULL ? 0 : strlen(dirname); size_t namelen = strlen(filname); ulint pathlen = dirname == NULL ? namelen + 1: dirlen + namelen + 2; - lsn_t flush_lsn; dberr_t err; fil_space_t *space; bool defer = false; @@ -3507,7 +3506,7 @@ static void xb_load_single_table_tablespace(const char *dirname, for (int i = 0; i < 10; i++) { file->m_defer = false; - err = file->validate_first_page(&flush_lsn); + err = file->validate_first_page(file->get_first_page()); if (file->m_defer) { if (defer_space_id) { @@ -3549,7 +3548,7 @@ static void xb_load_single_table_tablespace(const char *dirname, skip_node_page0 ? file->detach() : pfs_os_file_t(), 0, false, false); node->deferred= defer; - if (!space->read_page0()) + if (!space->read_page0(nullptr, true)) err = DB_CANNOT_OPEN_FILE; mysql_mutex_unlock(&fil_system.mutex); @@ -6176,8 +6175,10 @@ static bool xtrabackup_prepare_func(char** argv) goto error_cleanup; } + mysql_mutex_lock(&recv_sys.mutex); ok = fil_system.sys_space->open(false) && xtrabackup_apply_deltas(); + mysql_mutex_unlock(&recv_sys.mutex); xb_data_files_close(); diff --git a/mysql-test/suite/encryption/r/innodb-bad-key-change.result b/mysql-test/suite/encryption/r/innodb-bad-key-change.result index 1ca9d784d57..2efccbe9e9a 100644 --- a/mysql-test/suite/encryption/r/innodb-bad-key-change.result +++ b/mysql-test/suite/encryption/r/innodb-bad-key-change.result @@ -2,8 +2,9 @@ call mtr.add_suppression("Plugin 'file_key_management' init function returned er call mtr.add_suppression("Plugin 'file_key_management' registration.*failed"); call mtr.add_suppression("InnoDB: Table `test`\\.`t[12]` (has an unreadable root page|is corrupted)"); call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[12]\\.ibd' cannot be decrypted; key_version=1"); -call mtr.add_suppression("failed to read \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]"); +call mtr.add_suppression("InnoDB: Failed to read page [1-9][0-9]* from file '.*test/t[12]\\.ibd'"); call mtr.add_suppression("InnoDB: Encrypted page \\[page id: space=[1-9][0-9]*, page number=3\\] in file .*test.t1.ibd looks corrupted; key_version=1"); +call mtr.add_suppression("InnoDB: File '.*test/t[12]\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: Table `test`\\.`t[12]` is corrupted"); call mtr.add_suppression("File '.*mysql-test.std_data.keysbad3\\.txt' not found"); call mtr.add_suppression("\\[ERROR\\] InnoDB: Cannot decrypt \\[page id: space="); diff --git a/mysql-test/suite/encryption/r/innodb-bad-key-change2.result b/mysql-test/suite/encryption/r/innodb-bad-key-change2.result index b4552651ae6..064b878fe69 100644 --- a/mysql-test/suite/encryption/r/innodb-bad-key-change2.result +++ b/mysql-test/suite/encryption/r/innodb-bad-key-change2.result @@ -3,6 +3,8 @@ call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page n call mtr.add_suppression("InnoDB: Recovery failed to read page"); call mtr.add_suppression("Couldn't load plugins from 'file_key_management"); call mtr.add_suppression("InnoDB: Tablespace for table \`test\`.\`t1\` is set as discarded\\."); +call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("InnoDB: File '.*test/t1\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: Table `test`\\.`t1` is corrupted"); call mtr.add_suppression("InnoDB: Cannot delete tablespace .* because it is not found in the tablespace memory cache"); call mtr.add_suppression("InnoDB: ALTER TABLE `test`\\.`t1` DISCARD TABLESPACE failed to find tablespace"); diff --git a/mysql-test/suite/encryption/r/innodb-bad-key-change4.result b/mysql-test/suite/encryption/r/innodb-bad-key-change4.result index 5a3e275dda9..f2f652ab730 100644 --- a/mysql-test/suite/encryption/r/innodb-bad-key-change4.result +++ b/mysql-test/suite/encryption/r/innodb-bad-key-change4.result @@ -2,6 +2,8 @@ call mtr.add_suppression("InnoDB: Table `test`\\.`t1` (has an unreadable root pa call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t1\\.ibd' cannot be decrypted; key_version=1"); call mtr.add_suppression("InnoDB: Recovery failed to read page"); call mtr.add_suppression("Couldn't load plugins from 'file_key_management"); +call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("InnoDB: File '.*test/t1\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: Table `test`\\.`t1` is corrupted"); call mtr.add_suppression("\\[ERROR\\] InnoDB: Cannot decrypt \\[page id: space="); # restart: --plugin-load-add=file_key_management --file-key-management --file-key-management-filename=MYSQL_TEST_DIR/std_data/keys2.txt diff --git a/mysql-test/suite/encryption/r/innodb-compressed-blob.result b/mysql-test/suite/encryption/r/innodb-compressed-blob.result index f1b75b05219..41c9b3e58d5 100644 --- a/mysql-test/suite/encryption/r/innodb-compressed-blob.result +++ b/mysql-test/suite/encryption/r/innodb-compressed-blob.result @@ -1,7 +1,7 @@ call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[123]\\.ibd' cannot be decrypted; key_version=1"); call mtr.add_suppression("InnoDB: Recovery failed to read page"); call mtr.add_suppression("InnoDB: Unable to decompress ..test.t[12]\\.ibd\\[page id: space=[1-9][0-9]*, page number=[0-9]+\\]"); -call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed read of file '.*test/t[12]\\.ibd' page \\[page id: space=[1-9][0-9]*, page number=3\\]"); +call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t[12]\\.ibd'"); call mtr.add_suppression("InnoDB: File '.*test/t[12]\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: Table `test`\\.`t[12]` is corrupted"); # Restart mysqld --file-key-management-filename=keys2.txt diff --git a/mysql-test/suite/encryption/r/innodb-encryption-disable.result b/mysql-test/suite/encryption/r/innodb-encryption-disable.result index 179bc550617..1df5d7e504b 100644 --- a/mysql-test/suite/encryption/r/innodb-encryption-disable.result +++ b/mysql-test/suite/encryption/r/innodb-encryption-disable.result @@ -2,6 +2,8 @@ call mtr.add_suppression("InnoDB: Table `test`\\.`t[15]` (has an unreadable root call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[15]\\.ibd' cannot be decrypted\\."); call mtr.add_suppression("InnoDB: Recovery failed to read page"); call mtr.add_suppression("InnoDB: Encrypted page \\[page id: space=[1-9][0-9]*, page number=3\\] in file .*test.t[15].ibd looks corrupted; key_version=1"); +call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t[15]\\.ibd'"); +call mtr.add_suppression("InnoDB: File '.*test/t[15]\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: Table `test`\\.`t[15]` is corrupted"); call mtr.add_suppression("Couldn't load plugins from 'file_key_management"); # restart: --innodb-encrypt-tables=ON --plugin-load-add=file_key_management --file-key-management --file-key-management-filename=MYSQL_TEST_DIR/std_data/keys2.txt diff --git a/mysql-test/suite/encryption/r/innodb-force-corrupt.result b/mysql-test/suite/encryption/r/innodb-force-corrupt.result index ad75df952b3..0c1b52e9e37 100644 --- a/mysql-test/suite/encryption/r/innodb-force-corrupt.result +++ b/mysql-test/suite/encryption/r/innodb-force-corrupt.result @@ -1,7 +1,10 @@ call mtr.add_suppression("InnoDB: Table `test`\\.`t[13]` (has an unreadable root page|is corrupted)"); +call mtr.add_suppression("InnoDB: File '.*test/t[123]\\.ibd' is corrupted"); +call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t[13]\\.ibd'"); +call mtr.add_suppression("InnoDB: Failed to read page 6 from file '.*test/t2\\.ibd'"); call mtr.add_suppression("InnoDB: Encrypted page \\[page id: space=\\d+, page number=[36]\\] in file .*test.t[123]\\.ibd looks corrupted; key_version="); call mtr.add_suppression("\\[ERROR\\] InnoDB: We detected index corruption in an InnoDB type table"); -call mtr.add_suppression("\\[ERROR\\] (mysqld|mariadbd).*: Index for table 't2' is corrupt; try to repair it"); +call mtr.add_suppression("\\[ERROR\\] mariadbd.*: Index for table 't2' is corrupt; try to repair it"); SET GLOBAL innodb_file_per_table = ON; set global innodb_compression_algorithm = 1; # Create and populate tables to be corrupted diff --git a/mysql-test/suite/encryption/r/innodb-missing-key.result b/mysql-test/suite/encryption/r/innodb-missing-key.result index 6bacbfe78b2..a19056c37ed 100644 --- a/mysql-test/suite/encryption/r/innodb-missing-key.result +++ b/mysql-test/suite/encryption/r/innodb-missing-key.result @@ -2,6 +2,8 @@ call mtr.add_suppression("InnoDB: Table `test`\\.`t1` (has an unreadable root pa call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[123]\\.ibd' cannot be decrypted\\."); call mtr.add_suppression("InnoDB: Recovery failed to read page"); call mtr.add_suppression("InnoDB: Encrypted page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file .*test.t[12].ibd looks corrupted; key_version=1"); +call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("InnoDB: File '.*test/t1\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: Table `test`\\.`t1` is corrupted"); # Start server with keys2.txt # restart: --file-key-management-filename=MYSQL_TEST_DIR/std_data/keys2.txt diff --git a/mysql-test/suite/encryption/r/innodb-redo-badkey.result b/mysql-test/suite/encryption/r/innodb-redo-badkey.result index 34fd043a7bd..16035bd3b15 100644 --- a/mysql-test/suite/encryption/r/innodb-redo-badkey.result +++ b/mysql-test/suite/encryption/r/innodb-redo-badkey.result @@ -24,6 +24,7 @@ insert into t2 select * from t1; insert into t3 select * from t1; insert into t4 select * from t1; commit; +set global innodb_log_checkpoint_now=on; SET GLOBAL innodb_flush_log_at_trx_commit=1; begin; update t1 set c = repeat('secret3', 20); diff --git a/mysql-test/suite/encryption/t/corrupted_during_recovery.test b/mysql-test/suite/encryption/t/corrupted_during_recovery.test index d4048997a13..ea7ad218936 100644 --- a/mysql-test/suite/encryption/t/corrupted_during_recovery.test +++ b/mysql-test/suite/encryption/t/corrupted_during_recovery.test @@ -5,11 +5,11 @@ call mtr.add_suppression("InnoDB: Plugin initialization aborted"); call mtr.add_suppression("Plugin 'InnoDB' init function returned error"); call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed"); -call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed read of file '.*test.t1\\.ibd' page"); call mtr.add_suppression("InnoDB: Failed to read page [123] from file '.*test.t1\\.ibd': Table is encrypted but decrypt failed"); call mtr.add_suppression("InnoDB: The page \\[page id: space=\\d+, page number=3\\] in file '.*test.t1\\.ibd' cannot be decrypted"); +call mtr.add_suppression("InnoDB: File '.*test/t1\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: Table in tablespace \\d+ encrypted. However key management plugin or used key_version \\d+ is not found or used encryption algorithm or method does not match. Can't continue opening the table."); -call mtr.add_suppression("InnoDB: (Unable to apply log to|Discarding log for) corrupted page "); +call mtr.add_suppression("InnoDB: Unable to apply log to corrupted page "); --enable_query_log let INNODB_PAGE_SIZE=`select @@innodb_page_size`; diff --git a/mysql-test/suite/encryption/t/innodb-bad-key-change.test b/mysql-test/suite/encryption/t/innodb-bad-key-change.test index 30beff4bd85..f08c40f67c3 100644 --- a/mysql-test/suite/encryption/t/innodb-bad-key-change.test +++ b/mysql-test/suite/encryption/t/innodb-bad-key-change.test @@ -12,8 +12,9 @@ call mtr.add_suppression("Plugin 'file_key_management' init function returned er call mtr.add_suppression("Plugin 'file_key_management' registration.*failed"); call mtr.add_suppression("InnoDB: Table `test`\\.`t[12]` (has an unreadable root page|is corrupted)"); call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[12]\\.ibd' cannot be decrypted; key_version=1"); -call mtr.add_suppression("failed to read \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]"); +call mtr.add_suppression("InnoDB: Failed to read page [1-9][0-9]* from file '.*test/t[12]\\.ibd'"); call mtr.add_suppression("InnoDB: Encrypted page \\[page id: space=[1-9][0-9]*, page number=3\\] in file .*test.t1.ibd looks corrupted; key_version=1"); +call mtr.add_suppression("InnoDB: File '.*test/t[12]\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: Table `test`\\.`t[12]` is corrupted"); call mtr.add_suppression("File '.*mysql-test.std_data.keysbad3\\.txt' not found"); # for innodb_checksum_algorithm=full_crc32 only diff --git a/mysql-test/suite/encryption/t/innodb-bad-key-change2.test b/mysql-test/suite/encryption/t/innodb-bad-key-change2.test index ad252b6c92f..b0378585e00 100644 --- a/mysql-test/suite/encryption/t/innodb-bad-key-change2.test +++ b/mysql-test/suite/encryption/t/innodb-bad-key-change2.test @@ -14,6 +14,8 @@ call mtr.add_suppression("InnoDB: Recovery failed to read page"); # Suppression for builds where file_key_management plugin is linked statically call mtr.add_suppression("Couldn't load plugins from 'file_key_management"); call mtr.add_suppression("InnoDB: Tablespace for table \`test\`.\`t1\` is set as discarded\\."); +call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("InnoDB: File '.*test/t1\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: Table `test`\\.`t1` is corrupted"); call mtr.add_suppression("InnoDB: Cannot delete tablespace .* because it is not found in the tablespace memory cache"); call mtr.add_suppression("InnoDB: ALTER TABLE `test`\\.`t1` DISCARD TABLESPACE failed to find tablespace"); diff --git a/mysql-test/suite/encryption/t/innodb-bad-key-change4.test b/mysql-test/suite/encryption/t/innodb-bad-key-change4.test index 759f4e58280..23f726d3d58 100644 --- a/mysql-test/suite/encryption/t/innodb-bad-key-change4.test +++ b/mysql-test/suite/encryption/t/innodb-bad-key-change4.test @@ -12,6 +12,8 @@ call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page n call mtr.add_suppression("InnoDB: Recovery failed to read page"); # Suppression for builds where file_key_management plugin is linked statically call mtr.add_suppression("Couldn't load plugins from 'file_key_management"); +call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("InnoDB: File '.*test/t1\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: Table `test`\\.`t1` is corrupted"); # for innodb_checksum_algorithm=full_crc32 only call mtr.add_suppression("\\[ERROR\\] InnoDB: Cannot decrypt \\[page id: space="); diff --git a/mysql-test/suite/encryption/t/innodb-compressed-blob.test b/mysql-test/suite/encryption/t/innodb-compressed-blob.test index a47db8e64e2..097b0fb4602 100644 --- a/mysql-test/suite/encryption/t/innodb-compressed-blob.test +++ b/mysql-test/suite/encryption/t/innodb-compressed-blob.test @@ -7,7 +7,7 @@ call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[123]\\.ibd' cannot be decrypted; key_version=1"); call mtr.add_suppression("InnoDB: Recovery failed to read page"); call mtr.add_suppression("InnoDB: Unable to decompress ..test.t[12]\\.ibd\\[page id: space=[1-9][0-9]*, page number=[0-9]+\\]"); -call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed read of file '.*test/t[12]\\.ibd' page \\[page id: space=[1-9][0-9]*, page number=3\\]"); +call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t[12]\\.ibd'"); call mtr.add_suppression("InnoDB: File '.*test/t[12]\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: Table `test`\\.`t[12]` is corrupted"); diff --git a/mysql-test/suite/encryption/t/innodb-encryption-disable.test b/mysql-test/suite/encryption/t/innodb-encryption-disable.test index 939ad2b5547..20624ba9fd7 100644 --- a/mysql-test/suite/encryption/t/innodb-encryption-disable.test +++ b/mysql-test/suite/encryption/t/innodb-encryption-disable.test @@ -11,6 +11,8 @@ call mtr.add_suppression("InnoDB: Table `test`\\.`t[15]` (has an unreadable root call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[15]\\.ibd' cannot be decrypted\\."); call mtr.add_suppression("InnoDB: Recovery failed to read page"); call mtr.add_suppression("InnoDB: Encrypted page \\[page id: space=[1-9][0-9]*, page number=3\\] in file .*test.t[15].ibd looks corrupted; key_version=1"); +call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t[15]\\.ibd'"); +call mtr.add_suppression("InnoDB: File '.*test/t[15]\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: Table `test`\\.`t[15]` is corrupted"); # Suppression for builds where file_key_management plugin is linked statically diff --git a/mysql-test/suite/encryption/t/innodb-force-corrupt.test b/mysql-test/suite/encryption/t/innodb-force-corrupt.test index 51771f1e14b..e0a344e16c2 100644 --- a/mysql-test/suite/encryption/t/innodb-force-corrupt.test +++ b/mysql-test/suite/encryption/t/innodb-force-corrupt.test @@ -8,9 +8,12 @@ -- source include/not_embedded.inc call mtr.add_suppression("InnoDB: Table `test`\\.`t[13]` (has an unreadable root page|is corrupted)"); +call mtr.add_suppression("InnoDB: File '.*test/t[123]\\.ibd' is corrupted"); +call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t[13]\\.ibd'"); +call mtr.add_suppression("InnoDB: Failed to read page 6 from file '.*test/t2\\.ibd'"); call mtr.add_suppression("InnoDB: Encrypted page \\[page id: space=\\d+, page number=[36]\\] in file .*test.t[123]\\.ibd looks corrupted; key_version="); call mtr.add_suppression("\\[ERROR\\] InnoDB: We detected index corruption in an InnoDB type table"); -call mtr.add_suppression("\\[ERROR\\] (mysqld|mariadbd).*: Index for table 't2' is corrupt; try to repair it"); +call mtr.add_suppression("\\[ERROR\\] mariadbd.*: Index for table 't2' is corrupt; try to repair it"); SET GLOBAL innodb_file_per_table = ON; set global innodb_compression_algorithm = 1; diff --git a/mysql-test/suite/encryption/t/innodb-missing-key.test b/mysql-test/suite/encryption/t/innodb-missing-key.test index e5bee99fee2..a0367b8f211 100644 --- a/mysql-test/suite/encryption/t/innodb-missing-key.test +++ b/mysql-test/suite/encryption/t/innodb-missing-key.test @@ -11,6 +11,8 @@ call mtr.add_suppression("InnoDB: Table `test`\\.`t1` (has an unreadable root pa call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[123]\\.ibd' cannot be decrypted\\."); call mtr.add_suppression("InnoDB: Recovery failed to read page"); call mtr.add_suppression("InnoDB: Encrypted page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file .*test.t[12].ibd looks corrupted; key_version=1"); +call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("InnoDB: File '.*test/t1\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: Table `test`\\.`t1` is corrupted"); --echo # Start server with keys2.txt diff --git a/mysql-test/suite/encryption/t/innodb-redo-badkey.test b/mysql-test/suite/encryption/t/innodb-redo-badkey.test index 393ca4ad375..ed92a267a91 100644 --- a/mysql-test/suite/encryption/t/innodb-redo-badkey.test +++ b/mysql-test/suite/encryption/t/innodb-redo-badkey.test @@ -54,6 +54,8 @@ insert into t3 select * from t1; insert into t4 select * from t1; commit; +set global innodb_log_checkpoint_now=on; + --source ../../suite/innodb/include/no_checkpoint_start.inc # diff --git a/mysql-test/suite/innodb/r/corrupted_during_recovery.result b/mysql-test/suite/innodb/r/corrupted_during_recovery.result index 2cab795f6a1..593943b4951 100644 --- a/mysql-test/suite/innodb/r/corrupted_during_recovery.result +++ b/mysql-test/suite/innodb/r/corrupted_during_recovery.result @@ -8,8 +8,10 @@ INSERT INTO t2 VALUES(1); # Corrupt the pages SELECT * FROM t1; ERROR 42000: Unknown storage engine 'InnoDB' +FOUND 1 /InnoDB: Page \[page id: space=[1-9][0-9]*, page number=3\] log sequence number 1311768467463790320 is in the future!/ in mysqld.1.err SELECT * FROM t1; -Got one of the listed errors +a +1 SELECT * FROM t2; a 1 @@ -27,7 +29,7 @@ SET GLOBAL innodb_flush_log_at_trx_commit=1; DELETE FROM t1 WHERE pk=3; # Kill the server disconnect con1; -# Corrupt the pages +# Corrupt the page SELECT * FROM t1; pk 1 diff --git a/mysql-test/suite/innodb/r/doublewrite.result b/mysql-test/suite/innodb/r/doublewrite.result index 65ff203a28e..667c65d7b7b 100644 --- a/mysql-test/suite/innodb/r/doublewrite.result +++ b/mysql-test/suite/innodb/r/doublewrite.result @@ -21,8 +21,8 @@ connection default; flush table t1 for export; # Kill the server # restart -FOUND 1 /InnoDB: Restoring page \[page id: space=[1-9][0-9]*, page number=0\] of datafile/ in mysqld.1.err -FOUND 1 /InnoDB: Recovered page \[page id: space=[1-9][0-9]*, page number=3\]/ in mysqld.1.err +FOUND 1 /InnoDB: Recovered page \[page id: space=[1-9][0-9]*, page number=0\]/ in mysqld.1.err +# restart XA ROLLBACK 'x'; check table t1; Table Op Msg_type Msg_text @@ -44,7 +44,7 @@ connection default; flush table t1 for export; # Kill the server # restart -FOUND 1 /InnoDB: Restoring page \[page id: space=[1-9][0-9]*, page number=0\] of datafile/ in mysqld.1.err +FOUND 4 /InnoDB: Recovered page \[page id: space=[1-9][0-9]*, page number=[03]\]/ in mysqld.1.err XA ROLLBACK 'x'; check table t1; Table Op Msg_type Msg_text diff --git a/mysql-test/suite/innodb/r/doublewrite_debug.result b/mysql-test/suite/innodb/r/doublewrite_debug.result index aa141c18a6e..a743217f34e 100644 --- a/mysql-test/suite/innodb/r/doublewrite_debug.result +++ b/mysql-test/suite/innodb/r/doublewrite_debug.result @@ -37,7 +37,7 @@ set global innodb_buf_flush_list_now = 1; # Make the 1st page (page_no=0) and 2nd page (page_no=1) # of the system tablespace all zeroes. # restart -FOUND 1 /InnoDB: Restoring page \[page id: space=0, page number=0\] of datafile/ in mysqld.1.err +FOUND 1 /InnoDB: Recovered page \[page id: space=0, page number=0\]/ in mysqld.1.err FOUND 1 /InnoDB: Recovered page \[page id: space=0, page number=1\]/ in mysqld.1.err check table t1; Table Op Msg_type Msg_text @@ -66,7 +66,7 @@ set global innodb_buf_flush_list_now = 1; # Kill the server # Corrupt the 1st page (page_no=0) and 2nd page of the system tablespace. # restart -FOUND 2 /InnoDB: Restoring page \[page id: space=0, page number=0\] of datafile/ in mysqld.1.err +FOUND 2 /InnoDB: Recovered page \[page id: space=0, page number=0\]/ in mysqld.1.err FOUND 2 /InnoDB: Recovered page \[page id: space=0, page number=1\]/ in mysqld.1.err check table t1; Table Op Msg_type Msg_text diff --git a/mysql-test/suite/innodb/r/innodb-wl5522-debug.result b/mysql-test/suite/innodb/r/innodb-wl5522-debug.result index 5770ebb27db..6b7bb9b9584 100644 --- a/mysql-test/suite/innodb/r/innodb-wl5522-debug.result +++ b/mysql-test/suite/innodb/r/innodb-wl5522-debug.result @@ -9,8 +9,8 @@ call mtr.add_suppression("InnoDB: Page for tablespace "); call mtr.add_suppression("InnoDB: Invalid FSP_SPACE_FLAGS="); call mtr.add_suppression("InnoDB: Unknown index id .* on page"); call mtr.add_suppression("InnoDB: Cannot save statistics for table `test`\\.`t1` because the \\.ibd file is missing"); -call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed read of file '.*ibdata1' page"); -call mtr.add_suppression("InnoDB: File '.*ibdata1' is corrupted"); +call mtr.add_suppression("InnoDB: Failed to read page \\d+ from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("InnoDB: File '.*(ibdata1|t1\\.ibd)' is corrupted"); FLUSH TABLES; SET GLOBAL innodb_file_per_table = 1; CREATE TABLE t1 (c1 INT) ENGINE = InnoDB; diff --git a/mysql-test/suite/innodb/r/page_id_innochecksum.result b/mysql-test/suite/innodb/r/page_id_innochecksum.result index bde986c07ef..4ffbf2f1453 100644 --- a/mysql-test/suite/innodb/r/page_id_innochecksum.result +++ b/mysql-test/suite/innodb/r/page_id_innochecksum.result @@ -6,3 +6,4 @@ FOUND 1 /page id mismatch/ in result.log InnoDB 0 transactions not purged drop table t1; call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd': Page read from tablespace is corrupted\\."); +call mtr.add_suppression("InnoDB: File '.*t1\\.ibd' is corrupted"); diff --git a/mysql-test/suite/innodb/r/undo_space_dblwr.result b/mysql-test/suite/innodb/r/undo_space_dblwr.result index 2172ce53cb7..d7c1cb125a9 100644 --- a/mysql-test/suite/innodb/r/undo_space_dblwr.result +++ b/mysql-test/suite/innodb/r/undo_space_dblwr.result @@ -12,7 +12,7 @@ set global innodb_fil_make_page_dirty_debug = 1; SET GLOBAL innodb_buf_flush_list_now = 1; # Kill the server # restart: --debug_dbug=+d,ib_log_checkpoint_avoid_hard --innodb_flush_sync=0 -FOUND 1 /Restoring page \[page id: space=1, page number=0\] of datafile '.*undo001' from the doublewrite buffer./ in mysqld.1.err +FOUND 1 /Recovered page \[page id: space=1, page number=0\] to '.*undo001' from the doublewrite buffer\./ in mysqld.1.err check table t1; Table Op Msg_type Msg_text test.t1 check status OK diff --git a/mysql-test/suite/innodb/t/corrupted_during_recovery.test b/mysql-test/suite/innodb/t/corrupted_during_recovery.test index 5b67bc3df1d..42524976dd7 100644 --- a/mysql-test/suite/innodb/t/corrupted_during_recovery.test +++ b/mysql-test/suite/innodb/t/corrupted_during_recovery.test @@ -4,15 +4,18 @@ call mtr.add_suppression("InnoDB: Plugin initialization aborted"); call mtr.add_suppression("Plugin 'InnoDB' init function returned error"); call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed"); -call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed read of file '.*test.t1\\.ibd' page"); -call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test.t1\\.ibd': Page read from tablespace is corrupted."); -call mtr.add_suppression("InnoDB: (Unable to apply log to|Discarding log for) corrupted page .*, page number=3\\]"); +call mtr.add_suppression("InnoDB: Unable to apply log to corrupted page 3 in file .*test.t1\\.ibd"); call mtr.add_suppression("InnoDB: Table `test`.`t1` is corrupted. Please drop the table and recreate."); call mtr.add_suppression("InnoDB: File '.*test/t1\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: A long wait .* was observed for dict_sys"); +call mtr.add_suppression("InnoDB: Page \\[page id: space=[1-9][0-9]*, page number=3\\] log sequence number 1311768467463790320 is in the future!"); +call mtr.add_suppression("InnoDB: Your database may be corrupt"); +call mtr.add_suppression("InnoDB: MySQL-8\\.0 tablespace in .*test/t2\\.ibd"); +call mtr.add_suppression("InnoDB: Restart in MySQL for migration/recovery\\."); --enable_query_log let INNODB_PAGE_SIZE=`select @@innodb_page_size`; +let ALGO=`select @@innodb_checksum_algorithm`; CREATE TABLE t1(a BIGINT PRIMARY KEY) ENGINE=InnoDB; INSERT INTO t1 VALUES(1); # Force a redo log checkpoint. @@ -30,15 +33,32 @@ INSERT INTO t2 VALUES(1); --echo # Corrupt the pages perl; +do "$ENV{MTR_SUITE_DIR}/include/crc32.pl"; +my $polynomial = 0x82f63b78; # CRC-32C +my $algo = $ENV{ALGO}; my $ps = $ENV{INNODB_PAGE_SIZE}; - my $file = "$ENV{MYSQLD_DATADIR}/test/t1.ibd"; open(FILE, "+<$file") || die "Unable to open $file"; binmode FILE; sysseek(FILE, 3*$ps, 0) || die "Unable to seek $file\n"; die "Unable to read $file" unless sysread(FILE, $page, $ps) == $ps; -# Replace the a=1 with a=0. -$page =~ s/\x80\x0\x0\x0\x0\x0\x0\x1/\x80\x0\x0\x0\x0\x0\x0\x0/; +# Assign a future FIL_PAGE_LSN +substr($page, 16, 8) = pack("NN", 0x12345678, 0x9abcdef0); +substr($page, $ps - 8, 8) = pack("NN", 0x9abcdef0, 0x9abcdef0); +if ($algo =~ /full_crc32/) +{ + my $ck = mycrc32(substr($page, 0, $ps - 4), 0, $polynomial); + substr($page, $ps - 4, 4) = pack("N", $ck); +} +else +{ + # Replace the innodb_checksum_algorithm=crc32 checksum + my $ck= pack("N", + mycrc32(substr($page, 4, 22), 0, $polynomial) ^ + mycrc32(substr($page, 38, $ps - 38 - 8), 0, $polynomial)); + substr ($page, 0, 4) = $ck; + substr ($page, $ps - 8, 4) = $ck; +} sysseek(FILE, 3*$ps, 0) || die "Unable to seek $file\n"; syswrite(FILE, $page, $ps)==$ps || die "Unable to write $file\n"; close FILE or die "close"; @@ -46,20 +66,23 @@ close FILE or die "close"; $file = "$ENV{MYSQLD_DATADIR}/test/t2.ibd"; open(FILE, "+<$file") || die "Unable to open $file"; binmode FILE; -# Corrupt pages 1 to 3. MLOG_INIT_FILE_PAGE2 should protect us! -# Unfortunately, we are not immune to page 0 corruption. -seek (FILE, $ps, SEEK_SET) or die "seek"; -print FILE chr(0xff) x ($ps * 3); +# Corrupt pages 0 to 3. INIT_PAGE should protect us! +print FILE chr(0xff) x ($ps * 4); close FILE or die "close"; EOF --source include/start_mysqld.inc --error ER_UNKNOWN_STORAGE_ENGINE SELECT * FROM t1; + +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err; +let SEARCH_PATTERN=InnoDB: Page \\[page id: space=[1-9][0-9]*, page number=3\\] log sequence number 1311768467463790320 is in the future!; +--source include/search_pattern_in_file.inc + let $restart_parameters=--innodb_force_recovery=1; --source include/restart_mysqld.inc ---error ER_NO_SUCH_TABLE_IN_ENGINE,ER_TABLE_CORRUPT +--error 0,ER_NO_SUCH_TABLE_IN_ENGINE SELECT * FROM t1; SELECT * FROM t2; CHECK TABLE t2; @@ -81,13 +104,36 @@ DELETE FROM t1 WHERE pk=3; --source ../include/no_checkpoint_end.inc disconnect con1; ---echo # Corrupt the pages +--echo # Corrupt the page perl; +do "$ENV{MTR_SUITE_DIR}/include/crc32.pl"; +my $polynomial = 0x82f63b78; # CRC-32C +my $algo = $ENV{ALGO}; +my $ps = $ENV{INNODB_PAGE_SIZE}; my $file = "$ENV{MYSQLD_DATADIR}/test/t1.ibd"; open(FILE, "+<$file") || die "Unable to open $file"; binmode FILE; -seek (FILE, $ENV{INNODB_PAGE_SIZE} * 3, SEEK_SET) or die "seek"; -print FILE "junk"; +sysseek(FILE, $ps * 3, SEEK_SET) or die "seek"; +sysread(FILE, $page, $ps)==$ps||die "Unable to read $file\n"; +# Set FIL_PAGE_LSN to the maximum +substr($page, 16, 8) = chr(255) x 8; +substr($page, $ps - 8, 8) = chr(255) x 8; +if ($algo =~ /full_crc32/) +{ + my $ck = mycrc32(substr($page, 0, $ps - 4), 0, $polynomial); + substr($page, $ps - 4, 4) = pack("N", $ck); +} +else +{ + # Replace the innodb_checksum_algorithm=crc32 checksum + my $ck= pack("N", + mycrc32(substr($page, 4, 22), 0, $polynomial) ^ + mycrc32(substr($page_, 38, $ps - 38 - 8), 0, $polynomial)); + substr ($page, 0, 4) = $ck; + substr ($page, $ps - 8, 4) = $ck; +} +sysseek(FILE, $ps * 3, SEEK_SET) or die "seek"; +syswrite(FILE, $page); close FILE or die "close"; EOF --source include/start_mysqld.inc diff --git a/mysql-test/suite/innodb/t/doublewrite.test b/mysql-test/suite/innodb/t/doublewrite.test index 7e38851facb..faafbb7cbac 100644 --- a/mysql-test/suite/innodb/t/doublewrite.test +++ b/mysql-test/suite/innodb/t/doublewrite.test @@ -18,6 +18,9 @@ call mtr.add_suppression("InnoDB: Checksum mismatch in datafile: "); call mtr.add_suppression("InnoDB: Inconsistent tablespace ID in .*t1\\.ibd"); call mtr.add_suppression("\\[Warning\\] Found 1 prepared XA transactions"); call mtr.add_suppression("InnoDB: Header page consists of zero bytes in datafile:"); +call mtr.add_suppression("InnoDB: Page \\[page id: space=[1-9][0-9]*, page number=3\\] log sequence number 18446744073709551615 is in the future!"); +call mtr.add_suppression("InnoDB: Your database may be corrupt or you may have copied the InnoDB tablespace but not the ib_logfile0"); +call mtr.add_suppression("InnoDB: Plugin initialization aborted"); --enable_query_log let INNODB_PAGE_SIZE=`select @@innodb_page_size`; @@ -74,7 +77,26 @@ syswrite(FILE, chr(0) x ($page_size/2)); sysseek(FILE, 3*$page_size, 0); sysread(FILE, $page, $page_size)==$page_size||die "Unable to read $name\n"; sysseek(FILE, 3*$page_size, 0)||die "Unable to seek $fname\n"; -syswrite(FILE, chr(0) x ($page_size/2)); +my $corrupted = $page; +# Set FIL_PAGE_LSN to the maximum +substr($corrupted, 16, 8) = chr(255) x 8; +substr($corrupted, $page_size - 8, 8) = chr(255) x 8; +if ($algo =~ /full_crc32/) +{ + my $ck = mycrc32(substr($corrupted, 0, $page_size - 4), 0, $polynomial); + substr($corrupted, $page_size - 4, 4) = pack("N", $ck); +} +else +{ + # Replace the innodb_checksum_algorithm=crc32 checksum + my $ck= pack("N", + mycrc32(substr($corrupted, 4, 22), 0, $polynomial) ^ + mycrc32(substr($corrupted_, 38, $page_size - 38 - 8), 0, + $polynomial)); + substr ($corrupted, 0, 4) = $ck; + substr ($corrupted, $page_size - 8, 4) = $ck; +} +syswrite(FILE, $corrupted); close FILE; # Change the flag offset of page 0 in doublewrite buffer @@ -116,10 +138,28 @@ die "Did not find the page in the doublewrite buffer ($d1,$d2)\n"; EOF --source include/start_mysqld.inc -let SEARCH_PATTERN=InnoDB: Restoring page \[page id: space=[1-9][0-9]*, page number=0\] of datafile; +let SEARCH_PATTERN=InnoDB: Recovered page \\[page id: space=[1-9][0-9]*, page number=0\\]; --source include/search_pattern_in_file.inc -let SEARCH_PATTERN=InnoDB: Recovered page \[page id: space=[1-9][0-9]*, page number=3\]; +let SEARCH_PATTERN=InnoDB: The log was only scanned up to \\d+, while the current LSN at the time of the latest checkpoint \\d+ was 0 and the maximum LSN on a data page was 18446744073709551615! --source include/search_pattern_in_file.inc +--error ER_XAER_NOTA +XA ROLLBACK 'x'; +let $shutdown_timeout=0; +--source include/shutdown_mysqld.inc +let $shutdown_timeout=; +# Corrupt the file in a better way. +perl; +use IO::Handle; +my $fname= "$ENV{'MYSQLD_DATADIR'}test/t1.ibd"; +my $page_size = $ENV{INNODB_PAGE_SIZE}; +open(FILE, "+<", $fname) or die; +sysseek(FILE, ($page_size/2), 0); +syswrite(FILE, chr(0) x ($page_size/2)); +sysseek(FILE, 3*$page_size, 0); +syswrite(FILE, chr(0) x ($page_size/2)); +close FILE; +EOF +--source include/start_mysqld.inc XA ROLLBACK 'x'; check table t1; select f1, f2 from t1; @@ -147,7 +187,7 @@ close FILE; EOF --source include/start_mysqld.inc -let SEARCH_PATTERN=InnoDB: Restoring page \[page id: space=[1-9][0-9]*, page number=0\] of datafile; +let SEARCH_PATTERN=InnoDB: Recovered page \\[page id: space=[1-9][0-9]*, page number=[03]\\]; --source include/search_pattern_in_file.inc XA ROLLBACK 'x'; check table t1; diff --git a/mysql-test/suite/innodb/t/doublewrite_debug.test b/mysql-test/suite/innodb/t/doublewrite_debug.test index b8dcd5068ef..b207823e3d1 100644 --- a/mysql-test/suite/innodb/t/doublewrite_debug.test +++ b/mysql-test/suite/innodb/t/doublewrite_debug.test @@ -81,10 +81,10 @@ EOF let $restart_parameters=; --source include/start_mysqld.inc -let SEARCH_PATTERN=InnoDB: Restoring page \[page id: space=0, page number=0\] of datafile; +let SEARCH_PATTERN=InnoDB: Recovered page \\[page id: space=0, page number=0\\]; --source include/search_pattern_in_file.inc -let SEARCH_PATTERN=InnoDB: Recovered page \[page id: space=0, page number=1\]; +let SEARCH_PATTERN=InnoDB: Recovered page \\[page id: space=0, page number=1\\]; --source include/search_pattern_in_file.inc check table t1; @@ -129,10 +129,10 @@ EOF let $restart_parameters=; --source include/start_mysqld.inc -let SEARCH_PATTERN=InnoDB: Restoring page \[page id: space=0, page number=0\] of datafile; +let SEARCH_PATTERN=InnoDB: Recovered page \\[page id: space=0, page number=0\\]; --source include/search_pattern_in_file.inc -let SEARCH_PATTERN=InnoDB: Recovered page \[page id: space=0, page number=1\]; +let SEARCH_PATTERN=InnoDB: Recovered page \\[page id: space=0, page number=1\\]; --source include/search_pattern_in_file.inc check table t1; diff --git a/mysql-test/suite/innodb/t/innodb-wl5522-debug.test b/mysql-test/suite/innodb/t/innodb-wl5522-debug.test index 34f36034353..04e7b053ce0 100644 --- a/mysql-test/suite/innodb/t/innodb-wl5522-debug.test +++ b/mysql-test/suite/innodb/t/innodb-wl5522-debug.test @@ -29,8 +29,8 @@ call mtr.add_suppression("InnoDB: Page for tablespace "); call mtr.add_suppression("InnoDB: Invalid FSP_SPACE_FLAGS="); call mtr.add_suppression("InnoDB: Unknown index id .* on page"); call mtr.add_suppression("InnoDB: Cannot save statistics for table `test`\\.`t1` because the \\.ibd file is missing"); -call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed read of file '.*ibdata1' page"); -call mtr.add_suppression("InnoDB: File '.*ibdata1' is corrupted"); +call mtr.add_suppression("InnoDB: Failed to read page \\d+ from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("InnoDB: File '.*(ibdata1|t1\\.ibd)' is corrupted"); FLUSH TABLES; let MYSQLD_DATADIR =`SELECT @@datadir`; diff --git a/mysql-test/suite/innodb/t/innodb_bug14147491.test b/mysql-test/suite/innodb/t/innodb_bug14147491.test index 10f3c98be9e..d954f2fadea 100644 --- a/mysql-test/suite/innodb/t/innodb_bug14147491.test +++ b/mysql-test/suite/innodb/t/innodb_bug14147491.test @@ -9,7 +9,7 @@ --disable_query_log call mtr.add_suppression("InnoDB: Table `test`\\.`t1` is corrupted\\. Please drop the table and recreate\\."); -call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed read of file '.*test.t1\\.ibd' page"); +call mtr.add_suppression("InnoDB: Failed to read page [1-9][0-9]* from file '.*test.t1\\.ibd'"); call mtr.add_suppression("InnoDB: We detected index corruption in an InnoDB type table"); call mtr.add_suppression("Index for table 't1' is corrupt; try to repair it"); call mtr.add_suppression("InnoDB: File '.*test/t1\\.ibd' is corrupted"); diff --git a/mysql-test/suite/innodb/t/leaf_page_corrupted_during_recovery.test b/mysql-test/suite/innodb/t/leaf_page_corrupted_during_recovery.test index 21d5336528a..026be74373f 100644 --- a/mysql-test/suite/innodb/t/leaf_page_corrupted_during_recovery.test +++ b/mysql-test/suite/innodb/t/leaf_page_corrupted_during_recovery.test @@ -2,9 +2,8 @@ --source include/have_debug.inc --disable_query_log -call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed read of file '.*test.t1\\.ibd' page"); call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to read page 19 from file '.*test.t1\\.ibd': Page read from tablespace is corrupted\\."); -call mtr.add_suppression("InnoDB: (Unable to apply log to|Discarding log for) corrupted page .*, page number=19\\]"); +call mtr.add_suppression("InnoDB: Unable to apply log to corrupted page 19 in file .*t1\\.ibd"); call mtr.add_suppression("\\[ERROR\\] InnoDB: Plugin initialization aborted at srv0start\\.cc.* with error Data structure corruption"); call mtr.add_suppression("\\[ERROR\\] Plugin 'InnoDB' (init function|registration)"); call mtr.add_suppression("\\[ERROR\\] InnoDB: We detected index corruption"); diff --git a/mysql-test/suite/innodb/t/page_id_innochecksum.test b/mysql-test/suite/innodb/t/page_id_innochecksum.test index 9d8114d1720..09523cccd1f 100644 --- a/mysql-test/suite/innodb/t/page_id_innochecksum.test +++ b/mysql-test/suite/innodb/t/page_id_innochecksum.test @@ -66,5 +66,6 @@ let $restart_parameters=--innodb-force-recovery=1; --source include/wait_all_purged.inc drop table t1; call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd': Page read from tablespace is corrupted\\."); +call mtr.add_suppression("InnoDB: File '.*t1\\.ibd' is corrupted"); let $restart_parameters=; --source include/restart_mysqld.inc diff --git a/mysql-test/suite/innodb/t/undo_space_dblwr.test b/mysql-test/suite/innodb/t/undo_space_dblwr.test index 4cf4d3b8b6d..33e8ed9d651 100644 --- a/mysql-test/suite/innodb/t/undo_space_dblwr.test +++ b/mysql-test/suite/innodb/t/undo_space_dblwr.test @@ -39,7 +39,7 @@ EOF --source include/start_mysqld.inc let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err; -let SEARCH_PATTERN= Restoring page \[page id: space=1, page number=0\] of datafile '.*undo001' from the doublewrite buffer.; +let SEARCH_PATTERN= Recovered page \\[page id: space=1, page number=0\\] to '.*undo001' from the doublewrite buffer\\.; --source include/search_pattern_in_file.inc check table t1; diff --git a/mysql-test/suite/innodb_zip/r/wl5522_debug_zip.result b/mysql-test/suite/innodb_zip/r/wl5522_debug_zip.result index dadf1117f7e..5ce6affeb0c 100644 --- a/mysql-test/suite/innodb_zip/r/wl5522_debug_zip.result +++ b/mysql-test/suite/innodb_zip/r/wl5522_debug_zip.result @@ -9,8 +9,8 @@ call mtr.add_suppression("InnoDB: The error means"); call mtr.add_suppression("InnoDB: Cannot open datafile .*t1\\.ibd"); call mtr.add_suppression("InnoDB: Ignoring tablespace for test/t1 "); call mtr.add_suppression("InnoDB: Cannot save statistics for table `test`\\.`t1` because the \\.ibd file is missing"); -call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed read of file '.*ibdata1' page"); -call mtr.add_suppression("InnoDB: File '.*ibdata1' is corrupted"); +call mtr.add_suppression("InnoDB: Failed to read page \\d+ from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("InnoDB: File '.*(ibdata1|t1\\.ibd)' is corrupted"); FLUSH TABLES; SET SESSION innodb_strict_mode=1; CREATE TABLE t1 (c1 INT) ENGINE = Innodb diff --git a/mysql-test/suite/innodb_zip/t/wl5522_debug_zip.test b/mysql-test/suite/innodb_zip/t/wl5522_debug_zip.test index b46cc3a2b06..235f74bcc1d 100644 --- a/mysql-test/suite/innodb_zip/t/wl5522_debug_zip.test +++ b/mysql-test/suite/innodb_zip/t/wl5522_debug_zip.test @@ -25,8 +25,8 @@ call mtr.add_suppression("InnoDB: The error means"); call mtr.add_suppression("InnoDB: Cannot open datafile .*t1\\.ibd"); call mtr.add_suppression("InnoDB: Ignoring tablespace for test/t1 "); call mtr.add_suppression("InnoDB: Cannot save statistics for table `test`\\.`t1` because the \\.ibd file is missing"); -call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed read of file '.*ibdata1' page"); -call mtr.add_suppression("InnoDB: File '.*ibdata1' is corrupted"); +call mtr.add_suppression("InnoDB: Failed to read page \\d+ from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("InnoDB: File '.*(ibdata1|t1\\.ibd)' is corrupted"); FLUSH TABLES; let MYSQLD_DATADIR =`SELECT @@datadir`; diff --git a/mysql-test/suite/mariabackup/encrypted_page_compressed.result b/mysql-test/suite/mariabackup/encrypted_page_compressed.result index de4c966caf4..31098e45675 100644 --- a/mysql-test/suite/mariabackup/encrypted_page_compressed.result +++ b/mysql-test/suite/mariabackup/encrypted_page_compressed.result @@ -1,5 +1,7 @@ call mtr.add_suppression("InnoDB: Table `test`.`t1` has an unreadable root page"); call mtr.add_suppression("InnoDB: Encrypted page .* in file .*test.t1\\.ibd looks corrupted; key_version=1"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: File '.*test/t1\\.ibd' is corrupted"); CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT, c char(200)) ENGINE=InnoDB page_compressed=yes encrypted=yes; insert into t1(b, c) values("mariadb", "mariabackup"); # Corrupt the table diff --git a/mysql-test/suite/mariabackup/encrypted_page_compressed.test b/mysql-test/suite/mariabackup/encrypted_page_compressed.test index 54fffb7d08f..2138afd80cc 100644 --- a/mysql-test/suite/mariabackup/encrypted_page_compressed.test +++ b/mysql-test/suite/mariabackup/encrypted_page_compressed.test @@ -1,6 +1,8 @@ source include/have_file_key_management.inc; call mtr.add_suppression("InnoDB: Table `test`.`t1` has an unreadable root page"); call mtr.add_suppression("InnoDB: Encrypted page .* in file .*test.t1\\.ibd looks corrupted; key_version=1"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: File '.*test/t1\\.ibd' is corrupted"); CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT, c char(200)) ENGINE=InnoDB page_compressed=yes encrypted=yes; insert into t1(b, c) values("mariadb", "mariabackup"); diff --git a/mysql-test/suite/mariabackup/encrypted_page_corruption.result b/mysql-test/suite/mariabackup/encrypted_page_corruption.result index b328d361cd6..62f39b561da 100644 --- a/mysql-test/suite/mariabackup/encrypted_page_corruption.result +++ b/mysql-test/suite/mariabackup/encrypted_page_corruption.result @@ -1,4 +1,6 @@ call mtr.add_suppression("\\[ERROR\\] InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=3\\] in file '.*test.t1\\.ibd' cannot be decrypted."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: File '.*test/t1\\.ibd' is corrupted"); call mtr.add_suppression("\\[ERROR\\] InnoDB: Table `test`\\.`t1` has an unreadable root page"); CREATE TABLE t1(c VARCHAR(128)) ENGINE INNODB, encrypted=yes; insert into t1 select repeat('a',100); diff --git a/mysql-test/suite/mariabackup/encrypted_page_corruption.test b/mysql-test/suite/mariabackup/encrypted_page_corruption.test index 1beb020b463..696eccf8270 100644 --- a/mysql-test/suite/mariabackup/encrypted_page_corruption.test +++ b/mysql-test/suite/mariabackup/encrypted_page_corruption.test @@ -2,6 +2,8 @@ --source include/innodb_page_size.inc call mtr.add_suppression("\\[ERROR\\] InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=3\\] in file '.*test.t1\\.ibd' cannot be decrypted."); +call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: File '.*test/t1\\.ibd' is corrupted"); call mtr.add_suppression("\\[ERROR\\] InnoDB: Table `test`\\.`t1` has an unreadable root page"); CREATE TABLE t1(c VARCHAR(128)) ENGINE INNODB, encrypted=yes; insert into t1 select repeat('a',100); diff --git a/mysql-test/suite/mariabackup/innodb_redo_overwrite.result b/mysql-test/suite/mariabackup/innodb_redo_overwrite.result index 9076dbaa57a..fb83f530fcc 100644 --- a/mysql-test/suite/mariabackup/innodb_redo_overwrite.result +++ b/mysql-test/suite/mariabackup/innodb_redo_overwrite.result @@ -22,6 +22,5 @@ INSERT INTO t SELECT * FROM t; INSERT INTO t SELECT * FROM t; INSERT INTO t SELECT * FROM t; # xtrabackup backup -FOUND 1 /failed: redo log block is overwritten/ in backup.log FOUND 1 /failed: redo log block checksum does not match/ in backup.log DROP TABLE t; diff --git a/mysql-test/suite/mariabackup/innodb_redo_overwrite.test b/mysql-test/suite/mariabackup/innodb_redo_overwrite.test index 1ed75607be8..02f30af07cf 100644 --- a/mysql-test/suite/mariabackup/innodb_redo_overwrite.test +++ b/mysql-test/suite/mariabackup/innodb_redo_overwrite.test @@ -31,13 +31,9 @@ INSERT INTO t SELECT * FROM t; --disable_result_log --error 1 ---exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir --dbug=+d,mariabackup_events > $backuplog +--exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir --dbug=+d,mariabackup_events --enable_result_log ---let SEARCH_PATTERN=failed: redo log block is overwritten ---let SEARCH_FILE=$backuplog ---source include/search_pattern_in_file.inc ---remove_file $backuplog --rmdir $targetdir --let before_innodb_log_copy_thread_started=INSERT INTO test.t VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9) diff --git a/mysql-test/suite/mariabackup/unencrypted_page_compressed.result b/mysql-test/suite/mariabackup/unencrypted_page_compressed.result index dfcf19b6c2b..ededfbb8e8d 100644 --- a/mysql-test/suite/mariabackup/unencrypted_page_compressed.result +++ b/mysql-test/suite/mariabackup/unencrypted_page_compressed.result @@ -1,3 +1,5 @@ +call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: File '.*test/t1\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: Table `test`.`t1` has an unreadable root page"); CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT, c char(200)) ENGINE=InnoDB PAGE_COMPRESSED=YES STATS_PERSISTENT=0; diff --git a/mysql-test/suite/mariabackup/unencrypted_page_compressed.test b/mysql-test/suite/mariabackup/unencrypted_page_compressed.test index 700c4dd2034..5f75bb98332 100644 --- a/mysql-test/suite/mariabackup/unencrypted_page_compressed.test +++ b/mysql-test/suite/mariabackup/unencrypted_page_compressed.test @@ -1,3 +1,5 @@ +call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to read page 3 from file '.*test/t1\\.ibd'"); +call mtr.add_suppression("\\[ERROR\\] InnoDB: File '.*test/t1\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: Table `test`.`t1` has an unreadable root page"); CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT, c char(200)) ENGINE=InnoDB PAGE_COMPRESSED=YES STATS_PERSISTENT=0; diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index dcebd9414ba..db046675d1e 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -510,43 +510,46 @@ buf_page_is_checksum_valid_crc32( return checksum_field1 == crc32; } +#ifndef UNIV_INNOCHECKSUM /** Checks whether the lsn present in the page is lesser than the peek current lsn. -@param[in] check_lsn lsn to check -@param[in] read_buf page. */ -static void buf_page_check_lsn(bool check_lsn, const byte* read_buf) +@param check_lsn lsn to check +@param read_buf page frame +@return whether the FIL_PAGE_LSN is invalid */ +static bool buf_page_check_lsn(bool check_lsn, const byte *read_buf) { -#ifndef UNIV_INNOCHECKSUM - if (check_lsn && recv_lsn_checks_on) { - const lsn_t current_lsn = log_sys.get_lsn(); - const lsn_t page_lsn - = mach_read_from_8(read_buf + FIL_PAGE_LSN); + if (!check_lsn) + return false; + lsn_t current_lsn= log_sys.get_lsn(); + if (UNIV_UNLIKELY(current_lsn == LOG_START_LSN + LOG_BLOCK_HDR_SIZE) && + srv_force_recovery == SRV_FORCE_NO_LOG_REDO) + return false; + const lsn_t page_lsn= mach_read_from_8(read_buf + FIL_PAGE_LSN); - /* Since we are going to reset the page LSN during the import - phase it makes no sense to spam the log with error messages. */ - if (current_lsn < page_lsn) { + if (UNIV_LIKELY(current_lsn >= page_lsn)) + return false; - const uint32_t space_id = mach_read_from_4( - read_buf + FIL_PAGE_SPACE_ID); - const uint32_t page_no = mach_read_from_4( - read_buf + FIL_PAGE_OFFSET); + const uint32_t space_id= mach_read_from_4(read_buf + FIL_PAGE_SPACE_ID); + const uint32_t page_no= mach_read_from_4(read_buf + FIL_PAGE_OFFSET); - ib::error() << "Page " << page_id_t(space_id, page_no) - << " log sequence number " << page_lsn - << " is in the future! Current system" - << " log sequence number " - << current_lsn << "."; + sql_print_error("InnoDB: Page " + "[page id: space=" UINT32PF ", page number=" UINT32PF "]" + " log sequence number " LSN_PF + " is in the future! Current system log sequence number " + LSN_PF ".", + space_id, page_no, page_lsn, current_lsn); - ib::error() << "Your database may be corrupt or" - " you may have copied the InnoDB" - " tablespace but not the InnoDB" - " log files. " - << FORCE_RECOVERY_MSG; + if (srv_force_recovery) + return false; - } - } -#endif /* !UNIV_INNOCHECKSUM */ + sql_print_error("InnoDB: Your database may be corrupt or" + " you may have copied the InnoDB" + " tablespace but not the ib_logfile0. %s", + FORCE_RECOVERY_MSG); + + return true; } +#endif /** Check if a buffer is all zeroes. @@ -563,7 +566,7 @@ bool buf_is_zeroes(span buf) @param[in] read_buf database page @param[in] fsp_flags tablespace flags @return whether the page is corrupted */ -bool +buf_page_is_corrupted_reason buf_page_is_corrupted( bool check_lsn, const byte* read_buf, @@ -574,27 +577,28 @@ buf_page_is_corrupted( const uint size = buf_page_full_crc32_size( read_buf, &compressed, &corrupted); if (corrupted) { - return true; + return CORRUPTED_OTHER; } const byte* end = read_buf + (size - FIL_PAGE_FCRC32_CHECKSUM); uint crc32 = mach_read_from_4(end); if (!crc32 && size == srv_page_size && buf_is_zeroes(span(read_buf, size))) { - return false; + return NOT_CORRUPTED; } DBUG_EXECUTE_IF( "page_intermittent_checksum_mismatch", { static int page_counter; - if (page_counter++ == 3) { + if (mach_read_from_4(FIL_PAGE_OFFSET + read_buf) + && page_counter++ == 3) { crc32++; } }); if (crc32 != ut_crc32(read_buf, size - FIL_PAGE_FCRC32_CHECKSUM)) { - return true; + return CORRUPTED_OTHER; } static_assert(FIL_PAGE_FCRC32_KEY_VERSION == 0, "alignment"); static_assert(FIL_PAGE_LSN % 4 == 0, "alignment"); @@ -606,11 +610,15 @@ buf_page_is_corrupted( end - (FIL_PAGE_FCRC32_END_LSN - FIL_PAGE_FCRC32_CHECKSUM), 4)) { - return true; + return CORRUPTED_OTHER; } - buf_page_check_lsn(check_lsn, read_buf); - return false; + return +#ifndef UNIV_INNOCHECKSUM + buf_page_check_lsn(check_lsn, read_buf) + ? CORRUPTED_FUTURE_LSN : +#endif + NOT_CORRUPTED; } const ulint zip_size = fil_space_t::zip_size(fsp_flags); @@ -631,7 +639,13 @@ buf_page_is_corrupted( && FSP_FLAGS_HAS_PAGE_COMPRESSION(fsp_flags) #endif ) { - return(false); + check_lsn: + return +#ifndef UNIV_INNOCHECKSUM + buf_page_check_lsn(check_lsn, read_buf) + ? CORRUPTED_FUTURE_LSN : +#endif + NOT_CORRUPTED; } static_assert(FIL_PAGE_LSN % 4 == 0, "alignment"); @@ -644,15 +658,16 @@ buf_page_is_corrupted( /* Stored log sequence numbers at the start and the end of page do not match */ - return(true); + return CORRUPTED_OTHER; } - buf_page_check_lsn(check_lsn, read_buf); - /* Check whether the checksum fields have correct values */ if (zip_size) { - return !page_zip_verify_checksum(read_buf, zip_size); + if (!page_zip_verify_checksum(read_buf, zip_size)) { + return CORRUPTED_OTHER; + } + goto check_lsn; } const uint32_t checksum_field1 = mach_read_from_4( @@ -689,7 +704,7 @@ buf_page_is_corrupted( } if (all_zeroes) { - return false; + return NOT_CORRUPTED; } } @@ -698,13 +713,17 @@ buf_page_is_corrupted( case SRV_CHECKSUM_ALGORITHM_STRICT_FULL_CRC32: case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32: #endif /* !UNIV_INNOCHECKSUM */ - return !buf_page_is_checksum_valid_crc32( - read_buf, checksum_field1, checksum_field2); + if (!buf_page_is_checksum_valid_crc32(read_buf, + checksum_field1, + checksum_field2)) { + return CORRUPTED_OTHER; + } + goto check_lsn; #ifndef UNIV_INNOCHECKSUM default: if (checksum_field1 == BUF_NO_CHECKSUM_MAGIC && checksum_field2 == BUF_NO_CHECKSUM_MAGIC) { - return false; + goto check_lsn; } const uint32_t crc32 = buf_calc_page_crc32(read_buf); @@ -722,27 +741,35 @@ buf_page_is_corrupted( DBUG_EXECUTE_IF( "page_intermittent_checksum_mismatch", { static int page_counter; - if (page_counter++ == 3) return true; + if (mach_read_from_4(FIL_PAGE_OFFSET + + read_buf) + && page_counter++ == 3) + return CORRUPTED_OTHER; }); if ((checksum_field1 != crc32 || checksum_field2 != crc32) && checksum_field2 != buf_calc_page_old_checksum(read_buf)) { - return true; + return CORRUPTED_OTHER; } } switch (checksum_field1) { case 0: case BUF_NO_CHECKSUM_MAGIC: - return false; + break; + default: + if ((checksum_field1 != crc32 + || checksum_field2 != crc32) + && checksum_field1 + != buf_calc_page_new_checksum(read_buf)) { + return CORRUPTED_OTHER; + } } - return (checksum_field1 != crc32 || checksum_field2 != crc32) - && checksum_field1 - != buf_calc_page_new_checksum(read_buf); } #endif /* !UNIV_INNOCHECKSUM */ + goto check_lsn; } #ifndef UNIV_INNOCHECKSUM @@ -3628,6 +3655,7 @@ or decrypt/decompress just failed. @return whether the operation succeeded @retval DB_SUCCESS if page has been read and is not corrupted @retval DB_PAGE_CORRUPTED if page based on checksum check is corrupted +@retval DB_CORRUPTION if the page LSN is in the future @retval DB_DECRYPTION_FAILED if page post encryption checksum matches but after decryption normal page checksum does not match. */ static dberr_t buf_page_check_corrupt(buf_page_t *bpage, @@ -3664,8 +3692,18 @@ static dberr_t buf_page_check_corrupt(buf_page_t *bpage, node.space->is_compressed())) { err = DB_PAGE_CORRUPTED; } - } else if (buf_page_is_corrupted(true, dst_frame, node.space->flags)) { - err = DB_PAGE_CORRUPTED; + } else { + switch (buf_page_is_corrupted(true, dst_frame, + node.space->flags)) { + case NOT_CORRUPTED: + break; + case CORRUPTED_OTHER: + err = DB_PAGE_CORRUPTED; + break; + case CORRUPTED_FUTURE_LSN: + err = DB_CORRUPTION; + break; + } } if (seems_encrypted && err == DB_PAGE_CORRUPTED @@ -3685,9 +3723,8 @@ static dberr_t buf_page_check_corrupt(buf_page_t *bpage, /** Complete a read of a page. @param node data file @return whether the operation succeeded -@retval DB_PAGE_CORRUPTED if the checksum fails -@retval DB_DECRYPTION_FAILED if the page cannot be decrypted -@retval DB_FAIL if the page contains the wrong ID */ +@retval DB_PAGE_CORRUPTED if the checksum or the page ID is incorrect +@retval DB_DECRYPTION_FAILED if the page cannot be decrypted */ dberr_t buf_page_t::read_complete(const fil_node_t &node) { const page_id_t expected_id{id()}; @@ -3715,9 +3752,8 @@ dberr_t buf_page_t::read_complete(const fil_node_t &node) if (!ok) { - ib::info() << "Page " << expected_id << " zip_decompress failure."; err= DB_PAGE_CORRUPTED; - goto database_corrupted; + goto database_corrupted_compressed; } } @@ -3742,15 +3778,21 @@ dberr_t buf_page_t::read_complete(const fil_node_t &node) node.space->crypt_data && node.space->crypt_data->type != CRYPT_SCHEME_UNENCRYPTED) { - ib::error() << "Cannot decrypt " << expected_id; err= DB_DECRYPTION_FAILED; goto release_page; } else { - ib::error() << "Space id and page no stored in the page, read in are " - << read_id << ", should be " << expected_id; - err= DB_PAGE_CORRUPTED; + sql_print_error("InnoDB: Space id and page no stored in the page," + " read in from %s are " + "[page id: space=" UINT32PF ", page number=" UINT32PF + "], should be " + "[page id: space=" UINT32PF ", page number=" UINT32PF + "]", + node.name, + read_id.space(), read_id.page_no(), + expected_id.space(), expected_id.page_no()); + err= DB_FAIL; goto release_page; } } @@ -3760,24 +3802,9 @@ dberr_t buf_page_t::read_complete(const fil_node_t &node) { database_corrupted: if (belongs_to_unzip_LRU()) +database_corrupted_compressed: memset_aligned(frame, 0, srv_page_size); - if (err == DB_PAGE_CORRUPTED) - { - ib::error() << "Database page corruption on disk" - " or a failed read of file '" - << node.name << "' page " << expected_id - << ". You may have to recover from a backup."; - - buf_page_print(read_frame, zip_size()); - - node.space->set_corrupted(); - - ib::info() << " You can use CHECK TABLE to scan" - " your table for corruption. " - << FORCE_RECOVERY_MSG; - } - if (!srv_force_recovery) goto release_page; } @@ -3785,6 +3812,24 @@ database_corrupted: if (err == DB_PAGE_CORRUPTED || err == DB_DECRYPTION_FAILED) { release_page: + if (recv_sys.free_corrupted_page(expected_id, node)); + else if (err == DB_FAIL) + err= DB_PAGE_CORRUPTED; + else + { + sql_print_error("InnoDB: Failed to read page " UINT32PF + " from file '%s': %s", expected_id.page_no(), + node.name, ut_strerr(err)); + + buf_page_print(read_frame, zip_size()); + + if (node.space->set_corrupted() && + !is_predefined_tablespace(node.space->id)) + sql_print_information("InnoDB: You can use CHECK TABLE to scan" + " your table for corruption. %s", + FORCE_RECOVERY_MSG); + } + buf_pool.corrupted_evict(this, buf_page_t::READ_FIX); return err; } diff --git a/storage/innobase/buf/buf0dblwr.cc b/storage/innobase/buf/buf0dblwr.cc index c1b4fdd4bf3..31036bf978d 100644 --- a/storage/innobase/buf/buf0dblwr.cc +++ b/storage/innobase/buf/buf0dblwr.cc @@ -33,6 +33,7 @@ Created 2011/12/19 #include "trx0sys.h" #include "fil0crypt.h" #include "fil0pagecompress.h" +#include "log.h" using st_::span; @@ -356,6 +357,13 @@ void buf_dblwr_t::recover() ut_ad(recv_sys.parse_start_lsn); if (!is_created()) return; + const lsn_t max_lsn{log_sys.get_lsn()}; + /* The recv_sys.scanned_lsn may include some "padding" after the + last log record, depending on the value of + innodb_log_write_ahead_size. After MDEV-14425 eliminated + OS_FILE_LOG_BLOCK_SIZE, these two LSN must be equal. */ + ut_ad(recv_sys.scanned_lsn >= max_lsn); + ut_ad(recv_sys.scanned_lsn < max_lsn + 32 * OS_FILE_LOG_BLOCK_SIZE); uint32_t page_no_dblwr= 0; byte *read_buf= static_cast(aligned_malloc(3 * srv_page_size, @@ -365,25 +373,15 @@ void buf_dblwr_t::recover() for (recv_dblwr_t::list::iterator i= recv_sys.dblwr.pages.begin(); i != recv_sys.dblwr.pages.end(); ++i, ++page_no_dblwr) { - byte *page= *i; + const page_t *const page= *i; const uint32_t page_no= page_get_page_no(page); - if (!page_no) /* recovered via recv_dblwr_t::restore_first_page() */ - continue; - const lsn_t lsn= mach_read_from_8(page + FIL_PAGE_LSN); - if (recv_sys.parse_start_lsn > lsn) - /* Pages written before the checkpoint are not useful for recovery. */ + if (recv_sys.parse_start_lsn > lsn || lsn > recv_sys.scanned_lsn) + /* Pages written before or after the recovery range are not usable. */ continue; - const ulint space_id= page_get_space_id(page); + const uint32_t space_id= page_get_space_id(page); const page_id_t page_id(space_id, page_no); - if (recv_sys.scanned_lsn < lsn) - { - ib::info() << "Ignoring a doublewrite copy of page " << page_id - << " with future log sequence number " << lsn; - continue; - } - fil_space_t *space= fil_space_t::get(space_id); if (!space) @@ -395,10 +393,14 @@ void buf_dblwr_t::recover() /* Do not report the warning for undo tablespaces, because they can be truncated in place. */ if (!srv_is_undo_tablespace(space_id)) - ib::warn() << "A copy of page " << page_no - << " in the doublewrite buffer slot " << page_no_dblwr - << " is beyond the end of " << space->chain.start->name - << " (" << space->size << " pages)"; + sql_print_warning("InnoDB: A copy of page " + "[page id: space=" UINT32PF + ", page number=" UINT32PF "]" + " in the doublewrite buffer slot " UINT32PF + " is beyond the end of %s (" UINT32PF " pages)", + page_id.space(), page_id.page_no(), + page_no_dblwr, space->chain.start->name, + space->size); next_page: space->release(); continue; @@ -417,41 +419,48 @@ next_page: physical_size, read_buf); if (UNIV_UNLIKELY(fio.err != DB_SUCCESS)) - { - ib::warn() << "Double write buffer recovery: " << page_id - << " ('" << space->chain.start->name - << "') read failed with error: " << fio.err; - continue; - } - - if (buf_is_zeroes(span(read_buf, physical_size))) + sql_print_warning("InnoDB: Double write buffer recovery: " + "[page id: space=" UINT32PF + ", page number=" UINT32PF "]" + " ('%s') read failed with error: %s", + page_id.space(), page_id.page_no(), fio.node->name, + ut_strerr(fio.err)); + else if (buf_is_zeroes(span(read_buf, physical_size))) { /* We will check if the copy in the doublewrite buffer is valid. If not, we will ignore this page (there should be redo log records to initialize it). */ } - else if (recv_sys.dblwr.validate_page(page_id, read_buf, space, buf)) + else if (recv_sys.dblwr.validate_page(page_id, max_lsn, space, + read_buf, buf)) goto next_page; else /* We intentionally skip this message for all-zero pages. */ - ib::info() << "Trying to recover page " << page_id - << " from the doublewrite buffer."; + sql_print_information("InnoDB: Trying to recover page " + "[page id: space=" UINT32PF + ", page number=" UINT32PF "]" + " from the doublewrite buffer.", + page_id.space(), page_id.page_no()); - page= recv_sys.dblwr.find_page(page_id, space, buf); + if (const byte *page= + recv_sys.dblwr.find_page(page_id, max_lsn, space, buf)) + { + /* Write the good page from the doublewrite buffer to the intended + position. */ + space->reacquire(); + fio= space->io(IORequestWrite, + os_offset_t{page_id.page_no()} * physical_size, + physical_size, const_cast(page)); - if (!page) - goto next_page; + if (fio.err == DB_SUCCESS) + sql_print_information("InnoDB: Recovered page " + "[page id: space=" UINT32PF + ", page number=" UINT32PF "]" + " to '%s' from the doublewrite buffer.", + page_id.space(), page_id.page_no(), + fio.node->name); + } - /* Write the good page from the doublewrite buffer to the intended - position. */ - space->reacquire(); - fio= space->io(IORequestWrite, - os_offset_t{page_id.page_no()} * physical_size, - physical_size, page); - - if (fio.err == DB_SUCCESS) - ib::info() << "Recovered page " << page_id << " to '" << fio.node->name - << "' from the doublewrite buffer."; goto next_page; } diff --git a/storage/innobase/buf/buf0lru.cc b/storage/innobase/buf/buf0lru.cc index 49a088b425f..d664637fcdc 100644 --- a/storage/innobase/buf/buf0lru.cc +++ b/storage/innobase/buf/buf0lru.cc @@ -1024,7 +1024,7 @@ buf_LRU_block_free_non_file_page( } /** Release a memory block to the buffer pool. */ -ATTRIBUTE_COLD void buf_pool_t::free_block(buf_block_t *block) +ATTRIBUTE_COLD void buf_pool_t::free_block(buf_block_t *block) noexcept { ut_ad(this == &buf_pool); mysql_mutex_lock(&mutex); @@ -1175,13 +1175,12 @@ static bool buf_LRU_block_remove_hashed(buf_page_t *bpage, const page_id_t id, @param bpage x-latched page that was found corrupted @param state expected current state of the page */ ATTRIBUTE_COLD -void buf_pool_t::corrupted_evict(buf_page_t *bpage, uint32_t state) +void buf_pool_t::corrupted_evict(buf_page_t *bpage, uint32_t state) noexcept { const page_id_t id{bpage->id()}; buf_pool_t::hash_chain &chain= buf_pool.page_hash.cell_get(id.fold()); page_hash_latch &hash_lock= buf_pool.page_hash.lock_get(chain); - recv_sys.free_corrupted_page(id); mysql_mutex_lock(&mutex); hash_lock.lock(); diff --git a/storage/innobase/buf/buf0rea.cc b/storage/innobase/buf/buf0rea.cc index 6e509b77141..f2ffee0651f 100644 --- a/storage/innobase/buf/buf0rea.cc +++ b/storage/innobase/buf/buf0rea.cc @@ -326,15 +326,13 @@ buf_read_page_low( dst, bpage); if (UNIV_UNLIKELY(fio.err != DB_SUCCESS)) { + recv_sys.free_corrupted_page(page_id, *space->chain.start); buf_pool.corrupted_evict(bpage, buf_page_t::READ_FIX); } else if (sync) { thd_wait_end(nullptr); /* The i/o was already completed in space->io() */ fio.err = bpage->read_complete(*fio.node); space->release(); - if (fio.err == DB_FAIL) { - fio.err = DB_PAGE_CORRUPTED; - } if (mariadb_timer) { mariadb_increment_pages_read_time(mariadb_timer); } diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc index 38cdaa6aec2..91574035568 100644 --- a/storage/innobase/fil/fil0fil.cc +++ b/storage/innobase/fil/fil0fil.cc @@ -53,10 +53,14 @@ Created 10/25/1995 Heikki Tuuri # include #endif -ATTRIBUTE_COLD void fil_space_t::set_corrupted() const +ATTRIBUTE_COLD bool fil_space_t::set_corrupted() const noexcept { if (!is_stopping() && !is_corrupted.test_and_set()) + { sql_print_error("InnoDB: File '%s' is corrupted", chain.start->name); + return true; + } + return false; } /** Determine if the space id is a user tablespace id or not. @@ -351,11 +355,14 @@ fil_node_t* fil_space_t::add(const char* name, pfs_os_file_t handle, return node; } -__attribute__((warn_unused_result, nonnull)) +__attribute__((warn_unused_result, nonnull(1))) /** Open a tablespace file. @param node data file +@param page first page of the tablespace, or nullptr +@param no_lsn whether to skip the FIL_PAGE_LSN check @return whether the file was successfully opened */ -static bool fil_node_open_file_low(fil_node_t *node) +static bool fil_node_open_file_low(fil_node_t *node, const byte *page, + bool no_lsn) { ut_ad(!node->is_open()); ut_ad(node->space->is_closing()); @@ -405,7 +412,8 @@ static bool fil_node_open_file_low(fil_node_t *node) } if (node->size); - else if (!node->read_page0() || !fil_comp_algo_validate(node->space)) + else if (!node->read_page0(page, no_lsn) || + !fil_comp_algo_validate(node->space)) { #ifndef _WIN32 fail: @@ -425,8 +433,10 @@ static bool fil_node_open_file_low(fil_node_t *node) /** Open a tablespace file. @param node data file +@param page first page of the tablespace, or nullptr +@param no_lsn whether to skip the FIL_PAGE_LSN check @return whether the file was successfully opened */ -static bool fil_node_open_file(fil_node_t *node) +static bool fil_node_open_file(fil_node_t *node, const byte *page, bool no_lsn) { mysql_mutex_assert_owner(&fil_system.mutex); ut_ad(!node->is_open()); @@ -465,7 +475,7 @@ static bool fil_node_open_file(fil_node_t *node) /* The node can be opened beween releasing and acquiring fil_system.mutex in the above code */ - return node->is_open() || fil_node_open_file_low(node); + return node->is_open() || fil_node_open_file_low(node, page, no_lsn); } /** Close the file handle. */ @@ -676,7 +686,8 @@ ATTRIBUTE_COLD bool fil_space_t::prepare_acquired() ut_ad(!id || purpose == FIL_TYPE_TEMPORARY || node == UT_LIST_GET_FIRST(chain)); - const bool is_open= node && (node->is_open() || fil_node_open_file(node)); + const bool is_open= node && + (node->is_open() || fil_node_open_file(node, nullptr, false)); if (!is_open) release(); @@ -1109,8 +1120,10 @@ fil_assign_new_space_id( } /** Read the first page of a data file. +@param dpage copy of a first page, from the doublewrite buffer, or nullptr +@param no_lsn whether to skip the FIL_PAGE_LSN check @return whether the page was found valid */ -bool fil_space_t::read_page0() +bool fil_space_t::read_page0(const byte *dpage, bool no_lsn) noexcept { ut_ad(fil_system.is_initialised()); mysql_mutex_assert_owner(&fil_system.mutex); @@ -1127,31 +1140,25 @@ bool fil_space_t::read_page0() ut_ad("this should not happen" == 0); return false; } - const bool ok= node->is_open() || fil_node_open_file(node); + const bool ok= node->is_open() || fil_node_open_file(node, dpage, no_lsn); release(); return ok; } -/** Look up a tablespace and ensure that its first page has been validated. */ -static fil_space_t *fil_space_get_space(ulint id) -{ - if (fil_space_t *space= fil_space_get_by_id(id)) - if (space->read_page0()) - return space; - return nullptr; -} - void fil_space_set_recv_size_and_flags(ulint id, uint32_t size, uint32_t flags) { ut_ad(id < SRV_SPACE_ID_UPPER_BOUND); + mysql_mutex_assert_owner(&recv_sys.mutex); mysql_mutex_lock(&fil_system.mutex); - if (fil_space_t *space= fil_space_get_space(id)) - { - if (size) - space->recv_size= size; - if (flags != FSP_FLAGS_FCRC32_MASK_MARKER) - space->flags= flags; - } + if (fil_space_t *space= fil_space_get_by_id(id)) + if (space->read_page0(recv_sys.dblwr.find_page(page_id_t(id, 0), LSN_MAX), + true)) + { + if (size) + space->recv_size= size; + if (flags != FSP_FLAGS_FCRC32_MASK_MARKER) + space->flags= flags; + } mysql_mutex_unlock(&fil_system.mutex); } @@ -1166,12 +1173,16 @@ bool fil_space_t::open(bool create_new_db) bool success= true; bool skip_read= create_new_db; + const page_t *page= skip_read + ? nullptr + : recv_sys.dblwr.find_page(page_id_t{id, 0}, LSN_MAX); + mysql_mutex_lock(&fil_system.mutex); for (fil_node_t *node= UT_LIST_GET_FIRST(chain); node; node= UT_LIST_GET_NEXT(chain, node)) { - if (!node->is_open() && !fil_node_open_file_low(node)) + if (!node->is_open() && !fil_node_open_file_low(node, page, page)) { err_exit: success= false; @@ -1189,7 +1200,7 @@ err_exit: continue; } - if (!node->read_page0()) + if (!node->read_page0(page, true)) { fil_system.n_open--; os_file_close(node->handle); @@ -1198,6 +1209,7 @@ err_exit: } skip_read= true; + page= nullptr; } if (!create_new_db) @@ -2930,6 +2942,7 @@ void IORequest::read_complete(int io_error) const { sql_print_error("InnoDB: Read error %d of page " UINT32PF " in file %s", io_error, id.page_no(), node->name); + recv_sys.free_corrupted_page(id, *node); buf_pool.corrupted_evict(bpage, buf_page_t::READ_FIX); corrupted: if (recv_recovery_is_on() && !srv_force_recovery) @@ -2939,13 +2952,8 @@ void IORequest::read_complete(int io_error) const mysql_mutex_unlock(&recv_sys.mutex); } } - else if (dberr_t err= bpage->read_complete(*node)) - { - if (err != DB_FAIL) - ib::error() << "Failed to read page " << id.page_no() - << " from file '" << node->name << "': " << err; + else if (bpage->read_complete(*node)) goto corrupted; - } node->space->release(); } diff --git a/storage/innobase/fsp/fsp0file.cc b/storage/innobase/fsp/fsp0file.cc index e7f9184c221..8aa3f3dba73 100644 --- a/storage/innobase/fsp/fsp0file.cc +++ b/storage/innobase/fsp/fsp0file.cc @@ -234,6 +234,46 @@ Datafile::same_as( #endif /* WIN32 */ } +dberr_t Datafile::read_first_page_flags(const page_t *page) noexcept +{ + ut_ad(m_order == 0); + + if (memcmp_aligned<2>(FIL_PAGE_SPACE_ID + page, + FSP_HEADER_OFFSET + FSP_SPACE_ID + page, 4)) + { + sql_print_error("InnoDB: Inconsistent tablespace ID in %s", m_filepath); + return DB_CORRUPTION; + } + + m_space_id= mach_read_from_4(FIL_PAGE_SPACE_ID + page); + m_flags= fsp_header_get_flags(page); + if (!fil_space_t::is_valid_flags(m_flags, m_space_id)) + { + ulint cflags= fsp_flags_convert_from_101(m_flags); + if (unsigned(cflags) == ~0U) + switch (fsp_flags_is_incompatible_mysql(m_flags)) { + case 0: + sql_print_error("InnoDB: Invalid flags 0x%zx in %s", + m_flags, m_filepath); + return DB_CORRUPTION; + case 3: + case 2: + sql_print_error("InnoDB: MySQL-8.0 tablespace in %s", m_filepath); + goto unsupported; + case 1: + sql_print_error("InnoDB: MySQL Encrypted tablespace in %s", + m_filepath); + unsupported: + sql_print_error("InnoDB: Restart in MySQL for migration/recovery."); + return DB_UNSUPPORTED; + } + else + m_flags= cflags; + } + + return DB_SUCCESS; +} + /** Reads a few significant fields from the first page of the first datafile. The Datafile must already be open. @param[in] read_only_mode If true, then readonly mode checks are enforced. @@ -286,56 +326,16 @@ Datafile::read_first_page(bool read_only_mode) } } - if (err != DB_SUCCESS) { - return(err); + if (err == DB_SUCCESS && m_order == 0) { + err = read_first_page_flags(m_first_page); } - if (m_order == 0) { - if (memcmp_aligned<2>(FIL_PAGE_SPACE_ID + m_first_page, - FSP_HEADER_OFFSET + FSP_SPACE_ID - + m_first_page, 4)) { - ib::error() - << "Inconsistent tablespace ID in " - << m_filepath; - return DB_CORRUPTION; - } - - m_space_id = mach_read_from_4(FIL_PAGE_SPACE_ID - + m_first_page); - m_flags = fsp_header_get_flags(m_first_page); - if (!fil_space_t::is_valid_flags(m_flags, m_space_id)) { - ulint cflags = fsp_flags_convert_from_101(m_flags); - if (cflags == ULINT_UNDEFINED) { - switch (fsp_flags_is_incompatible_mysql(m_flags)) { - case 0: - sql_print_error("InnoDB: Invalid flags 0x%zx in %s", - m_flags, m_filepath); - return(DB_CORRUPTION); - case 3: - case 2: - sql_print_error("InnoDB: MySQL-8.0 tablespace in %s", - m_filepath); - break; - case 1: - sql_print_error("InnoDB: MySQL Encrypted tablespace in %s", - m_filepath); - break; - } - sql_print_error("InnoDB: Restart in MySQL for migration/recovery."); - return(DB_UNSUPPORTED); - } else { - m_flags = cflags; - } - } - } - - const size_t physical_size = fil_space_t::physical_size(m_flags); - - if (physical_size > page_size) { + if (err == DB_SUCCESS + && fil_space_t::physical_size(m_flags) > page_size) { ib::error() << "File " << m_filepath << " should be longer than " << page_size << " bytes"; - return(DB_CORRUPTION); + err = DB_CORRUPTION; } return(err); @@ -367,7 +367,7 @@ Datafile::validate_to_dd(ulint space_id, ulint flags) /* Validate this single-table-tablespace with the data dictionary, but do not compare the DATA_DIR flag, in case the tablespace was remotely located. */ - err = validate_first_page(0); + err = validate_first_page(m_first_page); if (err != DB_SUCCESS) { return(err); } @@ -395,6 +395,70 @@ Datafile::validate_to_dd(ulint space_id, ulint flags) return(DB_ERROR); } +uint32_t recv_dblwr_t::find_first_page(const char *name, pfs_os_file_t file) +{ + os_offset_t file_size= os_file_get_size(file); + if (file_size != (os_offset_t) -1) + { + for (const page_t *page : pages) + { + uint32_t space_id= page_get_space_id(page); + byte *read_page= nullptr; + if (page_get_page_no(page) > 0 || space_id == 0) + { +next_page: + aligned_free(read_page); + continue; + } + uint32_t flags= mach_read_from_4(FSP_HEADER_OFFSET + FSP_SPACE_FLAGS + + page); + size_t page_size= fil_space_t::physical_size(flags); + if (file_size < 4 * page_size) + goto next_page; + read_page= + static_cast(aligned_malloc(3 * page_size, page_size)); + /* Read 3 pages from the file and match the space id + with the space id which is stored in + doublewrite buffer page. */ + if (os_file_read(IORequestRead, file, read_page, page_size, + 3 * page_size, nullptr) != DB_SUCCESS) + goto next_page; + for (ulint j= 0; j <= 2; j++) + { + byte *cur_page= read_page + j * page_size; + if (buf_is_zeroes(span(cur_page, page_size))) + { + aligned_free(read_page); + return 0; + } + if (mach_read_from_4(cur_page + FIL_PAGE_OFFSET) != j + 1 || + memcmp(cur_page + FIL_PAGE_SPACE_ID, + page + FIL_PAGE_SPACE_ID, 4) || + buf_page_is_corrupted(false, cur_page, flags)) + goto next_page; + } + + aligned_free(read_page); + page= find_page(page_id_t{space_id, 0}, LSN_MAX); + + if (!page) + { + /* If the first page of the given user tablespace is not there + in the doublewrite buffer, then the recovery is going to fail + now. Report error only when doublewrite buffer is not empty */ + sql_print_error("InnoDB: Corrupted page " + "[page id: space=" UINT32PF ", page number=0]" + " of datafile '%s' could not be found" + " in the doublewrite buffer", space_id, name); + break; + } + + return space_id; + } + } + return 0; +} + /** Validates this datafile for the purpose of recovery. The file should exist and be successfully opened. We initially open it in read-only mode because we just want to read the SpaceID. However, if the first page is @@ -410,7 +474,7 @@ Datafile::validate_for_recovery() ut_ad(is_open()); ut_ad(!srv_read_only_mode); - err = validate_first_page(0); + err = validate_first_page(m_first_page); switch (err) { case DB_TABLESPACE_EXISTS: @@ -427,14 +491,7 @@ Datafile::validate_for_recovery() m_space_id is set in read_first_page(). */ /* fall through */ default: - /* Re-open the file in read-write mode Attempt to restore - page 0 from doublewrite and read the space ID from a survey - of the first few pages. */ - close(); - err = open_read_write(); - if (err != DB_SUCCESS) { - return(err); - } + const page_t *first_page = nullptr; if (!m_space_id) { m_space_id = recv_sys.dblwr.find_first_page( @@ -460,15 +517,17 @@ Datafile::validate_for_recovery() return DB_SUCCESS; /* empty file */ } - if (recv_sys.dblwr.restore_first_page( - m_space_id, m_filepath, m_handle)) { + first_page = recv_sys.dblwr.find_page( + page_id_t(m_space_id, 0), LSN_MAX); + + if (!first_page) { return m_defer ? err : DB_CORRUPTION; } free_first_page: /* Free the previously read first page and then re-validate. */ free_first_page(); m_defer = false; - err = validate_first_page(0); + err = validate_first_page(first_page); } return(err); @@ -478,31 +537,24 @@ free_first_page: tablespace is opened. This occurs before the fil_space_t is created so the Space ID found here must not already be open. m_is_valid is set true on success, else false. -@param[out] flush_lsn contents of FIL_PAGE_FILE_FLUSH_LSN +@param[in] first_page the contents of the first page @retval DB_SUCCESS on if the datafile is valid @retval DB_CORRUPTION if the datafile is not readable @retval DB_TABLESPACE_EXISTS if there is a duplicate space_id */ -dberr_t Datafile::validate_first_page(lsn_t *flush_lsn) +dberr_t Datafile::validate_first_page(const page_t *first_page) { const char* error_txt = NULL; m_is_valid = true; + ut_ad(first_page || !m_first_page); - if (m_first_page == NULL - && read_first_page(srv_read_only_mode) != DB_SUCCESS) { - - error_txt = "Cannot read first page"; - } else { - ut_ad(m_first_page); - - if (flush_lsn != NULL) { - - *flush_lsn = mach_read_from_8( - m_first_page + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION); + if (first_page) { + if (dberr_t err = read_first_page_flags(first_page)) { + m_is_valid = false; + return err; } - } - - if (error_txt != NULL) { + } else if (read_first_page(srv_read_only_mode) != DB_SUCCESS) { + error_txt = "Cannot read first page"; err_exit: free_first_page(); @@ -518,11 +570,14 @@ err_exit: m_space_id, m_flags); m_is_valid = false; return DB_CORRUPTION; + } else { + first_page = m_first_page; + ut_ad(first_page); } /* Check if the whole page is blank. */ if (!m_space_id && !m_flags) { - const byte* b = m_first_page; + const byte* b = first_page; ulint nonzero_bytes = srv_page_size; while (*b == '\0' && --nonzero_bytes != 0) { @@ -560,7 +615,7 @@ err_exit: return(DB_ERROR); } - if (page_get_page_no(m_first_page) != 0) { + if (page_get_page_no(first_page) != 0) { /* First page must be number 0 */ error_txt = "Header page contains inconsistent data"; goto err_exit; @@ -571,8 +626,13 @@ err_exit: goto err_exit; } - if (buf_page_is_corrupted(false, m_first_page, m_flags)) { - /* Look for checksum and other corruptions. */ + switch (buf_page_is_corrupted(false, first_page, m_flags)) { + case NOT_CORRUPTED: + break; + case CORRUPTED_FUTURE_LSN: + error_txt = "LSN is in the future"; + goto err_exit; + case CORRUPTED_OTHER: error_txt = "Checksum mismatch"; goto err_exit; } diff --git a/storage/innobase/fsp/fsp0sysspace.cc b/storage/innobase/fsp/fsp0sysspace.cc index 9ede0a070f6..2a60f60b43d 100644 --- a/storage/innobase/fsp/fsp0sysspace.cc +++ b/storage/innobase/fsp/fsp0sysspace.cc @@ -587,37 +587,43 @@ SysTablespace::read_lsn_and_check_flags(lsn_t* flushed_lsn) /* Check the contents of the first page of the first datafile. */ - err = it->validate_first_page(flushed_lsn); + err = it->validate_first_page(it->m_first_page); + const page_t *first_page = it->m_first_page; if (err != DB_SUCCESS) { - if (recv_sys.dblwr.restore_first_page( - it->m_space_id, it->m_filepath, - it->handle())) { - it->close(); - return(err); + mysql_mutex_lock(&recv_sys.mutex); + first_page = recv_sys.dblwr.find_page( + page_id_t(space_id(), 0), LSN_MAX); + mysql_mutex_unlock(&recv_sys.mutex); + if (!first_page) { + err = DB_CORRUPTION; + } else { + err = it->read_first_page_flags(first_page); + if (err == DB_SUCCESS) { + err = it->validate_first_page(first_page); + } } - err = it->read_first_page( - m_ignore_read_only && srv_read_only_mode); } /* Make sure the tablespace space ID matches the space ID on the first page of the first datafile. */ - if (space_id() != it->m_space_id) { + if (err != DB_SUCCESS) { + } else if (space_id() != it->m_space_id) { ib::error() << "The data file '" << it->filepath() << "' has the wrong space ID. It should be " << space_id() << ", but " << it->m_space_id << " was found"; - - it->close(); - - return(err); + err = DB_CORRUPTION; + } else { + *flushed_lsn = mach_read_from_8( + first_page + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION); } it->close(); - return(DB_SUCCESS); + return err; } /** Check if a file can be opened in the correct mode. diff --git a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h index 82179e6d646..19e8782395c 100644 --- a/storage/innobase/include/buf0buf.h +++ b/storage/innobase/include/buf0buf.h @@ -308,12 +308,20 @@ buf_block_modify_clock_inc( @return whether the buffer is all zeroes */ bool buf_is_zeroes(st_::span buf); +/** Reason why buf_page_is_corrupted() fails */ +enum buf_page_is_corrupted_reason +{ + CORRUPTED_FUTURE_LSN= -1, + NOT_CORRUPTED= 0, + CORRUPTED_OTHER +}; + /** Check if a page is corrupt. @param[in] check_lsn whether the LSN should be checked @param[in] read_buf database page @param[in] fsp_flags tablespace flags @return whether the page is corrupted */ -bool +buf_page_is_corrupted_reason buf_page_is_corrupted( bool check_lsn, const byte* read_buf, @@ -773,9 +781,8 @@ public: /** Complete a read of a page. @param node data file @return whether the operation succeeded - @retval DB_PAGE_CORRUPTED if the checksum fails - @retval DB_DECRYPTION_FAILED if the page cannot be decrypted - @retval DB_FAIL if the page contains the wrong ID */ + @retval DB_PAGE_CORRUPTED if the checksum or the page ID is incorrect + @retval DB_DECRYPTION_FAILED if the page cannot be decrypted */ dberr_t read_complete(const fil_node_t &node); /** Release a write fix after a page write was completed. @@ -1352,10 +1359,11 @@ public: /** Release and evict a corrupted page. @param bpage x-latched page that was found corrupted @param state expected current state of the page */ - ATTRIBUTE_COLD void corrupted_evict(buf_page_t *bpage, uint32_t state); + ATTRIBUTE_COLD void corrupted_evict(buf_page_t *bpage, uint32_t state) + noexcept; /** Release a memory block to the buffer pool. */ - ATTRIBUTE_COLD void free_block(buf_block_t *block); + ATTRIBUTE_COLD void free_block(buf_block_t *block) noexcept; #ifdef UNIV_DEBUG /** Find a block that points to a ROW_FORMAT=COMPRESSED page diff --git a/storage/innobase/include/fil0fil.h b/storage/innobase/include/fil0fil.h index ecdd386ffc1..7e000147b2f 100644 --- a/storage/innobase/include/fil0fil.h +++ b/storage/innobase/include/fil0fil.h @@ -515,8 +515,9 @@ public: written while the space ID is being updated in each page. */ inline void set_imported(); - /** Report the tablespace as corrupted */ - ATTRIBUTE_COLD void set_corrupted() const; + /** Report the tablespace as corrupted + @return whether this was the first call */ + ATTRIBUTE_COLD bool set_corrupted() const noexcept; /** @return whether the storage device is rotational (HDD, not SSD) */ inline bool is_rotational() const; @@ -1030,8 +1031,10 @@ public: void flush_low(); /** Read the first page of a data file. + @param dpage copy of a first page, from the doublewrite buffer, or nullptr + @param no_lsn whether to skip the FIL_PAGE_LSN check @return whether the page was found valid */ - bool read_page0(); + bool read_page0(const byte *dpage, bool no_lsn) noexcept; /** Determine the next tablespace for encryption key rotation. @param space current tablespace (nullptr to start from the beginning) @@ -1128,8 +1131,10 @@ struct fil_node_t final bool is_open() const { return handle != OS_FILE_CLOSED; } /** Read the first page of a data file. + @param dpage copy of a first page, from the doublewrite buffer, or nullptr + @param no_lsn whether to skip the FIL_PAGE_LSN check @return whether the page was found valid */ - bool read_page0(); + bool read_page0(const byte *dpage, bool no_lsn) noexcept; /** Determine some file metadata when creating or reading the file. @param file the file that is being created, or OS_FILE_CLOSED */ @@ -1613,7 +1618,7 @@ inline uint32_t fil_space_t::get_size() if (!size) { mysql_mutex_lock(&fil_system.mutex); - read_page0(); + read_page0(nullptr, false); mysql_mutex_unlock(&fil_system.mutex); } return size; diff --git a/storage/innobase/include/fsp0file.h b/storage/innobase/include/fsp0file.h index 2af2abc1e85..cfea359af17 100644 --- a/storage/innobase/include/fsp0file.h +++ b/storage/innobase/include/fsp0file.h @@ -216,11 +216,11 @@ public: tablespace is opened. This occurs before the fil_space_t is created so the Space ID found here must not already be open. m_is_valid is set true on success, else false. - @param[out] flush_lsn contents of FIL_PAGE_FILE_FLUSH_LSN + @param[in] first_page the contents of the first page @retval DB_SUCCESS on if the datafile is valid @retval DB_CORRUPTION if the datafile is not readable @retval DB_TABLESPACE_EXISTS if there is a duplicate space_id */ - dberr_t validate_first_page(lsn_t* flush_lsn) + dberr_t validate_first_page(const byte *first_page) MY_ATTRIBUTE((warn_unused_result)); /** Get Datafile::m_filepath. @@ -368,6 +368,13 @@ private: dberr_t read_first_page(bool read_only_mode) MY_ATTRIBUTE((warn_unused_result)); + /** Read m_space_id, m_flags from a page frame. + @param page a copy of the first page of the tablespace + @retval DB_SUCCESS if the page seems to be valid + @retval DB_CORRUPTION if the page looks corrupted + @retval DB_UNSUPPORTED if the page is in an unsupported format */ + dberr_t read_first_page_flags(const byte *page) noexcept; + /** Free the first page from memory when it is no longer needed. */ void free_first_page(); diff --git a/storage/innobase/include/log0recv.h b/storage/innobase/include/log0recv.h index 542563997cf..773bd4c9f86 100644 --- a/storage/innobase/include/log0recv.h +++ b/storage/innobase/include/log0recv.h @@ -127,32 +127,28 @@ struct recv_dblwr_t /** Validate the page. @param page_id page identifier - @param page page contents + @param max_lsn the maximum allowed LSN @param space the tablespace of the page (not available for page 0) + @param page page contents @param tmp_buf 2*srv_page_size for decrypting and decompressing any page_compressed or encrypted pages @return whether the page is valid */ - bool validate_page(const page_id_t page_id, const byte *page, - const fil_space_t *space, byte *tmp_buf); + bool validate_page(const page_id_t page_id, lsn_t max_lsn, + const fil_space_t *space, + const byte *page, byte *tmp_buf) const noexcept; - /** Find a doublewrite copy of a page. + /** Find a doublewrite copy of a page with the smallest FIL_PAGE_LSN + that is large enough for recovery. @param page_id page identifier - @param space tablespace (not available for page_id.page_no()==0) + @param max_lsn the maximum allowed LSN + @param space tablespace (nullptr for page_id.page_no()==0) @param tmp_buf 2*srv_page_size for decrypting and decompressing any page_compressed or encrypted pages @return page frame - @retval NULL if no valid page for page_id was found */ - byte* find_page(const page_id_t page_id, const fil_space_t *space= NULL, - byte *tmp_buf= NULL); - - /** Restore the first page of the given tablespace from - doublewrite buffer. - @param space_id tablespace identifier - @param name tablespace filepath - @param file tablespace file handle - @return whether the operation failed */ - bool restore_first_page( - ulint space_id, const char *name, pfs_os_file_t file); + @retval nullptr if no valid page for page_id was found */ + const byte *find_page(const page_id_t page_id, lsn_t max_lsn, + const fil_space_t *space= nullptr, + byte *tmp_buf= nullptr) const noexcept; /** Restore the first page of the given tablespace from doublewrite buffer. @@ -456,20 +452,28 @@ public: inline void free(const void *data); /** Remove records for a corrupted page. - This function should only be called when innodb_force_recovery is set. - @param page_id corrupted page identifier */ - ATTRIBUTE_COLD void free_corrupted_page(page_id_t page_id); + @param page_id corrupted page identifier + @param node file for which an error is to be reported + @return whether an error message was reported */ + ATTRIBUTE_COLD bool free_corrupted_page(page_id_t page_id, + const fil_node_t &node) noexcept; /** Flag data file corruption during recovery. */ - ATTRIBUTE_COLD void set_corrupt_fs(); + ATTRIBUTE_COLD void set_corrupt_fs() noexcept; /** Flag log file corruption during recovery. */ - ATTRIBUTE_COLD void set_corrupt_log(); + ATTRIBUTE_COLD void set_corrupt_log() noexcept; /** @return whether data file corruption was found */ bool is_corrupt_fs() const { return UNIV_UNLIKELY(found_corrupt_fs); } /** @return whether log file corruption was found */ bool is_corrupt_log() const { return UNIV_UNLIKELY(found_corrupt_log); } + /** Check if recovery reached a consistent log sequence number. + @param start_lsn the checkpoint LSN + @param end_lsn the end LSN of the FILE_CHECKPOINT mini-transaction + @return whether the recovery failed to process enough log */ + inline bool validate_checkpoint(lsn_t start_lsn, lsn_t end_lsn) const; + /** Attempt to initialize a page based on redo log records. @param page_id page identifier @return the recovered block @@ -512,11 +516,6 @@ Protected by log_sys.mutex. */ extern bool recv_no_log_write; #endif /* UNIV_DEBUG */ -/** TRUE if buf_page_is_corrupted() should check if the log sequence -number (FIL_PAGE_LSN) is in the future. Initially FALSE, and set by -recv_recovery_from_checkpoint_start(). */ -extern bool recv_lsn_checks_on; - /** Size of the parsing buffer; it must accommodate RECV_SCAN_SIZE many times! */ #define RECV_PARSING_BUF_SIZE (2U << 20) diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc index 00b92285677..558316c2e50 100644 --- a/storage/innobase/log/log0recv.cc +++ b/storage/innobase/log/log0recv.cc @@ -66,11 +66,6 @@ Protected by log_sys.mutex. */ bool recv_no_log_write = false; #endif /* UNIV_DEBUG */ -/** TRUE if buf_page_is_corrupted() should check if the log sequence -number (FIL_PAGE_LSN) is in the future. Initially FALSE, and set by -recv_recovery_from_checkpoint_start(). */ -bool recv_lsn_checks_on; - /** If the following is TRUE, the buffer pool file pages must be invalidated after recovery and no ibuf operations are allowed; this becomes TRUE if the log record hash table becomes too full, and log records must be merged @@ -82,11 +77,6 @@ true means that recovery is running and no operations on the log file are allowed yet: the variable name is misleading. */ bool recv_no_ibuf_operations; -/** The maximum lsn we see for a page during the recovery process. If this -is bigger than the lsn we are able to scan up to, that is an indication that -the recovery failed and the database may be corrupt. */ -static lsn_t recv_max_page_lsn; - /** Stored physical log record */ struct log_phys_t : public log_rec_t { @@ -880,7 +870,7 @@ processed: This is invoked if we found neither a valid first page in the data file nor redo log records that would initialize the first page. */ - void deferred_dblwr() + void deferred_dblwr(lsn_t max_lsn) { for (auto d= defers.begin(); d != defers.end(); ) { @@ -891,7 +881,7 @@ processed: continue; } const page_id_t page_id{d->first, 0}; - const byte *page= recv_sys.dblwr.find_page(page_id); + const byte *page= recv_sys.dblwr.find_page(page_id, max_lsn); if (!page) goto next_item; const uint32_t space_id= mach_read_from_4(page + FIL_PAGE_SPACE_ID); @@ -1477,7 +1467,6 @@ void recv_sys_t::create() progress_time = time(NULL); ut_ad(pages.empty()); pages_it = pages.end(); - recv_max_page_lsn = 0; memset(truncated_undo_spaces, 0, sizeof truncated_undo_spaces); last_stored_lsn = 1; @@ -2787,8 +2776,11 @@ same_page: rewind(l + rlen, log); if (*store == STORE_IF_EXISTS) { - log_sys.set_lsn(recovered_lsn); - log_sys.set_flushed_lsn(recovered_lsn); + if (log_sys.get_lsn() < start_lsn) + { + log_sys.set_lsn(start_lsn); + log_sys.set_flushed_lsn(start_lsn); + } mysql_mutex_unlock(&mutex); this->apply(false); mysql_mutex_lock(&mutex); @@ -2797,9 +2789,9 @@ same_page: } else { - last_stored_lsn= recovered_lsn; + last_stored_lsn= start_lsn; sql_print_information("InnoDB: Multi-batch recovery needed at LSN " - LSN_PF, recovered_lsn); + LSN_PF, start_lsn); *store= STORE_NO; } goto restart; @@ -3114,11 +3106,18 @@ set_start_lsn: mtr.discard_modifications(); mtr.commit(); + fil_space_t* s = space + ? space + : fil_space_t::get(block->page.id().space()); + buf_pool.corrupted_evict(&block->page, block->page.state() & buf_page_t::LRU_MASK); - block = nullptr; - goto done; + if (!space) { + s->release(); + } + + return nullptr; } if (!start_lsn) { @@ -3157,29 +3156,26 @@ set_start_lsn: mtr.discard_modifications(); mtr.commit(); -done: - /* FIXME: do this in page read, protected with recv_sys.mutex! */ - if (recv_max_page_lsn < page_lsn) { - recv_max_page_lsn = page_lsn; - } - return block; } /** Remove records for a corrupted page. -This function should only be called when innodb_force_recovery is set. -@param page_id corrupted page identifier */ -ATTRIBUTE_COLD void recv_sys_t::free_corrupted_page(page_id_t page_id) +@param page_id corrupted page identifier +@param node file for which an error is to be reported +@return whether an error message was reported */ +ATTRIBUTE_COLD +bool recv_sys_t::free_corrupted_page(page_id_t page_id, + const fil_node_t &node) noexcept { if (!recovery_on) - return; + return false; mysql_mutex_lock(&mutex); map::iterator p= pages.find(page_id); if (p == pages.end()) { mysql_mutex_unlock(&mutex); - return; + return false; } p->second.being_processed= -1; @@ -3187,18 +3183,20 @@ ATTRIBUTE_COLD void recv_sys_t::free_corrupted_page(page_id_t page_id) set_corrupt_fs(); mysql_mutex_unlock(&mutex); - ib::error_or_warn(!srv_force_recovery) - << "Unable to apply log to corrupted page " << page_id; + (srv_force_recovery ? sql_print_warning : sql_print_error) + ("InnoDB: Unable to apply log to corrupted page " UINT32PF + " in file %s", page_id.page_no(), node.name); + return true; } -ATTRIBUTE_COLD void recv_sys_t::set_corrupt_log() +ATTRIBUTE_COLD void recv_sys_t::set_corrupt_log() noexcept { mysql_mutex_lock(&mutex); found_corrupt_log= true; mysql_mutex_unlock(&mutex); } -ATTRIBUTE_COLD void recv_sys_t::set_corrupt_fs() +ATTRIBUTE_COLD void recv_sys_t::set_corrupt_fs() noexcept { mysql_mutex_assert_owner(&mutex); if (!srv_force_recovery) @@ -4111,7 +4109,6 @@ recv_group_scan_log_recs( recv_sys.scanned_lsn = *contiguous_lsn; recv_sys.recovered_lsn = *contiguous_lsn; recv_sys.scanned_checkpoint_no = 0; - ut_ad(recv_max_page_lsn == 0); mysql_mutex_unlock(&recv_sys.mutex); lsn_t start_lsn; @@ -4448,6 +4445,19 @@ dberr_t recv_recovery_read_max_checkpoint() return err; } +inline +bool recv_sys_t::validate_checkpoint(lsn_t start_lsn, lsn_t end_lsn) const +{ + if (recovered_lsn >= start_lsn && recovered_lsn >= end_lsn) + return false; + sql_print_error("InnoDB: The log was only scanned up to " + LSN_PF ", while the current LSN at the " + "time of the latest checkpoint " LSN_PF + " was " LSN_PF "!", + recovered_lsn, start_lsn, end_lsn); + return true; +} + /** Start recovering from a redo log checkpoint. @param[in] flush_lsn FIL_PAGE_FILE_FLUSH_LSN of first system tablespace page @@ -4657,11 +4667,15 @@ completed: rescan = true; } + ut_ad(log_sys.get_lsn() >= recv_sys.scanned_lsn); + recv_sys.parse_start_lsn = checkpoint_lsn; if (srv_operation <= SRV_OPERATION_EXPORT_RESTORED) { - deferred_spaces.deferred_dblwr(); + mysql_mutex_lock(&recv_sys.mutex); + deferred_spaces.deferred_dblwr(log_sys.get_lsn()); buf_dblwr.recover(); + mysql_mutex_unlock(&recv_sys.mutex); } ut_ad(srv_force_recovery <= SRV_FORCE_NO_UNDO_LOG_SCAN); @@ -4679,10 +4693,10 @@ completed: } ut_ad(contiguous_lsn <= recv_sys.recovered_lsn); - ut_ad(recv_sys.scanned_lsn == recv_sys.scanned_lsn); - log_sys.set_lsn(recv_sys.recovered_lsn); - log_sys.set_flushed_lsn(recv_sys.recovered_lsn); + ut_ad(log_sys.get_lsn() >= recv_sys.recovered_lsn); + ut_ad(log_sys.get_flushed_lsn() + >= recv_sys.recovered_lsn); /* In case of multi-batch recovery, redo log for the last batch is not @@ -4694,25 +4708,8 @@ completed: } if (!log_sys.is_physical()) { - } else if (recv_sys.recovered_lsn < checkpoint_lsn - || recv_sys.recovered_lsn < end_lsn) { - sql_print_error("InnoDB: The log was only scanned up to " - LSN_PF ", while the current LSN at the " - "time of the latest checkpoint " LSN_PF - " was " LSN_PF "!", - recv_sys.recovered_lsn, - checkpoint_lsn, end_lsn); + } else if (recv_sys.validate_checkpoint(checkpoint_lsn, end_lsn)) { goto err_exit; - } else if (log_sys.log.scanned_lsn < checkpoint_lsn - || log_sys.log.scanned_lsn < end_lsn - || log_sys.log.scanned_lsn < recv_max_page_lsn) { - sql_print_error("InnoDB: We scanned the log up to " LSN_PF - ". A checkpoint was at " LSN_PF - " and the maximum LSN on a database page was " - LSN_PF ". It is possible that the" - " database is now corrupt!", - log_sys.log.scanned_lsn, checkpoint_lsn, - recv_max_page_lsn); } log_sys.next_checkpoint_lsn = checkpoint_lsn; @@ -4755,7 +4752,6 @@ completed: err = recv_rename_files(); } - recv_lsn_checks_on = true; mysql_mutex_unlock(&recv_sys.mutex); /* The database is now ready to start almost normal processing of user @@ -4768,14 +4764,17 @@ completed: goto func_exit; } -bool recv_dblwr_t::validate_page(const page_id_t page_id, - const byte *page, +bool recv_dblwr_t::validate_page(const page_id_t page_id, lsn_t max_lsn, const fil_space_t *space, - byte *tmp_buf) + const byte *page, byte *tmp_buf) + const noexcept { + mysql_mutex_assert_owner(&recv_sys.mutex); + ulint flags; + if (page_id.page_no() == 0) { - ulint flags= fsp_header_get_flags(page); + flags= fsp_header_get_flags(page); if (!fil_space_t::is_valid_flags(flags, page_id.space())) { ulint cflags= fsp_flags_convert_from_101(flags); @@ -4790,9 +4789,15 @@ bool recv_dblwr_t::validate_page(const page_id_t page_id, } /* Page 0 is never page_compressed or encrypted. */ - return !buf_page_is_corrupted(true, page, flags); + goto check_if_corrupted; } + flags= space->flags; + + if (space->full_crc32()) + check_if_corrupted: + return !buf_page_is_corrupted(max_lsn < LSN_MAX, page, flags); + ut_ad(tmp_buf); byte *tmp_frame= tmp_buf; byte *tmp_page= tmp_buf + srv_page_size; @@ -4800,9 +4805,6 @@ bool recv_dblwr_t::validate_page(const page_id_t page_id, const bool expect_encrypted= space->crypt_data && space->crypt_data->type != CRYPT_SCHEME_UNENCRYPTED; - if (space->full_crc32()) - return !buf_page_is_corrupted(true, page, space->flags); - if (expect_encrypted && mach_read_from_4(page + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION)) { @@ -4829,127 +4831,45 @@ bool recv_dblwr_t::validate_page(const page_id_t page_id, return false; /* decompression failed */ if (decomp == srv_page_size) return false; /* the page was not compressed (invalid page type) */ - return !buf_page_is_corrupted(true, tmp_page, space->flags); + page= tmp_page; } - return !buf_page_is_corrupted(true, page, space->flags); + goto check_if_corrupted; } -byte *recv_dblwr_t::find_page(const page_id_t page_id, - const fil_space_t *space, byte *tmp_buf) +const byte *recv_dblwr_t::find_page(const page_id_t page_id, lsn_t max_lsn, + const fil_space_t *space, byte *tmp_buf) + const noexcept { - byte *result= NULL; - lsn_t max_lsn= 0; + mysql_mutex_assert_owner(&recv_sys.mutex); + ut_ad(recv_sys.scanned_lsn <= max_lsn); for (byte *page : pages) { if (page_get_page_no(page) != page_id.page_no() || page_get_space_id(page) != page_id.space()) continue; + const lsn_t lsn= mach_read_from_8(page + FIL_PAGE_LSN); if (page_id.page_no() == 0) { + if (!lsn) + continue; uint32_t flags= mach_read_from_4( FSP_HEADER_OFFSET + FSP_SPACE_FLAGS + page); if (!fil_space_t::is_valid_flags(flags, page_id.space())) continue; } - const lsn_t lsn= mach_read_from_8(page + FIL_PAGE_LSN); - if (lsn <= max_lsn || - !validate_page(page_id, page, space, tmp_buf)) + if (lsn > max_lsn || lsn < recv_sys.parse_start_lsn || + !validate_page(page_id, max_lsn, space, page, tmp_buf)) { /* Mark processed for subsequent iterations in buf_dblwr_t::recover() */ - memset(page + FIL_PAGE_LSN, 0, 8); + memset_aligned<8>(page + FIL_PAGE_LSN, 0, 8); continue; } - ut_a(page_get_page_no(page) == page_id.page_no()); - max_lsn= lsn; - result= page; + return page; } - return result; -} - -uint32_t recv_dblwr_t::find_first_page(const char *name, pfs_os_file_t file) -{ - os_offset_t file_size= os_file_get_size(file); - if (file_size != (os_offset_t) -1) - { - for (const page_t *page : pages) - { - uint32_t space_id= page_get_space_id(page); - byte *read_page= nullptr; - if (page_get_page_no(page) > 0 || space_id == 0) - { -next_page: - aligned_free(read_page); - continue; - } - uint32_t flags= mach_read_from_4( - FSP_HEADER_OFFSET + FSP_SPACE_FLAGS + page); - page_id_t page_id(space_id, 0); - size_t page_size= fil_space_t::physical_size(flags); - if (file_size < 4 * page_size) - goto next_page; - read_page= - static_cast(aligned_malloc(3 * page_size, page_size)); - /* Read 3 pages from the file and match the space id - with the space id which is stored in - doublewrite buffer page. */ - if (os_file_read(IORequestRead, file, read_page, page_size, - 3 * page_size, nullptr) != DB_SUCCESS) - goto next_page; - for (ulint j= 0; j <= 2; j++) - { - byte *cur_page= read_page + j * page_size; - if (buf_is_zeroes(span(cur_page, page_size))) - { - space_id= 0; - goto early_exit; - } - if (mach_read_from_4(cur_page + FIL_PAGE_OFFSET) != j + 1 || - memcmp(cur_page + FIL_PAGE_SPACE_ID, - page + FIL_PAGE_SPACE_ID, 4) || - buf_page_is_corrupted(false, cur_page, flags)) - goto next_page; - } - if (!restore_first_page(space_id, name, file)) - { -early_exit: - aligned_free(read_page); - return space_id; - } - break; - } - } - return 0; -} - -bool recv_dblwr_t::restore_first_page(ulint space_id, const char *name, - pfs_os_file_t file) -{ - const page_id_t page_id(space_id, 0); - const byte* page= find_page(page_id); - if (!page) - { - /* If the first page of the given user tablespace is not there - in the doublewrite buffer, then the recovery is going to fail - now. Report error only when doublewrite buffer is not empty */ - if (pages.size()) - ib::error() << "Corrupted page " << page_id << " of datafile '" - << name <<"' could not be found in the " - <<"doublewrite buffer."; - return true; - } - - ulint physical_size= fil_space_t::physical_size( - mach_read_from_4(page + FSP_HEADER_OFFSET + FSP_SPACE_FLAGS)); - ib::info() << "Restoring page " << page_id << " of datafile '" - << name << "' from the doublewrite buffer. Writing " - << physical_size << " bytes into file '" << name << "'"; - - return os_file_write( - IORequestWrite, name, file, page, 0, physical_size) != - DB_SUCCESS; + return nullptr; } diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 45cb24c251c..90b11f17ae5 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -4118,9 +4118,10 @@ void fil_node_t::find_metadata(os_file_t file /** Read the first page of a data file. @return whether the page was found valid */ -bool fil_node_t::read_page0() +bool fil_node_t::read_page0(const byte *dpage, bool no_lsn) noexcept { mysql_mutex_assert_owner(&fil_system.mutex); + ut_ad(!dpage || no_lsn); const unsigned psize= space->physical_size(); #ifndef _WIN32 struct stat statbuf; @@ -4144,15 +4145,18 @@ bool fil_node_t::read_page0() if (!deferred) { - page_t *page= static_cast(aligned_malloc(psize, psize)); - if (os_file_read(IORequestRead, handle, page, 0, psize, nullptr) - != DB_SUCCESS) + page_t *apage= static_cast(aligned_malloc(psize, psize)); + if (os_file_read(IORequestRead, handle, apage, 0, psize, nullptr) != + DB_SUCCESS) { sql_print_error("InnoDB: Unable to read first page of file %s", name); - aligned_free(page); + err_exit: + aligned_free(apage); return false; } + const page_t *page= apage; + retry: const ulint space_id= memcmp_aligned<2> (FIL_PAGE_SPACE_ID + page, FSP_HEADER_OFFSET + FSP_SPACE_ID + page, 4) @@ -4160,8 +4164,16 @@ bool fil_node_t::read_page0() : mach_read_from_4(FIL_PAGE_SPACE_ID + page); ulint flags= fsp_header_get_flags(page); const uint32_t size= fsp_header_get_field(page, FSP_SIZE); + if (!space_id && !flags && !size && dpage) + { + retry_dpage: + page= dpage; + dpage= nullptr; + goto retry; + } const uint32_t free_limit= fsp_header_get_field(page, FSP_FREE_LIMIT); const uint32_t free_len= flst_get_len(FSP_HEADER_OFFSET + FSP_FREE + page); + if (!fil_space_t::is_valid_flags(flags, space->id)) { ulint cflags= fsp_flags_convert_from_101(flags); @@ -4178,7 +4190,6 @@ bool fil_node_t::read_page0() } } - aligned_free(page); goto invalid; } @@ -4187,28 +4198,40 @@ bool fil_node_t::read_page0() !fil_space_t::is_flags_equal((space->flags & ~FSP_FLAGS_MEM_MASK), (flags & ~FSP_FLAGS_MEM_MASK))) { -invalid: + invalid: + if (dpage) + goto retry_dpage; sql_print_error("InnoDB: Expected tablespace flags 0x%zx but found 0x%zx" " in the file %s", space->flags, flags, name); - return false; + goto err_exit; } flags_ok: ut_ad(!(flags & FSP_FLAGS_MEM_MASK)); + if (buf_page_is_corrupted(!no_lsn, page, flags) != NOT_CORRUPTED) + { + if (dpage) + goto retry_dpage; + sql_print_error("InnoDB: The first page of file %s is corrupted", name); + goto err_exit; + } + + if (UNIV_UNLIKELY(space_id != space->id)) + { + if (dpage) + goto retry_dpage; + sql_print_error("InnoDB: Expected tablespace id %zu but found %zu" + " in the file %s", ulint{space->id}, ulint{space_id}, + name); + goto err_exit; + } + /* Try to read crypt_data from page 0 if it is not yet read. */ if (!space->crypt_data) space->crypt_data= fil_space_read_crypt_data( fil_space_t::zip_size(flags), page); - aligned_free(page); - - if (UNIV_UNLIKELY(space_id != space->id)) - { - ib::error() << "Expected tablespace id " << space->id - << " but found " << space_id - << " in the file " << name; - return false; - } + aligned_free(apage); space->flags= (space->flags & FSP_FLAGS_MEM_MASK) | flags; ut_ad(space->free_limit == 0 || space->free_limit == free_limit); diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc index 4d826bb0412..303c4a44f77 100644 --- a/storage/innobase/srv/srv0start.cc +++ b/storage/innobase/srv/srv0start.cc @@ -509,13 +509,14 @@ static ulint srv_undo_tablespace_open(bool create, const char* name, ulint i) ulint n_retries = 5; os_offset_t size= os_file_get_size(fh); ut_a(size != os_offset_t(-1)); + page_t *apage= nullptr; + const page_t *page= nullptr; if (!create) { - page_t *page= static_cast(aligned_malloc(srv_page_size, - srv_page_size)); + apage= static_cast(aligned_malloc(srv_page_size, srv_page_size)); undo_retry: - if (os_file_read(IORequestRead, fh, page, 0, srv_page_size, nullptr) != + if (os_file_read(IORequestRead, fh, apage, 0, srv_page_size, nullptr) != DB_SUCCESS) { err_exit: @@ -526,11 +527,12 @@ err_exit: n_retries--; goto undo_retry; } - ib::error() << "Unable to read first page of file " << name; - aligned_free(page); + sql_print_error("InnoDB: Unable to read first page of file %s", name); + aligned_free(apage); return ULINT_UNDEFINED; } + page= apage; DBUG_EXECUTE_IF("undo_space_read_fail", goto err_exit;); uint32_t id= mach_read_from_4(FIL_PAGE_SPACE_ID + page); @@ -538,18 +540,30 @@ err_exit: memcmp_aligned<2>(FIL_PAGE_SPACE_ID + page, FSP_HEADER_OFFSET + FSP_SPACE_ID + page, 4)) { - ib::error() << "Inconsistent tablespace ID in file " << name; + sql_print_error("InnoDB: Inconsistent tablespace ID in file %s", name); goto err_exit; } space_id= id; fsp_flags= mach_read_from_4(FSP_HEADER_OFFSET + FSP_SPACE_FLAGS + page); - if (buf_page_is_corrupted(false, page, fsp_flags) && - recv_sys.dblwr.restore_first_page(space_id, name, fh)) - goto err_exit; + if (buf_page_is_corrupted(false, page, fsp_flags)) + { + page= recv_sys.dblwr.find_page(page_id_t{space_id, 0}, LSN_MAX); + if (!page) + { + /* If the first page of the given user tablespace is not there + in the doublewrite buffer, then the recovery is going to fail + now. Report error only when doublewrite buffer is not empty */ + sql_print_error("InnoDB: Corrupted page " + "[page id: space=" UINT32PF ", page number=0]" + " of datafile '%s' could not be found" + " in the doublewrite buffer", space_id, name); + goto err_exit; + } - aligned_free(page); + fsp_flags= mach_read_from_4(FSP_HEADER_OFFSET + FSP_SPACE_FLAGS + page); + } } /* Load the tablespace into InnoDB's internal data structures. */ @@ -572,7 +586,7 @@ err_exit: space->set_sizes(SRV_UNDO_TABLESPACE_SIZE_IN_PAGES); space->size= file->size= uint32_t(size >> srv_page_size_shift); } - else if (!file->read_page0()) + else if (!file->read_page0(page, true)) { os_file_close(file->handle); file->handle= OS_FILE_CLOSED; @@ -581,6 +595,7 @@ err_exit: } mysql_mutex_unlock(&fil_system.mutex); + aligned_free(apage); return space_id; } @@ -743,29 +758,30 @@ srv_undo_tablespaces_init(bool create_new_db) srv_operation == SRV_OPERATION_RESTORE_DELTA) ? srv_undo_tablespaces : TRX_SYS_N_RSEGS; - if (dberr_t err= srv_all_undo_tablespaces_open(create_new_db, n_undo)) - return err; + mysql_mutex_lock(&recv_sys.mutex); + dberr_t err= srv_all_undo_tablespaces_open(create_new_db, n_undo); + mysql_mutex_unlock(&recv_sys.mutex); /* Initialize srv_undo_space_id_start=0 when there are no dedicated undo tablespaces. */ if (srv_undo_tablespaces_open == 0) srv_undo_space_id_start= 0; - if (create_new_db) + if (err == DB_SUCCESS && create_new_db) { mtr_t mtr; for (ulint i= 0; i < srv_undo_tablespaces; ++i) { mtr.start(); - dberr_t err= fsp_header_init(fil_space_get(srv_undo_space_id_start + i), - SRV_UNDO_TABLESPACE_SIZE_IN_PAGES, &mtr); + err= fsp_header_init(fil_space_get(srv_undo_space_id_start + i), + SRV_UNDO_TABLESPACE_SIZE_IN_PAGES, &mtr); mtr.commit(); if (err) - return err; + break; } } - return DB_SUCCESS; + return err; } /** Create the temporary file tablespace. @@ -1278,13 +1294,17 @@ dberr_t srv_start(bool create_new_db) return srv_init_abort(err); } - /* Open data files for system tablespace. */ - if (!fil_system.sys_space->open(false)) { - return srv_init_abort(DB_ERROR); - } + mysql_mutex_lock(&recv_sys.mutex); + bool all_opened = fil_system.sys_space->open(false); + mysql_mutex_unlock(&recv_sys.mutex); - /* Open undo tablespaces. */ - err = srv_undo_tablespaces_init(false); + /* Open data files for system tablespace. */ + if (!all_opened) { + err = DB_ERROR; + } else { + /* Open undo tablespaces. */ + err = srv_undo_tablespaces_init(false); + } if (err != DB_SUCCESS) { return srv_init_abort(err); } @@ -1393,13 +1413,17 @@ dberr_t srv_start(bool create_new_db) flushed_lsn = log_sys.get_lsn(); } - /* Open data files in the systemtablespace: we keep - them open until database shutdown */ + /* Open data files in the system tablespace: we keep + them open until database shutdown */ + mysql_mutex_lock(&recv_sys.mutex); ut_d(fil_system.sys_space->recv_size = srv_sys_space_size_debug); - err = fil_system.sys_space->open(create_new_db) - ? srv_undo_tablespaces_init(create_new_db) - : DB_ERROR; + ? DB_SUCCESS : DB_ERROR; + mysql_mutex_unlock(&recv_sys.mutex); + + if (err == DB_SUCCESS) { + err = srv_undo_tablespaces_init(create_new_db); + } /* If the force recovery is set very high then we carry on regardless of all errors. Basically this is fingers crossed mode. */ From 3da565c41d87e29233724c96c47bbf737a673b6e Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 17 Oct 2024 15:57:03 +0200 Subject: [PATCH 074/121] MDEV-35144 CREATE TABLE ... LIKE uses current innodb_compression_default instead of the create value When adding a column or index that uses plugin-defined sysvar-based options with CREATE ... LIKE the server was using the current value of the sysvar, not the default one. Because parse_option_list() function was used both in create and open and it tried to guess when it's create (need to use current sysvar value and add a new name=value pair to the list) or open (need to use default, without extending the list). Let's move the list extending functionality into a separate function and call it explicitly when needed. Operations that add new objects (CREATE, ALTER ... ADD) will extend the list, other operations (ALTER, CREATE ... LIKE, open) will not. --- mysql-test/main/plugin.result | 2 +- mysql-test/suite/innodb/r/create_like.result | 21 +++ mysql-test/suite/innodb/t/create_like.test | 16 +++ mysql-test/suite/sql_sequence/alter.result | 36 ++++- mysql-test/suite/sql_sequence/alter.test | 20 ++- sql/create_options.cc | 132 ++++++++++--------- sql/create_options.h | 6 +- sql/sql_table.cc | 22 +++- sql/sql_table.h | 6 +- 9 files changed, 184 insertions(+), 77 deletions(-) create mode 100644 mysql-test/suite/innodb/r/create_like.result create mode 100644 mysql-test/suite/innodb/t/create_like.test diff --git a/mysql-test/main/plugin.result b/mysql-test/main/plugin.result index c3d974b8052..160e3f335c2 100644 --- a/mysql-test/main/plugin.result +++ b/mysql-test/main/plugin.result @@ -216,7 +216,7 @@ show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` int(11) DEFAULT NULL -) ENGINE=EXAMPLE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci `VAROPT`=33 +) ENGINE=EXAMPLE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci `varopt`=33 drop table t1; SET @@SQL_MODE=@OLD_SQL_MODE; select 1; diff --git a/mysql-test/suite/innodb/r/create_like.result b/mysql-test/suite/innodb/r/create_like.result new file mode 100644 index 00000000000..16d7c9f63bc --- /dev/null +++ b/mysql-test/suite/innodb/r/create_like.result @@ -0,0 +1,21 @@ +# +# MDEV-35144 CREATE TABLE ... LIKE uses current innodb_compression_default instead of the create value +# +set innodb_compression_default= off; +create table t1 (a int, b blob) engine=innodb; +set innodb_compression_default= on; +create table s_import like t1; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` blob DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +show create table s_import; +Table Create Table +s_import CREATE TABLE `s_import` ( + `a` int(11) DEFAULT NULL, + `b` blob DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +DROP TABLE t1,s_import; +# End of 10.5 tests diff --git a/mysql-test/suite/innodb/t/create_like.test b/mysql-test/suite/innodb/t/create_like.test new file mode 100644 index 00000000000..d348de7ebc8 --- /dev/null +++ b/mysql-test/suite/innodb/t/create_like.test @@ -0,0 +1,16 @@ +--source include/have_innodb.inc +--echo # +--echo # MDEV-35144 CREATE TABLE ... LIKE uses current innodb_compression_default instead of the create value +--echo # + +set innodb_compression_default= off; +create table t1 (a int, b blob) engine=innodb; +set innodb_compression_default= on; +create table s_import like t1; + +show create table t1; +show create table s_import; + +DROP TABLE t1,s_import; + +--echo # End of 10.5 tests diff --git a/mysql-test/suite/sql_sequence/alter.result b/mysql-test/suite/sql_sequence/alter.result index 10f106553e3..0508660e82b 100644 --- a/mysql-test/suite/sql_sequence/alter.result +++ b/mysql-test/suite/sql_sequence/alter.result @@ -340,5 +340,39 @@ next_not_cached_value minimum_value maximum_value start_value increment cache_si 1001 1 9223372036854775806 1 1 1000 0 0 drop sequence s1,s2; # -# End of 10.5 tests +# MDEV-35144 CREATE TABLE ... LIKE uses current innodb_compression_default instead of the create value # +set @@innodb_compression_default= off; +create or replace sequence s engine=innodb; +set @@innodb_compression_default= on; +create or replace table s_import like s; +show create table s; +Table Create Table +s CREATE TABLE `s` ( + `next_not_cached_value` bigint(21) NOT NULL, + `minimum_value` bigint(21) NOT NULL, + `maximum_value` bigint(21) NOT NULL, + `start_value` bigint(21) NOT NULL COMMENT 'start value when sequences is created or value if RESTART is used', + `increment` bigint(21) NOT NULL COMMENT 'increment value', + `cache_size` bigint(21) unsigned NOT NULL, + `cycle_option` tinyint(1) unsigned NOT NULL COMMENT '0 if no cycles are allowed, 1 if the sequence should begin a new cycle when maximum_value is passed', + `cycle_count` bigint(21) NOT NULL COMMENT 'How many cycles have been done' +) ENGINE=InnoDB SEQUENCE=1 +show create table s_import; +Table Create Table +s_import CREATE TABLE `s_import` ( + `next_not_cached_value` bigint(21) NOT NULL, + `minimum_value` bigint(21) NOT NULL, + `maximum_value` bigint(21) NOT NULL, + `start_value` bigint(21) NOT NULL COMMENT 'start value when sequences is created or value if RESTART is used', + `increment` bigint(21) NOT NULL COMMENT 'increment value', + `cache_size` bigint(21) unsigned NOT NULL, + `cycle_option` tinyint(1) unsigned NOT NULL COMMENT '0 if no cycles are allowed, 1 if the sequence should begin a new cycle when maximum_value is passed', + `cycle_count` bigint(21) NOT NULL COMMENT 'How many cycles have been done' +) ENGINE=InnoDB SEQUENCE=1 +alter table s_import discard tablespace; +flush table s for export; +UNLOCK TABLES; +alter table s_import import tablespace; +drop table s,s_import; +# End of 10.5 tests diff --git a/mysql-test/suite/sql_sequence/alter.test b/mysql-test/suite/sql_sequence/alter.test index ffdb67186db..fce2cb45838 100644 --- a/mysql-test/suite/sql_sequence/alter.test +++ b/mysql-test/suite/sql_sequence/alter.test @@ -239,5 +239,23 @@ drop sequence s1,s2; --enable_ps_protocol --echo # ---echo # End of 10.5 tests +--echo # MDEV-35144 CREATE TABLE ... LIKE uses current innodb_compression_default instead of the create value --echo # + +set @@innodb_compression_default= off; +create or replace sequence s engine=innodb; +set @@innodb_compression_default= on; +create or replace table s_import like s; + +show create table s; +show create table s_import; + +alter table s_import discard tablespace; +flush table s for export; +--copy_file $MYSQLD_DATADIR/test/s.ibd $MYSQLD_DATADIR/test/s_import.ibd +--copy_file $MYSQLD_DATADIR/test/s.cfg $MYSQLD_DATADIR/test/s_import.cfg +UNLOCK TABLES; +alter table s_import import tablespace; +drop table s,s_import; + +--echo # End of 10.5 tests diff --git a/sql/create_options.cc b/sql/create_options.cc index 60e9b733efc..6e1217dcdfd 100644 --- a/sql/create_options.cc +++ b/sql/create_options.cc @@ -117,15 +117,13 @@ static bool report_unknown_option(THD *thd, engine_option_value *val, #define value_ptr(STRUCT,OPT) ((char*)(STRUCT) + (OPT)->offset) -static bool set_one_value(ha_create_table_option *opt, - THD *thd, const LEX_CSTRING *value, void *base, - bool suppress_warning, - MEM_ROOT *root) +static bool set_one_value(ha_create_table_option *opt, THD *thd, + const LEX_CSTRING *value, void *base, + bool suppress_warning, MEM_ROOT *root) { DBUG_ENTER("set_one_value"); DBUG_PRINT("enter", ("opt: %p type: %u name '%s' value: '%s'", - opt, - opt->type, opt->name, + opt, opt->type, opt->name, (value->str ? value->str : ""))); switch (opt->type) { @@ -141,10 +139,9 @@ static bool set_one_value(ha_create_table_option *opt, DBUG_RETURN(0); } - my_option optp= - { opt->name, 1, 0, (uchar **)val, 0, 0, GET_ULL, + my_option optp= { opt->name, 1, 0, (uchar **)val, 0, 0, GET_ULL, REQUIRED_ARG, (longlong)opt->def_value, (longlong)opt->min_value, - opt->max_value, 0, (long) opt->block_size, 0}; + opt->max_value, 0, (long) opt->block_size, 0 }; ulonglong orig_val= strtoull(value->str, NULL, 10); my_bool unused; @@ -236,6 +233,63 @@ static bool set_one_value(ha_create_table_option *opt, static const size_t ha_option_type_sizeof[]= { sizeof(ulonglong), sizeof(char *), sizeof(uint), sizeof(bool)}; +/** + Appends values of sysvar-based options if needed + + @param thd thread handler + @param option_list list of options given by user + @param rules list of option description by engine + @param root MEM_ROOT where allocate memory + + @retval TRUE Error + @retval FALSE OK +*/ + +bool extend_option_list(THD* thd, handlerton *hton, bool create, + engine_option_value **option_list, + ha_create_table_option *rules, MEM_ROOT *root) +{ + DBUG_ENTER("extend_option_list"); + + for (ha_create_table_option *opt= rules; rules && opt->name; opt++) + { + if (opt->var) + { + engine_option_value *found= NULL, *last; + for (engine_option_value *val= *option_list; val; val= val->next) + { + last= val; + if (!system_charset_info->strnncoll(opt->name, opt->name_length, + val->name.str, val->name.length)) + found= val; // find the last matching + } + if (found ? !found->value.str : create) + { + /* add the current value of the corresponding sysvar to the list */ + sys_var *sysvar= find_hton_sysvar(hton, opt->var); + DBUG_ASSERT(sysvar); + + if (!sysvar->session_is_default(thd)) + { + StringBuffer<256> sbuf(system_charset_info); + String *str= sysvar->val_str(&sbuf, thd, OPT_SESSION, &null_clex_str); + DBUG_ASSERT(str); + + LEX_CSTRING name= { opt->name, opt->name_length }; + LEX_CSTRING value= safe_lexcstrdup_root(root, str->to_lex_cstring()); + if (found) + found->value= value; + else + new (root) engine_option_value(name, value, + opt->type != HA_OPTION_TYPE_ULL, option_list, &last); + } + } + } + } + DBUG_RETURN(FALSE); +} + + /** Creates option structure and parses list of options in it @@ -250,7 +304,7 @@ static const size_t ha_option_type_sizeof[]= @retval FALSE OK */ -bool parse_option_list(THD* thd, handlerton *hton, void *option_struct_arg, +bool parse_option_list(THD* thd, void *option_struct_arg, engine_option_value **option_list, ha_create_table_option *rules, bool suppress_warning, MEM_ROOT *root) @@ -296,58 +350,8 @@ bool parse_option_list(THD* thd, handlerton *hton, void *option_struct_arg, break; } if (!seen || (opt->var && !last->value.str)) - { - LEX_CSTRING default_val= null_clex_str; - - /* - Okay, here's the logic for sysvar options: - 1. When we parse CREATE TABLE and sysvar option was not explicitly - mentioned we add it to the list as if it was specified with the - *current* value of the underlying sysvar. - 2. But only if the underlying sysvar value is different from the - sysvar's default. - 3. If it's ALTER TABLE or CREATE_SEQUENCE and the sysvar option was - not explicitly mentioned - do nothing, do not add it to the list. - 4. But if it was ALTER TABLE with sysvar option = DEFAULT, we - add it to the list (under the same condition #2). - 5. If we're here parsing the option list from the .frm file - for a normal open_table() and the sysvar option was not there - - do not add it to the list (makes no sense anyway) and - use the *default* value of the underlying sysvar. Because - sysvar value can change, but it should not affect existing tables. - This is how it's implemented: the current sysvar value is added - to the list if suppress_warning is FALSE (meaning a table is created, - that is CREATE TABLE or ALTER TABLE) and it's actually a CREATE TABLE - command or it's an ALTER TABLE and the option was seen (=DEFAULT). - - Note that if the option was set explicitly (not =DEFAULT) it wouldn't - have passes the if() condition above. - */ - if (!suppress_warning && opt->var && - (thd->lex->sql_command == SQLCOM_CREATE_TABLE || seen)) - { - // take a value from the variable and add it to the list - sys_var *sysvar= find_hton_sysvar(hton, opt->var); - DBUG_ASSERT(sysvar); - - if (!sysvar->session_is_default(thd)) - { - char buf[256]; - String sbuf(buf, sizeof(buf), system_charset_info), *str; - if ((str= sysvar->val_str(&sbuf, thd, OPT_SESSION, &null_clex_str))) - { - LEX_CSTRING name= { opt->name, opt->name_length }; - default_val.str= strmake_root(root, str->ptr(), str->length()); - default_val.length= str->length(); - val= new (root) engine_option_value(name, default_val, - opt->type != HA_OPTION_TYPE_ULL, option_list, &last); - val->parsed= true; - } - } - } - set_one_value(opt, thd, &default_val, *option_struct, + set_one_value(opt, thd, &null_clex_str, *option_struct, suppress_warning, root); - } } for (val= *option_list; val; val= val->next) @@ -474,13 +478,13 @@ bool parse_engine_table_options(THD *thd, handlerton *ht, TABLE_SHARE *share) MEM_ROOT *root= &share->mem_root; DBUG_ENTER("parse_engine_table_options"); - if (parse_option_list(thd, ht, &share->option_struct, & share->option_list, + if (parse_option_list(thd, &share->option_struct, & share->option_list, ht->table_options, TRUE, root)) DBUG_RETURN(TRUE); for (Field **field= share->field; *field; field++) { - if (parse_option_list(thd, ht, &(*field)->option_struct, + if (parse_option_list(thd, &(*field)->option_struct, & (*field)->option_list, ht->field_options, TRUE, root)) DBUG_RETURN(TRUE); @@ -488,7 +492,7 @@ bool parse_engine_table_options(THD *thd, handlerton *ht, TABLE_SHARE *share) for (uint index= 0; index < share->keys; index ++) { - if (parse_option_list(thd, ht, &share->key_info[index].option_struct, + if (parse_option_list(thd, &share->key_info[index].option_struct, & share->key_info[index].option_list, ht->index_options, TRUE, root)) DBUG_RETURN(TRUE); diff --git a/sql/create_options.h b/sql/create_options.h index ce64516794b..fc208d933a0 100644 --- a/sql/create_options.h +++ b/sql/create_options.h @@ -83,10 +83,14 @@ class Create_field; bool resolve_sysvar_table_options(handlerton *hton); void free_sysvar_table_options(handlerton *hton); bool parse_engine_table_options(THD *thd, handlerton *ht, TABLE_SHARE *share); -bool parse_option_list(THD* thd, handlerton *hton, void *option_struct, +bool parse_option_list(THD* thd, void *option_struct, engine_option_value **option_list, ha_create_table_option *rules, bool suppress_warning, MEM_ROOT *root); +bool extend_option_list(THD* thd, handlerton *hton, bool create, + engine_option_value **option_list, + ha_create_table_option *rules, MEM_ROOT *root); + bool engine_table_options_frm_read(const uchar *buff, size_t length, TABLE_SHARE *share); engine_option_value *merge_engine_table_options(engine_option_value *source, diff --git a/sql/sql_table.cc b/sql/sql_table.cc index c0f2502d61d..9daeb582938 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -3767,7 +3767,11 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, sql_field->offset= record_offset; if (MTYP_TYPENR(sql_field->unireg_check) == Field::NEXT_NUMBER) auto_increment++; - if (parse_option_list(thd, create_info->db_type, &sql_field->option_struct, + extend_option_list(thd, create_info->db_type, !sql_field->field, + &sql_field->option_list, + create_info->db_type->field_options, + thd->stmt_arena->mem_root); + if (parse_option_list(thd, &sql_field->option_struct, &sql_field->option_list, create_info->db_type->field_options, FALSE, thd->mem_root)) @@ -4034,7 +4038,10 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, key_info->usable_key_parts= key_number; key_info->algorithm= key->key_create_info.algorithm; key_info->option_list= key->option_list; - if (parse_option_list(thd, create_info->db_type, &key_info->option_struct, + extend_option_list(thd, create_info->db_type, !key->old, + &key_info->option_list, create_info->db_type->index_options, + thd->stmt_arena->mem_root); + if (parse_option_list(thd, &key_info->option_struct, &key_info->option_list, create_info->db_type->index_options, FALSE, thd->mem_root)) @@ -4624,10 +4631,13 @@ without_overlaps_err: push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, ER_UNKNOWN_OPTION, ER_THD(thd, ER_UNKNOWN_OPTION), "transactional"); - if (parse_option_list(thd, file->partition_ht(), &create_info->option_struct, - &create_info->option_list, - file->partition_ht()->table_options, FALSE, - thd->mem_root)) + extend_option_list(thd, file->partition_ht(), + !thd->lex->create_like() && create_table_mode > C_ALTER_TABLE, + &create_info->option_list, file->partition_ht()->table_options, + thd->stmt_arena->mem_root); + if (parse_option_list(thd, &create_info->option_struct, + &create_info->option_list, + file->partition_ht()->table_options, FALSE, thd->mem_root)) DBUG_RETURN(TRUE); DBUG_EXECUTE_IF("key", diff --git a/sql/sql_table.h b/sql/sql_table.h index 8897493d8f4..f2be5654c66 100644 --- a/sql/sql_table.h +++ b/sql/sql_table.h @@ -190,9 +190,9 @@ bool add_keyword_to_query(THD *thd, String *result, const LEX_CSTRING *keyword, */ #define C_CREATE_SELECT(X) ((X) > 0 ? (X) : 0) #define C_ORDINARY_CREATE 0 -#define C_ALTER_TABLE -1 -#define C_ALTER_TABLE_FRM_ONLY -2 -#define C_ASSISTED_DISCOVERY -3 +#define C_ASSISTED_DISCOVERY -1 +#define C_ALTER_TABLE -2 +#define C_ALTER_TABLE_FRM_ONLY -3 int mysql_create_table_no_lock(THD *thd, Table_specification_st *create_info, Alter_info *alter_info, bool *is_trans, From e1e836fc7605969f2dc6efff28a8a9f0aea7d8fe Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 17 Oct 2024 09:59:21 +0200 Subject: [PATCH 075/121] update results after the merge --- mysql-test/suite/plugins/r/pam.result | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/suite/plugins/r/pam.result b/mysql-test/suite/plugins/r/pam.result index b8588916169..5b445a05372 100644 --- a/mysql-test/suite/plugins/r/pam.result +++ b/mysql-test/suite/plugins/r/pam.result @@ -103,7 +103,7 @@ select user(), current_user(), database(); user() current_user() database() pam_test@localhost pam_test@% test set password='foo'; -ERROR HY000: SET PASSWORD is ignored for users authenticating via pam plugin +ERROR HY000: SET PASSWORD is not applicable for users authenticating via pam plugin show create user; CREATE USER for pam_test@% CREATE USER `pam_test`@`%` IDENTIFIED VIA pam USING 'mariadb_mtr' From 3693fb9581283030c3e07d933cdfb73c84c3f2b6 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 24 Jul 2024 19:00:15 +0200 Subject: [PATCH 076/121] MDEV-25199 cluster fails to start up if you need innodb in your test - enable it yourself --- mysql-test/suite/galera/disabled.def | 1 - mysql-test/suite/galera/t/galera_pc_recovery.test | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/mysql-test/suite/galera/disabled.def b/mysql-test/suite/galera/disabled.def index e00bdbf85c0..8068088fec8 100644 --- a/mysql-test/suite/galera/disabled.def +++ b/mysql-test/suite/galera/disabled.def @@ -11,7 +11,6 @@ ############################################################################## galera_as_slave_ctas : MDEV-28378 timeout -galera_pc_recovery : MDEV-25199 cluster fails to start up galera_sequences : MDEV-32561 WSREP FSM failure: no such a transition REPLICATING -> COMMITTED galera_concurrent_ctas : MDEV-32779 galera_concurrent_ctas: assertion in the galera::ReplicatorSMM::finish_cert() galera_as_slave_replay : MDEV-32780 galera_as_slave_replay: assertion in the wsrep::transaction::before_rollback() diff --git a/mysql-test/suite/galera/t/galera_pc_recovery.test b/mysql-test/suite/galera/t/galera_pc_recovery.test index 0fd9c8ab3d9..631054103a3 100644 --- a/mysql-test/suite/galera/t/galera_pc_recovery.test +++ b/mysql-test/suite/galera/t/galera_pc_recovery.test @@ -33,8 +33,8 @@ SELECT COUNT(*) = 1 FROM t1; # Perform --wsrep-recover and preserve the positions into variables by placing them in $MYSQL_TMP_DIR/galera_wsrep_start_position.inc and then --source'ing it ---exec $MYSQLD --defaults-group-suffix=.1 --defaults-file=$MYSQLTEST_VARDIR/my.cnf --wsrep-recover --log-error=$MYSQL_TMP_DIR/galera_wsrep_recover.1.log > $MYSQL_TMP_DIR/galera_wsrep_recover.1.log 2>&1 ---exec $MYSQLD --defaults-group-suffix=.2 --defaults-file=$MYSQLTEST_VARDIR/my.cnf --wsrep-recover --log-error=$MYSQL_TMP_DIR/galera_wsrep_recover.2.log > $MYSQL_TMP_DIR/galera_wsrep_recover.2.log 2>&1 +--exec $MYSQLD --defaults-group-suffix=.1 --defaults-file=$MYSQLTEST_VARDIR/my.cnf --innodb --wsrep-recover --log-error=$MYSQL_TMP_DIR/galera_wsrep_recover.1.log > $MYSQL_TMP_DIR/galera_wsrep_recover.1.log 2>&1 +--exec $MYSQLD --defaults-group-suffix=.2 --defaults-file=$MYSQLTEST_VARDIR/my.cnf --innodb --wsrep-recover --log-error=$MYSQL_TMP_DIR/galera_wsrep_recover.2.log > $MYSQL_TMP_DIR/galera_wsrep_recover.2.log 2>&1 --perl use strict; From bfa15f9b340fcc884ce4939900c383b0ed0902a3 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Mon, 29 Jul 2024 17:54:06 +0200 Subject: [PATCH 077/121] C/C compilation failures under -flto --- libmariadb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmariadb b/libmariadb index 486ce75d642..6c0e755edf7 160000 --- a/libmariadb +++ b/libmariadb @@ -1 +1 @@ -Subproject commit 486ce75d6426c20c4e9f8e7fe4df8ddec193d7e2 +Subproject commit 6c0e755edf742c362d4e3b7397dc4e7a96e1470c From 3e3fdb25f1379d8ce069b2e5db77aa2ef82fdbc5 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sun, 5 Nov 2023 19:05:16 +0100 Subject: [PATCH 078/121] better disable lto for libmysqld_exports.cc e.g. also when -flto is set in CMAKE_CXX_FLAGS_RELWITHDEBINFO --- cmake/libutils.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/libutils.cmake b/cmake/libutils.cmake index 3263c08ec44..8fd8f323660 100644 --- a/cmake/libutils.cmake +++ b/cmake/libutils.cmake @@ -89,7 +89,7 @@ MACRO(CREATE_EXPORTS_FILE VAR TARGET API_FUNCTIONS) CONFIGURE_FILE_CONTENT(${CONTENT} ${EXPORTS}) # Avoid "function redeclared as variable" error # when using gcc/clang option -flto(link time optimization) - IF(" ${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} " MATCHES " -flto") + IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") SET_SOURCE_FILES_PROPERTIES(${EXPORTS} PROPERTIES COMPILE_FLAGS "-fno-lto") ENDIF() SET(${VAR} ${EXPORTS}) From a20c79da13a5c18cfc0017a13b432cfa39d8ebb3 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Mon, 6 Nov 2023 17:31:09 +0100 Subject: [PATCH 079/121] MDEV-25633 MariaDB crashes when compiled with link time optimizations don't force -static-libgcc in gcc builds gcc can decide automatically if it's needed. forcing static libgcc breaks lto. --- cmake/build_configurations/mysql_release.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/build_configurations/mysql_release.cmake b/cmake/build_configurations/mysql_release.cmake index 6c213bf862d..096b0afd6aa 100644 --- a/cmake/build_configurations/mysql_release.cmake +++ b/cmake/build_configurations/mysql_release.cmake @@ -186,12 +186,12 @@ IF(UNIX) # Default GCC flags IF(CMAKE_COMPILER_IS_GNUCC) - SET(COMMON_C_FLAGS "-g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -Wno-uninitialized") + SET(COMMON_C_FLAGS "-g -fno-omit-frame-pointer -fno-strict-aliasing -Wno-uninitialized") SET(CMAKE_C_FLAGS_DEBUG "-O ${COMMON_C_FLAGS}") SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_C_FLAGS}") ENDIF() IF(CMAKE_COMPILER_IS_GNUCXX) - SET(COMMON_CXX_FLAGS "-g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -Wno-uninitialized") + SET(COMMON_CXX_FLAGS "-g -fno-omit-frame-pointer -fno-strict-aliasing -Wno-uninitialized") SET(CMAKE_CXX_FLAGS_DEBUG "-O ${COMMON_CXX_FLAGS}") SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 ${COMMON_CXX_FLAGS}") ENDIF() From 99178311ac6091eff092c44005db06c0bcbe7c66 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sat, 4 Nov 2023 10:11:51 +0100 Subject: [PATCH 080/121] don't disable lto in DEB builds --- debian/rules | 5 ----- 1 file changed, 5 deletions(-) diff --git a/debian/rules b/debian/rules index 04061be5694..554e5947d49 100755 --- a/debian/rules +++ b/debian/rules @@ -4,11 +4,6 @@ # https://wiki.debian.org/Hardening export DEB_BUILD_MAINT_OPTIONS = hardening=+all -# Disable LTO on Ubuntu, see LP: #1970634 and https://jira.mariadb.org/browse/MDEV-25633 -ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes), yes) - export DEB_BUILD_MAINT_OPTIONS += optimize=-lto -endif - DPKG_EXPORT_BUILDFLAGS = 1 # Include all defaults, including buildflags.mk include /usr/share/dpkg/default.mk From 3a1cf2c85b181923f0a9cdee17a38aef1563042f Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 18 Jul 2024 15:20:42 +0200 Subject: [PATCH 081/121] MDEV-34679 ER_BAD_FIELD uses non-localizable substrings --- mysql-test/main/alias.result | 2 +- mysql-test/main/alter_table.result | 2 +- .../main/alter_table_combinations.result | 2 +- mysql-test/main/analyze_stmt.result | 10 +- mysql-test/main/compress.result | 2 +- mysql-test/main/cte_nonrecursive.result | 16 +- mysql-test/main/cte_recursive.result | 16 +- mysql-test/main/delayed.result | 2 +- mysql-test/main/delete.result | 8 +- mysql-test/main/delete_returning.result | 2 +- mysql-test/main/derived.result | 30 +- mysql-test/main/dyncol.result | 2 +- mysql-test/main/errors.result | 24 +- mysql-test/main/explain.result | 2 +- mysql-test/main/fulltext_order_by.result | 4 +- mysql-test/main/func_gconcat.result | 2 +- mysql-test/main/func_math.result | 2 +- mysql-test/main/get_diagnostics.result | 8 +- mysql-test/main/group_by.result | 12 +- mysql-test/main/having.result | 20 +- .../main/host_cache_size_functionality.result | 2 +- mysql-test/main/insert.result | 8 +- mysql-test/main/insert_returning.result | 12 +- mysql-test/main/insert_select.result | 10 +- mysql-test/main/insert_update.result | 10 +- mysql-test/main/invisible_field.result | 6 +- mysql-test/main/invisible_field_debug.result | 24 +- .../invisible_field_grant_completely.result | 2 +- mysql-test/main/join.result | 38 +- mysql-test/main/join_nested.result | 14 +- mysql-test/main/join_nested_jcl6.result | 14 +- mysql-test/main/join_outer.result | 14 +- mysql-test/main/join_outer_jcl6.result | 14 +- mysql-test/main/keywords.result | 50 +-- mysql-test/main/kill.result | 2 +- mysql-test/main/locale.result | 2 +- mysql-test/main/long_unique.result | 26 +- mysql-test/main/mdev6830.result | 2 +- mysql-test/main/multi_update.result | 16 +- .../main/myisam_explain_non_select_all.result | 8 +- mysql-test/main/mysqldump.result | 2 +- mysql-test/main/mysqldump_restore.result | 2 +- mysql-test/main/mysqltest.result | 8 +- .../main/mysqltest_cont_on_error.result | 4 +- mysql-test/main/mysqltest_ps.result | 8 +- mysql-test/main/named_pipe.result | 2 +- mysql-test/main/order_by.result | 36 +- mysql-test/main/parser.result | 6 +- mysql-test/main/partition.result | 2 +- mysql-test/main/partition_column.result | 2 +- mysql-test/main/partition_error.result | 10 +- mysql-test/main/partition_mgm_err.result | 2 +- mysql-test/main/pool_of_threads.result | 2 +- mysql-test/main/ps.result | 16 +- mysql-test/main/ps_1general.result | 6 +- mysql-test/main/ps_2myisam.result | 2 +- mysql-test/main/ps_3innodb.result | 2 +- mysql-test/main/ps_4heap.result | 2 +- mysql-test/main/ps_5merge.result | 4 +- mysql-test/main/ps_ddl1.result | 16 +- mysql-test/main/query_cache_with_views.result | 2 +- mysql-test/main/replace_returning.result | 8 +- mysql-test/main/replace_returning_err.result | 8 +- mysql-test/main/select.result | 14 +- mysql-test/main/select_jcl6.result | 14 +- mysql-test/main/select_pkeycache.result | 14 +- mysql-test/main/sp-dynamic.result | 4 +- mysql-test/main/sp-error.result | 137 +----- mysql-test/main/sp-error.test | 398 +++--------------- mysql-test/main/sp.result | 28 +- mysql-test/main/ssl.result | 2 +- mysql-test/main/ssl_compress.result | 2 +- mysql-test/main/subselect.result | 42 +- mysql-test/main/subselect3.result | 6 +- mysql-test/main/subselect3_jcl6.result | 6 +- mysql-test/main/subselect4.result | 2 +- mysql-test/main/subselect_exists2in.result | 2 +- .../main/subselect_no_exists_to_in.result | 42 +- mysql-test/main/subselect_no_mat.result | 42 +- mysql-test/main/subselect_no_opts.result | 42 +- mysql-test/main/subselect_no_scache.result | 42 +- mysql-test/main/subselect_no_semijoin.result | 42 +- mysql-test/main/subselect_sj2.result | 2 +- mysql-test/main/subselect_sj2_jcl6.result | 2 +- mysql-test/main/subselect_sj2_mat.result | 2 +- mysql-test/main/table_value_constr.result | 8 +- mysql-test/main/temp_table.result | 2 +- mysql-test/main/union.result | 14 +- mysql-test/main/update.result | 8 +- mysql-test/main/update_use_source.result | 2 +- mysql-test/main/user_var.result | 2 +- mysql-test/main/varbinary.result | 6 +- mysql-test/main/variables.result | 2 +- mysql-test/main/view.result | 30 +- .../compat/oracle/r/anonymous_derived.result | 2 +- .../suite/compat/oracle/r/func_misc.result | 4 +- mysql-test/suite/compat/oracle/r/ps.result | 4 +- .../compat/oracle/r/sp-cursor-rowtype.result | 4 +- .../compat/oracle/r/table_value_constr.result | 6 +- .../suite/funcs_1/r/innodb_views.result | 12 +- .../funcs_1/r/is_column_privileges.result | 2 +- .../suite/funcs_1/r/memory_views.result | 12 +- .../suite/funcs_1/r/myisam_views-big.result | 12 +- mysql-test/suite/funcs_1/r/storedproc.result | 4 +- mysql-test/suite/handler/aria.result | 6 +- mysql-test/suite/handler/heap.result | 6 +- mysql-test/suite/handler/innodb.result | 6 +- mysql-test/suite/handler/myisam.result | 6 +- mysql-test/suite/innodb/r/innodb.result | 2 +- mysql-test/suite/innodb/r/innodb_mysql.result | 4 +- .../r/temporary_table_optimization.result | 2 +- mysql-test/suite/innodb_fts/r/fulltext.result | 4 +- .../innodb_fts/r/fulltext_order_by.result | 4 +- mysql-test/suite/json/r/json_no_table.result | 2 +- mysql-test/suite/json/r/json_table.result | 36 +- .../suite/json/r/json_table_mysql.result | 24 +- mysql-test/suite/maria/alter.result | 6 +- mysql-test/suite/maria/ps_maria.result | 2 +- mysql-test/suite/plugins/r/audit_null.result | 2 +- .../suite/rpl/r/create_or_replace2.result | 2 +- .../suite/rpl/r/rpl_trans_no_trans.result | 2 +- mysql-test/suite/sql_sequence/next.result | 2 +- .../sys_vars/r/aria_log_dir_path_basic.result | 2 +- .../r/auto_increment_increment_basic.result | 6 +- .../r/auto_increment_offset_basic.result | 6 +- .../suite/sys_vars/r/autocommit_basic.result | 6 +- .../r/automatic_sp_privileges_basic.result | 6 +- .../suite/sys_vars/r/basedir_basic.result | 2 +- .../suite/sys_vars/r/big_tables_basic.result | 6 +- .../sys_vars/r/bind_address_basic.result | 2 +- .../sys_vars/r/binlog_cache_size_basic.result | 4 +- .../r/binlog_expire_logs_seconds_basic.result | 6 +- .../r/binlog_stmt_cache_size_basic.result | 4 +- .../r/bulk_insert_buffer_size_basic.result | 6 +- .../r/character_set_client_basic.result | 8 +- .../r/character_set_connection_basic.result | 8 +- .../r/character_set_database_basic.result | 8 +- .../r/character_set_filesystem_basic.result | 8 +- .../r/character_set_results_basic.result | Bin 16295 -> 16276 bytes .../r/character_set_server_basic.result | 8 +- .../r/character_set_system_basic.result | 2 +- .../r/collation_connection_basic.result | 8 +- .../r/collation_database_basic.result | 8 +- .../sys_vars/r/collation_server_basic.result | 8 +- .../sys_vars/r/completion_type_basic.result | 6 +- .../sys_vars/r/concurrent_insert_basic.result | 4 +- .../sys_vars/r/connect_timeout_basic.result | 4 +- .../suite/sys_vars/r/datadir_basic.result | 2 +- .../r/default_master_connection_basic.result | 6 +- .../r/default_storage_engine_basic.result | 6 +- .../r/default_tmp_storage_engine_basic.result | 6 +- .../r/default_week_format_basic.result | 6 +- .../r/delayed_insert_limit_basic.result | 6 +- .../r/delayed_insert_timeout_basic.result | 6 +- .../r/delayed_queue_size_basic.result | 6 +- .../r/div_precision_increment_basic.result | 6 +- .../suite/sys_vars/r/error_count_basic.result | 2 +- .../sys_vars/r/event_scheduler_basic.result | 6 +- .../sys_vars/r/expire_logs_days_basic.result | 6 +- .../suite/sys_vars/r/flush_basic.result | 4 +- .../r/foreign_key_checks_basic.result | 4 +- .../sys_vars/r/ft_boolean_syntax_basic.result | 4 +- .../suite/sys_vars/r/general_log_basic.result | 6 +- .../r/group_concat_max_len_basic.result | 6 +- .../sys_vars/r/have_compress_basic.result | 2 +- .../suite/sys_vars/r/have_crypt_basic.result | 2 +- .../suite/sys_vars/r/have_csv_basic.result | 53 --- .../r/have_dynamic_loading_basic.result | 2 +- .../sys_vars/r/have_geometry_basic.result | 2 +- .../suite/sys_vars/r/have_innodb_basic.result | 53 --- .../sys_vars/r/have_openssl_basic.result | 2 +- .../sys_vars/r/have_query_cache_basic.result | 2 +- .../sys_vars/r/have_rtree_keys_basic.result | 2 +- .../suite/sys_vars/r/have_ssl_basic.result | 2 +- .../sys_vars/r/have_symlink_basic.result | 2 +- .../suite/sys_vars/r/hostname_basic.result | 2 +- .../suite/sys_vars/r/identity_basic.result | 6 +- .../sys_vars/r/init_connect_basic.result | Bin 3869 -> 3861 bytes .../suite/sys_vars/r/init_slave_basic.result | 4 +- .../innodb_adaptive_flushing_lwm_basic.result | 2 +- ...odb_adaptive_hash_index_parts_basic.result | 2 +- .../innodb_autoextend_increment_basic.result | 2 +- .../r/innodb_autoinc_lock_mode_basic.result | 2 +- ...innodb_buffer_pool_chunk_size_basic.result | 2 +- .../r/innodb_buffer_pool_size_basic.result | 2 +- ...ression_failure_threshold_pct_basic.result | 2 +- ...nnodb_compression_pad_pct_max_basic.result | 2 +- .../r/innodb_data_file_path_basic.result | 2 +- .../r/innodb_data_home_dir_basic.result | 2 +- .../r/innodb_doublewrite_basic.result | 2 +- .../r/innodb_encrypt_log_basic.result | 2 +- .../r/innodb_fast_shutdown_basic.result | 2 +- .../r/innodb_file_io_threads_basic.result | 4 +- .../r/innodb_file_per_table_basic.result | 2 +- .../innodb_flush_log_at_timeout_basic.result | 2 +- ...nnodb_flush_log_at_trx_commit_basic.result | 2 +- .../r/innodb_flush_method_basic.result | 2 +- .../r/innodb_flushing_avg_loops_basic.result | 2 +- .../r/innodb_force_recovery_basic.result | 2 +- .../r/innodb_lock_wait_timeout_basic.result | 2 +- .../r/innodb_log_buffer_size_basic.result | 2 +- .../r/innodb_log_file_size_basic.result | 2 +- .../r/innodb_log_group_home_dir_basic.result | 2 +- .../r/innodb_max_dirty_pages_pct_basic.result | 2 +- ...nnodb_max_dirty_pages_pct_lwm_basic.result | 2 +- .../r/innodb_max_purge_lag_basic.result | 2 +- .../r/innodb_max_purge_lag_delay_basic.result | 2 +- .../sys_vars/r/innodb_open_files_basic.result | 2 +- .../r/innodb_purge_batch_size_basic.result | 2 +- ...purge_rseg_truncate_frequency_basic.result | 2 +- .../r/innodb_rollback_on_timeout_basic.result | 2 +- .../r/innodb_sync_spin_loops_basic.result | 2 +- .../r/innodb_table_locks_basic.result | 6 +- .../r/innodb_temp_data_file_path_basic.result | 2 +- .../r/innodb_undo_directory_basic.result | 2 +- .../r/innodb_undo_log_truncate_basic.result | 2 +- .../r/innodb_undo_tablespaces_basic.result | 2 +- .../r/innodb_use_native_aio_basic.result | 2 +- .../suite/sys_vars/r/insert_id_basic.result | 6 +- .../r/interactive_timeout_basic.result | 6 +- .../sys_vars/r/join_buffer_size_basic.result | 6 +- .../r/keep_files_on_create_basic.result | 6 +- .../sys_vars/r/key_buffer_size_basic.result | 6 +- .../r/key_cache_age_threshold_basic.result | 6 +- .../r/key_cache_block_size_basic.result | 6 +- .../r/key_cache_division_limit_basic.result | 6 +- .../r/key_cache_file_hash_size_basic.result | 6 +- .../sys_vars/r/lc_time_names_basic.result | 8 +- .../suite/sys_vars/r/license_basic.result | 2 +- .../sys_vars/r/local_infile_basic.result | 4 +- .../sys_vars/r/lock_wait_timeout_basic.result | 6 +- ...g_bin_trust_function_creators_basic.result | 6 +- .../sys_vars/r/log_slow_queries_basic.result | 132 ------ .../sys_vars/r/log_warnings_basic.result | 6 +- .../sys_vars/r/long_query_time_basic.result | 6 +- .../r/low_priority_updates_basic.result | 6 +- .../r/max_allowed_packet_basic.result | 6 +- .../r/max_binlog_cache_size_basic.result | 6 +- .../sys_vars/r/max_binlog_size_basic.result | 6 +- .../r/max_binlog_stmt_cache_size_basic.result | 6 +- .../r/max_connect_errors_basic.result | 6 +- .../sys_vars/r/max_connections_basic.result | 6 +- .../r/max_delayed_threads_basic.result | 6 +- .../sys_vars/r/max_error_count_basic.result | 6 +- .../r/max_heap_table_size_basic.result | 6 +- .../r/max_insert_delayed_threads_basic.result | 6 +- .../r/max_length_for_sort_data_basic.result | 6 +- .../r/max_prepared_stmt_count_basic.result | 6 +- .../r/max_relay_log_size_basic.result | 6 +- .../sys_vars/r/max_seeks_for_key_basic.result | 6 +- .../r/max_sp_recursion_depth_basic.result | 6 +- .../r/max_statement_time_basic.result | 6 +- .../sys_vars/r/max_tmp_tables_basic.result | 6 +- .../r/max_user_connections_basic.result | 6 +- .../r/max_write_lock_count_basic.result | 6 +- .../r/min_examined_row_limit_basic.result | 6 +- .../r/myisam_data_pointer_size_basic.result | 2 +- .../r/myisam_max_sort_file_size_basic.result | 2 +- .../r/myisam_repair_threads_basic.result | 6 +- .../r/myisam_sort_buffer_size_basic.result | 6 +- .../sys_vars/r/myisam_use_mmap_basic.result | 2 +- .../r/mysql56_temporal_format_basic.result | 4 +- .../sys_vars/r/net_buffer_length_basic.result | 6 +- .../sys_vars/r/net_read_timeout_basic.result | 6 +- .../sys_vars/r/net_retry_count_basic.result | 6 +- .../sys_vars/r/net_write_timeout_basic.result | 6 +- .../sys_vars/r/old_passwords_basic.result | 6 +- .../r/optimizer_prune_level_basic.result | 6 +- .../r/optimizer_search_depth_basic.result | 6 +- .../r/preload_buffer_size_basic.result | 6 +- .../sys_vars/r/pseudo_slave_mode_basic.result | 4 +- .../r/query_alloc_block_size_basic.result | 6 +- .../sys_vars/r/query_cache_limit_basic.result | 6 +- .../r/query_cache_min_res_unit_basic.result | 6 +- .../sys_vars/r/query_cache_size_basic.result | 6 +- .../query_cache_wlock_invalidate_basic.result | 6 +- .../r/query_prealloc_size_basic.result | 6 +- .../r/range_alloc_block_size_basic.result | 6 +- .../sys_vars/r/read_buffer_size_basic.result | 6 +- .../suite/sys_vars/r/read_only_basic.result | 6 +- .../r/read_rnd_buffer_size_basic.result | 6 +- .../sys_vars/r/relay_log_purge_basic.result | 4 +- .../suite/sys_vars/r/secure_auth_basic.result | 2 +- .../suite/sys_vars/r/server_id_basic.result | 2 +- .../r/slave_compressed_protocol_basic.result | 2 +- .../r/slave_ddl_exec_mode_basic.result | 2 +- .../r/slave_max_allowed_packet_basic.result | 6 +- .../sys_vars/r/slave_net_timeout_basic.result | 2 +- .../r/slave_transaction_retries_basic.result | 2 +- ...ve_transaction_retry_interval_basic.result | 2 +- .../sys_vars/r/slow_launch_time_basic.result | 6 +- .../sys_vars/r/slow_query_log_basic.result | 6 +- .../sys_vars/r/sort_buffer_size_basic.result | 6 +- .../sys_vars/r/sql_big_selects_basic.result | 4 +- .../sys_vars/r/sql_buffer_result_basic.result | 4 +- .../suite/sys_vars/r/sql_log_bin_basic.result | 4 +- .../suite/sys_vars/r/sql_log_off_basic.result | 4 +- .../suite/sys_vars/r/sql_notes_basic.result | 4 +- .../r/sql_quote_show_create_basic.result | 4 +- .../sys_vars/r/sql_safe_updates_basic.result | 4 +- .../sys_vars/r/sql_warnings_basic.result | 4 +- .../suite/sys_vars/r/ssl_ca_basic.result | 2 +- .../suite/sys_vars/r/ssl_capath_basic.result | 2 +- .../suite/sys_vars/r/ssl_cert_basic.result | 2 +- .../suite/sys_vars/r/ssl_cipher_basic.result | 2 +- .../suite/sys_vars/r/ssl_key_basic.result | 2 +- .../sys_vars/r/storage_engine_basic.result | 6 +- .../r/stored_program_cache_func.result | 2 +- .../suite/sys_vars/r/sync_binlog_basic.result | 6 +- .../suite/sys_vars/r/sync_frm_basic.result | 4 +- .../sys_vars/r/system_time_zone_basic.result | 2 +- .../r/table_definition_cache_basic.result | 4 +- .../sys_vars/r/table_open_cache_basic.result | 4 +- .../sys_vars/r/thread_handling_basic.result | 2 +- .../suite/sys_vars/r/time_zone_basic.result | 6 +- .../suite/sys_vars/r/timestamp_basic.result | 6 +- .../r/tmp_disk_table_size_basic.result | 6 +- .../suite/sys_vars/r/tmpdir_basic.result | 2 +- .../transaction_alloc_block_size_basic.result | 6 +- .../r/transaction_prealloc_size_basic.result | 6 +- .../sys_vars/r/tx_read_only_basic.result | 2 +- .../sys_vars/r/unique_checks_basic.result | 6 +- .../r/updatable_views_with_limit_basic.result | 6 +- .../suite/sys_vars/r/version_basic.result | 2 +- .../sys_vars/r/version_comment_basic.result | 2 +- .../r/version_compile_machine_basic.result | 2 +- .../r/version_compile_os_basic.result | 2 +- .../r/version_malloc_library_basic.result | 2 +- .../sys_vars/r/wait_timeout_basic.result | 6 +- .../sys_vars/r/warning_count_basic.result | 2 +- mysql-test/suite/versioning/r/update.result | 4 +- sql/set_var.cc | 2 + sql/sql_base.cc | 8 +- sql/sql_base.h | 7 +- sql/sql_class.cc | 58 ++- sql/sql_class.h | 8 +- sql/sql_do.cc | 3 +- sql/sql_handler.cc | 2 + sql/sql_insert.cc | 13 +- sql/sql_partition.cc | 2 +- sql/sql_prepare.cc | 13 +- sql/sql_update.cc | 12 +- sql/sql_yacc.yy | 29 +- .../connect/mysql-test/connect/r/mysql.result | 2 +- .../mysql-test/connect/r/mysql_exec.result | 2 +- .../mysql-test/connect/r/mysql_new.result | 2 +- .../spider/bugfix/r/mdev_26582.result | 2 +- .../spider/bugfix/r/mdev_27240.result | 2 +- .../spider/bugfix/r/mdev_34541.result | 2 +- 349 files changed, 1218 insertions(+), 1796 deletions(-) delete mode 100644 mysql-test/suite/sys_vars/r/have_csv_basic.result delete mode 100644 mysql-test/suite/sys_vars/r/have_innodb_basic.result delete mode 100644 mysql-test/suite/sys_vars/r/log_slow_queries_basic.result diff --git a/mysql-test/main/alias.result b/mysql-test/main/alias.result index e6387de50a7..17150913761 100644 --- a/mysql-test/main/alias.result +++ b/mysql-test/main/alias.result @@ -59,7 +59,7 @@ SELECT ELT(FIELD(kundentyp,'PP','PPA','PG','PGA','FK','FKA','FP','FPA','K','KA', Kundentyp kategorie Privat (Private Nutzung) Mobilfunk Warnings: -Warning 1052 Column 'kundentyp' in group statement is ambiguous +Warning 1052 Column 'kundentyp' in GROUP BY is ambiguous drop table t1; CREATE TABLE t1 ( AUFNR varchar(12) NOT NULL default '', diff --git a/mysql-test/main/alter_table.result b/mysql-test/main/alter_table.result index c3d364b8edb..f23166ca82b 100644 --- a/mysql-test/main/alter_table.result +++ b/mysql-test/main/alter_table.result @@ -712,7 +712,7 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp alter table table_24562 order by (select 12 from dual); ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(select 12 from dual)' at line 1 alter table table_24562 order by no_such_col; -ERROR 42S22: Unknown column 'no_such_col' in 'order clause' +ERROR 42S22: Unknown column 'no_such_col' in 'ORDER BY' drop table table_24562; create table t1 (mycol int(10) not null); alter table t1 alter column mycol set default 0; diff --git a/mysql-test/main/alter_table_combinations.result b/mysql-test/main/alter_table_combinations.result index e050fe6655d..08cf6c4707c 100644 --- a/mysql-test/main/alter_table_combinations.result +++ b/mysql-test/main/alter_table_combinations.result @@ -228,7 +228,7 @@ ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function UPDATE t2 SET f = f + 10; ERROR 42S22: Unknown column 'd' in 'OLD' CALL sp1(); -ERROR 42S22: Unknown column 'd' in 'field list' +ERROR 42S22: Unknown column 'd' in 'INSERT INTO' DROP TRIGGER trg1; DROP PROCEDURE sp1; CREATE TABLE t_gen(a INT, b DOUBLE GENERATED ALWAYS AS (SQRT(a))); diff --git a/mysql-test/main/analyze_stmt.result b/mysql-test/main/analyze_stmt.result index c5d35759c9c..2db78ec75d0 100644 --- a/mysql-test/main/analyze_stmt.result +++ b/mysql-test/main/analyze_stmt.result @@ -204,17 +204,17 @@ drop table t0, t1; create table t1 (i int); insert into t1 values (1),(2); analyze select a from t1; -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'SELECT' analyze delete from t1 where a=2; -ERROR 42S22: Unknown column 'a' in 'where clause' +ERROR 42S22: Unknown column 'a' in 'WHERE' analyze update t1 set a=2; -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'SET' create table t2 like t1; insert into t2 select * from t1; analyze update t2,t1 set t2.i=5 where t2.a=t1.a; -ERROR 42S22: Unknown column 't2.a' in 'where clause' +ERROR 42S22: Unknown column 't2.a' in 'WHERE' analyze delete t1 from t2,t1 where t2.a=t1.a; -ERROR 42S22: Unknown column 't2.a' in 'where clause' +ERROR 42S22: Unknown column 't2.a' in 'WHERE' drop table t1, t2; # # MDEV-6395: ANALYZE UPDATE/DELETE with impossible where does not produce any output diff --git a/mysql-test/main/compress.result b/mysql-test/main/compress.result index 24979346149..0e555b9fa70 100644 --- a/mysql-test/main/compress.result +++ b/mysql-test/main/compress.result @@ -2162,7 +2162,7 @@ SELECT ELT(FIELD(kundentyp,'PP','PPA','PG','PGA','FK','FKA','FP','FPA','K','KA', Kundentyp kategorie Privat (Private Nutzung) Mobilfunk Warnings: -Warning 1052 Column 'kundentyp' in group statement is ambiguous +Warning 1052 Column 'kundentyp' in GROUP BY is ambiguous drop table t1; SHOW STATUS LIKE 'Compression'; Variable_name Value diff --git a/mysql-test/main/cte_nonrecursive.result b/mysql-test/main/cte_nonrecursive.result index 552be4ad03c..01b984ceb70 100644 --- a/mysql-test/main/cte_nonrecursive.result +++ b/mysql-test/main/cte_nonrecursive.result @@ -750,7 +750,7 @@ ERROR HY000: No anchors for recursive WITH element 's' #erroneous definition of unreferenced with table t with t as (select count(*) from t1 where d>='f' group by a) select t1.b from t2,t1 where t1.a = t2.c; -ERROR 42S22: Unknown column 'd' in 'where clause' +ERROR 42S22: Unknown column 'd' in 'WHERE' with t as (select count(*) from t1 where b>='f' group by a) select t1.b from t2,t1 where t1.a = t2.c; b @@ -762,11 +762,11 @@ ggg with t(d) as (select count(*) from t1 where b<='ccc' group by b), s as (select * from t1 where a in (select t2.d from t2,t where t2.c=t.d)) select t1.b from t1,t2 where t1.a=t2.c; -ERROR 42S22: Unknown column 't2.d' in 'field list' +ERROR 42S22: Unknown column 't2.d' in 'SELECT' with t(d) as (select count(*) from t1 where b<='ccc' group by b), s as (select * from t1 where a in (select t2.c from t2,t where t2.c=t.c)) select t1.b from t1,t2 where t1.a=t2.c; -ERROR 42S22: Unknown column 't.c' in 'where clause' +ERROR 42S22: Unknown column 't.c' in 'WHERE' with t(d) as (select count(*) from t1 where b<='ccc' group by b), s as (select * from t1 where a in (select t2.c from t2,t where t2.c=t.d)) select t1.b from t1,t2 where t1.a=t2.c; @@ -1889,13 +1889,13 @@ cte1(a) as (select * from t1 where c1 <= 2), cte2(b) as (select * from cte1 where c1 >= 2), cte3 as (select * from cte1,cte2 where cte1.a < cte2.b) select * from t2; -ERROR 42S22: Unknown column 'c1' in 'where clause' +ERROR 42S22: Unknown column 'c1' in 'WHERE' with cte1(a) as (select * from t1 where c1 <= 2), cte2(b) as (select * from cte1 where a >= 2), cte3 as (select * from cte1,cte2 where cte1.a < cte2.c1) select * from t2; -ERROR 42S22: Unknown column 'cte2.c1' in 'where clause' +ERROR 42S22: Unknown column 'cte2.c1' in 'WHERE' with cte1 as (select * from t1 where c1 <= 2), cte2(a,b) as (select * from cte1 as s1, cte1 as s2 where s1.c1=s2.c1) @@ -1914,7 +1914,7 @@ with cte1 as (select * from t1 where c1 <= 2), cte2(a,b) as (select * from cte1 as s1, cte1 as s2 where s1.c1=c1) select * from t2; -ERROR 23000: Column 'c1' in where clause is ambiguous +ERROR 23000: Column 'c1' in WHERE is ambiguous with cte3 as ( with cte2(a,b) as ( with cte1 as (select * from t1 where c1 <= 2) @@ -1941,7 +1941,7 @@ with cte3 as select * from cte1 as s1, cte1 as s2 where s1.c1=s2.c1) select r1.c1,r2.c1 from cte2 as r1, cte2 as r2) select * from t2; -ERROR 42S22: Unknown column 'r1.c1' in 'field list' +ERROR 42S22: Unknown column 'r1.c1' in 'SELECT' create procedure p1() begin insert into t2 @@ -1962,7 +1962,7 @@ with cte1 as (select a from t1) select * from t1 as s, t1 as t where s.c1=t.c1 and s.c1 <= 2 and t.c1 >= 2; end | call p1(); -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'SELECT' drop procedure p1; drop table t1,t2; # diff --git a/mysql-test/main/cte_recursive.result b/mysql-test/main/cte_recursive.result index 9a28e5c222f..415ab7129c8 100644 --- a/mysql-test/main/cte_recursive.result +++ b/mysql-test/main/cte_recursive.result @@ -4543,33 +4543,33 @@ insert into t1 values (3), (7), (1); with recursive r as (select * from t1 union select s1.* from t1 as s1, r where s1.a = r.b) select * from t1 as t; -ERROR 42S22: Unknown column 'r.b' in 'where clause' +ERROR 42S22: Unknown column 'r.b' in 'WHERE' explain with recursive r as (select * from t1 union select s1.* from t1 as s1, r where s1.a = r.b) select * from t1 as t; -ERROR 42S22: Unknown column 'r.b' in 'where clause' +ERROR 42S22: Unknown column 'r.b' in 'WHERE' create procedure sp1() with recursive r as (select * from t1 union select s1.* from t1 as s1, r where s1.a = r.b) select * from t1 as t; call sp1(); -ERROR 42S22: Unknown column 'r.b' in 'where clause' +ERROR 42S22: Unknown column 'r.b' in 'WHERE' call sp1(); -ERROR 42S22: Unknown column 'r.b' in 'where clause' +ERROR 42S22: Unknown column 'r.b' in 'WHERE' with recursive r as (select * from t1 union select s1.* from t1 as s1, r where s1.b = r.a) select * from t1 as t; -ERROR 42S22: Unknown column 's1.b' in 'where clause' +ERROR 42S22: Unknown column 's1.b' in 'WHERE' explain with recursive r as (select * from t1 union select s1.* from t1 as s1, r where s1.b = r.a) select * from t1 as t; -ERROR 42S22: Unknown column 's1.b' in 'where clause' +ERROR 42S22: Unknown column 's1.b' in 'WHERE' create procedure sp2() with recursive r as (select * from t1 union select s1.* from t1 as s1, r where s1.b = r.a) select * from t1 as t; call sp2(); -ERROR 42S22: Unknown column 's1.b' in 'where clause' +ERROR 42S22: Unknown column 's1.b' in 'WHERE' call sp2(); -ERROR 42S22: Unknown column 's1.b' in 'where clause' +ERROR 42S22: Unknown column 's1.b' in 'WHERE' drop procedure sp1; drop procedure sp2; drop table t1; diff --git a/mysql-test/main/delayed.result b/mysql-test/main/delayed.result index 6113e2deb53..613ffa93424 100644 --- a/mysql-test/main/delayed.result +++ b/mysql-test/main/delayed.result @@ -253,7 +253,7 @@ CREATE TABLE t1 (a INT); INSERT DELAYED INTO t1 SET a= b(); ERROR 42000: FUNCTION test.b does not exist INSERT DELAYED INTO t1 SET b= 1; -ERROR 42S22: Unknown column 'b' in 'field list' +ERROR 42S22: Unknown column 'b' in 'INSERT INTO' INSERT DELAYED INTO t1 SET b= b(); ERROR 42000: FUNCTION test.b does not exist DROP TABLE t1; diff --git a/mysql-test/main/delete.result b/mysql-test/main/delete.result index 7a9963abc71..a36bc7ae50f 100644 --- a/mysql-test/main/delete.result +++ b/mysql-test/main/delete.result @@ -53,7 +53,7 @@ CREATE TABLE `t1` ( PRIMARY KEY (`i`) ); DELETE FROM t1 USING t1 WHERE post='1'; -ERROR 42S22: Unknown column 'post' in 'where clause' +ERROR 42S22: Unknown column 'post' in 'WHERE' drop table t1; CREATE TABLE t1 ( bool char(0) default NULL, @@ -229,11 +229,11 @@ drop table t1; CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1); DELETE FROM t1 ORDER BY x; -ERROR 42S22: Unknown column 'x' in 'order clause' +ERROR 42S22: Unknown column 'x' in 'ORDER BY' DELETE FROM t1 ORDER BY t2.x; -ERROR 42S22: Unknown column 't2.x' in 'order clause' +ERROR 42S22: Unknown column 't2.x' in 'ORDER BY' DELETE FROM t1 ORDER BY (SELECT x); -ERROR 42S22: Unknown column 'x' in 'field list' +ERROR 42S22: Unknown column 'x' in 'SELECT' DROP TABLE t1; CREATE TABLE t1 ( a INT diff --git a/mysql-test/main/delete_returning.result b/mysql-test/main/delete_returning.result index 3a95de0cdca..fc6e61fce83 100644 --- a/mysql-test/main/delete_returning.result +++ b/mysql-test/main/delete_returning.result @@ -42,7 +42,7 @@ a b 5 EEEEE 7 GGGGGGG DELETE FROM t1 WHERE a=2 RETURNING c; -ERROR 42S22: Unknown column 'c' in 'field list' +ERROR 42S22: Unknown column 'c' in 'RETURNING' INSERT INTO t1 VALUES (2,'BB'), (2,'bb'); DELETE FROM t1 WHERE a=2 RETURNING a, UPPER(b); a UPPER(b) diff --git a/mysql-test/main/derived.result b/mysql-test/main/derived.result index cda21e275ae..09f273fced5 100644 --- a/mysql-test/main/derived.result +++ b/mysql-test/main/derived.result @@ -5,9 +5,9 @@ select * from (select 2 from DUAL) b; 2 2 SELECT 1 as a FROM (SELECT 1 UNION SELECT a) b; -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'SELECT' SELECT 1 as a FROM (SELECT a UNION SELECT 1) b; -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'SELECT' CREATE TABLE t1 (a int not null, b char (10) not null); insert into t1 values(1,'a'),(2,'b'),(3,'c'),(3,'c'); CREATE TABLE t2 (a int not null, b char (10) not null); @@ -27,18 +27,18 @@ a y 3 3 3 3 SELECT a FROM (SELECT 1 FROM (SELECT 1) a HAVING a=1) b; -ERROR 42S22: Unknown column 'a' in 'having clause' +ERROR 42S22: Unknown column 'a' in 'HAVING' SELECT a,b as a FROM (SELECT '1' as a,'2' as b) b HAVING a=1; -ERROR 23000: Column 'a' in having clause is ambiguous +ERROR 23000: Column 'a' in HAVING is ambiguous SELECT a,2 as a FROM (SELECT '1' as a) b HAVING a=2; a a 1 2 SELECT a,2 as a FROM (SELECT '1' as a) b HAVING a=1; a a SELECT 1 FROM (SELECT 1) a WHERE a=2; -ERROR 42S22: Unknown column 'a' in 'where clause' +ERROR 42S22: Unknown column 'a' in 'WHERE' SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1 HAVING a=1) as a; -ERROR 42S22: Unknown column 'a' in 'having clause' +ERROR 42S22: Unknown column 'a' in 'HAVING' select * from t1 as x1, (select * from t1) as x2; a b a b 1 a 1 a @@ -154,13 +154,13 @@ select * from (select 1 as a) b left join (select 2 as a) c using(a); a 1 SELECT * FROM (SELECT 1 UNION SELECT a) b; -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'SELECT' SELECT 1 as a FROM (SELECT a UNION SELECT 1) b; -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'SELECT' SELECT 1 as a FROM (SELECT 1 UNION SELECT a) b; -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'SELECT' select 1 from (select 2) a order by 0; -ERROR 42S22: Unknown column '0' in 'order clause' +ERROR 42S22: Unknown column '0' in 'ORDER BY' create table t1 (id int); insert into t1 values (1),(2),(3); describe select * from (select * from t1 group by id) bar; @@ -276,7 +276,7 @@ N M UPDATE `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2, P2.N = 2; ERROR HY000: The target table P2 of the UPDATE is not updatable UPDATE `t1` AS P1 INNER JOIN (SELECT aaaa FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2; -ERROR 42S22: Unknown column 'aaaa' in 'field list' +ERROR 42S22: Unknown column 'aaaa' in 'SELECT' delete P1.* from `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N; select * from t1; N M @@ -284,7 +284,7 @@ N M delete P1.*,p2.* from `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS p2 ON P1.N = p2.N; ERROR HY000: The target table p2 of the DELETE is not updatable delete P1.* from `t1` AS P1 INNER JOIN (SELECT aaa FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N; -ERROR 42S22: Unknown column 'aaa' in 'field list' +ERROR 42S22: Unknown column 'aaa' in 'SELECT' drop table t1; CREATE TABLE t1 ( OBJECTID int(11) NOT NULL default '0', @@ -467,7 +467,7 @@ t1.id=t3.val set t1.val=t3.val ; -ERROR 42S22: Unknown column 'v.val' in 'field list' +ERROR 42S22: Unknown column 'v.val' in 'SELECT' drop table t1, t2; # # MDEV-5353: server crash on subselect if WHERE applied to some @@ -1336,7 +1336,7 @@ DROP TABLE t1; SELECT 1 FROM ( SELECT 1 UNION SELECT 2 ORDER BY (SELECT 1 FROM DUAL WHERE xxx = 0) ) dt; -ERROR 42S22: Unknown column 'xxx' in 'where clause' +ERROR 42S22: Unknown column 'xxx' in 'WHERE' create table t1 (a int, b int); insert into t1 values (3,8), (7,2), (1,4), (5,9); create table t2 (a int, b int); @@ -1350,7 +1350,7 @@ union select a,b from t2 where t2.b < 6 order by (a - b / (select a + max(c) from t3 where d = x)) ) dt; -ERROR 42S22: Unknown column 'x' in 'where clause' +ERROR 42S22: Unknown column 'x' in 'WHERE' drop table t1,t2,t3; # # End of 10.3 tests diff --git a/mysql-test/main/dyncol.result b/mysql-test/main/dyncol.result index 5c4772a1947..13c0e18f63a 100644 --- a/mysql-test/main/dyncol.result +++ b/mysql-test/main/dyncol.result @@ -1621,7 +1621,7 @@ ex # as a dynamic column name # select COLUMN_CREATE(color, "black"); -ERROR 42S22: Unknown column 'color' in 'field list' +ERROR 42S22: Unknown column 'color' in 'SELECT' # # MDEV-489 Assertion `offset < 0x1f' failed in # type_and_offset_store on COLUMN_ADD diff --git a/mysql-test/main/errors.result b/mysql-test/main/errors.result index baa2e0ad3c0..3f5827c16ed 100644 --- a/mysql-test/main/errors.result +++ b/mysql-test/main/errors.result @@ -7,21 +7,21 @@ update t1 set a=1; ERROR 42S02: Table 'test.t1' doesn't exist create table t1 (a int); select count(test.t1.b) from t1; -ERROR 42S22: Unknown column 'test.t1.b' in 'field list' +ERROR 42S22: Unknown column 'test.t1.b' in 'SELECT' select count(not_existing_database.t1) from t1; -ERROR 42S22: Unknown column 'not_existing_database.t1' in 'field list' +ERROR 42S22: Unknown column 'not_existing_database.t1' in 'SELECT' select count(not_existing_database.t1.a) from t1; -ERROR 42S22: Unknown column 'not_existing_database.t1.a' in 'field list' +ERROR 42S22: Unknown column 'not_existing_database.t1.a' in 'SELECT' select count(not_existing_database.t1.a) from not_existing_database.t1; Got one of the listed errors select 1 from t1 order by 2; -ERROR 42S22: Unknown column '2' in 'order clause' +ERROR 42S22: Unknown column '2' in 'ORDER BY' select 1 from t1 group by 2; -ERROR 42S22: Unknown column '2' in 'group statement' +ERROR 42S22: Unknown column '2' in 'GROUP BY' select 1 from t1 order by t1.b; -ERROR 42S22: Unknown column 't1.b' in 'order clause' +ERROR 42S22: Unknown column 't1.b' in 'ORDER BY' select count(*),b from t1; -ERROR 42S22: Unknown column 'b' in 'field list' +ERROR 42S22: Unknown column 'b' in 'SELECT' drop table t1; create table t1 (a int(256)); ERROR 42000: Display width out of range for 'a' (max = 255) @@ -45,17 +45,17 @@ Warning 1365 Division by 0 DROP TABLE t1; CREATE TABLE t1( a INT ); SELECT b FROM t1; -ERROR 42S22: Unknown column 'b' in 'field list' +ERROR 42S22: Unknown column 'b' in 'SELECT' SHOW ERRORS; Level Code Message -Error 1054 Unknown column 'b' in 'field list' +Error 1054 Unknown column 'b' in 'SELECT' CREATE TABLE t2 SELECT b FROM t1; -ERROR 42S22: Unknown column 'b' in 'field list' +ERROR 42S22: Unknown column 'b' in 'SELECT' SHOW ERRORS; Level Code Message -Error 1054 Unknown column 'b' in 'field list' +Error 1054 Unknown column 'b' in 'SELECT' INSERT INTO t1 SELECT b FROM t1; -ERROR 42S22: Unknown column 'b' in 'field list' +ERROR 42S22: Unknown column 'b' in 'SELECT' DROP TABLE t1; flush status; drop table if exists t1, t2; diff --git a/mysql-test/main/explain.result b/mysql-test/main/explain.result index 75d46110c35..ab69ea174ba 100644 --- a/mysql-test/main/explain.result +++ b/mysql-test/main/explain.result @@ -205,7 +205,7 @@ INSERT INTO t1 VALUES (repeat('b',@@global.max_allowed_packet)); EXPLAIN SELECT DISTINCT 1 FROM t1, (SELECT DISTINCTROW a AS away FROM t1 GROUP BY a WITH ROLLUP) as d1 WHERE t1.a = d1.a; -ERROR 42S22: Unknown column 'd1.a' in 'where clause' +ERROR 42S22: Unknown column 'd1.a' in 'WHERE' DROP TABLE t1; # # Bug#48295: diff --git a/mysql-test/main/fulltext_order_by.result b/mysql-test/main/fulltext_order_by.result index 35ae8789c7d..e3476bd2f5e 100644 --- a/mysql-test/main/fulltext_order_by.result +++ b/mysql-test/main/fulltext_order_by.result @@ -126,7 +126,7 @@ group by a.text, b.id, b.betreff order by match(b.betreff) against ('+abc' in boolean mode) desc; -ERROR 42000: Table 'b' from one of the SELECTs cannot be used in order clause +ERROR 42000: Table 'b' from one of the SELECTs cannot be used in ORDER BY select a.text, b.id, b.betreff from t2 a inner join t3 b on a.id = b.forum inner join @@ -142,7 +142,7 @@ where match(c.beitrag) against ('+abc' in boolean mode) order by match(b.betreff) against ('+abc' in boolean mode) desc; -ERROR 42000: Table 'b' from one of the SELECTs cannot be used in order clause +ERROR 42000: Table 'b' from one of the SELECTs cannot be used in ORDER BY select a.text, b.id, b.betreff from t2 a inner join t3 b on a.id = b.forum inner join diff --git a/mysql-test/main/func_gconcat.result b/mysql-test/main/func_gconcat.result index 6226f95df23..d725029a533 100644 --- a/mysql-test/main/func_gconcat.result +++ b/mysql-test/main/func_gconcat.result @@ -160,7 +160,7 @@ set group_concat_max_len = 1024; select group_concat(sum(c)) from t1 group by grp; ERROR HY000: Invalid use of group function select grp,group_concat(c order by 2) from t1 group by grp; -ERROR 42S22: Unknown column '2' in 'order clause' +ERROR 42S22: Unknown column '2' in 'ORDER BY' drop table t1; create table t1 ( URL_ID int(11), URL varchar(80)); create table t2 ( REQ_ID int(11), URL_ID int(11)); diff --git a/mysql-test/main/func_math.result b/mysql-test/main/func_math.result index 4296a983d71..405bcc45ddb 100644 --- a/mysql-test/main/func_math.result +++ b/mysql-test/main/func_math.result @@ -154,7 +154,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra Warnings: Note 1003 select degrees(pi()) AS `degrees(pi())`,radians(360) AS `radians(360)` select rand(rand); -ERROR 42S22: Unknown column 'rand' in 'field list' +ERROR 42S22: Unknown column 'rand' in 'SELECT' create table t1 (col1 int, col2 decimal(60,30)); insert into t1 values(1,1234567890.12345); select format(col2,7) from t1; diff --git a/mysql-test/main/get_diagnostics.result b/mysql-test/main/get_diagnostics.result index b00378d4ee9..6ea8d483da1 100644 --- a/mysql-test/main/get_diagnostics.result +++ b/mysql-test/main/get_diagnostics.result @@ -134,7 +134,7 @@ DROP PROCEDURE p1; GET DIAGNOSTICS CONDITION; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 GET DIAGNOSTICS CONDITION a; -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'GET DIAGNOSTICS' GET DIAGNOSTICS CONDITION 1; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 GET DIAGNOSTICS CONDITION 1 @var; @@ -213,9 +213,9 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp GET DIAGNOSTICS CONDITION (1) @var = CLASS_ORIGIN; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(1) @var = CLASS_ORIGIN' at line 1 GET DIAGNOSTICS CONDITION p1() @var = CLASS_ORIGIN; -ERROR 42S22: Unknown column 'p1' in 'field list' +ERROR 42S22: Unknown column 'p1' in 'GET DIAGNOSTICS' GET DIAGNOSTICS CONDITION ABS(2) @var = CLASS_ORIGIN; -ERROR 42S22: Unknown column 'ABS' in 'field list' +ERROR 42S22: Unknown column 'ABS' in 'GET DIAGNOSTICS' GET DIAGNOSTICS CONDITION 1.1 @var = CLASS_ORIGIN; GET DIAGNOSTICS CONDITION "1" @var = CLASS_ORIGIN; SELECT COUNT(max_questions) INTO @var FROM mysql.user; @@ -227,7 +227,7 @@ Warnings: Error 1758 Invalid condition number Error 1758 Invalid condition number GET DIAGNOSTICS CONDITION a @var = CLASS_ORIGIN; -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'GET DIAGNOSTICS' SELECT COUNT(max_questions) INTO @var FROM mysql.user; SET @cond = 1; GET DIAGNOSTICS CONDITION @cond @var1 = CLASS_ORIGIN; diff --git a/mysql-test/main/group_by.result b/mysql-test/main/group_by.result index b7bbab6dd47..897e684936f 100644 --- a/mysql-test/main/group_by.result +++ b/mysql-test/main/group_by.result @@ -790,7 +790,7 @@ SELECT n+1 AS n FROM t1 GROUP BY n; n 2 Warnings: -Warning 1052 Column 'n' in group statement is ambiguous +Warning 1052 Column 'n' in GROUP BY is ambiguous DROP TABLE t1; create table t1(f1 varchar(5) key); insert into t1 values (1),(2); @@ -877,10 +877,10 @@ c2 aaa aaa Warnings: -Warning 1052 Column 'c2' in group statement is ambiguous +Warning 1052 Column 'c2' in GROUP BY is ambiguous show warnings; Level Code Message -Warning 1052 Column 'c2' in group statement is ambiguous +Warning 1052 Column 'c2' in GROUP BY is ambiguous select t1.c1 as c2 from t1, t2 where t1.c2 = t2.c4 group by t1.c1; c2 @@ -1028,7 +1028,7 @@ FROM t1 AS t1_outer GROUP BY t1_outer.b; ERROR 42000: 'test.t1_outer.a' isn't in GROUP BY SELECT 1 FROM t1 as t1_outer GROUP BY a HAVING (SELECT t1_outer.b FROM t1 AS t1_inner LIMIT 1); -ERROR 42S22: Unknown column 'test.t1_outer.b' in 'field list' +ERROR 42S22: Unknown column 'test.t1_outer.b' in 'SELECT' SELECT (SELECT SUM(t1_inner.a) FROM t1 AS t1_inner LIMIT 1) FROM t1 AS t1_outer GROUP BY t1_outer.b; (SELECT SUM(t1_inner.a) FROM t1 AS t1_inner LIMIT 1) @@ -1070,7 +1070,7 @@ SELECT 1 FROM t1 GROUP BY b HAVING ROW (b,b) = ROW (1,1); 1 1 SELECT 1 FROM t1 GROUP BY b HAVING a = 2; -ERROR 42S22: Unknown column 'a' in 'having clause' +ERROR 42S22: Unknown column 'a' in 'HAVING' SELECT 1 FROM t1 GROUP BY SUM(b); ERROR HY000: Invalid use of group function SELECT b FROM t1 AS t1_outer GROUP BY a HAVING t1_outer.a IN @@ -2559,7 +2559,7 @@ DROP TABLE t1,t2; # MDEV-5104 crash in Item_field::used_tables with broken order by # (select 1 order by x(y)) order by 1; -ERROR 42S22: Unknown column 'y' in 'order clause' +ERROR 42S22: Unknown column 'y' in 'ORDER BY' # End of 5.3 tests # # Bug#49771: Incorrect MIN (date) when minimum value is 0000-00-00 diff --git a/mysql-test/main/having.result b/mysql-test/main/having.result index 3e69b3bf2c8..f1f3190a08e 100644 --- a/mysql-test/main/having.result +++ b/mysql-test/main/having.result @@ -200,7 +200,7 @@ select count(*) from t1 group by col2 having col2 = 'hello'; count(*) 3 select count(*) from t1 group by col2 having col1 = 10; -ERROR 42S22: Unknown column 'col1' in 'having clause' +ERROR 42S22: Unknown column 'col1' in 'HAVING' select col1 as count_col1 from t1 as tmp1 group by col1 having col1 = 10; count_col1 10 @@ -241,7 +241,7 @@ select sum(col1) as co2, count(col2) as cc from t1 group by col1 having col1 =10 co2 cc 40 4 select t2.col2 from t2 group by t2.col1, t2.col2 having t1.col1 <= 10; -ERROR 42S22: Unknown column 't1.col1' in 'having clause' +ERROR 42S22: Unknown column 't1.col1' in 'HAVING' select t1.col1 from t1 where t1.col2 in (select t2.col2 from t2 @@ -279,7 +279,7 @@ select t1.col1 as tmp_col from t1 where t1.col2 in (select t2.col2 from t2 group by t2.col1, t2.col2 having tmp_col <= 10); -ERROR 42S22: Unknown column 'tmp_col' in 'having clause' +ERROR 42S22: Unknown column 'tmp_col' in 'HAVING' select t1.col1 from t1 where t1.col2 in (select t2.col2 from t2 @@ -301,7 +301,7 @@ where t1.col2 in (select t2.col2 from t2 group by t2.col1, t2.col2 having col_t1 <= 10) having col_t1 <= 20; -ERROR 42S22: Unknown column 'col_t1' in 'having clause' +ERROR 42S22: Unknown column 'col_t1' in 'HAVING' select t1.col1 from t1 where t1.col2 in (select t2.col2 from t2 @@ -322,7 +322,7 @@ select sum(col1) from t1 group by col_t1 having col_t1 in (select sum(t2.col1) from t2 group by t2.col2, t2.col1 having t2.col1 = t1.col1); -ERROR 42S22: Unknown column 't1.col1' in 'having clause' +ERROR 42S22: Unknown column 't1.col1' in 'HAVING' select sum(col1) from t1 group by col_t1 having col_t1 in (select sum(t2.col1) from t2 @@ -333,10 +333,10 @@ sum(col1) 30 select t1.col1, t2.col1 from t1, t2 where t1.col1 = t2.col1 group by t1.col1, t2.col1 having col1 = 2; -ERROR 23000: Column 'col1' in having clause is ambiguous +ERROR 23000: Column 'col1' in HAVING is ambiguous select t1.col1*10+t2.col1 from t1,t2 where t1.col1=t2.col1 group by t1.col1, t2.col1 having col1 = 2; -ERROR 23000: Column 'col1' in having clause is ambiguous +ERROR 23000: Column 'col1' in HAVING is ambiguous drop table t1, t2, t3; create table t1 (s1 int); insert into t1 values (1),(2),(3); @@ -348,8 +348,8 @@ s1 0 0 Warnings: -Warning 1052 Column 's1' in group statement is ambiguous -Warning 1052 Column 's1' in having clause is ambiguous +Warning 1052 Column 's1' in GROUP BY is ambiguous +Warning 1052 Column 's1' in HAVING is ambiguous select s1*0 from t1 group by s1 having s1 = 0; s1*0 select s1 from t1 group by 1 having 1 = 0; @@ -362,7 +362,7 @@ count(s1) 1 1 select * from t1 a, t1 b group by a.s1 having s1 is null; -ERROR 23000: Column 's1' in having clause is ambiguous +ERROR 23000: Column 's1' in HAVING is ambiguous drop table t1; create table t1 (s1 char character set latin1 collate latin1_german1_ci); insert ignore into t1 values ('ü'),('y'); diff --git a/mysql-test/main/host_cache_size_functionality.result b/mysql-test/main/host_cache_size_functionality.result index f5d7e7ee109..844339acea7 100644 --- a/mysql-test/main/host_cache_size_functionality.result +++ b/mysql-test/main/host_cache_size_functionality.result @@ -68,6 +68,6 @@ COUNT(@@GLOBAL.Host_Cache_Size) 1 1 Expected SELECT Host_Cache_Size = @@SESSION.Host_Cache_Size; -ERROR 42S22: Unknown column 'Host_Cache_Size' in 'field list' +ERROR 42S22: Unknown column 'Host_Cache_Size' in 'SELECT' Expected error 'Unknown column Host_Cache_Size in field list' SET @@GLOBAL.Host_Cache_Size=DEFAULT; diff --git a/mysql-test/main/insert.result b/mysql-test/main/insert.result index 586dbbff153..f1eb9801e2a 100644 --- a/mysql-test/main/insert.result +++ b/mysql-test/main/insert.result @@ -766,14 +766,14 @@ create table t3 (c int); create table t4 (d1 int, d2 int); insert into t4 select * from t1 left join t2 on (select t1.i from t3); -ERROR 42S22: Unknown column 't1.i' in 'field list' +ERROR 42S22: Unknown column 't1.i' in 'SELECT' replace t4 select * from t1 left join t2 on (select t1.i from t3); -ERROR 42S22: Unknown column 't1.i' in 'field list' +ERROR 42S22: Unknown column 't1.i' in 'SELECT' drop table t1,t2,t3,t4; create table t (a int); select 1 in (select count(*) from t t1 join (t t2 join t t3 on (t1.a != 0))); -ERROR 42S22: Unknown column 't1.a' in 'on clause' +ERROR 42S22: Unknown column 't1.a' in 'ON' drop table t; # # MDEV-28578 Server crashes in Item_field::fix_outer_field after CREATE SELECT @@ -781,7 +781,7 @@ drop table t; create table t1 (i int) ; create table t2 (j int) ; create table t4 select * from t1 join t2 on (select t3.i); -ERROR 42S22: Unknown column 't3.i' in 'field list' +ERROR 42S22: Unknown column 't3.i' in 'SELECT' drop table t1, t2; # # End of 10.4 tests diff --git a/mysql-test/main/insert_returning.result b/mysql-test/main/insert_returning.result index b2ed9c90e51..b35fd3bf35f 100644 --- a/mysql-test/main/insert_returning.result +++ b/mysql-test/main/insert_returning.result @@ -482,7 +482,7 @@ INSERT INTO t1 VALUES(1,'a'),(2,'b'),(3,'c'); # SIMLPE INSERT STATEMENT # INSERT INTO t2(id2,val2) VALUES(1,'a') RETURNING id1; -ERROR 42S22: Unknown column 'id1' in 'field list' +ERROR 42S22: Unknown column 'id1' in 'RETURNING' INSERT INTO t2(id2,val2) values(2,'b') RETURNING SUM(id2); ERROR HY000: Invalid use of group function INSERT INTO t2(id2,val2) VALUES(3,'c') RETURNING (SELECT id1 FROM t1); @@ -504,7 +504,7 @@ ERROR 42S02: Unknown table 'test.t1' # Multiple rows in single insert statement # INSERT INTO t2 VALUES(1,'a'),(2,'b') RETURNING id1; -ERROR 42S22: Unknown column 'id1' in 'field list' +ERROR 42S22: Unknown column 'id1' in 'RETURNING' INSERT INTO t2 VALUES(3,'c'),(4,'d') RETURNING MAX(id2); ERROR HY000: Invalid use of group function INSERT INTO t2 VALUES(5,'c'),(6,'f') RETURNING (SELECT id1 FROM t1); @@ -527,7 +527,7 @@ ERROR 42S02: Unknown table 'test.t1' # INSERT ... SET # INSERT INTO t2 SET id2=1, val2='a' RETURNING id1; -ERROR 42S22: Unknown column 'id1' in 'field list' +ERROR 42S22: Unknown column 'id1' in 'RETURNING' INSERT INTO t2 SET id2=2, val2='b' RETURNING COUNT(id2); ERROR HY000: Invalid use of group function INSERT INTO t2 SET id2=3, val2='c' RETURNING (SELECT id1 FROM t1); @@ -550,7 +550,7 @@ ERROR 42S02: Unknown table 'test.t1' # INSERT INTO ins_duplicate VALUES (2,'b') ON DUPLICATE KEY UPDATE val='b' RETURNING id1; -ERROR 42S22: Unknown column 'id1' in 'field list' +ERROR 42S22: Unknown column 'id1' in 'RETURNING' INSERT INTO ins_duplicate VALUES (2,'b') ON DUPLICATE KEY UPDATE val='b' RETURNING MAX(id); ERROR HY000: Invalid use of group function @@ -565,7 +565,7 @@ RETURNING (SELECT * FROM ins_duplicate); ERROR 21000: Operand should contain 1 column(s) INSERT INTO ins_duplicate VALUES(2,'b') ON DUPLICATE KEY UPDATE val='b' RETURNING id2, (SELECT id1+id FROM t1 WHERE id1=1); -ERROR 42S22: Unknown column 'id2' in 'field list' +ERROR 42S22: Unknown column 'id2' in 'RETURNING' INSERT INTO ins_duplicate VALUES(2,'b') ON DUPLICATE KEY UPDATE val='b' RETURNING (SELECT id FROM ins_duplicate); ERROR HY000: Table 'ins_duplicate' is specified twice, both as a target for 'INSERT' and as a separate source for data @@ -576,7 +576,7 @@ ERROR 42S02: Unknown table 'test.t1' # INSERT...SELECT # INSERT INTO t2(id2, val2) SELECT * FROM t1 WHERE id1=1 RETURNING id1; -ERROR 42S22: Unknown column 'id1' in 'field list' +ERROR 42S22: Unknown column 'id1' in 'RETURNING' INSERT INTO t2(id2, val2) SELECT * FROM t1 WHERE id1=2 RETURNING MAX(id2); ERROR HY000: Invalid use of group function INSERT INTO t2(id2, val2) SELECT * FROM t1 WHERE id1=2 RETURNING (SELECT diff --git a/mysql-test/main/insert_select.result b/mysql-test/main/insert_select.result index 463f571b096..eba5d4bbf9e 100644 --- a/mysql-test/main/insert_select.result +++ b/mysql-test/main/insert_select.result @@ -666,11 +666,11 @@ a 10 insert into t1 select t2.a from t2 group by t2.a on duplicate key update a= a + 10; insert into t1 select t2.a from t2 on duplicate key update a= a + t2.b; -ERROR 23000: Column 'a' in field list is ambiguous +ERROR 23000: Column 'a' in UPDATE is ambiguous insert into t1 select t2.a from t2 on duplicate key update t2.a= a + t2.b; -ERROR 42S22: Unknown column 't2.a' in 'field list' +ERROR 42S22: Unknown column 't2.a' in 'UPDATE' insert into t1 select t2.a from t2 group by t2.a on duplicate key update a= t1.a + t2.b; -ERROR 42S22: Unknown column 't2.b' in 'field list' +ERROR 42S22: Unknown column 't2.b' in 'UPDATE' drop table t1,t2,t3; create table t1(f1 varchar(5) key); insert into t1(f1) select if(max(f1) is null, '2000',max(f1)+1) from t1; @@ -686,9 +686,9 @@ create table t1(x int, y int); create table t2(x int, z int); insert into t1(x,y) select x,z from t2 on duplicate key update x=values(x); insert into t1(x,y) select x,z from t2 on duplicate key update x=values(z); -ERROR 42S22: Unknown column 'z' in 'field list' +ERROR 42S22: Unknown column 'z' in 'UPDATE' insert into t1(x,y) select x,z from t2 on duplicate key update x=values(t2.x); -ERROR 42S22: Unknown column 't2.x' in 'field list' +ERROR 42S22: Unknown column 't2.x' in 'UPDATE' drop table t1,t2; CREATE TABLE t1 (a int PRIMARY KEY); INSERT INTO t1 values (1), (2); diff --git a/mysql-test/main/insert_update.result b/mysql-test/main/insert_update.result index 83344971c59..b075a9f27b3 100644 --- a/mysql-test/main/insert_update.result +++ b/mysql-test/main/insert_update.result @@ -158,7 +158,7 @@ a b c 5 0 30 8 9 60 INSERT t1 SELECT a,b,c FROM t2 WHERE d=2 ON DUPLICATE KEY UPDATE c=c+VALUES(a); -ERROR 23000: Column 'c' in field list is ambiguous +ERROR 23000: Column 'c' in UPDATE is ambiguous INSERT t1 SELECT a,b,c FROM t2 WHERE d=2 ON DUPLICATE KEY UPDATE c=t1.c+VALUES(t1.a); SELECT *, VALUE(a) FROM t1; a b c VALUE(a) @@ -191,9 +191,9 @@ a 2 3 insert into t1 select a from t1 on duplicate key update a=a+1 ; -ERROR 23000: Column 'a' in field list is ambiguous +ERROR 23000: Column 'a' in UPDATE is ambiguous insert ignore into t1 select a from t1 on duplicate key update a=t1.a+1 ; -ERROR 23000: Column 't1.a' in field list is ambiguous +ERROR 23000: Column 't1.a' in UPDATE is ambiguous drop table t1; CREATE TABLE t1 ( a BIGINT(20) NOT NULL DEFAULT 0, @@ -225,7 +225,7 @@ a b DROP TABLE t1; CREATE TABLE t1 (i INT PRIMARY KEY, j INT); INSERT INTO t1 SELECT 1, j; -ERROR 42S22: Unknown column 'j' in 'field list' +ERROR 42S22: Unknown column 'j' in 'SELECT' DROP TABLE t1; CREATE TABLE t1 (i INT PRIMARY KEY, j INT); CREATE TABLE t2 (a INT, b INT); @@ -238,7 +238,7 @@ CREATE TABLE t2 (a INT); INSERT INTO t1 VALUES (1, 1); INSERT INTO t2 VALUES (1), (3); INSERT INTO t1 SELECT 1, COUNT(*) FROM t2 ON DUPLICATE KEY UPDATE j= a; -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'UPDATE' DROP TABLE t1,t2; SET SQL_MODE = 'TRADITIONAL'; CREATE TABLE t1 (a INT PRIMARY KEY, b INT NOT NULL); diff --git a/mysql-test/main/invisible_field.result b/mysql-test/main/invisible_field.result index 7aa88e7787e..30f0564a34b 100644 --- a/mysql-test/main/invisible_field.result +++ b/mysql-test/main/invisible_field.result @@ -234,7 +234,7 @@ a d e f 1 d blob 3 1 1 d blob 41 1 select a,b,c,d,e,f from t2; -ERROR 42S22: Unknown column 'b' in 'field list' +ERROR 42S22: Unknown column 'b' in 'SELECT' drop table t2; #now this will copy invisible fields create table t2 as select a,b,c,d,e,f from t1; @@ -310,7 +310,7 @@ a d e f 1 d blob 41 1 #v does not have invisible column; select a,b,c,d,e,f from v; -ERROR 42S22: Unknown column 'b' in 'field list' +ERROR 42S22: Unknown column 'b' in 'SELECT' insert into v values(1,21,32,4); select * from v; a d e f @@ -321,7 +321,7 @@ a d e f 1 d blob 41 1 1 21 32 4 insert into v(a,b,c,d,e,f) values(1,12,3,4,5,6); -ERROR 42S22: Unknown column 'b' in 'field list' +ERROR 42S22: Unknown column 'b' in 'INSERT INTO' drop view v; create view v as select a,b,c,d,e,f from t1; desc v; diff --git a/mysql-test/main/invisible_field_debug.result b/mysql-test/main/invisible_field_debug.result index 344a0b860fc..882b7404ea8 100644 --- a/mysql-test/main/invisible_field_debug.result +++ b/mysql-test/main/invisible_field_debug.result @@ -16,16 +16,16 @@ select a , invisible from t1; a invisible 1 9 insert into t1(a, invisible) values(99,99); -ERROR 42S22: Unknown column 'invisible' in 'field list' +ERROR 42S22: Unknown column 'invisible' in 'INSERT INTO' select default(invisible) from t1; -ERROR 42S22: Unknown column 'invisible' in 'field list' +ERROR 42S22: Unknown column 'invisible' in 'SELECT' insert into t1(invisible) values(99); -ERROR 42S22: Unknown column 'invisible' in 'field list' +ERROR 42S22: Unknown column 'invisible' in 'INSERT INTO' insert into t_tmp select a, invisible from t1; insert into t1 select * from t_tmp; ERROR 21S01: Column count doesn't match value count at row 1 insert into t1(a,invisible) select * from t_tmp; -ERROR 42S22: Unknown column 'invisible' in 'field list' +ERROR 42S22: Unknown column 'invisible' in 'INSERT INTO' select a , invisible from t1; a invisible 1 9 @@ -45,22 +45,22 @@ select a , invisible from t1; a invisible 109 9 update t1 set invisible = 23 where a=(select a from t1 limit 1); -ERROR 42S22: Unknown column 'invisible' in 'field list' +ERROR 42S22: Unknown column 'invisible' in 'SET' update t1 set invisible = 101 where a=(select a from t1 limit 1); -ERROR 42S22: Unknown column 'invisible' in 'field list' +ERROR 42S22: Unknown column 'invisible' in 'SET' update t1 set invisible = (select invisible+100 from t1 limit 1) where a=(select invisible from t1 limit 1); -ERROR 42S22: Unknown column 'invisible' in 'field list' +ERROR 42S22: Unknown column 'invisible' in 'SET' select a , invisible from t1; a invisible 109 9 set @a=12; update t1 set invisible = (select @a from dual) where a=(select a from t1 limit 1); -ERROR 42S22: Unknown column 'invisible' in 'field list' +ERROR 42S22: Unknown column 'invisible' in 'SET' select a , invisible from t1; a invisible 109 9 update t1 set invisible = (select invisible+100 from t1 limit 1) where a=(select a from t1 limit 1); -ERROR 42S22: Unknown column 'invisible' in 'field list' +ERROR 42S22: Unknown column 'invisible' in 'SET' select a , invisible from t1; a invisible 109 9 @@ -100,7 +100,7 @@ select * from t1; a 1 select invisible ,a from t1; -ERROR 42S22: Unknown column 'invisible' in 'field list' +ERROR 42S22: Unknown column 'invisible' in 'SELECT' set debug_dbug= "+d,test_completely_invisible"; select invisible ,a from t1; invisible a @@ -108,9 +108,9 @@ invisible a set debug_dbug=@old_debug; create table t2 (invisible int); select * from t1 join t2 using (invisible); -ERROR 42S22: Unknown column 'invisible' in 'from clause' +ERROR 42S22: Unknown column 'invisible' in 'FROM' select * from t2 join t1 using (invisible); -ERROR 42S22: Unknown column 'invisible' in 'from clause' +ERROR 42S22: Unknown column 'invisible' in 'FROM' insert t2 values (8),(9); select * from t1 natural join t2; a invisible diff --git a/mysql-test/main/invisible_field_grant_completely.result b/mysql-test/main/invisible_field_grant_completely.result index b1b313072b2..520d608ef71 100644 --- a/mysql-test/main/invisible_field_grant_completely.result +++ b/mysql-test/main/invisible_field_grant_completely.result @@ -40,7 +40,7 @@ a 2 3 select invisible,a from t1; -ERROR 42S22: Unknown column 'invisible' in 'field list' +ERROR 42S22: Unknown column 'invisible' in 'SELECT' delete from t1 where a =1; update t1 set a=1 where a=3; select * from t1; diff --git a/mysql-test/main/join.result b/mysql-test/main/join.result index 9f843a7e722..44be0bcd9f8 100644 --- a/mysql-test/main/join.result +++ b/mysql-test/main/join.result @@ -727,31 +727,31 @@ b c a c b y 1 10 2 3 1 2 1 3 2 3 1 2 select * from t1 natural join (t3 cross join t4); -ERROR 23000: Column 'c' in from clause is ambiguous +ERROR 23000: Column 'c' in FROM is ambiguous select * from (t3 cross join t4) natural join t1; -ERROR 23000: Column 'c' in from clause is ambiguous +ERROR 23000: Column 'c' in FROM is ambiguous select * from t1 join (t2, t3) using (b); -ERROR 23000: Column 'b' in from clause is ambiguous +ERROR 23000: Column 'b' in FROM is ambiguous select * from ((t1 natural join t2), (t3 natural join t4)) natural join t6; -ERROR 23000: Column 'c' in from clause is ambiguous +ERROR 23000: Column 'c' in FROM is ambiguous select * from ((t1 natural join t2), (t3 natural join t4)) natural join t6; -ERROR 23000: Column 'c' in from clause is ambiguous +ERROR 23000: Column 'c' in FROM is ambiguous select * from t6 natural join ((t1 natural join t2), (t3 natural join t4)); -ERROR 23000: Column 'c' in from clause is ambiguous +ERROR 23000: Column 'c' in FROM is ambiguous select * from (t1 join t2 on t1.b=t2.b) natural join (t3 natural join t4); -ERROR 23000: Column 'b' in from clause is ambiguous +ERROR 23000: Column 'b' in FROM is ambiguous select * from (t3 natural join t4) natural join (t1 join t2 on t1.b=t2.b); -ERROR 23000: Column 'b' in from clause is ambiguous +ERROR 23000: Column 'b' in FROM is ambiguous select * from (t3 join (t4 natural join t5) on (b < z)) natural join (t1 natural join t2); -ERROR 23000: Column 'c' in from clause is ambiguous +ERROR 23000: Column 'c' in FROM is ambiguous select * from (t1 natural join t2) natural join (t3 join (t4 natural join t5) on (b < z)); -ERROR 23000: Column 'c' in from clause is ambiguous +ERROR 23000: Column 'c' in FROM is ambiguous select t1.b from v1a; -ERROR 42S22: Unknown column 't1.b' in 'field list' +ERROR 42S22: Unknown column 't1.b' in 'SELECT' select * from v1a join v1b on t1.b = t2.b; -ERROR 42S22: Unknown column 't1.b' in 'on clause' +ERROR 42S22: Unknown column 't1.b' in 'ON' select statistics.TABLE_NAME, statistics.COLUMN_NAME, statistics.TABLE_CATALOG, statistics.TABLE_SCHEMA, statistics.NON_UNIQUE, statistics.INDEX_SCHEMA, statistics.INDEX_NAME, statistics.SEQ_IN_INDEX, statistics.COLLATION, statistics.SUB_PART, statistics.PACKED, statistics.NULLABLE, statistics.INDEX_TYPE, statistics.COMMENT, columns.TABLE_CATALOG, columns.TABLE_SCHEMA, columns.COLUMN_DEFAULT, columns.IS_NULLABLE, columns.DATA_TYPE, columns.CHARACTER_MAXIMUM_LENGTH, columns.CHARACTER_OCTET_LENGTH, columns.NUMERIC_PRECISION, columns.NUMERIC_SCALE, columns.CHARACTER_SET_NAME, columns.COLLATION_NAME, columns.COLUMN_TYPE, columns.COLUMN_KEY, columns.EXTRA, columns.COLUMN_COMMENT @@ -1519,12 +1519,12 @@ SET optimizer_switch=@save_optimizer_switch; CREATE TABLE t (i INT); CREATE PROCEDURE p() SELECT t1.f FROM t AS t1 JOIN t AS t2 USING (f); CALL p; -ERROR 42S22: Unknown column 'f' in 'from clause' +ERROR 42S22: Unknown column 'f' in 'FROM' CALL p; -ERROR 42S22: Unknown column 'f' in 'from clause' +ERROR 42S22: Unknown column 'f' in 'FROM' FLUSH TABLES; CALL p; -ERROR 42S22: Unknown column 'f' in 'from clause' +ERROR 42S22: Unknown column 'f' in 'FROM' DROP TABLE t; CREATE TABLE t (f INT); CALL p; @@ -1532,9 +1532,9 @@ f DROP TABLE t; CREATE TABLE t (i INT); CALL p; -ERROR 42S22: Unknown column 't1.f' in 'field list' +ERROR 42S22: Unknown column 't1.f' in 'SELECT' CALL p; -ERROR 42S22: Unknown column 't1.f' in 'field list' +ERROR 42S22: Unknown column 't1.f' in 'SELECT' DROP PROCEDURE p; DROP TABLE t; CREATE TABLE t1 (a INT, b INT); @@ -1545,9 +1545,9 @@ CREATE TABLE t5 (a INT, c INT); CREATE PROCEDURE p1() SELECT c FROM t1 JOIN (t2 LEFT JOIN t3 USING (a) LEFT JOIN t4 USING (a) LEFT JOIN t5 USING (a)) USING (a); CALL p1; -ERROR 23000: Column 'c' in field list is ambiguous +ERROR 23000: Column 'c' in SELECT is ambiguous CALL p1; -ERROR 23000: Column 'c' in field list is ambiguous +ERROR 23000: Column 'c' in SELECT is ambiguous DROP PROCEDURE p1; DROP TABLE t1,t2,t3,t4,t5; # diff --git a/mysql-test/main/join_nested.result b/mysql-test/main/join_nested.result index 4db15f2f5a8..74a395b7271 100644 --- a/mysql-test/main/join_nested.result +++ b/mysql-test/main/join_nested.result @@ -1401,19 +1401,19 @@ SELECT e FROM t5 NATURAL JOIN t6; SELECT t1.a FROM t1 JOIN t2 ON a=b JOIN t3 ON a=c JOIN t4 USING(d); a SELECT t1.x FROM t1 JOIN t2 ON a=b JOIN t3 ON a=c JOIN t4 USING(d); -ERROR 42S22: Unknown column 't1.x' in 'field list' +ERROR 42S22: Unknown column 't1.x' in 'SELECT' SELECT t1.a FROM t1 JOIN t2 ON a=b JOIN t3 ON a=c NATURAL JOIN t4; a SELECT t1.x FROM t1 JOIN t2 ON a=b JOIN t3 ON a=c NATURAL JOIN t4; -ERROR 42S22: Unknown column 't1.x' in 'field list' +ERROR 42S22: Unknown column 't1.x' in 'SELECT' SELECT v1.e FROM v1 JOIN t2 ON e=b JOIN t3 ON e=c JOIN t4 USING(d); e SELECT v1.x FROM v1 JOIN t2 ON e=b JOIN t3 ON e=c JOIN t4 USING(d); -ERROR 42S22: Unknown column 'v1.x' in 'field list' +ERROR 42S22: Unknown column 'v1.x' in 'SELECT' SELECT v2.e FROM v2 JOIN t2 ON e=b JOIN t3 ON e=c JOIN t4 USING(d); e SELECT v2.x FROM v2 JOIN t2 ON e=b JOIN t3 ON e=c JOIN t4 USING(d); -ERROR 42S22: Unknown column 'v2.x' in 'field list' +ERROR 42S22: Unknown column 'v2.x' in 'SELECT' DROP VIEW v1, v2; DROP TABLE t1, t2, t3, t4, t5, t6; create table t1 (id1 int(11) not null); @@ -1628,13 +1628,13 @@ LEFT JOIN t5 USING (a)) USING (a); b SELECT c FROM t1 JOIN (t2 LEFT JOIN t3 USING (a) LEFT JOIN t4 USING (a) LEFT JOIN t5 USING (a)) USING (a); -ERROR 23000: Column 'c' in field list is ambiguous +ERROR 23000: Column 'c' in SELECT is ambiguous SELECT b FROM t1 JOIN (t2 JOIN t3 USING (a) JOIN t4 USING (a) JOIN t5 USING (a)) USING (a); b SELECT c FROM t1 JOIN (t2 JOIN t3 USING (a) JOIN t4 USING (a) JOIN t5 USING (a)) USING (a); -ERROR 23000: Column 'c' in field list is ambiguous +ERROR 23000: Column 'c' in SELECT is ambiguous DROP TABLE t1,t2,t3,t4,t5; CREATE TABLE t1 (a INT, b INT); CREATE TABLE t2 (a INT, b INT); @@ -1643,7 +1643,7 @@ INSERT INTO t1 VALUES (1,1); INSERT INTO t2 VALUES (1,1); INSERT INTO t3 VALUES (1,1); SELECT * FROM t1 JOIN (t2 JOIN t3 USING (b)) USING (a); -ERROR 23000: Column 'a' in from clause is ambiguous +ERROR 23000: Column 'a' in FROM is ambiguous DROP TABLE t1,t2,t3; CREATE TABLE t1 ( carrier char(2) default NULL, diff --git a/mysql-test/main/join_nested_jcl6.result b/mysql-test/main/join_nested_jcl6.result index 26081382368..3223eb5203f 100644 --- a/mysql-test/main/join_nested_jcl6.result +++ b/mysql-test/main/join_nested_jcl6.result @@ -1410,19 +1410,19 @@ SELECT e FROM t5 NATURAL JOIN t6; SELECT t1.a FROM t1 JOIN t2 ON a=b JOIN t3 ON a=c JOIN t4 USING(d); a SELECT t1.x FROM t1 JOIN t2 ON a=b JOIN t3 ON a=c JOIN t4 USING(d); -ERROR 42S22: Unknown column 't1.x' in 'field list' +ERROR 42S22: Unknown column 't1.x' in 'SELECT' SELECT t1.a FROM t1 JOIN t2 ON a=b JOIN t3 ON a=c NATURAL JOIN t4; a SELECT t1.x FROM t1 JOIN t2 ON a=b JOIN t3 ON a=c NATURAL JOIN t4; -ERROR 42S22: Unknown column 't1.x' in 'field list' +ERROR 42S22: Unknown column 't1.x' in 'SELECT' SELECT v1.e FROM v1 JOIN t2 ON e=b JOIN t3 ON e=c JOIN t4 USING(d); e SELECT v1.x FROM v1 JOIN t2 ON e=b JOIN t3 ON e=c JOIN t4 USING(d); -ERROR 42S22: Unknown column 'v1.x' in 'field list' +ERROR 42S22: Unknown column 'v1.x' in 'SELECT' SELECT v2.e FROM v2 JOIN t2 ON e=b JOIN t3 ON e=c JOIN t4 USING(d); e SELECT v2.x FROM v2 JOIN t2 ON e=b JOIN t3 ON e=c JOIN t4 USING(d); -ERROR 42S22: Unknown column 'v2.x' in 'field list' +ERROR 42S22: Unknown column 'v2.x' in 'SELECT' DROP VIEW v1, v2; DROP TABLE t1, t2, t3, t4, t5, t6; create table t1 (id1 int(11) not null); @@ -1637,13 +1637,13 @@ LEFT JOIN t5 USING (a)) USING (a); b SELECT c FROM t1 JOIN (t2 LEFT JOIN t3 USING (a) LEFT JOIN t4 USING (a) LEFT JOIN t5 USING (a)) USING (a); -ERROR 23000: Column 'c' in field list is ambiguous +ERROR 23000: Column 'c' in SELECT is ambiguous SELECT b FROM t1 JOIN (t2 JOIN t3 USING (a) JOIN t4 USING (a) JOIN t5 USING (a)) USING (a); b SELECT c FROM t1 JOIN (t2 JOIN t3 USING (a) JOIN t4 USING (a) JOIN t5 USING (a)) USING (a); -ERROR 23000: Column 'c' in field list is ambiguous +ERROR 23000: Column 'c' in SELECT is ambiguous DROP TABLE t1,t2,t3,t4,t5; CREATE TABLE t1 (a INT, b INT); CREATE TABLE t2 (a INT, b INT); @@ -1652,7 +1652,7 @@ INSERT INTO t1 VALUES (1,1); INSERT INTO t2 VALUES (1,1); INSERT INTO t3 VALUES (1,1); SELECT * FROM t1 JOIN (t2 JOIN t3 USING (b)) USING (a); -ERROR 23000: Column 'a' in from clause is ambiguous +ERROR 23000: Column 'a' in FROM is ambiguous DROP TABLE t1,t2,t3; CREATE TABLE t1 ( carrier char(2) default NULL, diff --git a/mysql-test/main/join_outer.result b/mysql-test/main/join_outer.result index 9722211fadf..03793cd81c5 100644 --- a/mysql-test/main/join_outer.result +++ b/mysql-test/main/join_outer.result @@ -110,11 +110,11 @@ grp a c id a c d a 3 6 D 3 6 C 6 6 NULL NULL NULL NULL NULL NULL NULL explain select t1.*,t2.*,t3.a from t1 left join t2 on (t3.a=t2.a) left join t1 as t3 on (t1.a=t3.a); -ERROR 42S22: Unknown column 't3.a' in 'on clause' +ERROR 42S22: Unknown column 't3.a' in 'ON' select t1.*,t2.*,t3.a from t1 left join t2 on (t3.a=t2.a) left join t1 as t3 on (t1.a=t3.a); -ERROR 42S22: Unknown column 't3.a' in 'on clause' +ERROR 42S22: Unknown column 't3.a' in 'ON' select t1.*,t2.*,t3.a from t1 left join t2 on (t3.a=t2.a) left join t1 as t3 on (t2.a=t3.a); -ERROR 42S22: Unknown column 't3.a' in 'on clause' +ERROR 42S22: Unknown column 't3.a' in 'ON' select t1.*,t2.* from t1 inner join t2 using (a); grp a c id a c d 1 1 a 1 1 a 1 @@ -404,7 +404,7 @@ insert into t3 values (1); insert into t4 values (1,1); insert into t5 values (1,1); explain select * from t3 left join t4 on t4.seq_1_id = t2.t2_id left join t1 on t1.t1_id = t4.seq_0_id left join t5 on t5.seq_0_id = t1.t1_id left join t2 on t2.t2_id = t5.seq_1_id where t3.t3_id = 23; -ERROR 42S22: Unknown column 't2.t2_id' in 'on clause' +ERROR 42S22: Unknown column 't2.t2_id' in 'ON' drop table t1,t2,t3,t4,t5; create table t1 (n int, m int, o int, key(n)); create table t2 (n int not null, m int, o int, primary key(n)); @@ -2703,7 +2703,7 @@ join t3 on (t3.f=t1.a) ) on (t2.c=t1.a ); -ERROR 42S22: Unknown column 't1.a' in 'on clause' +ERROR 42S22: Unknown column 't1.a' in 'ON' explain select * from @@ -2713,7 +2713,7 @@ join t3 on (t3.f=(select max(g) from t4 where t4.h=t1.a)) ) on (t2.c=t1.a ); -ERROR 42S22: Unknown column 't1.a' in 'where clause' +ERROR 42S22: Unknown column 't1.a' in 'WHERE' drop table t1,t2,t3,t4; create table t1 (a int); insert into t1 values (1),(2); @@ -2724,7 +2724,7 @@ insert into t3 values (1),(2); select * from ( select * from t1 left join t2 on b in (select x from t3 as sq1) ) as sq2; -ERROR 42S22: Unknown column 'x' in 'field list' +ERROR 42S22: Unknown column 'x' in 'SELECT' drop table t1,t2,t3; # end of 10.2 tests # diff --git a/mysql-test/main/join_outer_jcl6.result b/mysql-test/main/join_outer_jcl6.result index 26865a72d47..e11434c2ea7 100644 --- a/mysql-test/main/join_outer_jcl6.result +++ b/mysql-test/main/join_outer_jcl6.result @@ -117,11 +117,11 @@ grp a c id a c d a 3 6 D 3 6 C 6 6 NULL NULL NULL NULL NULL NULL NULL explain select t1.*,t2.*,t3.a from t1 left join t2 on (t3.a=t2.a) left join t1 as t3 on (t1.a=t3.a); -ERROR 42S22: Unknown column 't3.a' in 'on clause' +ERROR 42S22: Unknown column 't3.a' in 'ON' select t1.*,t2.*,t3.a from t1 left join t2 on (t3.a=t2.a) left join t1 as t3 on (t1.a=t3.a); -ERROR 42S22: Unknown column 't3.a' in 'on clause' +ERROR 42S22: Unknown column 't3.a' in 'ON' select t1.*,t2.*,t3.a from t1 left join t2 on (t3.a=t2.a) left join t1 as t3 on (t2.a=t3.a); -ERROR 42S22: Unknown column 't3.a' in 'on clause' +ERROR 42S22: Unknown column 't3.a' in 'ON' select t1.*,t2.* from t1 inner join t2 using (a); grp a c id a c d 1 1 a 1 1 a 1 @@ -411,7 +411,7 @@ insert into t3 values (1); insert into t4 values (1,1); insert into t5 values (1,1); explain select * from t3 left join t4 on t4.seq_1_id = t2.t2_id left join t1 on t1.t1_id = t4.seq_0_id left join t5 on t5.seq_0_id = t1.t1_id left join t2 on t2.t2_id = t5.seq_1_id where t3.t3_id = 23; -ERROR 42S22: Unknown column 't2.t2_id' in 'on clause' +ERROR 42S22: Unknown column 't2.t2_id' in 'ON' drop table t1,t2,t3,t4,t5; create table t1 (n int, m int, o int, key(n)); create table t2 (n int not null, m int, o int, primary key(n)); @@ -2710,7 +2710,7 @@ join t3 on (t3.f=t1.a) ) on (t2.c=t1.a ); -ERROR 42S22: Unknown column 't1.a' in 'on clause' +ERROR 42S22: Unknown column 't1.a' in 'ON' explain select * from @@ -2720,7 +2720,7 @@ join t3 on (t3.f=(select max(g) from t4 where t4.h=t1.a)) ) on (t2.c=t1.a ); -ERROR 42S22: Unknown column 't1.a' in 'where clause' +ERROR 42S22: Unknown column 't1.a' in 'WHERE' drop table t1,t2,t3,t4; create table t1 (a int); insert into t1 values (1),(2); @@ -2731,7 +2731,7 @@ insert into t3 values (1),(2); select * from ( select * from t1 left join t2 on b in (select x from t3 as sq1) ) as sq2; -ERROR 42S22: Unknown column 'x' in 'field list' +ERROR 42S22: Unknown column 'x' in 'SELECT' drop table t1,t2,t3; # end of 10.2 tests # diff --git a/mysql-test/main/keywords.result b/mysql-test/main/keywords.result index 4e246e38299..8f4ba9bb03c 100644 --- a/mysql-test/main/keywords.result +++ b/mysql-test/main/keywords.result @@ -579,62 +579,62 @@ SELECT test.year(); -- FUNCTION test.year does not exist. Check SELECT test.create(); -- FUNCTION test.create does not exist. Che CALL p2('SELECT $(VAR) FROM t1'); -------- -SELECT non_keyword FROM t1; -- Unknown column 'non_keyword' in 'field l +SELECT non_keyword FROM t1; -- Unknown column 'non_keyword' in 'SELECT' -------- -SELECT lpad FROM t1; -- Unknown column 'lpad' in 'field list' +SELECT lpad FROM t1; -- Unknown column 'lpad' in 'SELECT' -------- -SELECT rpad FROM t1; -- Unknown column 'rpad' in 'field list' +SELECT rpad FROM t1; -- Unknown column 'rpad' in 'SELECT' -------- -SELECT adddate FROM t1; -- Unknown column 'adddate' in 'field list' +SELECT adddate FROM t1; -- Unknown column 'adddate' in 'SELECT' -------- -SELECT substr FROM t1; -- Unknown column 'substr' in 'field list' +SELECT substr FROM t1; -- Unknown column 'substr' in 'SELECT' -------- -SELECT substring FROM t1; -- Unknown column 'substring' in 'field lis +SELECT substring FROM t1; -- Unknown column 'substring' in 'SELECT' -------- -SELECT trim_oracle FROM t1; -- Unknown column 'trim_oracle' in 'field l +SELECT trim_oracle FROM t1; -- Unknown column 'trim_oracle' in 'SELECT' -------- -SELECT ascii FROM t1; -- Unknown column 'ascii' in 'field list' +SELECT ascii FROM t1; -- Unknown column 'ascii' in 'SELECT' -------- SELECT replace FROM t1; -- ..syntax.. near 'FROM t1' at line 1 -------- -SELECT weight_string FROM t1; -- Unknown column 'weight_string' in 'field +SELECT weight_string FROM t1; -- Unknown column 'weight_string' in 'SELEC -------- SELECT char FROM t1; -- ..syntax.. near 'FROM t1' at line 1 -------- -SELECT trim FROM t1; -- Unknown column 'trim' in 'field list' +SELECT trim FROM t1; -- Unknown column 'trim' in 'SELECT' -------- -SELECT year FROM t1; -- Unknown column 'year' in 'field list' +SELECT year FROM t1; -- Unknown column 'year' in 'SELECT' -------- SELECT create FROM t1; -- ..syntax.. near 'create FROM t1' at line CALL p2('SELECT t1.$(VAR) FROM t1'); -------- -SELECT t1.non_keyword FROM t1; -- Unknown column 't1.non_keyword' in 'fiel +SELECT t1.non_keyword FROM t1; -- Unknown column 't1.non_keyword' in 'SELE -------- -SELECT t1.lpad FROM t1; -- Unknown column 't1.lpad' in 'field list' +SELECT t1.lpad FROM t1; -- Unknown column 't1.lpad' in 'SELECT' -------- -SELECT t1.rpad FROM t1; -- Unknown column 't1.rpad' in 'field list' +SELECT t1.rpad FROM t1; -- Unknown column 't1.rpad' in 'SELECT' -------- -SELECT t1.adddate FROM t1; -- Unknown column 't1.adddate' in 'field li +SELECT t1.adddate FROM t1; -- Unknown column 't1.adddate' in 'SELECT' -------- -SELECT t1.substr FROM t1; -- Unknown column 't1.substr' in 'field lis +SELECT t1.substr FROM t1; -- Unknown column 't1.substr' in 'SELECT' -------- -SELECT t1.substring FROM t1; -- Unknown column 't1.substring' in 'field +SELECT t1.substring FROM t1; -- Unknown column 't1.substring' in 'SELECT -------- -SELECT t1.trim_oracle FROM t1; -- Unknown column 't1.trim_oracle' in 'fiel +SELECT t1.trim_oracle FROM t1; -- Unknown column 't1.trim_oracle' in 'SELE -------- -SELECT t1.ascii FROM t1; -- Unknown column 't1.ascii' in 'field list +SELECT t1.ascii FROM t1; -- Unknown column 't1.ascii' in 'SELECT' -------- -SELECT t1.replace FROM t1; -- Unknown column 't1.replace' in 'field li +SELECT t1.replace FROM t1; -- Unknown column 't1.replace' in 'SELECT' -------- -SELECT t1.weight_string FROM t1; -- Unknown column 't1.weight_string' in 'fi +SELECT t1.weight_string FROM t1; -- Unknown column 't1.weight_string' in 'SE -------- -SELECT t1.char FROM t1; -- Unknown column 't1.char' in 'field list' +SELECT t1.char FROM t1; -- Unknown column 't1.char' in 'SELECT' -------- -SELECT t1.trim FROM t1; -- Unknown column 't1.trim' in 'field list' +SELECT t1.trim FROM t1; -- Unknown column 't1.trim' in 'SELECT' -------- -SELECT t1.year FROM t1; -- Unknown column 't1.year' in 'field list' +SELECT t1.year FROM t1; -- Unknown column 't1.year' in 'SELECT' -------- -SELECT t1.create FROM t1; -- Unknown column 't1.create' in 'field lis +SELECT t1.create FROM t1; -- Unknown column 't1.create' in 'SELECT' CALL p2('DROP TABLE $(VAR)'); -------- DROP TABLE non_keyword; -- Unknown table 'test.non_keyword' diff --git a/mysql-test/main/kill.result b/mysql-test/main/kill.result index 797052710e8..0f14698ef3d 100644 --- a/mysql-test/main/kill.result +++ b/mysql-test/main/kill.result @@ -184,4 +184,4 @@ DROP TABLE t1, t2; # KILL QUERY ID USER # kill query id user 'foo'; -ERROR 42S22: Unknown column 'user' in 'field list' +ERROR 42S22: Unknown column 'user' in 'KILL' diff --git a/mysql-test/main/locale.result b/mysql-test/main/locale.result index 3e632aaead5..22987f1ddc8 100644 --- a/mysql-test/main/locale.result +++ b/mysql-test/main/locale.result @@ -311,7 +311,7 @@ date_format('2001-09-01', '%c %b %M', 'de_CH') # SET lc_messages=ZH_CN; SELECT x; -ERROR 42S22: 未知列'x'在'field list' +ERROR 42S22: 未知列'x'在'SELECT' SET lc_messages=DEFAULT; # # End of 10.4 tests diff --git a/mysql-test/main/long_unique.result b/mysql-test/main/long_unique.result index 7f8110a283e..81af999f07f 100644 --- a/mysql-test/main/long_unique.result +++ b/mysql-test/main/long_unique.result @@ -81,7 +81,7 @@ NULL maria sachin select db_row_hash_1 from t1; -ERROR 42S22: Unknown column 'db_row_hash_1' in 'field list' +ERROR 42S22: Unknown column 'db_row_hash_1' in 'SELECT' #duplicate entry test; insert into t1 values(2); ERROR 23000: Duplicate entry '2' for key 'a' @@ -154,7 +154,7 @@ ERROR 23000: Duplicate entry '1' for key 'a' insert into t1 values(2,2); ERROR 23000: Duplicate entry '2' for key 'a' select db_row_hash_1 from t1; -ERROR 42S22: Unknown column 'db_row_hash_1' in 'field list' +ERROR 42S22: Unknown column 'db_row_hash_1' in 'SELECT' #now try to change db_row_hash_1 column; alter table t1 drop column db_row_hash_1; ERROR 42000: Can't DROP COLUMN `db_row_hash_1`; check that it exists @@ -405,11 +405,11 @@ a b c d e maria 345 frter dasd utyuty sachin 341 fdf gfgfgfg hghgr select db_row_hash_1 from t1; -ERROR 42S22: Unknown column 'db_row_hash_1' in 'field list' +ERROR 42S22: Unknown column 'db_row_hash_1' in 'SELECT' select db_row_hash_2 from t1; -ERROR 42S22: Unknown column 'db_row_hash_2' in 'field list' +ERROR 42S22: Unknown column 'db_row_hash_2' in 'SELECT' select db_row_hash_3 from t1; -ERROR 42S22: Unknown column 'db_row_hash_3' in 'field list' +ERROR 42S22: Unknown column 'db_row_hash_3' in 'SELECT' #duplicate entry test; insert into t1 values(21,2,3,42,51); ERROR 23000: Duplicate entry '3' for key 'c' @@ -462,7 +462,7 @@ t1 CREATE TABLE `t1` ( insert into t1 values(1,2,3,4,5,6); ERROR 23000: Duplicate entry '1' for key 'a' select db_row_hash_1 , db_row_hash_2, db_row_hash_3 from t1; -ERROR 42S22: Unknown column 'db_row_hash_1' in 'field list' +ERROR 42S22: Unknown column 'db_row_hash_1' in 'SELECT' #now try to change db_row_hash_1 column; alter table t1 drop column db_row_hash_1, drop column db_row_hash_2, drop column db_row_hash_3; ERROR 42000: Can't DROP COLUMN `db_row_hash_1`; check that it exists @@ -786,11 +786,11 @@ NULL NULL NULL NULL NULL NULL NULL NULL maria 6 maria maria maria maria 6 maria mariadb 7 mariadb mariadb mariadb mariadb 8 mariadb select db_row_hash_1 from t1; -ERROR 42S22: Unknown column 'db_row_hash_1' in 'field list' +ERROR 42S22: Unknown column 'db_row_hash_1' in 'SELECT' select db_row_hash_2 from t1; -ERROR 42S22: Unknown column 'db_row_hash_2' in 'field list' +ERROR 42S22: Unknown column 'db_row_hash_2' in 'SELECT' select db_row_hash_3 from t1; -ERROR 42S22: Unknown column 'db_row_hash_3' in 'field list' +ERROR 42S22: Unknown column 'db_row_hash_3' in 'SELECT' #duplicate entry test; #duplicate keys entry; insert into t1 values(1,1,1,0,0,0,0,0); @@ -806,7 +806,7 @@ ERROR 23000: Duplicate entry '1-1-1-1' for key 'e' insert into t1 values(1,1,1,1,1,1,1,1); ERROR 23000: Duplicate entry '1-1-1' for key 'a' select db_row_hash_1,db_row_hash_2,db_row_hash_3,db_row_hash_4,db_row_hash_5 from t1; -ERROR 42S22: Unknown column 'db_row_hash_1' in 'field list' +ERROR 42S22: Unknown column 'db_row_hash_1' in 'SELECT' alter table t1 drop column db_row_hash_1, drop column db_row_hash_2, drop column db_row_hash_3; ERROR 42000: Can't DROP COLUMN `db_row_hash_1`; check that it exists alter table t1 add column dg int , add column ef int , drop column db_row_hash_1; @@ -1170,7 +1170,7 @@ DB_ROW_HASH_1 DB_ROW_HASH_2 33 3 44 4 select DB_ROW_HASH_1, DB_ROW_HASH_2 from t1; -ERROR 42S22: Unknown column 'DB_ROW_HASH_1' in 'field list' +ERROR 42S22: Unknown column 'DB_ROW_HASH_1' in 'SELECT' #bug select DB_ROW_HASH_1, DB_ROW_HASH_2 from t1,t2; DB_ROW_HASH_1 DB_ROW_HASH_2 @@ -1191,7 +1191,7 @@ DB_ROW_HASH_1 DB_ROW_HASH_2 44 4 44 4 select * from t1 where DB_ROW_HASH_1 in (select DB_ROW_HASH_1 from t2); -ERROR 42S22: Unknown column 'DB_ROW_HASH_1' in 'IN/ALL/ANY subquery' +ERROR 42S22: Unknown column 'DB_ROW_HASH_1' in 'IN/ALL/ANY' select DB_ROW_HASH_1, DB_ROW_HASH_2 from t1,t2 where DB_ROW_HASH_1 in (select DB_ROW_HASH_1 from t2); DB_ROW_HASH_1 DB_ROW_HASH_2 11 1 @@ -1217,7 +1217,7 @@ DB_ROW_HASH_1 DB_ROW_HASH_2 33 3 44 4 select DB_ROW_HASH_1 from t1,t2 where t1.DB_ROW_HASH_1 = t2.DB_ROW_HASH_2; -ERROR 42S22: Unknown column 't1.DB_ROW_HASH_1' in 'where clause' +ERROR 42S22: Unknown column 't1.DB_ROW_HASH_1' in 'WHERE' select DB_ROW_HASH_1 from t1 inner join t2 on t1.a = t2.DB_ROW_HASH_2; DB_ROW_HASH_1 11 diff --git a/mysql-test/main/mdev6830.result b/mysql-test/main/mdev6830.result index 0048aa174bc..e0e181334e0 100644 --- a/mysql-test/main/mdev6830.result +++ b/mysql-test/main/mdev6830.result @@ -42,7 +42,7 @@ CREATE TABLE t4 (f1 VARCHAR(10), f2 INT) ENGINE=MyISAM; SELECT * FROM t1; pk SELECT non_existing FROM v2; -ERROR 42S22: Unknown column 'non_existing' in 'field list' +ERROR 42S22: Unknown column 'non_existing' in 'SELECT' SELECT * FROM t1, v3, t4 WHERE v3.f1 = t4.f1 AND t4.f2 = 6 AND t1.pk = v3.f5; pk f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 f1 f2 drop table t1,t2,t3,t4; diff --git a/mysql-test/main/multi_update.result b/mysql-test/main/multi_update.result index 222c592cbce..b13cc8b73ca 100644 --- a/mysql-test/main/multi_update.result +++ b/mysql-test/main/multi_update.result @@ -993,19 +993,19 @@ create view v2 as select * from t2; create view v3 as select * from t2 where c0 < 3; create procedure sp0() update t1, v2 set v2.pk = 1 where v2.c0 = t1.c1; call sp0(); -ERROR 42S22: Unknown column 't1.c1' in 'where clause' +ERROR 42S22: Unknown column 't1.c1' in 'WHERE' call sp0(); -ERROR 42S22: Unknown column 't1.c1' in 'where clause' +ERROR 42S22: Unknown column 't1.c1' in 'WHERE' create procedure sp1() update (t1 join v2 on v2.c0 = t1.c1) set v2.pk = 1; call sp1(); -ERROR 42S22: Unknown column 't1.c1' in 'on clause' +ERROR 42S22: Unknown column 't1.c1' in 'ON' call sp1(); -ERROR 42S22: Unknown column 't1.c1' in 'on clause' +ERROR 42S22: Unknown column 't1.c1' in 'ON' create procedure sp2() update (t1 join v3 on v3.c0 = t1.c1) set v3.pk = 1; call sp2(); -ERROR 42S22: Unknown column 't1.c1' in 'on clause' +ERROR 42S22: Unknown column 't1.c1' in 'ON' call sp2(); -ERROR 42S22: Unknown column 't1.c1' in 'on clause' +ERROR 42S22: Unknown column 't1.c1' in 'ON' create procedure sp3() update (t1 join v2 on v2.c0 = t1.id) set v2.c0 = v2.c0+1; select * from t2; @@ -1024,9 +1024,9 @@ pk c0 2 3 create procedure sp4() delete t1 from t1 join v2 on v2.c0 = t1.c1; call sp4(); -ERROR 42S22: Unknown column 't1.c1' in 'on clause' +ERROR 42S22: Unknown column 't1.c1' in 'ON' call sp4(); -ERROR 42S22: Unknown column 't1.c1' in 'on clause' +ERROR 42S22: Unknown column 't1.c1' in 'ON' drop procedure sp0; drop procedure sp1; drop procedure sp2; diff --git a/mysql-test/main/myisam_explain_non_select_all.result b/mysql-test/main/myisam_explain_non_select_all.result index e28c2a0fec3..193c58a9787 100644 --- a/mysql-test/main/myisam_explain_non_select_all.result +++ b/mysql-test/main/myisam_explain_non_select_all.result @@ -2927,16 +2927,16 @@ DROP TABLE t1; CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1), (2), (3); DELETE FROM t1 USING t1 WHERE uknown_column = 12345; -ERROR 42S22: Unknown column 'uknown_column' in 'where clause' +ERROR 42S22: Unknown column 'uknown_column' in 'WHERE' EXPLAIN EXTENDED DELETE FROM t1 USING t1 WHERE uknown_column = 12345; -ERROR 42S22: Unknown column 'uknown_column' in 'where clause' +ERROR 42S22: Unknown column 'uknown_column' in 'WHERE' DROP TABLE t1; #57 CREATE TABLE t1(f1 INT); EXPLAIN EXTENDED UPDATE t1 SET f2=1 ORDER BY f2; -ERROR 42S22: Unknown column 'f2' in 'order clause' +ERROR 42S22: Unknown column 'f2' in 'ORDER BY' UPDATE t1 SET f2=1 ORDER BY f2; -ERROR 42S22: Unknown column 'f2' in 'order clause' +ERROR 42S22: Unknown column 'f2' in 'ORDER BY' DROP TABLE t1; #62 CREATE TABLE t1 (a INT); diff --git a/mysql-test/main/mysqldump.result b/mysql-test/main/mysqldump.result index 8850e9564e0..2735c196166 100644 --- a/mysql-test/main/mysqldump.result +++ b/mysql-test/main/mysqldump.result @@ -67,7 +67,7 @@ SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ANSI_QUOTES'; INSERT INTO t1 VALUES (1.2345, 2.3456); INSERT INTO t1 VALUES ('1.2345', 2.3456); INSERT INTO t1 VALUES ("1.2345", 2.3456); -ERROR 42S22: Unknown column '1.2345' in 'field list' +ERROR 42S22: Unknown column '1.2345' in 'VALUES' SET SQL_MODE=@OLD_SQL_MODE; /*M!999999\- enable the sandbox mode */ /*!40101 SET @saved_cs_client = @@character_set_client */; diff --git a/mysql-test/main/mysqldump_restore.result b/mysql-test/main/mysqldump_restore.result index cc4a5cd5965..315da72ddf9 100644 --- a/mysql-test/main/mysqldump_restore.result +++ b/mysql-test/main/mysqldump_restore.result @@ -34,7 +34,7 @@ SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ANSI_QUOTES'; INSERT INTO t1 VALUES (1.2345, 2.3456); INSERT INTO t1 VALUES ('1.2345', 2.3456); INSERT INTO t1 VALUES ("1.2345", 2.3456); -ERROR 42S22: Unknown column '1.2345' in 'field list' +ERROR 42S22: Unknown column '1.2345' in 'VALUES' SET SQL_MODE=@OLD_SQL_MODE; # Begin testing mysqldump output + restore # Create 'original table name - _orig diff --git a/mysql-test/main/mysqltest.result b/mysql-test/main/mysqltest.result index 73f2c8851f9..478ef82ca1f 100644 --- a/mysql-test/main/mysqltest.result +++ b/mysql-test/main/mysqltest.result @@ -8,9 +8,9 @@ select otto from (select 1 as otto) as t1; otto 1 select friedrich from (select 1 as otto) as t1; -mysqltest: At line 1: query 'select friedrich from (select 1 as otto) as t1' failed: ER_BAD_FIELD_ERROR (1054): Unknown column 'friedrich' in 'field list' +mysqltest: At line 1: query 'select friedrich from (select 1 as otto) as t1' failed: ER_BAD_FIELD_ERROR (1054): Unknown column 'friedrich' in 'SELECT' select friedrich from (select 1 as otto) as t1; -ERROR 42S22: Unknown column 'friedrich' in 'field list' +ERROR 42S22: Unknown column 'friedrich' in 'SELECT' select otto from (select 1 as otto) as t1; otto 1 @@ -18,9 +18,9 @@ select otto from (select 1 as otto) as t1; mysqltest: At line 1: query 'select otto from (select 1 as otto) as t1' succeeded - should have failed with sqlstate 42S22... mysqltest: At line 1: expecting a SQL-state (00000) from query 'remove_file MYSQLTEST_VARDIR/tmp/test_nonexistent.tmp' which cannot produce one... select friedrich from (select 1 as otto) as t1; -ERROR 42S22: Unknown column 'friedrich' in 'field list' +ERROR 42S22: Unknown column 'friedrich' in 'SELECT' select friedrich from (select 1 as otto) as t1; -mysqltest: At line 1: query 'select friedrich from (select 1 as otto) as t1' failed with wrong sqlstate 42S22: 'Unknown column 'friedrich' in 'field list'', instead of 00000... +mysqltest: At line 1: query 'select friedrich from (select 1 as otto) as t1' failed with wrong sqlstate 42S22: 'Unknown column 'friedrich' in 'SELECT'', instead of 00000... select otto from (select 1 as otto) as t1; otto 1 diff --git a/mysql-test/main/mysqltest_cont_on_error.result b/mysql-test/main/mysqltest_cont_on_error.result index 352799deb06..32c6bfce4b9 100644 --- a/mysql-test/main/mysqltest_cont_on_error.result +++ b/mysql-test/main/mysqltest_cont_on_error.result @@ -1,7 +1,7 @@ select error; -mysqltest: At line 1: query 'select error' failed: ER_BAD_FIELD_ERROR (1054): Unknown column 'error' in 'field list' +mysqltest: At line 1: query 'select error' failed: ER_BAD_FIELD_ERROR (1054): Unknown column 'error' in 'SELECT' SELECT ERROR; -mysqltest: At line 1: query 'SELECT ERROR' failed: ER_BAD_FIELD_ERROR (1054): Unknown column 'ERROR' in 'field list' +mysqltest: At line 1: query 'SELECT ERROR' failed: ER_BAD_FIELD_ERROR (1054): Unknown column 'ERROR' in 'SELECT' SELECT 2; 2 2 diff --git a/mysql-test/main/mysqltest_ps.result b/mysql-test/main/mysqltest_ps.result index 153098ff088..d6266964e3d 100644 --- a/mysql-test/main/mysqltest_ps.result +++ b/mysql-test/main/mysqltest_ps.result @@ -7,7 +7,7 @@ create table t (a int primary key, b blob default ''); select a, (2*a) AS a from t group by a; a a Warnings: -Warning 1052 Column 'a' in group statement is ambiguous +Warning 1052 Column 'a' in GROUP BY is ambiguous drop table t; select 1 + "2 a"; 1 + "2 a" @@ -18,8 +18,8 @@ create table t (a int primary key, b blob default ''); select a, (2*a) AS a from t group by a; a a Warnings: -Warning 1052 Column 'a' in group statement is ambiguous -Warning 1052 Column 'a' in group statement is ambiguous +Warning 1052 Column 'a' in GROUP BY is ambiguous +Warning 1052 Column 'a' in GROUP BY is ambiguous drop table t; select 1 + "2 a"; 1 + "2 a" @@ -30,5 +30,5 @@ create table t (a int primary key, b blob default ''); select a, (2*a) AS a from t group by a; a a Warnings: -Warning 1052 Column 'a' in group statement is ambiguous +Warning 1052 Column 'a' in GROUP BY is ambiguous drop table t; diff --git a/mysql-test/main/named_pipe.result b/mysql-test/main/named_pipe.result index 2baa3471ec9..06315d21a9d 100644 --- a/mysql-test/main/named_pipe.result +++ b/mysql-test/main/named_pipe.result @@ -2156,7 +2156,7 @@ SELECT ELT(FIELD(kundentyp,'PP','PPA','PG','PGA','FK','FKA','FP','FPA','K','KA', Kundentyp kategorie Privat (Private Nutzung) Mobilfunk Warnings: -Warning 1052 Column 'kundentyp' in group statement is ambiguous +Warning 1052 Column 'kundentyp' in GROUP BY is ambiguous drop table t1; connection default; disconnect pipe_con; diff --git a/mysql-test/main/order_by.result b/mysql-test/main/order_by.result index 0d80f2325b6..3f52f276001 100644 --- a/mysql-test/main/order_by.result +++ b/mysql-test/main/order_by.result @@ -796,18 +796,18 @@ col1 col t2_col 2 2 2 3 3 1 select col1 as col, col from t1 order by col; -ERROR 23000: Column 'col' in order clause is ambiguous +ERROR 23000: Column 'col' in ORDER BY is ambiguous select t1.col as c1, t2.col as c2 from t1, t2 where t1.col1=t2.col2 order by col; -ERROR 23000: Column 'col' in order clause is ambiguous +ERROR 23000: Column 'col' in ORDER BY is ambiguous select t1.col as c1, t2.col as c2 from t1, t2 where t1.col1=t2.col2 order by col; -ERROR 23000: Column 'col' in order clause is ambiguous +ERROR 23000: Column 'col' in ORDER BY is ambiguous select col1 from t1, t2 where t1.col1=t2.col2 order by col; -ERROR 23000: Column 'col' in order clause is ambiguous +ERROR 23000: Column 'col' in ORDER BY is ambiguous select t1.col as t1_col, t2.col2 from t1, t2 where t1.col1=t2.col2 order by col; -ERROR 23000: Column 'col' in order clause is ambiguous +ERROR 23000: Column 'col' in ORDER BY is ambiguous select t1.col as t1_col, t2.col from t1, t2 where t1.col1=t2.col2 order by col; t1_col col @@ -958,45 +958,45 @@ num 2 3 SELECT a + 1 AS num, num + 1 FROM t1; -ERROR 42S22: Unknown column 'num' in 'field list' +ERROR 42S22: Unknown column 'num' in 'SELECT' SELECT a + 1 AS num, (select num + 2 FROM t1 LIMIT 1) FROM t1; num (select num + 2 FROM t1 LIMIT 1) 2 4 3 5 SELECT a.a + 1 AS num FROM t1 a JOIN t1 b ON num = b.a; -ERROR 42S22: Unknown column 'num' in 'on clause' +ERROR 42S22: Unknown column 'num' in 'ON' DROP TABLE t1; CREATE TABLE bug25126 ( val int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY ); UPDATE bug25126 SET MissingCol = MissingCol; -ERROR 42S22: Unknown column 'MissingCol' in 'field list' +ERROR 42S22: Unknown column 'MissingCol' in 'SET' UPDATE bug25126 SET val = val ORDER BY MissingCol; -ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +ERROR 42S22: Unknown column 'MissingCol' in 'ORDER BY' UPDATE bug25126 SET val = val ORDER BY val; UPDATE bug25126 SET val = 1 ORDER BY val; UPDATE bug25126 SET val = 1 ORDER BY MissingCol; -ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +ERROR 42S22: Unknown column 'MissingCol' in 'ORDER BY' UPDATE bug25126 SET val = 1 ORDER BY val, MissingCol; -ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +ERROR 42S22: Unknown column 'MissingCol' in 'ORDER BY' UPDATE bug25126 SET val = MissingCol ORDER BY MissingCol; -ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +ERROR 42S22: Unknown column 'MissingCol' in 'ORDER BY' UPDATE bug25126 SET MissingCol = 1 ORDER BY val, MissingCol; -ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +ERROR 42S22: Unknown column 'MissingCol' in 'ORDER BY' UPDATE bug25126 SET MissingCol = 1 ORDER BY MissingCol; -ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +ERROR 42S22: Unknown column 'MissingCol' in 'ORDER BY' UPDATE bug25126 SET MissingCol = val ORDER BY MissingCol; -ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +ERROR 42S22: Unknown column 'MissingCol' in 'ORDER BY' UPDATE bug25126 SET MissingCol = MissingCol ORDER BY MissingCol; -ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +ERROR 42S22: Unknown column 'MissingCol' in 'ORDER BY' DROP TABLE bug25126; CREATE TABLE t1 (a int); SELECT p.a AS val, q.a AS val1 FROM t1 p, t1 q ORDER BY val > 1; val val1 SELECT p.a AS val, q.a AS val FROM t1 p, t1 q ORDER BY val; -ERROR 23000: Column 'val' in order clause is ambiguous +ERROR 23000: Column 'val' in ORDER BY is ambiguous SELECT p.a AS val, q.a AS val FROM t1 p, t1 q ORDER BY val > 1; -ERROR 23000: Column 'val' in order clause is ambiguous +ERROR 23000: Column 'val' in ORDER BY is ambiguous DROP TABLE t1; CREATE TABLE t1 (a int); INSERT INTO t1 VALUES (3), (2), (4), (1); diff --git a/mysql-test/main/parser.result b/mysql-test/main/parser.result index 1cdf89a2739..b52af23eb49 100644 --- a/mysql-test/main/parser.result +++ b/mysql-test/main/parser.result @@ -2231,11 +2231,11 @@ drop table t1; # MDEV-19682 sql_mode="oracle" does not support sysdate # SELECT sysdate LIKE '____-__-__ __:__:__'; -ERROR 42S22: Unknown column 'sysdate' in 'field list' +ERROR 42S22: Unknown column 'sysdate' in 'SELECT' SELECT sysdate = sysdate(); -ERROR 42S22: Unknown column 'sysdate' in 'field list' +ERROR 42S22: Unknown column 'sysdate' in 'SELECT' SELECT sysdate = sysdate(0); -ERROR 42S22: Unknown column 'sysdate' in 'field list' +ERROR 42S22: Unknown column 'sysdate' in 'SELECT' CREATE DATABASE sysdate; DROP DATABASE sysdate; CREATE TABLE sysdate (a INT); diff --git a/mysql-test/main/partition.result b/mysql-test/main/partition.result index 687c287bd34..a9a19cf7748 100644 --- a/mysql-test/main/partition.result +++ b/mysql-test/main/partition.result @@ -2018,7 +2018,7 @@ PARTITION BY RANGE (t2.b) ( PARTITION p1 VALUES LESS THAN (10), PARTITION p2 VALUES LESS THAN (20) ) select * from t2; -ERROR 42S22: Unknown column 't2.b' in 'partition function' +ERROR 42S22: Unknown column 't2.b' in 'PARTITION BY' create table t1 (a int) PARTITION BY RANGE (b) ( PARTITION p1 VALUES LESS THAN (10), diff --git a/mysql-test/main/partition_column.result b/mysql-test/main/partition_column.result index c3a2ce872ce..c3fcd05443e 100644 --- a/mysql-test/main/partition_column.result +++ b/mysql-test/main/partition_column.result @@ -572,7 +572,7 @@ create table t1 (a char(6)) partition by range columns(a) (partition p0 values less than (H23456), partition p1 values less than (M23456)); -ERROR 42S22: Unknown column 'H23456' in 'field list' +ERROR 42S22: Unknown column 'H23456' in 'PARTITION BY' create table t1 (a char(6)) partition by range columns(a) (partition p0 values less than (23456), diff --git a/mysql-test/main/partition_error.result b/mysql-test/main/partition_error.result index 350e8733220..ae41c28d8f8 100644 --- a/mysql-test/main/partition_error.result +++ b/mysql-test/main/partition_error.result @@ -934,7 +934,7 @@ partitions 3 (partition x1 tablespace ts1, partition x2 tablespace ts2, partition x3 tablespace ts3); -ERROR 42S22: Unknown column 'd' in 'partition function' +ERROR 42S22: Unknown column 'd' in 'PARTITION BY' CREATE TABLE t1 ( a int not null, b int not null, @@ -1156,7 +1156,7 @@ partition by range (a) subpartition by hash (a+d) (partition x1 values less than (1) (subpartition x11, subpartition x12), partition x2 values less than (2) (subpartition x21, subpartition x22)); -ERROR 42S22: Unknown column 'd' in 'partition function' +ERROR 42S22: Unknown column 'd' in 'PARTITION BY' CREATE TABLE t1 ( a int not null, b int not null, @@ -1176,7 +1176,7 @@ partition by range (a+d) partitions 2 (partition x1 values less than (4) tablespace ts1, partition x2 values less than (8) tablespace ts2); -ERROR 42S22: Unknown column 'd' in 'partition function' +ERROR 42S22: Unknown column 'd' in 'PARTITION BY' CREATE TABLE t1 ( a int not null, b int not null, @@ -1375,7 +1375,7 @@ partition by list (a+d) partitions 2 (partition x1 values in (4) tablespace ts1, partition x2 values in (8) tablespace ts2); -ERROR 42S22: Unknown column 'd' in 'partition function' +ERROR 42S22: Unknown column 'd' in 'PARTITION BY' CREATE TABLE t1 ( a int not null, b int not null, @@ -1440,7 +1440,7 @@ partition x2 values in (5))' at line 8 CREATE TABLE t1 (a int) PARTITION BY RANGE (a) (PARTITION p0 VALUES LESS THAN (x1)); -ERROR 42S22: Unknown column 'x1' in 'partition function' +ERROR 42S22: Unknown column 'x1' in 'PARTITION BY' CREATE TABLE t1(a int) PARTITION BY RANGE (a) (PARTITION p1 VALUES LESS THAN(5)); insert into t1 values (10); diff --git a/mysql-test/main/partition_mgm_err.result b/mysql-test/main/partition_mgm_err.result index 2d523998985..6e8914fd13d 100644 --- a/mysql-test/main/partition_mgm_err.result +++ b/mysql-test/main/partition_mgm_err.result @@ -166,6 +166,6 @@ alter table t1 check partition all for upgrade; Table Op Msg_type Msg_text test.t1 check status OK alter table t1 order by nonexistent; -ERROR 42S22: Unknown column 'nonexistent' in 'order clause' +ERROR 42S22: Unknown column 'nonexistent' in 'ORDER BY' drop table t1; # End of 10.5 tests diff --git a/mysql-test/main/pool_of_threads.result b/mysql-test/main/pool_of_threads.result index 91ad7ab098f..ba74e74cb37 100644 --- a/mysql-test/main/pool_of_threads.result +++ b/mysql-test/main/pool_of_threads.result @@ -2156,7 +2156,7 @@ SELECT ELT(FIELD(kundentyp,'PP','PPA','PG','PGA','FK','FKA','FP','FPA','K','KA', Kundentyp kategorie Privat (Private Nutzung) Mobilfunk Warnings: -Warning 1052 Column 'kundentyp' in group statement is ambiguous +Warning 1052 Column 'kundentyp' in GROUP BY is ambiguous drop table t1; SET optimizer_switch=default; connection default; diff --git a/mysql-test/main/ps.result b/mysql-test/main/ps.result index 9f99d613539..775ada34653 100644 --- a/mysql-test/main/ps.result +++ b/mysql-test/main/ps.result @@ -1737,15 +1737,15 @@ create table t1 (id int primary key auto_increment, value varchar(10)); insert into t1 (id, value) values (1, 'FIRST'), (2, 'SECOND'), (3, 'THIRD'); prepare stmt from "insert into t1 (id, value) select * from (select 4 as i, 'FOURTH' as v) as y on duplicate key update v = 'DUP'"; execute stmt; -ERROR 42S22: Unknown column 'v' in 'field list' +ERROR 42S22: Unknown column 'v' in 'UPDATE' execute stmt; -ERROR 42S22: Unknown column 'v' in 'field list' +ERROR 42S22: Unknown column 'v' in 'UPDATE' deallocate prepare stmt; prepare stmt from "insert into t1 (id, value) select * from (select 4 as id, 'FOURTH' as value) as y on duplicate key update y.value = 'DUP'"; execute stmt; -ERROR 42S22: Unknown column 'y.value' in 'field list' +ERROR 42S22: Unknown column 'y.value' in 'UPDATE' execute stmt; -ERROR 42S22: Unknown column 'y.value' in 'field list' +ERROR 42S22: Unknown column 'y.value' in 'UPDATE' deallocate prepare stmt; drop tables t1; prepare stmt from "create table t1 select ?"; @@ -4933,9 +4933,9 @@ ERROR 42000: EXECUTE IMMEDIATE does not support subqueries or stored functions PREPARE stmt FROM (SELECT 'SELECT 1'); ERROR 42000: PREPARE..FROM does not support subqueries or stored functions EXECUTE IMMEDIATE a; -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'EXECUTE IMMEDIATE' PREPARE stmt FROM a; -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'PREPARE..FROM' EXECUTE IMMEDIATE NULL; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'NULL' at line 1 PREPARE stmt FROM NULL; @@ -4955,9 +4955,9 @@ ERROR 21000: Operand should contain 1 column(s) EXECUTE IMMEDIATE MAX('SELECT 1 AS c'); ERROR HY000: Invalid use of group function EXECUTE IMMEDIATE DEFAULT(a); -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'EXECUTE IMMEDIATE' EXECUTE IMMEDIATE VALUE(a); -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'EXECUTE IMMEDIATE' CREATE FUNCTION f1() RETURNS VARCHAR(64) RETURN 't1'; EXECUTE IMMEDIATE f1(); ERROR 42000: EXECUTE IMMEDIATE does not support subqueries or stored functions diff --git a/mysql-test/main/ps_1general.result b/mysql-test/main/ps_1general.result index ca2447b6b26..cb53ae68823 100644 --- a/mysql-test/main/ps_1general.result +++ b/mysql-test/main/ps_1general.result @@ -91,11 +91,11 @@ prepare stmt1 from @arg01; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'NULL' at line 1 prepare stmt1 from ' select * from t1 where a <= 2 ' ; prepare stmt1 from ' select * from t1 where x <= 2 ' ; -ERROR 42S22: Unknown column 'x' in 'where clause' +ERROR 42S22: Unknown column 'x' in 'WHERE' prepare stmt1 from ' insert into t1(a,x) values(?,?) ' ; -ERROR 42S22: Unknown column 'x' in 'field list' +ERROR 42S22: Unknown column 'x' in 'INSERT INTO' prepare stmt1 from ' insert into t1(x,a) values(?,?) ' ; -ERROR 42S22: Unknown column 'x' in 'field list' +ERROR 42S22: Unknown column 'x' in 'INSERT INTO' drop table if exists not_exist ; prepare stmt1 from ' select * from not_exist where a <= 2 ' ; ERROR 42S02: Table 'test.not_exist' doesn't exist diff --git a/mysql-test/main/ps_2myisam.result b/mysql-test/main/ps_2myisam.result index ec365498833..d6552d81cb9 100644 --- a/mysql-test/main/ps_2myisam.result +++ b/mysql-test/main/ps_2myisam.result @@ -440,7 +440,7 @@ a b 4 four set @arg00=0 ; execute stmt1 using @arg00; -ERROR 42S22: Unknown column '?' in 'order clause' +ERROR 42S22: Unknown column '?' in 'ORDER BY' set @arg00=1; prepare stmt1 from ' select a,b from t1 order by a limit 1 '; diff --git a/mysql-test/main/ps_3innodb.result b/mysql-test/main/ps_3innodb.result index 1c98a59cff5..320d767fecd 100644 --- a/mysql-test/main/ps_3innodb.result +++ b/mysql-test/main/ps_3innodb.result @@ -440,7 +440,7 @@ a b 4 four set @arg00=0 ; execute stmt1 using @arg00; -ERROR 42S22: Unknown column '?' in 'order clause' +ERROR 42S22: Unknown column '?' in 'ORDER BY' set @arg00=1; prepare stmt1 from ' select a,b from t1 order by a limit 1 '; diff --git a/mysql-test/main/ps_4heap.result b/mysql-test/main/ps_4heap.result index db182536e93..6c81e1cb0fd 100644 --- a/mysql-test/main/ps_4heap.result +++ b/mysql-test/main/ps_4heap.result @@ -441,7 +441,7 @@ a b 4 four set @arg00=0 ; execute stmt1 using @arg00; -ERROR 42S22: Unknown column '?' in 'order clause' +ERROR 42S22: Unknown column '?' in 'ORDER BY' set @arg00=1; prepare stmt1 from ' select a,b from t1 order by a limit 1 '; diff --git a/mysql-test/main/ps_5merge.result b/mysql-test/main/ps_5merge.result index 963a3a60359..16c68a3872d 100644 --- a/mysql-test/main/ps_5merge.result +++ b/mysql-test/main/ps_5merge.result @@ -484,7 +484,7 @@ a b 4 four set @arg00=0 ; execute stmt1 using @arg00; -ERROR 42S22: Unknown column '?' in 'order clause' +ERROR 42S22: Unknown column '?' in 'ORDER BY' set @arg00=1; prepare stmt1 from ' select a,b from t1 order by a limit 1 '; @@ -3852,7 +3852,7 @@ a b 4 four set @arg00=0 ; execute stmt1 using @arg00; -ERROR 42S22: Unknown column '?' in 'order clause' +ERROR 42S22: Unknown column '?' in 'ORDER BY' set @arg00=1; prepare stmt1 from ' select a,b from t1 order by a limit 1 '; diff --git a/mysql-test/main/ps_ddl1.result b/mysql-test/main/ps_ddl1.result index 5178ee64f16..16776325934 100644 --- a/mysql-test/main/ps_ddl1.result +++ b/mysql-test/main/ps_ddl1.result @@ -165,7 +165,7 @@ call p_verify_reprepare_count(1); SUCCESS execute stmt7; -ERROR 42S22: Unknown column 'b' in 'field list' +ERROR 42S22: Unknown column 'b' in 'INSERT INTO' call p_verify_reprepare_count(1); SUCCESS @@ -185,17 +185,17 @@ call p_verify_reprepare_count(1); SUCCESS execute stmt3; -ERROR 42S22: Unknown column 'b' in 'where clause' +ERROR 42S22: Unknown column 'b' in 'WHERE' call p_verify_reprepare_count(1); SUCCESS execute stmt2; -ERROR 42S22: Unknown column 'b' in 'field list' +ERROR 42S22: Unknown column 'b' in 'SELECT' call p_verify_reprepare_count(1); SUCCESS execute stmt1; -ERROR 42S22: Unknown column 'b' in 'field list' +ERROR 42S22: Unknown column 'b' in 'SELECT' call p_verify_reprepare_count(1); SUCCESS @@ -205,7 +205,7 @@ call p_verify_reprepare_count(1); ERROR Expected: 1, actual: 0 execute stmt7; -ERROR 42S22: Unknown column 'b' in 'field list' +ERROR 42S22: Unknown column 'b' in 'INSERT INTO' call p_verify_reprepare_count(1); SUCCESS @@ -225,17 +225,17 @@ call p_verify_reprepare_count(1); SUCCESS execute stmt3; -ERROR 42S22: Unknown column 'b' in 'where clause' +ERROR 42S22: Unknown column 'b' in 'WHERE' call p_verify_reprepare_count(1); SUCCESS execute stmt2; -ERROR 42S22: Unknown column 'b' in 'field list' +ERROR 42S22: Unknown column 'b' in 'SELECT' call p_verify_reprepare_count(1); SUCCESS execute stmt1; -ERROR 42S22: Unknown column 'b' in 'field list' +ERROR 42S22: Unknown column 'b' in 'SELECT' call p_verify_reprepare_count(1); SUCCESS diff --git a/mysql-test/main/query_cache_with_views.result b/mysql-test/main/query_cache_with_views.result index 8cb3d8cb297..9cefa0cc6c1 100644 --- a/mysql-test/main/query_cache_with_views.result +++ b/mysql-test/main/query_cache_with_views.result @@ -205,7 +205,7 @@ CREATE TABLE t2 LIKE t1; SET AUTOCOMMIT=OFF; CREATE VIEW t1_view AS SELECT c1 FROM t1 NATURAL JOIN t2 ; INSERT INTO t1_view (c1, c2) SELECT c1, c2 FROM t1; -ERROR 42S22: Unknown column 'c2' in 'field list' +ERROR 42S22: Unknown column 'c2' in 'INSERT INTO' DROP TABLE t1; DROP TABLE t2; DROP VIEW t1_view; diff --git a/mysql-test/main/replace_returning.result b/mysql-test/main/replace_returning.result index 1bc9bbd4cc5..fef7aaddaa3 100644 --- a/mysql-test/main/replace_returning.result +++ b/mysql-test/main/replace_returning.result @@ -175,7 +175,7 @@ REPLACE INTO t1 VALUES(1,'a'),(2,'b'),(3,'c'); # SIMLPE REPLACE STATEMENT # REPLACE INTO t2(id2,val2) VALUES(1,'a') RETURNING id1; -ERROR 42S22: Unknown column 'id1' in 'field list' +ERROR 42S22: Unknown column 'id1' in 'RETURNING' REPLACE INTO t2(id2,val2) values(2,'b') RETURNING SUM(id2); ERROR HY000: Invalid use of group function REPLACE INTO t2(id2,val2) VALUES(3,'c') RETURNING (SELECT id1 FROM t1); @@ -197,7 +197,7 @@ ERROR 42S02: Unknown table 'test.t1' # Multiple rows in single insert statement # REPLACE INTO t2 VALUES(1,'a'),(2,'b') RETURNING id1; -ERROR 42S22: Unknown column 'id1' in 'field list' +ERROR 42S22: Unknown column 'id1' in 'RETURNING' REPLACE INTO t2 VALUES(3,'c'),(4,'d') RETURNING MAX(id2); ERROR HY000: Invalid use of group function REPLACE INTO t2 VALUES(5,'c'),(6,'f') RETURNING (SELECT id1 FROM t1); @@ -220,7 +220,7 @@ ERROR 42S02: Unknown table 'test.t1' # REPLACE ... SET # REPLACE INTO t2 SET id2=1, val2='a' RETURNING id1; -ERROR 42S22: Unknown column 'id1' in 'field list' +ERROR 42S22: Unknown column 'id1' in 'RETURNING' REPLACE INTO t2 SET id2=2, val2='b' RETURNING COUNT(id2); ERROR HY000: Invalid use of group function REPLACE INTO t2 SET id2=3, val2='c' RETURNING (SELECT id1 FROM t1); @@ -242,7 +242,7 @@ ERROR 42S02: Unknown table 'test.t1' # REPLACE...SELECT # REPLACE INTO t2(id2, val2) SELECT * FROM t1 WHERE id1=1 RETURNING id1; -ERROR 42S22: Unknown column 'id1' in 'field list' +ERROR 42S22: Unknown column 'id1' in 'RETURNING' REPLACE INTO t2(id2, val2) SELECT * FROM t1 WHERE id1=2 RETURNING MAX(id2); ERROR HY000: Invalid use of group function REPLACE INTO t2(id2, val2) SELECT * FROM t1 WHERE id1=2 RETURNING (SELECT diff --git a/mysql-test/main/replace_returning_err.result b/mysql-test/main/replace_returning_err.result index 04ccdb6c5a5..dd9d309d336 100644 --- a/mysql-test/main/replace_returning_err.result +++ b/mysql-test/main/replace_returning_err.result @@ -5,7 +5,7 @@ INSERT INTO t1 VALUES(1, 'a'), (2, 'b'), (3, 'c'); # SIMLPE REPLACE STATEMENT # REPLACE INTO t2(id2, val2) VALUES(1, 'a') RETURNING id1; -ERROR 42S22: Unknown column 'id1' in 'field list' +ERROR 42S22: Unknown column 'id1' in 'RETURNING' REPLACE INTO t2(id2, val2) values(2, 'b') RETURNING SUM(id2); ERROR HY000: Invalid use of group function REPLACE INTO t2(id2, val2) VALUES(3, 'c') RETURNING(SELECT id1 FROM t1); @@ -20,7 +20,7 @@ ERROR HY000: Table 't2' is specified twice, both as a target for 'INSERT' and as # Multiple rows in single replace statement # REPLACE INTO t2 VALUES(1, 'a'), (2, 'b') RETURNING id1; -ERROR 42S22: Unknown column 'id1' in 'field list' +ERROR 42S22: Unknown column 'id1' in 'RETURNING' REPLACE INTO t2 VALUES(3, 'c'), (4, 'd') RETURNING MAX(id2); ERROR HY000: Invalid use of group function REPLACE INTO t2 VALUES(5, 'c'), (6, 'f') RETURNING(SELECT id1 FROM t1); @@ -35,7 +35,7 @@ ERROR HY000: Table 't2' is specified twice, both as a target for 'INSERT' and as # REPLACE ... SET # REPLACE INTO t2 SET id2 = 1, val2 = 'a' RETURNING id1; -ERROR 42S22: Unknown column 'id1' in 'field list' +ERROR 42S22: Unknown column 'id1' in 'RETURNING' REPLACE INTO t2 SET id2 = 2, val2 = 'b' RETURNING COUNT(id2); ERROR HY000: Invalid use of group function REPLACE INTO t2 SET id2 = 3, val2 = 'c' RETURNING(SELECT id1 FROM t1); @@ -50,7 +50,7 @@ ERROR HY000: Table 't2' is specified twice, both as a target for 'INSERT' and as # REPLACE...SELECT # REPLACE INTO t2(id2, val2) SELECT* FROM t1 WHERE id1 = 1 RETURNING id1; -ERROR 42S22: Unknown column 'id1' in 'field list' +ERROR 42S22: Unknown column 'id1' in 'RETURNING' REPLACE INTO t2(id2, val2) SELECT* FROM t1 WHERE id1 = 2 RETURNING MAX(id2); ERROR HY000: Invalid use of group function REPLACE INTO t2(id2, val2) SELECT* FROM t1 WHERE id1 = 2 RETURNING(SELECT id1 diff --git a/mysql-test/main/select.result b/mysql-test/main/select.result index 18602caacc1..cfa31f50718 100644 --- a/mysql-test/main/select.result +++ b/mysql-test/main/select.result @@ -2098,7 +2098,7 @@ DO benchmark(100,1+1),1,1; do default; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 do foobar; -ERROR 42S22: Unknown column 'foobar' in 'field list' +ERROR 42S22: Unknown column 'foobar' in 'DO' CREATE TABLE t1 ( id mediumint(8) unsigned NOT NULL auto_increment, pseudo varchar(35) NOT NULL default '', @@ -3090,13 +3090,13 @@ INSERT INTO t1 VALUES (1),(2),(3); INSERT INTO t2 VALUES (2); INSERT INTO t3 VALUES (3); SELECT t1.id,t3.id FROM t1 JOIN t2 ON (t2.id=t1.id) LEFT JOIN t3 USING (id); -ERROR 23000: Column 'id' in from clause is ambiguous +ERROR 23000: Column 'id' in FROM is ambiguous SELECT t1.id,t3.id FROM t1 JOIN t2 ON (t2.notacolumn=t1.id) LEFT JOIN t3 USING (id); -ERROR 23000: Column 'id' in from clause is ambiguous +ERROR 23000: Column 'id' in FROM is ambiguous SELECT id,t3.id FROM t1 JOIN t2 ON (t2.id=t1.id) LEFT JOIN t3 USING (id); -ERROR 23000: Column 'id' in from clause is ambiguous +ERROR 23000: Column 'id' in FROM is ambiguous SELECT id,t3.id FROM (t1 JOIN t2 ON (t2.id=t1.id)) LEFT JOIN t3 USING (id); -ERROR 23000: Column 'id' in from clause is ambiguous +ERROR 23000: Column 'id' in FROM is ambiguous drop table t1, t2, t3; create table t1 (a int(10),b int(10)); create table t2 (a int(10),b int(10)); @@ -3121,7 +3121,7 @@ select * from t1 join t2 join t3 on (t2.b = t3.b and t1.a = t3.a); a c b b a 1 1 1 1 1 select * from t1, t2 join t3 on (t2.b = t3.b and t1.a = t3.a); -ERROR 42S22: Unknown column 't1.a' in 'on clause' +ERROR 42S22: Unknown column 't1.a' in 'ON' select * from t1 join t2 join t3 join t4 on (t1.a = t4.c and t2.b = t4.c); a c b b a c 1 1 1 1 1 1 @@ -5597,7 +5597,7 @@ drop table t1; CREATE TABLE t1 (a INT, b INT); INSERT INTO t1 VALUES (1,10),(2,20); SELECT b, GROUP_CONCAT(b ORDER BY 2), MIN(a) AS f FROM t1 GROUP BY b ORDER BY f; -ERROR 42S22: Unknown column '2' in 'order clause' +ERROR 42S22: Unknown column '2' in 'ORDER BY' DROP TABLE t1; # # Bug MDEV-24560 SIGSEGV in st_join_table::cleanup + server and client diff --git a/mysql-test/main/select_jcl6.result b/mysql-test/main/select_jcl6.result index 4ec370c08ed..cf8f4f26ae0 100644 --- a/mysql-test/main/select_jcl6.result +++ b/mysql-test/main/select_jcl6.result @@ -2109,7 +2109,7 @@ DO benchmark(100,1+1),1,1; do default; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 do foobar; -ERROR 42S22: Unknown column 'foobar' in 'field list' +ERROR 42S22: Unknown column 'foobar' in 'DO' CREATE TABLE t1 ( id mediumint(8) unsigned NOT NULL auto_increment, pseudo varchar(35) NOT NULL default '', @@ -3101,13 +3101,13 @@ INSERT INTO t1 VALUES (1),(2),(3); INSERT INTO t2 VALUES (2); INSERT INTO t3 VALUES (3); SELECT t1.id,t3.id FROM t1 JOIN t2 ON (t2.id=t1.id) LEFT JOIN t3 USING (id); -ERROR 23000: Column 'id' in from clause is ambiguous +ERROR 23000: Column 'id' in FROM is ambiguous SELECT t1.id,t3.id FROM t1 JOIN t2 ON (t2.notacolumn=t1.id) LEFT JOIN t3 USING (id); -ERROR 23000: Column 'id' in from clause is ambiguous +ERROR 23000: Column 'id' in FROM is ambiguous SELECT id,t3.id FROM t1 JOIN t2 ON (t2.id=t1.id) LEFT JOIN t3 USING (id); -ERROR 23000: Column 'id' in from clause is ambiguous +ERROR 23000: Column 'id' in FROM is ambiguous SELECT id,t3.id FROM (t1 JOIN t2 ON (t2.id=t1.id)) LEFT JOIN t3 USING (id); -ERROR 23000: Column 'id' in from clause is ambiguous +ERROR 23000: Column 'id' in FROM is ambiguous drop table t1, t2, t3; create table t1 (a int(10),b int(10)); create table t2 (a int(10),b int(10)); @@ -3132,7 +3132,7 @@ select * from t1 join t2 join t3 on (t2.b = t3.b and t1.a = t3.a); a c b b a 1 1 1 1 1 select * from t1, t2 join t3 on (t2.b = t3.b and t1.a = t3.a); -ERROR 42S22: Unknown column 't1.a' in 'on clause' +ERROR 42S22: Unknown column 't1.a' in 'ON' select * from t1 join t2 join t3 join t4 on (t1.a = t4.c and t2.b = t4.c); a c b b a c 1 1 1 1 1 1 @@ -5608,7 +5608,7 @@ drop table t1; CREATE TABLE t1 (a INT, b INT); INSERT INTO t1 VALUES (1,10),(2,20); SELECT b, GROUP_CONCAT(b ORDER BY 2), MIN(a) AS f FROM t1 GROUP BY b ORDER BY f; -ERROR 42S22: Unknown column '2' in 'order clause' +ERROR 42S22: Unknown column '2' in 'ORDER BY' DROP TABLE t1; # # Bug MDEV-24560 SIGSEGV in st_join_table::cleanup + server and client diff --git a/mysql-test/main/select_pkeycache.result b/mysql-test/main/select_pkeycache.result index 18602caacc1..cfa31f50718 100644 --- a/mysql-test/main/select_pkeycache.result +++ b/mysql-test/main/select_pkeycache.result @@ -2098,7 +2098,7 @@ DO benchmark(100,1+1),1,1; do default; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 do foobar; -ERROR 42S22: Unknown column 'foobar' in 'field list' +ERROR 42S22: Unknown column 'foobar' in 'DO' CREATE TABLE t1 ( id mediumint(8) unsigned NOT NULL auto_increment, pseudo varchar(35) NOT NULL default '', @@ -3090,13 +3090,13 @@ INSERT INTO t1 VALUES (1),(2),(3); INSERT INTO t2 VALUES (2); INSERT INTO t3 VALUES (3); SELECT t1.id,t3.id FROM t1 JOIN t2 ON (t2.id=t1.id) LEFT JOIN t3 USING (id); -ERROR 23000: Column 'id' in from clause is ambiguous +ERROR 23000: Column 'id' in FROM is ambiguous SELECT t1.id,t3.id FROM t1 JOIN t2 ON (t2.notacolumn=t1.id) LEFT JOIN t3 USING (id); -ERROR 23000: Column 'id' in from clause is ambiguous +ERROR 23000: Column 'id' in FROM is ambiguous SELECT id,t3.id FROM t1 JOIN t2 ON (t2.id=t1.id) LEFT JOIN t3 USING (id); -ERROR 23000: Column 'id' in from clause is ambiguous +ERROR 23000: Column 'id' in FROM is ambiguous SELECT id,t3.id FROM (t1 JOIN t2 ON (t2.id=t1.id)) LEFT JOIN t3 USING (id); -ERROR 23000: Column 'id' in from clause is ambiguous +ERROR 23000: Column 'id' in FROM is ambiguous drop table t1, t2, t3; create table t1 (a int(10),b int(10)); create table t2 (a int(10),b int(10)); @@ -3121,7 +3121,7 @@ select * from t1 join t2 join t3 on (t2.b = t3.b and t1.a = t3.a); a c b b a 1 1 1 1 1 select * from t1, t2 join t3 on (t2.b = t3.b and t1.a = t3.a); -ERROR 42S22: Unknown column 't1.a' in 'on clause' +ERROR 42S22: Unknown column 't1.a' in 'ON' select * from t1 join t2 join t3 join t4 on (t1.a = t4.c and t2.b = t4.c); a c b b a c 1 1 1 1 1 1 @@ -5597,7 +5597,7 @@ drop table t1; CREATE TABLE t1 (a INT, b INT); INSERT INTO t1 VALUES (1,10),(2,20); SELECT b, GROUP_CONCAT(b ORDER BY 2), MIN(a) AS f FROM t1 GROUP BY b ORDER BY f; -ERROR 42S22: Unknown column '2' in 'order clause' +ERROR 42S22: Unknown column '2' in 'ORDER BY' DROP TABLE t1; # # Bug MDEV-24560 SIGSEGV in st_join_table::cleanup + server and client diff --git a/mysql-test/main/sp-dynamic.result b/mysql-test/main/sp-dynamic.result index ad11763b523..c4f6f8cb0f9 100644 --- a/mysql-test/main/sp-dynamic.result +++ b/mysql-test/main/sp-dynamic.result @@ -228,9 +228,9 @@ prepare stmt from "select 'dynamic sql:', @a, a"; execute stmt; end| call p1()| -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'SELECT' call p1()| -ERROR 42S22: Unknown column 'a' in 'field list' +ERROR 42S22: Unknown column 'a' in 'SELECT' set sql_mode= DEFAULT| drop procedure p1| create procedure p1() diff --git a/mysql-test/main/sp-error.result b/mysql-test/main/sp-error.result index 3832d63c073..f6f2c95f714 100644 --- a/mysql-test/main/sp-error.result +++ b/mysql-test/main/sp-error.result @@ -1,4 +1,3 @@ -drop table if exists t1, t2; SELECT * FROM mysql.proc INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/proc.txt'; Warnings: Warning 1287 ' INTO FROM...' instead @@ -9,7 +8,6 @@ create procedure syntaxerror(t int)| ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 create procedure syntaxerror(t int)| ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 -drop table if exists t3| create table t3 ( x int )| insert into t3 values (2), (3)| create procedure bad_into(out param int) @@ -166,7 +164,6 @@ open cc; close c; end| ERROR 42000: Undefined CURSOR: cc -drop table if exists t1| create table t1 (val int)| create procedure p() begin @@ -191,7 +188,6 @@ drop procedure p| alter procedure bar3 sql security invoker| ERROR 42000: PROCEDURE test.bar3 does not exist drop table t1| -drop table if exists t1| create table t1 (val int, x float)| insert into t1 values (42, 3.1), (19, 1.2)| create procedure p() @@ -276,7 +272,6 @@ declare continue handler for sqlstate '42S99' set x = 1; declare c cursor for select * from t1; end| ERROR 42000: Cursor declaration after handler declaration -drop procedure if exists p| create procedure p(in x int, inout y int, out z int) begin set y = x+y; @@ -307,7 +302,6 @@ lock tables t1 read, mysql.proc read| unlock tables| lock tables mysql.proc write| unlock tables| -drop function if exists f1| create function f1(i int) returns int begin insert into t1 (val) values (i); @@ -344,16 +338,15 @@ open c; close c; end| call bug1965()| -ERROR 42S22: Unknown column 'valname' in 'order clause' +ERROR 42S22: Unknown column 'valname' in 'ORDER BY' drop procedure bug1965| select 1 into a| ERROR 42000: Undeclared variable: a -drop table if exists t3| create table t3 (column_1_0 int)| create procedure bug1653() update t3 set column_1 = 0| call bug1653()| -ERROR 42S22: Unknown column 'column_1' in 'field list' +ERROR 42S22: Unknown column 'column_1' in 'SET' drop table t3| create table t3 (column_1 int)| call bug1653()| @@ -375,7 +368,7 @@ update t1 set v = 42; end| insert into t1 values (666, 51.3)| call bug2272()| -ERROR 42S22: Unknown column 'v' in 'field list' +ERROR 42S22: Unknown column 'v' in 'SET' truncate table t1| drop procedure bug2272| create procedure bug2329_1() @@ -389,9 +382,9 @@ declare v int; replace t1 set v = 5; end| call bug2329_1()| -ERROR 42S22: Unknown column 'v' in 'field list' +ERROR 42S22: Unknown column 'v' in 'INSERT INTO' call bug2329_2()| -ERROR 42S22: Unknown column 'v' in 'field list' +ERROR 42S22: Unknown column 'v' in 'INSERT INTO' drop procedure bug2329_1| drop procedure bug2329_2| create function bug3287() returns int @@ -415,7 +408,6 @@ end case| call bug3287(2)| ERROR 20000: Case not found for CASE statement drop procedure bug3287| -drop table if exists t3| create table t3 (s1 int, primary key (s1))| insert into t3 values (5),(6)| create procedure bug3279(out y int) @@ -457,7 +449,6 @@ create procedure bug4344() drop procedure bug4344| ERROR HY000: Can't drop or alter a PROCEDURE from within another stored routine create procedure bug4344() drop function bug4344| ERROR HY000: Can't drop or alter a FUNCTION from within another stored routine -drop procedure if exists bug3294| create procedure bug3294() begin declare continue handler for sqlexception drop table t5; @@ -468,10 +459,6 @@ create table t5 (x int)| call bug3294()| ERROR 42S02: Unknown table 'test.t5' drop procedure bug3294| -drop procedure if exists bug8776_1| -drop procedure if exists bug8776_2| -drop procedure if exists bug8776_3| -drop procedure if exists bug8776_4| create procedure bug8776_1() begin declare continue handler for sqlstate '42S0200test' begin end; @@ -505,7 +492,6 @@ ERROR 0A000: LOCK is not allowed in stored procedures create procedure bug6600() unlock table t1| ERROR 0A000: UNLOCK is not allowed in stored procedures -drop procedure if exists bug9566| create procedure bug9566() begin select * from t1; @@ -515,7 +501,6 @@ alter procedure bug9566 comment 'Some comment'| ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction unlock tables| drop procedure bug9566| -drop procedure if exists bug7299| create procedure bug7299() begin declare v int; @@ -556,7 +541,6 @@ declare exit handler for condname1 select 1; declare exit handler for sqlstate '42000' select 2; end| ERROR 42000: Duplicate handler declared in the same block -drop procedure if exists bug9073| create procedure bug9073() begin declare condname1 condition for sqlstate '42000'; @@ -597,8 +581,6 @@ select b; return b; end| ERROR 0A000: Not allowed to return a result set from a function -drop function if exists bug8408_f| -drop procedure if exists bug8408_p| create function bug8408_f() returns int begin call bug8408_p(); @@ -626,11 +608,9 @@ val x bug8408() 7 7 3 drop function bug8408| truncate table t1| -drop procedure if exists bug10537| create procedure bug10537() load data local infile '/tmp/somefile' into table t1| ERROR 0A000: LOAD DATA is not allowed in stored procedures -drop function if exists bug8409| create function bug8409() returns int begin @@ -681,7 +661,6 @@ create procedure bug9529_9012345678901234567890123456789012345678901234567890123 begin end| ERROR 42000: Identifier name 'bug9529_901234567890123456789012345678901234567890123456789012345' is too long -drop procedure if exists bug17015_0123456789012345678901234567890123456789012345678901234| create procedure bug17015_0123456789012345678901234567890123456789012345678901234() begin end| @@ -689,7 +668,6 @@ show procedure status like 'bug17015%'| Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation test bug17015_0123456789012345678901234567890123456789012345678901234 PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER latin1 latin1_swedish_ci latin1_swedish_ci drop procedure bug17015_0123456789012345678901234567890123456789012345678901234| -drop procedure if exists bug10969| create procedure bug10969() begin declare s1 int default 0; @@ -733,10 +711,6 @@ TEMP_SUM ERROR 24000: Cursor is not open drop procedure SP001; drop table t1, t2; -drop function if exists bug11394| -drop function if exists bug11394_1| -drop function if exists bug11394_2| -drop procedure if exists bug11394| create function bug11394(i int) returns int begin if i <= 0 then @@ -784,8 +758,6 @@ CREATE TABLE t_bug_12490(a int); CREATE TRIGGER BUG_12490 BEFORE UPDATE ON t_bug_12490 FOR EACH ROW HELP CONTENTS; ERROR 0A000: HELP is not allowed in stored procedures DROP TABLE t_bug_12490; -drop function if exists bug11834_1; -drop function if exists bug11834_2; create function bug11834_1() returns int return 10; create function bug11834_2() returns int return bug11834_1(); prepare stmt from "select bug11834_2()"; @@ -800,14 +772,12 @@ execute stmt; ERROR 42000: FUNCTION test.bug11834_1 does not exist deallocate prepare stmt; drop function bug11834_2; -DROP FUNCTION IF EXISTS bug12953| CREATE FUNCTION bug12953() RETURNS INT BEGIN OPTIMIZE TABLE t1; RETURN 1; END| ERROR 0A000: Not allowed to return a result set from a function -DROP FUNCTION IF EXISTS bug12995| CREATE FUNCTION bug12995() RETURNS INT BEGIN HANDLER t1 OPEN; @@ -828,8 +798,6 @@ END| ERROR 0A000: HANDLER is not allowed in stored procedures SELECT bug12995()| ERROR 42000: FUNCTION test.bug12995 does not exist -drop procedure if exists bug12712; -drop function if exists bug12712; create procedure bug12712() set session autocommit = 0; select @@autocommit; @@ -875,10 +843,6 @@ ERROR HY000: Not allowed to set autocommit from a stored function or trigger create trigger bug12712 before insert on t1 for each row set session autocommit = 0; ERROR HY000: Not allowed to set autocommit from a stored function or trigger -drop procedure if exists bug13510_1| -drop procedure if exists bug13510_2| -drop procedure if exists bug13510_3| -drop procedure if exists bug13510_4| create procedure bug13510_1() begin declare password varchar(10); @@ -915,7 +879,6 @@ names foo4 drop procedure bug13510_3| drop procedure bug13510_4| -drop function if exists bug_13627_f| CREATE TABLE t1 (a int)| CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN DROP TRIGGER test1; END | ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger @@ -1058,9 +1021,6 @@ select count(*) into param1 from t3; end| ERROR 3D000: No database selected use test; -DROP PROCEDURE IF EXISTS bug13037_p1; -DROP PROCEDURE IF EXISTS bug13037_p2; -DROP PROCEDURE IF EXISTS bug13037_p3; CREATE PROCEDURE bug13037_p1() BEGIN IF bug13037_foo THEN @@ -1078,13 +1038,13 @@ SELECT bug13037_foo; END| CALL bug13037_p2(); -ERROR 42S22: Unknown column 'bug13037_bar' in 'field list' +ERROR 42S22: Unknown column 'bug13037_bar' in 'SET' CALL bug13037_p3(); -ERROR 42S22: Unknown column 'bug13037_foo' in 'field list' +ERROR 42S22: Unknown column 'bug13037_foo' in 'SELECT' CALL bug13037_p2(); -ERROR 42S22: Unknown column 'bug13037_bar' in 'field list' +ERROR 42S22: Unknown column 'bug13037_bar' in 'SET' CALL bug13037_p3(); -ERROR 42S22: Unknown column 'bug13037_foo' in 'field list' +ERROR 42S22: Unknown column 'bug13037_foo' in 'SELECT' DROP PROCEDURE bug13037_p2; DROP PROCEDURE bug13037_p3; create database mysqltest1; @@ -1100,7 +1060,6 @@ Db Name Type Definer Modified Created Security_type Comment character_set_client mysqltest2 p1 PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER latin1 latin1_swedish_ci latin1_swedish_ci drop database mysqltest2; use test; -DROP FUNCTION IF EXISTS bug13012| CREATE FUNCTION bug13012() RETURNS INT BEGIN REPAIR TABLE t1; @@ -1119,9 +1078,6 @@ ERROR 0A000: Not allowed to return a result set from a function drop table t1| drop procedure bug13012_1| drop function bug13012_2| -drop function if exists bug11555_1; -drop function if exists bug11555_2; -drop view if exists v1, v2, v3, v4; create function bug11555_1() returns int return (select max(i) from t1); create function bug11555_2() returns int return bug11555_1(); create view v1 as select bug11555_1(); @@ -1158,7 +1114,6 @@ ERROR 42S02: Table 'test.t2' doesn't exist drop function bug11555_1; drop table t1; drop view v1; -drop procedure if exists ` bug15658`; create procedure ``() select 1; ERROR 42000: Incorrect routine name '' create procedure ` `() select 1; @@ -1177,8 +1132,6 @@ show procedure status; Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation test bug15658 PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER latin1 latin1_swedish_ci latin1_swedish_ci drop procedure ` bug15658`; -drop function if exists bug14270; -drop table if exists t1; create table t1 (s1 int primary key); create function bug14270() returns int begin @@ -1193,7 +1146,6 @@ return 1; end| ERROR 0A000: Not allowed to return a result set from a function drop table t1; -drop procedure if exists bug15091; create procedure bug15091() begin declare selectstr varchar(6000) default ' '; @@ -1204,10 +1156,8 @@ c.operatorid, 'in (',conditionstr, ')'); end| ERROR 42000: Undeclared variable: c -drop function if exists bug16896; create aggregate function bug16896() returns int return 1; ERROR HY000: Aggregate specific instruction(FETCH GROUP NEXT ROW) missing from the aggregate function -DROP PROCEDURE IF EXISTS bug14702; CREATE IF NOT EXISTS PROCEDURE bug14702() BEGIN END; @@ -1218,7 +1168,6 @@ CREATE PROCEDURE IF NOT EXISTS bug14702() BEGIN END; DROP PROCEDURE IF EXISTS bug14702; -DROP TABLE IF EXISTS t1; CREATE TABLE t1 (i INT); CREATE PROCEDURE bug20953() CREATE VIEW v AS SELECT 1 INTO @a; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INTO @a' at line 1 @@ -1242,30 +1191,23 @@ ERROR HY000: View's SELECT contains a variable or parameter PREPARE stmt FROM "CREATE VIEW v AS SELECT ?"; ERROR HY000: View's SELECT contains a variable or parameter DROP TABLE t1; -drop tables if exists t1; -drop procedure if exists bug24491; create table t1 (id int primary key auto_increment, value varchar(10)); insert into t1 (id, value) values (1, 'FIRST'), (2, 'SECOND'), (3, 'THIRD'); create procedure bug24491() insert into t1 (id, value) select * from (select 4 as i, 'FOURTH' as v) as y on duplicate key update v = 'DUP'; call bug24491(); -ERROR 42S22: Unknown column 'v' in 'field list' +ERROR 42S22: Unknown column 'v' in 'UPDATE' call bug24491(); -ERROR 42S22: Unknown column 'v' in 'field list' +ERROR 42S22: Unknown column 'v' in 'UPDATE' drop procedure bug24491; create procedure bug24491() insert into t1 (id, value) select * from (select 4 as id, 'FOURTH' as value) as y on duplicate key update y.value = 'DUP'; call bug24491(); -ERROR 42S22: Unknown column 'y.value' in 'field list' +ERROR 42S22: Unknown column 'y.value' in 'UPDATE' call bug24491(); -ERROR 42S22: Unknown column 'y.value' in 'field list' +ERROR 42S22: Unknown column 'y.value' in 'UPDATE' drop procedure bug24491; drop tables t1; -DROP FUNCTION IF EXISTS bug18914_f1; -DROP FUNCTION IF EXISTS bug18914_f2; -DROP PROCEDURE IF EXISTS bug18914_p1; -DROP PROCEDURE IF EXISTS bug18914_p2; -DROP TABLE IF EXISTS t1, t2; CREATE TABLE t1 (i INT); CREATE PROCEDURE bug18914_p1() CREATE TABLE t2 (i INT); CREATE PROCEDURE bug18914_p2() DROP TABLE IF EXISTS no_such_table; @@ -1294,9 +1236,6 @@ DROP FUNCTION bug18914_f2; DROP PROCEDURE bug18914_p1; DROP PROCEDURE bug18914_p2; DROP TABLE t1; -drop table if exists bogus_table_20713; -drop function if exists func_20713_a; -drop function if exists func_20713_b; create table bogus_table_20713( id int(10) not null primary key); insert into bogus_table_20713 values (1), (2), (3); create function func_20713_a() returns int(11) @@ -1348,11 +1287,6 @@ select @in_func; 2 drop function if exists func_20713_a; drop function if exists func_20713_b; -drop table if exists table_25345_a; -drop table if exists table_25345_b; -drop procedure if exists proc_25345; -drop function if exists func_25345; -drop function if exists func_25345_b; create table table_25345_a (a int); create table table_25345_b (b int); create procedure proc_25345() @@ -1394,14 +1328,12 @@ drop procedure proc_25345; drop function func_25345; drop function func_25345_b; End of 5.0 tests -drop function if exists bug16164; create function bug16164() returns int begin show authors; return 42; end| ERROR 0A000: Not allowed to return a result set from a function -drop function if exists bug20701; create function bug20701() returns varchar(25) binary return "test"; drop function bug20701; create function bug20701() returns varchar(25) return "test"; @@ -1458,8 +1390,6 @@ end until true end repeat retry; end// ERROR 42000: LEAVE with no matching label: retry -drop procedure if exists proc_28360; -drop function if exists func_28360; CREATE PROCEDURE proc_28360() BEGIN ALTER DATABASE `#mysql50#upgrade-me` UPGRADE DATA DIRECTORY NAME; @@ -1471,7 +1401,6 @@ ALTER DATABASE `#mysql50#upgrade-me` UPGRADE DATA DIRECTORY NAME; RETURN 0; END// ERROR HY000: Can't drop or alter a DATABASE from within another stored routine -DROP PROCEDURE IF EXISTS p1; CREATE PROCEDURE p1() BEGIN DECLARE c char(100); @@ -1487,7 +1416,6 @@ FETCH cur1 INTO c; select c; CLOSE cur1; END' at line 4 -DROP DATABASE IF EXISTS mysqltest; CREATE DATABASE mysqltest; USE mysqltest; DROP DATABASE mysqltest; @@ -1509,9 +1437,6 @@ ERROR HY000: Not allowed to set autocommit from a stored function or trigger create trigger t1 before insert on t2 for each row set password = password('foo');| ERROR HY000: Not allowed to set autocommit from a stored function or trigger -drop function if exists f1; -drop function if exists f2; -drop table if exists t1, t2; create function f1() returns int begin drop temporary table t1; @@ -1557,10 +1482,6 @@ drop function f2; drop table t2; ERROR 42S02: Unknown table 'test.t2' End of 5.1 tests -drop procedure if exists proc_33983_a; -drop procedure if exists proc_33983_b; -drop procedure if exists proc_33983_c; -drop procedure if exists proc_33983_d; create procedure proc_33983_a() begin label1: @@ -1612,7 +1533,6 @@ CALL p1((SELECT * FROM t1))| ERROR 21000: Subquery returns more than 1 row DROP PROCEDURE IF EXISTS p1| DROP TABLE t1| -drop procedure if exists p1; create procedure p1() begin create table t1 (a int) engine=MyISAM; @@ -1621,7 +1541,6 @@ end| call p1(); call p1(); drop procedure p1; -drop procedure if exists proc_8759; create procedure proc_8759() begin declare should_be_illegal condition for sqlstate '00000'; @@ -1633,7 +1552,6 @@ begin declare continue handler for sqlstate '00000' set @x=0; end$$ ERROR 42000: Bad SQLSTATE: '00000' -drop procedure if exists proc_36510; create procedure proc_36510() begin declare should_be_illegal condition for sqlstate '00123'; @@ -1656,7 +1574,6 @@ begin declare continue handler for 0 set @x=0; end$$ ERROR HY000: Incorrect CONDITION value: '0' -drop procedure if exists p1; set @old_recursion_depth = @@max_sp_recursion_depth; set @@max_sp_recursion_depth = 255; create procedure p1(a int) @@ -1728,12 +1645,6 @@ End of 5.1 tests # - Case 1 -DROP PROCEDURE IF EXISTS p1; -DROP PROCEDURE IF EXISTS p2; -DROP PROCEDURE IF EXISTS p3; -DROP PROCEDURE IF EXISTS p4; -DROP PROCEDURE IF EXISTS p5; -DROP PROCEDURE IF EXISTS p6; CREATE PROCEDURE p1() BEGIN SELECT CAST('10 ' as unsigned integer); @@ -1827,7 +1738,6 @@ DROP PROCEDURE p6; # - Case 3: check that "Exception trumps No Data". -DROP TABLE IF EXISTS t1; CREATE TABLE t1(a INT); INSERT INTO t1 VALUES (1), (2), (3); CREATE PROCEDURE p1() @@ -1856,8 +1766,6 @@ DROP TABLE t1; # # Bug#36185: Incorrect precedence for warning and exception handlers # -DROP TABLE IF EXISTS t1; -DROP PROCEDURE IF EXISTS p1; CREATE TABLE t1 (a INT, b INT NOT NULL); CREATE PROCEDURE p1() BEGIN @@ -1929,9 +1837,6 @@ SET sql_mode = @sql_mode_saved; # # Bug#55850: Trigger warnings not cleared. # -DROP TABLE IF EXISTS t1; -DROP TABLE IF EXISTS t2; -DROP PROCEDURE IF EXISTS p1; CREATE TABLE t1(x SMALLINT, y SMALLINT, z SMALLINT); CREATE TABLE t2(a SMALLINT, b SMALLINT, c SMALLINT, d SMALLINT, e SMALLINT, f SMALLINT); @@ -2551,8 +2456,6 @@ DROP PROCEDURE p13; # Bug#12731619: NESTED SP HANDLERS CAN TRIGGER ASSERTION -DROP FUNCTION IF EXISTS f1; -DROP TABLE IF EXISTS t1; CREATE TABLE t1(msg VARCHAR(255)); CREATE FUNCTION f1() RETURNS INT BEGIN @@ -2593,13 +2496,6 @@ DROP TABLE t1; # Check that handled SQL-conditions are properly cleared from DA. -DROP TABLE IF EXISTS t1; -DROP TABLE IF EXISTS t2; -DROP PROCEDURE IF EXISTS p1; -DROP PROCEDURE IF EXISTS p2; -DROP PROCEDURE IF EXISTS p3; -DROP PROCEDURE IF EXISTS p4; -DROP PROCEDURE IF EXISTS p5; CREATE TABLE t1(a CHAR, b CHAR, c CHAR); CREATE TABLE t2(a SMALLINT, b SMALLINT, c SMALLINT); @@ -2769,8 +2665,6 @@ DROP TABLE t2; # Check DECLARE statements that raise conditions before handlers # are declared. -DROP PROCEDURE IF EXISTS p1; -DROP PROCEDURE IF EXISTS p2; SET sql_mode = ''| CREATE PROCEDURE p1() BEGIN @@ -2798,8 +2692,6 @@ DROP PROCEDURE p2; # # Bug#13113222 RQG_SIGNAL_RESIGNAL FAILED WITH ASSERTION. # -DROP PROCEDURE IF EXISTS p1; -DROP PROCEDURE IF EXISTS p2; CREATE PROCEDURE p1() BEGIN DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SELECT 'triggered p1'; @@ -2825,9 +2717,6 @@ DROP PROCEDURE p2; # Bug#12652873: 61392: Continue handler for NOT FOUND being triggered # from internal stored function. -DROP FUNCTION IF EXISTS f1; -DROP FUNCTION IF EXISTS f2; -DROP TABLE IF EXISTS t1; CREATE TABLE t1 (a INT, b INT); INSERT INTO t1 VALUES (1, 2); diff --git a/mysql-test/main/sp-error.test b/mysql-test/main/sp-error.test index bb9868be1a1..d8c265335e4 100644 --- a/mysql-test/main/sp-error.test +++ b/mysql-test/main/sp-error.test @@ -4,10 +4,6 @@ --source include/default_charset.inc ---disable_warnings -drop table if exists t1, t2; ---enable_warnings - --disable_ps2_protocol # Backup the mysql.proc table --enable_prepare_warnings @@ -25,11 +21,11 @@ delimiter |; # This should give three syntax errors (sometimes crashed; bug #643) # (Unfortunately, this is not a 100% test, on some platforms this # passed despite the bug.) ---error 1064 +--error ER_PARSE_ERROR create procedure syntaxerror(t int)| ---error 1064 +--error ER_PARSE_ERROR create procedure syntaxerror(t int)| ---error 1064 +--error ER_PARSE_ERROR create procedure syntaxerror(t int)| # Check that we get the right error, i.e. UDF declaration parses correctly, @@ -37,13 +33,10 @@ create procedure syntaxerror(t int)| # This generates an error message containing a misleading errno which # might vary between systems (it usually doesn't have anything to do with # the actual failing dlopen()). -#--error 1126 +#--error ER_CANT_OPEN_LIBRARY #create function foo returns real soname "foo.so"| ---disable_warnings -drop table if exists t3| ---enable_warnings create table t3 ( x int )| insert into t3 values (2), (3)| @@ -52,7 +45,7 @@ create procedure bad_into(out param int) select x from t3 into param| --disable_prepare_warnings ---error 1172 +--error ER_TOO_MANY_ROWS call bad_into(@x)| drop procedure bad_into| @@ -66,18 +59,18 @@ create function func1() returns int return 42| # Can't create recursively ---error 1303 +--error ER_SP_NO_RECURSIVE_CREATE create procedure foo() create procedure bar() set @x=3| ---error 1303 +--error ER_SP_NO_RECURSIVE_CREATE create procedure foo() create function bar() returns double return 2.3| # Already exists ---error 1304 +--error ER_SP_ALREADY_EXISTS create procedure proc1() set @x = 42| ---error 1304 +--error ER_SP_ALREADY_EXISTS create function func1() returns int return 42| @@ -85,41 +78,41 @@ drop procedure proc1| drop function func1| # Does not exist ---error 1305 +--error ER_SP_DOES_NOT_EXIST alter procedure foo| ---error 1305 +--error ER_SP_DOES_NOT_EXIST alter function foo| ---error 1305 +--error ER_SP_DOES_NOT_EXIST drop procedure foo| ---error 1305 +--error ER_SP_DOES_NOT_EXIST drop function foo| ---error 1305 +--error ER_SP_DOES_NOT_EXIST call foo()| drop procedure if exists foo| ---error 1305 +--error ER_SP_DOES_NOT_EXIST show create procedure foo| ---error 1305 +--error ER_SP_DOES_NOT_EXIST show create function foo| # LEAVE/ITERATE with no match ---error 1308 +--error ER_SP_LILABEL_MISMATCH create procedure foo() foo: loop leave bar; end loop| ---error 1308 +--error ER_SP_LILABEL_MISMATCH create procedure foo() foo: loop iterate bar; end loop| ---error 1308 +--error ER_SP_LILABEL_MISMATCH create procedure foo() foo: begin iterate foo; end| # Redefining label ---error 1309 +--error ER_SP_LABEL_REDEFINE create procedure foo() foo: loop foo: loop @@ -128,14 +121,14 @@ foo: loop end loop foo| # End label mismatch ---error 1310 +--error ER_SP_LABEL_MISMATCH create procedure foo() foo: loop set @x=2; end loop bar| # RETURN in FUNCTION only ---error 1313 +--error ER_SP_BADRETURN create procedure foo() return 42| @@ -145,19 +138,19 @@ create procedure p(x int) create function f(x int) returns int return x+42| ---error 1318 +--error ER_SP_WRONG_NO_OF_ARGS call p()| ---error 1318 +--error ER_SP_WRONG_NO_OF_ARGS call p(1, 2)| ---error 1318 +--error ER_SP_WRONG_NO_OF_ARGS select f()| ---error 1318 +--error ER_SP_WRONG_NO_OF_ARGS select f(1, 2)| drop procedure p| drop function f| ---error 1319 +--error ER_SP_COND_MISMATCH create procedure p(val int, out res int) begin declare x int default 0; @@ -171,7 +164,7 @@ begin end if; end| ---error 1319 +--error ER_SP_COND_MISMATCH create procedure p(val int, out res int) begin declare x int default 0; @@ -186,7 +179,7 @@ begin end if; end| ---error 1320 +--error ER_SP_NORETURN create function f(val int) returns int begin declare x int; @@ -204,7 +197,7 @@ begin end if; end| ---error 1321 +--error ER_SP_NORETURNEND select f(10)| drop function f| @@ -218,7 +211,7 @@ begin close c; end| ---error 1323 +--error ER_SP_BAD_CURSOR_SELECT create procedure p() begin declare x int; @@ -228,7 +221,7 @@ begin close c; end| ---error 1324 +--error ER_SP_CURSOR_MISMATCH create procedure p() begin declare c cursor for select * from test.t; @@ -237,9 +230,6 @@ begin close c; end| ---disable_warnings -drop table if exists t1| ---enable_warnings create table t1 (val int)| create procedure p() @@ -250,7 +240,7 @@ begin open c; close c; end| ---error 1325 +--error ER_SP_CURSOR_ALREADY_OPEN call p()| drop procedure p| @@ -262,22 +252,19 @@ begin close c; close c; end| ---error 1326 +--error ER_SP_CURSOR_NOT_OPEN call p()| drop procedure p| ---error 1305 +--error ER_SP_DOES_NOT_EXIST alter procedure bar3 sql security invoker| drop table t1| ---disable_warnings -drop table if exists t1| ---enable_warnings create table t1 (val int, x float)| insert into t1 values (42, 3.1), (19, 1.2)| ---error 1327 +--error ER_SP_UNDECLARED_VAR create procedure p() begin declare x int; @@ -297,7 +284,7 @@ begin fetch c into x; close c; end| ---error 1328 +--error ER_SP_WRONG_NO_OF_FETCH_ARGS call p()| drop procedure p| @@ -312,34 +299,34 @@ begin fetch c into x, y, z; close c; end| ---error 1328 +--error ER_SP_WRONG_NO_OF_FETCH_ARGS call p()| drop procedure p| ---error 1330 +--error ER_SP_DUP_PARAM create procedure p(in x int, x char(10)) begin end| ---error 1330 +--error ER_SP_DUP_PARAM create function p(x int, x char(10)) begin end| ---error 1331 +--error ER_SP_DUP_VAR create procedure p() begin declare x float; declare x int; end| ---error 1332 +--error ER_SP_DUP_COND create procedure p() begin declare c condition for 1064; declare c condition for 1065; end| ---error 1333 +--error ER_SP_DUP_CURS create procedure p() begin declare c cursor for select * from t1; @@ -352,13 +339,13 @@ create procedure u() use sptmp| # Enforced standard order of declarations ---error 1337 +--error ER_SP_VARCOND_AFTER_CURSHNDLR create procedure p() begin declare c cursor for select * from t1; declare x int; end| ---error 1337 +--error ER_SP_VARCOND_AFTER_CURSHNDLR create procedure p() begin declare x int; @@ -366,7 +353,7 @@ begin declare foo condition for sqlstate '42S99'; end| ---error 1338 +--error ER_SP_CURSOR_AFTER_HANDLER create procedure p() begin declare x int; @@ -375,9 +362,6 @@ begin end| # Check in and inout arguments. ---disable_warnings -drop procedure if exists p| ---enable_warnings create procedure p(in x int, inout y int, out z int) begin set y = x+y; @@ -427,9 +411,6 @@ unlock tables| # are used by statements which invoke these functions. # --disable_ps2_protocol ---disable_warnings -drop function if exists f1| ---enable_warnings create function f1(i int) returns int begin insert into t1 (val) values (i); @@ -462,28 +443,25 @@ begin close c; end| ---error 1054 +--error ER_BAD_FIELD_ERROR call bug1965()| drop procedure bug1965| # # BUG#1966 # ---error 1327 +--error ER_SP_UNDECLARED_VAR select 1 into a| # # BUG#1653 # ---disable_warnings -drop table if exists t3| ---enable_warnings create table t3 (column_1_0 int)| create procedure bug1653() update t3 set column_1 = 0| ---error 1054 +--error ER_BAD_FIELD_ERROR call bug1653()| drop table t3| create table t3 (column_1 int)| @@ -505,7 +483,7 @@ begin fetch c1 into v1; end| ---error 1326 +--error ER_SP_CURSOR_NOT_OPEN call bug2259()| drop procedure bug2259| @@ -520,7 +498,7 @@ begin end| insert into t1 values (666, 51.3)| ---error 1054 +--error ER_BAD_FIELD_ERROR call bug2272()| truncate table t1| drop procedure bug2272| @@ -542,9 +520,9 @@ begin replace t1 set v = 5; end| ---error 1054 +--error ER_BAD_FIELD_ERROR call bug2329_1()| ---error 1054 +--error ER_BAD_FIELD_ERROR call bug2329_2()| drop procedure bug2329_1| drop procedure bug2329_2| @@ -561,7 +539,7 @@ begin end case; return 2; end| ---error 1339 +--error ER_SP_CASE_NOT_FOUND select bug3287()| drop function bug3287| @@ -572,16 +550,13 @@ when 0 then when 1 then insert into test.t1 values (x, 1.1); end case| ---error 1339 +--error ER_SP_CASE_NOT_FOUND call bug3287(2)| drop procedure bug3287| # # BUG#3297 # ---disable_warnings -drop table if exists t3| ---enable_warnings create table t3 (s1 int, primary key (s1))| insert into t3 values (5),(6)| @@ -609,7 +584,7 @@ drop table t3| # # BUG#3339 # ---error 1049 +--error ER_BAD_DB_ERROR create procedure nodb.bug3339() begin end| # @@ -634,17 +609,14 @@ end| # # BUG#4344 # ---error 1357 +--error ER_SP_NO_DROP_SP create procedure bug4344() drop procedure bug4344| ---error 1357 +--error ER_SP_NO_DROP_SP create procedure bug4344() drop function bug4344| # # BUG#3294: Stored procedure crash if table dropped before use # (Actually, when an error occurs within an error handler.) ---disable_warnings -drop procedure if exists bug3294| ---enable_warnings create procedure bug3294() begin declare continue handler for sqlexception drop table t5; @@ -653,7 +625,7 @@ begin end| create table t5 (x int)| ---error 1051 +--error ER_BAD_TABLE_ERROR call bug3294()| drop procedure bug3294| @@ -661,12 +633,6 @@ drop procedure bug3294| # BUG#876: Stored Procedures: Invalid SQLSTATE is allowed in # a DECLARE ? HANDLER FOR stmt. # ---disable_warnings -drop procedure if exists bug8776_1| -drop procedure if exists bug8776_2| -drop procedure if exists bug8776_3| -drop procedure if exists bug8776_4| ---enable_warnings --error ER_SP_BAD_SQLSTATE create procedure bug8776_1() begin @@ -718,9 +684,6 @@ create procedure bug6600() # We should not think that mysql.proc table does not exist if we are unable # to open it under LOCK TABLE or in prelocked mode. # ---disable_warnings -drop procedure if exists bug9566| ---enable_warnings create procedure bug9566() begin select * from t1; @@ -739,9 +702,6 @@ drop procedure bug9566| # # BUG#7299: Stored procedures: exception handler catches not-found conditions # ---disable_warnings -drop procedure if exists bug7299| ---enable_warnings create procedure bug7299() begin declare v int; @@ -791,9 +751,6 @@ begin end| # This should still work. ---disable_warnings -drop procedure if exists bug9073| ---enable_warnings create procedure bug9073() begin declare condname1 condition for sqlstate '42000'; @@ -848,11 +805,6 @@ begin return b; end| ---disable_warnings -drop function if exists bug8408_f| -drop procedure if exists bug8408_p| ---enable_warnings - # Some things must be caught at invokation time create function bug8408_f() returns int begin @@ -888,9 +840,6 @@ truncate table t1| # BUG#10537: Server crashes while loading data file into table through # procedure. # Disable load until it's PS and SP safe ---disable_warnings -drop procedure if exists bug10537| ---enable_warnings --error ER_SP_BADSTATEMENT create procedure bug10537() load data local infile '/tmp/somefile' into table t1| @@ -899,9 +848,6 @@ create procedure bug10537() # # BUG#8409: Stored procedure crash if function contains FLUSH # ---disable_warnings -drop function if exists bug8409| ---enable_warnings --error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG create function bug8409() returns int @@ -961,9 +907,6 @@ create procedure bug9529_9012345678901234567890123456789012345678901234567890123 begin end| ---disable_warnings -drop procedure if exists bug17015_0123456789012345678901234567890123456789012345678901234| ---enable_warnings # Check the upper limit, just to make sure. create procedure bug17015_0123456789012345678901234567890123456789012345678901234() begin @@ -977,9 +920,6 @@ drop procedure bug17015_0123456789012345678901234567890123456789012345678901234| # # BUG#10969: Stored procedures: crash if default() function # ---disable_warnings -drop procedure if exists bug10969| ---enable_warnings --error ER_WRONG_COLUMN_NAME create procedure bug10969() begin @@ -1032,7 +972,7 @@ P1: BEGIN SELECT 'end of proc'; END P1| delimiter ;| ---error 1326 +--error ER_SP_CURSOR_NOT_OPEN call SP001(); drop procedure SP001; drop table t1, t2; @@ -1042,12 +982,6 @@ drop table t1, t2; # We have to disable recursion since in many cases LEX and many # Item's can't be used in reentrant way nowdays. delimiter |; ---disable_warnings -drop function if exists bug11394| -drop function if exists bug11394_1| -drop function if exists bug11394_2| -drop procedure if exists bug11394| ---enable_warnings create function bug11394(i int) returns int begin if i <= 0 then @@ -1058,7 +992,7 @@ begin end| # If we allow recursive functions without additional modifications # this will crash server since Item for "IN" is not reenterable. ---error 1424 +--error ER_SP_NO_RECURSION select bug11394(2)| drop function bug11394| create function bug11394_1(i int) returns int @@ -1071,7 +1005,7 @@ begin end| # The following statement will crash because some LEX members responsible # for selects cannot be used in reentrant fashion. ---error 1424 +--error ER_SP_NO_RECURSION select bug11394_1(2)| drop function bug11394_1| # Note that the following should be allowed since it does not contains @@ -1111,10 +1045,6 @@ DROP TABLE t_bug_12490; # crashes server". Also tests handling of prepared stmts which use # stored functions but does not require prelocking. # ---disable_warnings -drop function if exists bug11834_1; -drop function if exists bug11834_2; ---enable_warnings create function bug11834_1() returns int return 10; create function bug11834_2() returns int return bug11834_1(); prepare stmt from "select bug11834_2()"; @@ -1137,9 +1067,6 @@ drop function bug11834_2; # Bug#12953 "Stored procedures: crash if OPTIMIZE TABLE in function" # delimiter |; ---disable_warnings -DROP FUNCTION IF EXISTS bug12953| ---enable_warnings --error ER_SP_NO_RETSET CREATE FUNCTION bug12953() RETURNS INT BEGIN @@ -1152,9 +1079,6 @@ delimiter ;| # Bug##12995 "Inside function "Table 't4' was not locked with LOCK TABLES" # delimiter |; ---disable_warnings -DROP FUNCTION IF EXISTS bug12995| ---enable_warnings --error ER_SP_BADSTATEMENT CREATE FUNCTION bug12995() RETURNS INT BEGIN @@ -1173,7 +1097,7 @@ BEGIN HANDLER t1 CLOSE; RETURN 1; END| ---error 1305 +--error ER_SP_DOES_NOT_EXIST SELECT bug12995()| delimiter ;| @@ -1181,10 +1105,6 @@ delimiter ;| # # BUG#12712: SET AUTOCOMMIT should fail within SP/functions/triggers # ---disable_warnings -drop procedure if exists bug12712; -drop function if exists bug12712; ---enable_warnings # Can... create procedure bug12712() set session autocommit = 0; @@ -1238,9 +1158,6 @@ create trigger bug12712 # BUG#9367: Stored procedures: client hang after "show warnings" # --disable_parsing ---disable_warnings -drop procedure if exists bug9367; ---enable_warnings create table t1 (s1 int); select s1 from t1; delimiter |; @@ -1263,13 +1180,6 @@ drop table t1; # BUG#13510: Setting password local variable changes current password # delimiter |; ---disable_warnings -drop procedure if exists bug13510_1| -drop procedure if exists bug13510_2| -drop procedure if exists bug13510_3| -drop procedure if exists bug13510_4| ---enable_warnings - --error ER_SP_BAD_VAR_SHADOW create procedure bug13510_1() begin @@ -1321,10 +1231,6 @@ drop procedure bug13510_4| # containing such statement should produce error (includes test for # bug #13627). # ---disable_warnings -drop function if exists bug_13627_f| ---enable_warnings - CREATE TABLE t1 (a int)| -- error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN DROP TRIGGER test1; END | @@ -1505,12 +1411,6 @@ use test; # BUG#13037: undefined variable in IF cause erroneous error-message # ---disable_warnings -DROP PROCEDURE IF EXISTS bug13037_p1; -DROP PROCEDURE IF EXISTS bug13037_p2; -DROP PROCEDURE IF EXISTS bug13037_p3; ---enable_warnings - delimiter |; --error ER_SP_UNDECLARED_VAR @@ -1535,14 +1435,14 @@ delimiter ;| --echo ---error 1054 +--error ER_BAD_FIELD_ERROR CALL bug13037_p2(); ---error 1054 +--error ER_BAD_FIELD_ERROR CALL bug13037_p3(); ---error 1054 +--error ER_BAD_FIELD_ERROR CALL bug13037_p2(); ---error 1054 +--error ER_BAD_FIELD_ERROR CALL bug13037_p3(); DROP PROCEDURE bug13037_p2; @@ -1568,9 +1468,6 @@ use test; # Bug#13012 "SP: REPAIR/BACKUP/RESTORE TABLE crashes the server" # delimiter |; ---disable_warnings -DROP FUNCTION IF EXISTS bug13012| ---enable_warnings --error ER_SP_NO_RETSET CREATE FUNCTION bug13012() RETURNS INT BEGIN @@ -1602,11 +1499,6 @@ delimiter ;| # dropped simultaneously with table (DROP TABLE with CASCADE clause). # So these tests probably should go away once we will implement standard # behavior. ---disable_warnings -drop function if exists bug11555_1; -drop function if exists bug11555_2; -drop view if exists v1, v2, v3, v4; ---enable_warnings create function bug11555_1() returns int return (select max(i) from t1); create function bug11555_2() returns int return bug11555_1(); # It is OK to report name of implicitly used table which is missing @@ -1660,10 +1552,6 @@ drop view v1; # # BUG#15658: Server crashes after creating function as empty string # ---disable_warnings -drop procedure if exists ` bug15658`; ---enable_warnings - --error ER_SP_WRONG_NAME create procedure ``() select 1; --error ER_SP_WRONG_NAME @@ -1686,11 +1574,6 @@ drop procedure ` bug15658`; # # BUG#14270: Stored procedures: crash if load index # ---disable_warnings -drop function if exists bug14270; -drop table if exists t1; ---enable_warnings - create table t1 (s1 int primary key); delimiter |; @@ -1716,10 +1599,6 @@ drop table t1; # BUG#15091: Sp Returns Unknown error in order clause....and # there is no order by clause # ---disable_warnings -drop procedure if exists bug15091; ---enable_warnings - delimiter |; --error ER_SP_UNDECLARED_VAR create procedure bug15091() @@ -1738,9 +1617,6 @@ delimiter ;| # # BUG#16896: Stored function: unused AGGREGATE-clause in CREATE FUNCTION # ---disable_warnings -drop function if exists bug16896; ---enable_warnings --error ER_INVALID_AGGREGATE_FUNCTION create aggregate function bug16896() returns int return 1; @@ -1753,10 +1629,6 @@ create aggregate function bug16896() returns int return 1; # Misleading error message was given when IF NOT EXISTS was used in # CREATE PROCEDURE. # ---disable_warnings -DROP PROCEDURE IF EXISTS bug14702; ---enable_warnings - --error ER_PARSE_ERROR CREATE IF NOT EXISTS PROCEDURE bug14702() BEGIN @@ -1773,10 +1645,6 @@ DROP PROCEDURE IF EXISTS bug14702; # # See test case for what syntax is forbidden in a view. # ---disable_warnings -DROP TABLE IF EXISTS t1; ---enable_warnings - CREATE TABLE t1 (i INT); # We do not have to drop this procedure and view because they won't be @@ -1811,10 +1679,6 @@ DROP TABLE t1; # # BUG#24491 "using alias from source table in insert ... on duplicate key" # ---disable_warnings -drop tables if exists t1; -drop procedure if exists bug24491; ---enable_warnings create table t1 (id int primary key auto_increment, value varchar(10)); insert into t1 (id, value) values (1, 'FIRST'), (2, 'SECOND'), (3, 'THIRD'); # Let us create routine with INSERT ... SELECT ... ON DUPLICATE KEY UPDATE @@ -1848,14 +1712,6 @@ drop tables t1; # DROP TABLE IF EXISTS is also fixed to give correct error instead of # "Table doesn't exist". # ---disable_warnings -DROP FUNCTION IF EXISTS bug18914_f1; -DROP FUNCTION IF EXISTS bug18914_f2; -DROP PROCEDURE IF EXISTS bug18914_p1; -DROP PROCEDURE IF EXISTS bug18914_p2; -DROP TABLE IF EXISTS t1, t2; ---enable_warnings - CREATE TABLE t1 (i INT); CREATE PROCEDURE bug18914_p1() CREATE TABLE t2 (i INT); @@ -1900,12 +1756,6 @@ DROP TABLE t1; # Bug#20713 (Functions will not not continue for SQLSTATE VALUE '42S02') # ---disable_warnings -drop table if exists bogus_table_20713; -drop function if exists func_20713_a; -drop function if exists func_20713_b; ---enable_warnings - create table bogus_table_20713( id int(10) not null primary key); insert into bogus_table_20713 values (1), (2), (3); @@ -1964,14 +1814,6 @@ drop function if exists func_20713_b; # Bug#25345 (Cursors from Functions) # ---disable_warnings -drop table if exists table_25345_a; -drop table if exists table_25345_b; -drop procedure if exists proc_25345; -drop function if exists func_25345; -drop function if exists func_25345_b; ---enable_warnings - create table table_25345_a (a int); create table table_25345_b (b int); @@ -2027,9 +1869,6 @@ drop function func_25345_b; # Bug#16164 "Easter egg": check that SHOW AUTHORS is disabled in # stored functions/triggers # ---disable_warnings -drop function if exists bug16164; ---enable_warnings delimiter |; --error ER_SP_NO_RETSET create function bug16164() returns int @@ -2043,9 +1882,6 @@ delimiter ;| # # BUG#20701: BINARY keyword should be forbidden in stored routines # ---disable_warnings -drop function if exists bug20701; ---enable_warnings create function bug20701() returns varchar(25) binary return "test"; drop function bug20701; create function bug20701() returns varchar(25) return "test"; @@ -2124,11 +1960,6 @@ delimiter ;// # Bug#28360 (RENAME DATABASE destroys routines) # ---disable_warnings -drop procedure if exists proc_28360; -drop function if exists func_28360; ---enable_warnings - delimiter //; --error ER_SP_NO_DROP_SP @@ -2151,9 +1982,6 @@ delimiter ;// # Bug#29223 declare cursor c for SHOW ..... # ---disable_warnings -DROP PROCEDURE IF EXISTS p1; ---enable_warnings --delimiter | --error ER_PARSE_ERROR CREATE PROCEDURE p1() @@ -2172,9 +2000,6 @@ END| # Bug#29816 Syntactically wrong query fails with misleading error message # ---disable_warnings -DROP DATABASE IF EXISTS mysqltest; ---enable_warnings CREATE DATABASE mysqltest; USE mysqltest; DROP DATABASE mysqltest; @@ -2214,12 +2039,6 @@ delimiter ;| # Bug#30882 Dropping a temporary table inside a stored function may cause a server crash # ---disable_warnings -drop function if exists f1; -drop function if exists f2; -drop table if exists t1, t2; ---enable_warnings - delimiter |; create function f1() returns int begin @@ -2284,13 +2103,6 @@ drop table t2; # Bug#33983 (Stored Procedures: wrong end