diff --git a/extra/mariabackup/backup_copy.cc b/extra/mariabackup/backup_copy.cc index 7431d6c08eb..fb84153bdee 100644 --- a/extra/mariabackup/backup_copy.cc +++ b/extra/mariabackup/backup_copy.cc @@ -1938,7 +1938,7 @@ cleanup: ctxt->ret = ret; - os_thread_exit(NULL); + os_thread_exit(); OS_THREAD_DUMMY_RETURN; } diff --git a/extra/mariabackup/backup_mysql.cc b/extra/mariabackup/backup_mysql.cc index 8fe2e186919..edd369e6ea9 100644 --- a/extra/mariabackup/backup_mysql.cc +++ b/extra/mariabackup/backup_mysql.cc @@ -840,7 +840,7 @@ stop_thread: os_event_set(kill_query_thread_stopped); - os_thread_exit(NULL); + os_thread_exit(); OS_THREAD_DUMMY_RETURN; } diff --git a/mysql-test/include/search_pattern_in_file.inc b/mysql-test/include/search_pattern_in_file.inc index 3c5529989bb..21192b55efb 100644 --- a/mysql-test/include/search_pattern_in_file.inc +++ b/mysql-test/include/search_pattern_in_file.inc @@ -76,5 +76,6 @@ perl; my $res=@matches ? "FOUND " . scalar(@matches) : "NOT FOUND"; $ENV{SEARCH_FILE} =~ s{^.*?([^/\\]+)$}{$1}; print "$res /$search_pattern/ in $ENV{SEARCH_FILE}\n"; - exit $ENV{SEARCH_ABORT} && $res =~ /^$ENV{SEARCH_ABORT}/; + die "$ENV{SEARCH_ABORT}\n" + if $ENV{SEARCH_ABORT} && $res =~ /^$ENV{SEARCH_ABORT}/; EOF diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index c58904f5d4e..5e0e03a3f24 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -5065,6 +5065,11 @@ sub mysqld_start ($$) { } } + # "Dynamic" version of MYSQLD_CMD is reevaluated with each mysqld_start. + # Use it to restart the server at testing a failing server start (e.g + # due to incompatible options). + $ENV{'MYSQLD_LAST_CMD'}= "$exe @$args"; + if ( $opt_gdb || $opt_manual_gdb ) { gdb_arguments(\$args, \$exe, $mysqld->name()); @@ -5161,11 +5166,6 @@ sub mysqld_start ($$) { # Remember options used when starting $mysqld->{'started_opts'}= $extra_opts; - # "Dynamic" version of MYSQLD_CMD is reevaluated with each mysqld_start. - # Use it to restart the server at testing a failing server start (e.g - # due to incompatible options). - $ENV{'MYSQLD_LAST_CMD'}= "$exe @$args"; - return; } diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index a8f3c57b2fd..976b5b8ea12 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -8088,6 +8088,34 @@ CALL sp1(); CALL sp1(); drop user 'foo'@'%'; drop procedure sp1; +# +# MDEV-10972: Insert from select / view / union -- +# repeatable crash in 10.1, 10.2 Linux/Mac/Windows +# +create table t (id int auto_increment primary key); +insert into t values (9494),(9495),(9496),(9497),(9498),(9499),(9500),(9501),(9502),(9503); +create VIEW v AS +select id from t +union +select id from t +; +drop procedure if exists p; +Warnings: +Note 1305 PROCEDURE test.p does not exist +create procedure p() +insert into tmp_t select t.id from ( +select id from v +union +select id from v +) sq +inner join t on (sq.id = t.id); +CALL p(); +ERROR 42S02: Table 'test.tmp_t' doesn't exist +create table tmp_t (id int null); +CALL p(); +drop procedure p; +drop view v; +drop table t, tmp_t; #End of 10.1 tests # # MDEV-11081: CURSOR for query with GROUP BY diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result index d0d57e1b1e9..8767b737ca7 100644 --- a/mysql-test/r/view.result +++ b/mysql-test/r/view.result @@ -6603,6 +6603,41 @@ use test; drop database test_db; drop user foo@localhost; # +# MDEV-13523: Group By in a View, called within a Stored Routine +# causes Error Code 1356 when a non-root user runs the routine for +# a second time +# +CREATE DATABASE bugTest; +USE bugTest; +CREATE TABLE `procViewTable` (`id` int(10), `someText` varchar(50) NOT NULL); +insert into `procViewTable` values (1,'Test'), (2,'Test 2'); +CREATE USER 'procView'@'%'; +GRANT ALL PRIVILEGES ON `bugTest`.* TO 'procView'@'%'; +CREATE DEFINER=`procView`@`%` VIEW `procViewSimple` AS ( +select * from ( +select `id` from `bugTest`.`procViewTable` + ) `innerQuery` + group by `innerQuery`.`id` +); +connect con1,localhost,procView,,; +use bugTest; +prepare stmt from "SELECT * FROM procViewSimple"; +execute stmt; +id +1 +2 +execute stmt; +id +1 +2 +disconnect con1; +connection default; +drop user procView; +drop view procViewSimple; +drop table procViewTable; +use test; +drop database bugTest; +# # End of 10.2 tests # # diff --git a/mysql-test/suite/innodb/r/innodb-enlarge-blob.result b/mysql-test/suite/innodb/r/innodb-enlarge-blob.result index e74e954e360..8c8e9cf5007 100644 --- a/mysql-test/suite/innodb/r/innodb-enlarge-blob.result +++ b/mysql-test/suite/innodb/r/innodb-enlarge-blob.result @@ -1,37 +1,17 @@ -CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB DEFAULT CHARSET=UTF8 ROW_FORMAT=DYNAMIC; +CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB ROW_FORMAT=REDUNDANT; SHOW WARNINGS; Level Code Message -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B'); -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -UPDATE t1 SET a=CONCAT(a, RAND(), a); +INSERT INTO t1 SET a=CONCAT('A', SPACE(8000), 'B'); +INSERT INTO t1 SELECT a FROM t1; UPDATE t1 SET a=CONCAT(a, RAND(), a); UPDATE t1 SET a=CONCAT(a, RAND(), a); SELECT * from t1; DROP TABLE t1; -CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB DEFAULT CHARSET=UTF8 ROW_FORMAT=REDUNDANT; +CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB ROW_FORMAT=DYNAMIC; SHOW WARNINGS; Level Code Message -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B'); -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -UPDATE t1 SET a=CONCAT(a, RAND(), a); +INSERT INTO t1 SET a=CONCAT('A', SPACE(8000), 'B'); +INSERT INTO t1 SELECT a FROM t1; UPDATE t1 SET a=CONCAT(a, RAND(), a); UPDATE t1 SET a=CONCAT(a, RAND(), a); SELECT * from t1; diff --git a/mysql-test/suite/innodb/r/table_flags.result b/mysql-test/suite/innodb/r/table_flags.result index ac7187cd610..fb9ce02e64d 100644 --- a/mysql-test/suite/innodb/r/table_flags.result +++ b/mysql-test/suite/innodb/r/table_flags.result @@ -181,7 +181,6 @@ a SELECT * FROM tp; a DROP TABLE tr,tc,td,tz,tp; -ib_buffer_pool ib_logfile0 ib_logfile1 ibdata1 diff --git a/mysql-test/suite/innodb/t/innodb-enlarge-blob.opt b/mysql-test/suite/innodb/t/innodb-enlarge-blob.opt index 4c2cd9b3e3c..7cc886cb9e5 100644 --- a/mysql-test/suite/innodb/t/innodb-enlarge-blob.opt +++ b/mysql-test/suite/innodb/t/innodb-enlarge-blob.opt @@ -1,6 +1,5 @@ --innodb-file-per-table --innodb-file-format='Barracuda' --innodb-buffer-pool-size=32M ---innodb-log-file-size=32M +--innodb-page-size=64k --innodb-strict-mode=OFF - diff --git a/mysql-test/suite/innodb/t/innodb-enlarge-blob.test b/mysql-test/suite/innodb/t/innodb-enlarge-blob.test index 84c23465a5c..65a64d299be 100644 --- a/mysql-test/suite/innodb/t/innodb-enlarge-blob.test +++ b/mysql-test/suite/innodb/t/innodb-enlarge-blob.test @@ -1,24 +1,13 @@ --source include/have_innodb.inc ---source include/innodb_page_size.inc # # MDEV-13227: Assertion failure len < 16384 in file rem0rec.cc line 1285 # Crashes with innodb_page_size=64K. Does not crash at <= 32K. # -CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB DEFAULT CHARSET=UTF8 ROW_FORMAT=DYNAMIC; +CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB ROW_FORMAT=REDUNDANT; SHOW WARNINGS; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B'); -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -UPDATE t1 SET a=CONCAT(a, RAND(), a); +INSERT INTO t1 SET a=CONCAT('A', SPACE(8000), 'B'); +INSERT INTO t1 SELECT a FROM t1; UPDATE t1 SET a=CONCAT(a, RAND(), a); UPDATE t1 SET a=CONCAT(a, RAND(), a); # random data no output we are only interested if fails @@ -27,20 +16,10 @@ SELECT * from t1; --enable_result_log DROP TABLE t1; -CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB DEFAULT CHARSET=UTF8 ROW_FORMAT=REDUNDANT; +CREATE TABLE t1 (a LONGTEXT) ENGINE=INNODB ROW_FORMAT=DYNAMIC; SHOW WARNINGS; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B'); -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -INSERT INTO t1 SELECT CONCAT('A', SPACE(4087), 'B') FROM t1; -UPDATE t1 SET a=CONCAT(a, RAND(), a); +INSERT INTO t1 SET a=CONCAT('A', SPACE(8000), 'B'); +INSERT INTO t1 SELECT a FROM t1; UPDATE t1 SET a=CONCAT(a, RAND(), a); UPDATE t1 SET a=CONCAT(a, RAND(), a); # random data no output we are only interested if fails diff --git a/mysql-test/suite/innodb/t/table_flags.test b/mysql-test/suite/innodb/t/table_flags.test index a2dd249f090..ad3c3130f56 100644 --- a/mysql-test/suite/innodb/t/table_flags.test +++ b/mysql-test/suite/innodb/t/table_flags.test @@ -201,6 +201,11 @@ DROP TABLE tr,tc,td,tz,tp; --let $restart_parameters= --source include/restart_mysqld.inc +--error 0,1 +--remove_file $bugdir/ibtmp1 +--error 0,1 +--remove_file $bugdir/ib_buffer_pool + --list_files $bugdir --remove_files_wildcard $bugdir --rmdir $bugdir diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test index 7b7e3a741f2..6eea228a7c5 100644 --- a/mysql-test/t/sp.test +++ b/mysql-test/t/sp.test @@ -9549,6 +9549,37 @@ CALL sp1(); drop user 'foo'@'%'; drop procedure sp1; +--echo # +--echo # MDEV-10972: Insert from select / view / union -- +--echo # repeatable crash in 10.1, 10.2 Linux/Mac/Windows +--echo # + +create table t (id int auto_increment primary key); +insert into t values (9494),(9495),(9496),(9497),(9498),(9499),(9500),(9501),(9502),(9503); + +create VIEW v AS +select id from t +union +select id from t +; + +drop procedure if exists p; +create procedure p() +insert into tmp_t select t.id from ( + select id from v + union + select id from v +) sq +inner join t on (sq.id = t.id); + +--error ER_NO_SUCH_TABLE +CALL p(); +create table tmp_t (id int null); +CALL p(); + +drop procedure p; +drop view v; +drop table t, tmp_t; --echo #End of 10.1 tests diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test index c24cb502d7b..fc6ee46c1ac 100644 --- a/mysql-test/t/view.test +++ b/mysql-test/t/view.test @@ -6312,6 +6312,44 @@ use test; drop database test_db; drop user foo@localhost; +--echo # +--echo # MDEV-13523: Group By in a View, called within a Stored Routine +--echo # causes Error Code 1356 when a non-root user runs the routine for +--echo # a second time +--echo # + +CREATE DATABASE bugTest; +USE bugTest; + +CREATE TABLE `procViewTable` (`id` int(10), `someText` varchar(50) NOT NULL); +insert into `procViewTable` values (1,'Test'), (2,'Test 2'); + +CREATE USER 'procView'@'%'; +GRANT ALL PRIVILEGES ON `bugTest`.* TO 'procView'@'%'; + +CREATE DEFINER=`procView`@`%` VIEW `procViewSimple` AS ( + select * from ( + select `id` from `bugTest`.`procViewTable` + ) `innerQuery` + group by `innerQuery`.`id` +); + +--connect (con1,localhost,procView,,) +use bugTest; + +prepare stmt from "SELECT * FROM procViewSimple"; +execute stmt; +execute stmt; + +# Cleanup +--disconnect con1 +--connection default +drop user procView; +drop view procViewSimple; +drop table procViewTable; +use test; +drop database bugTest; + --echo # --echo # End of 10.2 tests --echo # diff --git a/pcre/pcre_compile.c b/pcre/pcre_compile.c index 42f204cdfff..1a916693e69 100644 --- a/pcre/pcre_compile.c +++ b/pcre/pcre_compile.c @@ -1249,6 +1249,7 @@ else if ((c = *ptr) >= CHAR_8) break; + /* fall through */ /* Fall through with a digit less than 8 */ /* \0 always starts an octal number, but we may drop through to here with a @@ -5097,6 +5098,8 @@ for (;; ptr++) either not match or match, depending on whether the class is or is not negated. */ + /* fall through */ + default: if (local_negate && (xclass || tempptr[2] != CHAR_RIGHT_SQUARE_BRACKET)) @@ -7165,7 +7168,7 @@ for (;; ptr++) goto FAILED; } /* Fall through to handle (?P< as (?< is handled */ - + /* fall through */ /* ------------------------------------------------------------ */ DEFINE_NAME: /* Come here from (?< handling */ diff --git a/pcre/pcre_exec.c b/pcre/pcre_exec.c index 1a9bdd546ee..70ac2fea381 100644 --- a/pcre/pcre_exec.c +++ b/pcre/pcre_exec.c @@ -1053,6 +1053,8 @@ for (;;) group. At this point, the return is converted into MATCH_NOMATCH so that previous backup points can be taken. */ + /* fall through */ + case OP_ONCE: case OP_BRA: case OP_SBRA: diff --git a/plugin/metadata_lock_info/metadata_lock_info.cc b/plugin/metadata_lock_info/metadata_lock_info.cc index f2cdb99b82b..a2e3667dbab 100644 --- a/plugin/metadata_lock_info/metadata_lock_info.cc +++ b/plugin/metadata_lock_info/metadata_lock_info.cc @@ -45,12 +45,6 @@ static const LEX_STRING metadata_lock_info_lock_mode[] = { { C_STRING_WITH_LEN("MDL_EXCLUSIVE") }, }; -static const LEX_STRING metadata_lock_info_duration[] = { - { C_STRING_WITH_LEN("MDL_STATEMENT") }, - { C_STRING_WITH_LEN("MDL_TRANSACTION") }, - { C_STRING_WITH_LEN("MDL_EXPLICIT") }, -}; - static ST_FIELD_INFO i_s_metadata_lock_info_fields_info[] = { {"THREAD_ID", 20, MYSQL_TYPE_LONGLONG, 0, @@ -129,8 +123,6 @@ static int i_s_metadata_lock_info_init( == MDL_key::NAMESPACE_END); compile_time_assert(sizeof(metadata_lock_info_lock_mode)/sizeof(LEX_STRING) == MDL_TYPE_END); - compile_time_assert(sizeof(metadata_lock_info_duration)/sizeof(LEX_STRING) - == MDL_DURATION_END); ST_SCHEMA_TABLE *schema = (ST_SCHEMA_TABLE *) p; DBUG_ENTER("i_s_metadata_lock_info_init"); diff --git a/scripts/wsrep_sst_rsync.sh b/scripts/wsrep_sst_rsync.sh index 23ee3df5d40..7acdf87b660 100644 --- a/scripts/wsrep_sst_rsync.sh +++ b/scripts/wsrep_sst_rsync.sh @@ -357,18 +357,18 @@ EOF readonly RSYNC_PORT=${WSREP_SST_OPT_PORT:-4444} # If the IP is local listen only in it - if is_local_ip $RSYNC_ADDR + if is_local_ip "$RSYNC_ADDR" then - rsync --daemon --no-detach --address $RSYNC_ADDR --port $RSYNC_PORT --config "$RSYNC_CONF" & + rsync --daemon --no-detach --address "$RSYNC_ADDR" --port "$RSYNC_PORT" --config "$RSYNC_CONF" & else # Not local, possibly a NAT, listen in all interface - rsync --daemon --no-detach --port $RSYNC_PORT --config "$RSYNC_CONF" & + rsync --daemon --no-detach --port "$RSYNC_PORT" --config "$RSYNC_CONF" & # Overwrite address with all RSYNC_ADDR="*" fi RSYNC_REAL_PID=$! - until check_pid_and_port $RSYNC_PID $RSYNC_REAL_PID $RSYNC_ADDR $RSYNC_PORT + until check_pid_and_port "$RSYNC_PID" "$RSYNC_REAL_PID" "$RSYNC_ADDR" "$RSYNC_PORT" do sleep 0.2 done diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 2bb43ec794f..12ca31ad50e 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -7910,7 +7910,7 @@ uint32 ha_partition::calculate_key_hash_value(Field **field_array) case MYSQL_TYPE_BLOB: case MYSQL_TYPE_VAR_STRING: case MYSQL_TYPE_GEOMETRY: - /* fall through. */ + /* fall through */ default: DBUG_ASSERT(0); // New type? /* Fall through for default hashing (5.5). */ diff --git a/sql/sp.cc b/sql/sp.cc index 015e2f77b21..32adb3f7195 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -807,6 +807,7 @@ static sp_head *sp_compile(THD *thd, String *defstr, sql_mode_t sql_mode, else { sp= thd->lex->sphead; + sp->set_select_number(thd->select_number); } thd->pop_internal_handler(); diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 2ea40e37754..b83195b8c71 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -558,7 +558,7 @@ sp_head::sp_head(const Sp_handler *sph) m_defstr(null_clex_str), m_sp_cache_version(0), m_creation_ctx(0), - unsafe_flags(0), + unsafe_flags(0), m_select_number(1), m_created(0), m_modified(0), m_recursion_level(0), @@ -2028,8 +2028,26 @@ sp_head::execute_procedure(THD *thd, List *args) if (!err_status) { + /* + Normally the counter is not reset between parsing and first execution, + but it is possible in case of error to have parsing on one CALL and + first execution (where VIEW will be parsed and added). So we store the + counter after parsing and restore it before execution just to avoid + repeating SELECT numbers. + */ + thd->select_number= m_select_number; + err_status= execute(thd, TRUE); DBUG_PRINT("info", ("execute returned %d", (int) err_status)); + /* + This execution of the SP was aborted with an error (e.g. "Table not + found"). However it might still have consumed some numbers from the + thd->select_number counter. The next sp->exec() call must not use the + consumed numbers, so we remember the first free number (We know that + nobody will use it as this execution has stopped with an error). + */ + if (err_status) + set_select_number(thd->select_number); } if (save_log_general) diff --git a/sql/sp_head.h b/sql/sp_head.h index c3dab609823..207d41f74fd 100644 --- a/sql/sp_head.h +++ b/sql/sp_head.h @@ -236,6 +236,7 @@ private: */ uint32 unsafe_flags; + uint m_select_number; public: inline Stored_program_creation_ctx *get_creation_ctx() { @@ -818,6 +819,8 @@ public: sp_pcontext *get_parse_context() { return m_pcont; } + void set_select_number(uint num) { m_select_number= num; } + bool check_execute_access(THD *thd) const; private: diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 6adadf8f377..f4f67ab9244 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -716,6 +716,7 @@ THD::THD(my_thread_id id, bool is_wsrep_applier) /* statement id */ 0), rli_fake(0), rgi_fake(0), rgi_slave(NULL), protocol_text(this), protocol_binary(this), + m_current_stage_key(0), in_sub_stmt(0), log_all_errors(0), binlog_unsafe_warning_flags(0), binlog_table_maps(0), diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 8d4789d0efe..a5e833f4a7e 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1173,6 +1173,7 @@ static int execute_ddl_log_action(THD *thd, DDL_LOG_ENTRY *ddl_log_entry) action in the log entry by stepping up the phase. */ } + /* fall through */ case DDL_LOG_RENAME_ACTION: { error= TRUE; diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index ad93238410e..eac8cf7c924 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -1173,28 +1173,20 @@ buf_page_is_corrupted( } #ifndef UNIV_INNOCHECKSUM - -/** Prints a page to stderr. -@param[in] read_buf a database page -@param[in] page_size page size -@param[in] flags 0 or BUF_PAGE_PRINT_NO_CRASH or -BUF_PAGE_PRINT_NO_FULL */ +/** Dump a page to stderr. +@param[in] read_buf database page +@param[in] page_size page size */ +UNIV_INTERN void -buf_page_print( - const byte* read_buf, - const page_size_t& page_size, - ulint flags) +buf_page_print(const byte* read_buf, const page_size_t& page_size) { dict_index_t* index; - if (!(flags & BUF_PAGE_PRINT_NO_FULL)) { + ib::info() << "Page dump in ascii and hex (" + << page_size.physical() << " bytes):"; - ib::info() << "Page dump in ascii and hex (" - << page_size.physical() << " bytes):"; - - ut_print_buf(stderr, read_buf, page_size.physical()); - fputs("\nInnoDB: End of page dump\n", stderr); - } + ut_print_buf(stderr, read_buf, page_size.physical()); + fputs("\nInnoDB: End of page dump\n", stderr); if (page_size.is_compressed()) { /* Print compressed page. */ @@ -1359,8 +1351,6 @@ buf_page_print( stderr); break; } - - ut_ad(flags & BUF_PAGE_PRINT_NO_CRASH); } # ifdef PFS_GROUP_BUFFER_SYNC @@ -5984,8 +5974,7 @@ database_corrupted: << ". You may have to recover from " << "a backup."; - buf_page_print(frame, bpage->size, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(frame, bpage->size); ib::info() << "It is also possible that your" diff --git a/storage/innobase/buf/buf0dblwr.cc b/storage/innobase/buf/buf0dblwr.cc index 17b2229f1da..2bc3630d3f5 100644 --- a/storage/innobase/buf/buf0dblwr.cc +++ b/storage/innobase/buf/buf0dblwr.cc @@ -827,7 +827,7 @@ buf_dblwr_assert_on_corrupt_block( /*==============================*/ const buf_block_t* block) /*!< in: block to check */ { - buf_page_print(block->frame, univ_page_size, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(block->frame, univ_page_size); ib::fatal() << "Apparent corruption of an index page " << block->page.id diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc index cdf3d9bd997..5e7e5a2f21b 100644 --- a/storage/innobase/fil/fil0crypt.cc +++ b/storage/innobase/fil/fil0crypt.cc @@ -698,11 +698,12 @@ fil_space_encrypt( fprintf(stderr, "ok %d corrupted %d corrupted1 %d err %d different %d\n", ok , corrupted, corrupted1, err, different); fprintf(stderr, "src_frame\n"); - buf_page_print(src_frame, page_size, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(src_frame, page_size); fprintf(stderr, "encrypted_frame\n"); - buf_page_print(tmp, page_size, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(tmp, page_size); fprintf(stderr, "decrypted_frame\n"); - buf_page_print(tmp_mem, page_size, 0); + buf_page_print(tmp_mem, page_size); + ut_ad(0); } free(tmp_mem); diff --git a/storage/innobase/fil/fil0pagecompress.cc b/storage/innobase/fil/fil0pagecompress.cc index 0346a676a1f..58fbb4cd9ef 100644 --- a/storage/innobase/fil/fil0pagecompress.cc +++ b/storage/innobase/fil/fil0pagecompress.cc @@ -313,7 +313,8 @@ fil_compress_page( if (buf_page_is_corrupted(false, uncomp_page, univ_page_size, space)) { - buf_page_print(uncomp_page, univ_page_size, 0); + buf_page_print(uncomp_page, univ_page_size); + ut_ad(0); } ut_free(comp_page); @@ -648,6 +649,7 @@ err_exit: << " compression method: " << fil_get_compression_alg_name(compression_alg) << "."; - buf_page_print(buf, univ_page_size, 0); + buf_page_print(buf, univ_page_size); fil_space_release_for_io(space); + ut_ad(0); } diff --git a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h index 67de1174d25..516898066aa 100644 --- a/storage/innobase/include/buf0buf.h +++ b/storage/innobase/include/buf0buf.h @@ -893,24 +893,13 @@ buf_print(void); /*============*/ #endif /* UNIV_DEBUG_PRINT || UNIV_DEBUG || UNIV_BUF_DEBUG */ -enum buf_page_print_flags { - /** Do not crash at the end of buf_page_print(). */ - BUF_PAGE_PRINT_NO_CRASH = 1, - /** Do not print the full page dump. */ - BUF_PAGE_PRINT_NO_FULL = 2 -}; - -/** Prints a page to stderr. -@param[in] read_buf a database page -@param[in] page_size page size -@param[in] flags 0 or BUF_PAGE_PRINT_NO_CRASH or -BUF_PAGE_PRINT_NO_FULL */ +/** Dump a page to stderr. +@param[in] read_buf database page +@param[in] page_size page size */ +UNIV_INTERN void -buf_page_print( - const byte* read_buf, - const page_size_t& page_size, - ulint flags); - +buf_page_print(const byte* read_buf, const page_size_t& page_size) + ATTRIBUTE_COLD __attribute__((nonnull)); /********************************************************************//** Decompress a block. @return TRUE if successful */ diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc index 54af4140f64..8bc8df750e4 100644 --- a/storage/innobase/log/log0recv.cc +++ b/storage/innobase/log/log0recv.cc @@ -3461,6 +3461,7 @@ recv_reset_logs( log_sys->next_checkpoint_no = 0; log_sys->last_checkpoint_lsn = 0; + memset(log_sys->buf, 0, log_sys->buf_size); log_block_init(log_sys->buf, log_sys->lsn); log_block_set_first_rec_group(log_sys->buf, LOG_BLOCK_HDR_SIZE); diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc index 585c72be30e..d180ba6558f 100644 --- a/storage/innobase/row/row0sel.cc +++ b/storage/innobase/row/row0sel.cc @@ -1796,6 +1796,7 @@ rec_loop: switch (err) { case DB_SUCCESS_LOCKED_REC: err = DB_SUCCESS; + /* fall through */ case DB_SUCCESS: break; default: @@ -1856,6 +1857,7 @@ skip_lock: switch (err) { case DB_SUCCESS_LOCKED_REC: err = DB_SUCCESS; + /* fall through */ case DB_SUCCESS: break; default: @@ -4606,6 +4608,7 @@ wait_table_again: switch (err) { case DB_SUCCESS_LOCKED_REC: err = DB_SUCCESS; + /* fall through */ case DB_SUCCESS: break; default: @@ -4688,6 +4691,7 @@ rec_loop: switch (err) { case DB_SUCCESS_LOCKED_REC: err = DB_SUCCESS; + /* fall through */ case DB_SUCCESS: break; default: @@ -4949,6 +4953,7 @@ no_gap_lock: prebuilt->new_rec_locks = 1; } err = DB_SUCCESS; + /* fall through */ case DB_SUCCESS: break; case DB_LOCK_WAIT: diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt index 5db6d888bb6..6db82119b45 100644 --- a/storage/rocksdb/CMakeLists.txt +++ b/storage/rocksdb/CMakeLists.txt @@ -146,7 +146,10 @@ ADD_CONVENIENCE_LIBRARY(rocksdb_aux_lib ADD_DEPENDENCIES(rocksdb_aux_lib GenError) # MARIAROCKS-TODO: how to properly depend on -lrt ? -TARGET_LINK_LIBRARIES(rocksdb_aux_lib rocksdblib ${ZLIB_LIBRARY} -lrt) +TARGET_LINK_LIBRARIES(rocksdb_aux_lib rocksdblib ${ZLIB_LIBRARY}) +if (UNIX AND NOT APPLE) + TARGET_LINK_LIBRARIES(rocksdb_aux_lib -lrt) +endif() TARGET_LINK_LIBRARIES(rocksdb rocksdb_aux_lib) @@ -182,7 +185,9 @@ ENDIF() # ADD_SUBDIRECTORY(unittest) #ENDIF() -SET(rocksdb_static_libs ${rocksdb_static_libs} "-lrt") +if (UNIX AND NOT APPLE) + SET(rocksdb_static_libs ${rocksdb_static_libs} "-lrt") +endif() ADD_LIBRARY(rocksdb_tools STATIC rocksdb/tools/ldb_tool.cc diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index c04f3797456..9845e77e041 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -173,7 +173,7 @@ Rdb_ddl_manager ddl_manager; const char *m_mysql_gtid; Rdb_binlog_manager binlog_manager; -#ifndef _WIN32 +#if !defined(_WIN32) && !defined(__APPLE__) Rdb_io_watchdog *io_watchdog = nullptr; #endif /** @@ -554,7 +554,7 @@ static void rocksdb_set_io_write_timeout( void *const var_ptr MY_ATTRIBUTE((__unused__)), const void *const save) { DBUG_ASSERT(save != nullptr); DBUG_ASSERT(rdb != nullptr); -#ifndef _WIN32 +#if !defined(_WIN32) && !defined(__APPLE__) DBUG_ASSERT(io_watchdog != nullptr); #endif @@ -563,7 +563,7 @@ static void rocksdb_set_io_write_timeout( const uint32_t new_val = *static_cast(save); rocksdb_io_write_timeout_secs = new_val; -#ifndef _WIN32 +#if !defined(_WIN32) && !defined(__APPLE__) io_watchdog->reset_timeout(rocksdb_io_write_timeout_secs); #endif RDB_MUTEX_UNLOCK_CHECK(rdb_sysvars_mutex); @@ -3984,7 +3984,7 @@ static int rocksdb_init_func(void *const p) { directories.push_back(myrocks::rocksdb_wal_dir); } -#ifndef _WIN32 +#if !defined(_WIN32) && !defined(__APPLE__) io_watchdog = new Rdb_io_watchdog(directories); io_watchdog->reset_timeout(rocksdb_io_write_timeout_secs); #endif @@ -4076,7 +4076,7 @@ static int rocksdb_done_func(void *const p) { delete commit_latency_stats; commit_latency_stats = nullptr; -#ifndef _WIN32 +#if !defined(_WIN32) && !defined(__APPLE__) delete io_watchdog; io_watchdog = nullptr; #endif diff --git a/storage/rocksdb/mysql-test/rocksdb/r/bulk_load_rev_cf_and_data.result b/storage/rocksdb/mysql-test/rocksdb/r/bulk_load_rev_cf_and_data.result index 4d259b5ea2f..6c38e030afb 100644 --- a/storage/rocksdb/mysql-test/rocksdb/r/bulk_load_rev_cf_and_data.result +++ b/storage/rocksdb/mysql-test/rocksdb/r/bulk_load_rev_cf_and_data.result @@ -21,6 +21,7 @@ b CHAR(30), PRIMARY KEY(pk) COMMENT "rev:cf1", KEY(a) ) COLLATE 'latin1_bin' PARTITION BY KEY() PARTITIONS 4; +connect other,localhost,root,,; set session transaction isolation level repeatable read; select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS'; STAT_TYPE VALUE @@ -29,6 +30,7 @@ start transaction with consistent snapshot; select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS'; STAT_TYPE VALUE DB_NUM_SNAPSHOTS 1 +connection default; set rocksdb_bulk_load=1; set rocksdb_bulk_load_size=100000; LOAD DATA INFILE INTO TABLE t1; @@ -79,4 +81,5 @@ count(b) 5000000 longfilenamethatvalidatesthatthiswillgetdeleted.bulk_load.tmp test.bulk_load.tmp +disconnect other; DROP TABLE t1, t2, t3; diff --git a/storage/rocksdb/rdb_io_watchdog.cc b/storage/rocksdb/rdb_io_watchdog.cc index a599ba58aec..b41e9248d52 100644 --- a/storage/rocksdb/rdb_io_watchdog.cc +++ b/storage/rocksdb/rdb_io_watchdog.cc @@ -22,7 +22,7 @@ #include /* Rdb_io_watchdog doesn't work on Windows [yet] */ -#ifndef _WIN32 +#if !defined(_WIN32) && !defined(__APPLE__) namespace myrocks { diff --git a/storage/rocksdb/rdb_io_watchdog.h b/storage/rocksdb/rdb_io_watchdog.h index de8c1b9500e..c50547745df 100644 --- a/storage/rocksdb/rdb_io_watchdog.h +++ b/storage/rocksdb/rdb_io_watchdog.h @@ -35,7 +35,7 @@ namespace myrocks { // Rdb_io_watchdog does not support Windows ATM. -#ifndef _WIN32 +#if !defined(_WIN32) && !defined(__APPLE__) class Rdb_io_watchdog { const int RDB_IO_WRITE_BUFFER_SIZE = 4096; diff --git a/storage/xtradb/btr/btr0btr.cc b/storage/xtradb/btr/btr0btr.cc index 85a083aaee0..29f03549899 100644 --- a/storage/xtradb/btr/btr0btr.cc +++ b/storage/xtradb/btr/btr0btr.cc @@ -77,10 +77,9 @@ btr_corruption_report( index->name, index->table_name); if (block->page.zip.data) { buf_page_print(block->page.zip.data, - buf_block_get_zip_size(block), - BUF_PAGE_PRINT_NO_CRASH); + buf_block_get_zip_size(block)); } - buf_page_print(buf_nonnull_block_get_frame(block), 0, 0); + buf_page_print(buf_nonnull_block_get_frame(block), 0); } #ifndef UNIV_HOTBACKUP @@ -1601,11 +1600,9 @@ btr_page_get_father_node_ptr_func( if (btr_node_ptr_get_child_page_no(node_ptr, offsets) != page_no) { rec_t* print_rec; fputs("InnoDB: Dump of the child page:\n", stderr); - buf_page_print(page_align(user_rec), 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page_align(user_rec), 0); fputs("InnoDB: Dump of the parent page:\n", stderr); - buf_page_print(page_align(node_ptr), 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page_align(node_ptr), 0); fputs("InnoDB: Corruption of an index tree: table ", stderr); ut_print_name(stderr, NULL, TRUE, index->table_name); @@ -2080,8 +2077,8 @@ btr_page_reorganize_low( max_ins_size2 = page_get_max_insert_size_after_reorganize(page, 1); if (data_size1 != data_size2 || max_ins_size1 != max_ins_size2) { - buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH); - buf_page_print(temp_page, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); + buf_page_print(temp_page, 0); fprintf(stderr, "InnoDB: Error: page old data size %lu" @@ -4609,7 +4606,7 @@ btr_index_rec_validate( (ulong) rec_get_n_fields_old(rec), (ulong) n); if (dump_on_error) { - buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); fputs("InnoDB: corrupt record ", stderr); rec_print_old(stderr, rec); @@ -4647,8 +4644,7 @@ btr_index_rec_validate( (ulong) i, (ulong) len, (ulong) fixed_size); if (dump_on_error) { - buf_page_print(page, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); fputs("InnoDB: corrupt record ", stderr); rec_print_new(stderr, rec, offsets); @@ -4925,8 +4921,8 @@ loop: btr_validate_report2(index, level, block, right_block); fputs("InnoDB: broken FIL_PAGE_NEXT" " or FIL_PAGE_PREV links\n", stderr); - buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH); - buf_page_print(right_page, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); + buf_page_print(right_page, 0); ret = false; } @@ -4934,8 +4930,8 @@ loop: if (page_is_comp(right_page) != page_is_comp(page)) { btr_validate_report2(index, level, block, right_block); fputs("InnoDB: 'compact' flag mismatch\n", stderr); - buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH); - buf_page_print(right_page, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); + buf_page_print(right_page, 0); ret = false; @@ -4957,8 +4953,8 @@ loop: fputs("InnoDB: records in wrong order" " on adjacent pages\n", stderr); - buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH); - buf_page_print(right_page, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); + buf_page_print(right_page, 0); fputs("InnoDB: record ", stderr); rec = page_rec_get_prev(page_get_supremum_rec(page)); @@ -5006,8 +5002,8 @@ loop: fputs("InnoDB: node pointer to the page is wrong\n", stderr); - buf_page_print(father_page, 0, BUF_PAGE_PRINT_NO_CRASH); - buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(father_page, 0); + buf_page_print(page, 0); fputs("InnoDB: node ptr ", stderr); rec_print(stderr, node_ptr, index); @@ -5039,10 +5035,8 @@ loop: btr_validate_report1(index, level, block); - buf_page_print(father_page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print(page, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(father_page, 0); + buf_page_print(page, 0); fputs("InnoDB: Error: node ptrs differ" " on levels > 0\n" @@ -5087,15 +5081,9 @@ loop: btr_validate_report1(index, level, block); - buf_page_print( - father_page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - right_page, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(father_page, 0); + buf_page_print(page, 0); + buf_page_print(right_page, 0); } } else { page_t* right_father_page @@ -5113,18 +5101,10 @@ loop: btr_validate_report1(index, level, block); - buf_page_print( - father_page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - right_father_page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - right_page, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(father_page, 0); + buf_page_print(right_father_page, 0); + buf_page_print(page, 0); + buf_page_print(right_page, 0); } if (page_get_page_no(right_father_page) @@ -5138,18 +5118,10 @@ loop: btr_validate_report1(index, level, block); - buf_page_print( - father_page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - right_father_page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print( - right_page, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(father_page, 0); + buf_page_print(right_father_page, 0); + buf_page_print(page, 0); + buf_page_print(right_page, 0); } } } diff --git a/storage/xtradb/btr/btr0sea.cc b/storage/xtradb/btr/btr0sea.cc index 2f0428747d5..6891583554c 100644 --- a/storage/xtradb/btr/btr0sea.cc +++ b/storage/xtradb/btr/btr0sea.cc @@ -2022,9 +2022,7 @@ btr_search_validate_one_table( (ulong) block->curr_left_side); if (n_page_dumps < 20) { - buf_page_print( - page, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); n_page_dumps++; } } diff --git a/storage/xtradb/buf/buf0buf.cc b/storage/xtradb/buf/buf0buf.cc index 01bec11d2ed..7eb0474091e 100644 --- a/storage/xtradb/buf/buf0buf.cc +++ b/storage/xtradb/buf/buf0buf.cc @@ -956,19 +956,12 @@ buf_page_is_corrupted( return(false); } -/********************************************************************//** -Prints a page to stderr. */ +/** Dump a page to stderr. +@param[in] read_buf database page +@param[in] zip_size compressed page size, or 0 for uncompressed */ UNIV_INTERN void -buf_page_print( -/*===========*/ - const byte* read_buf, /*!< in: a database page */ - ulint zip_size, /*!< in: compressed page size, or - 0 for uncompressed pages */ - ulint flags) /*!< in: 0 or - BUF_PAGE_PRINT_NO_CRASH or - BUF_PAGE_PRINT_NO_FULL */ - +buf_page_print(const byte* read_buf, ulint zip_size) { #ifndef UNIV_HOTBACKUP dict_index_t* index; @@ -979,14 +972,12 @@ buf_page_print( size = UNIV_PAGE_SIZE; } - if (!(flags & BUF_PAGE_PRINT_NO_FULL)) { - ut_print_timestamp(stderr); - fprintf(stderr, - " InnoDB: Page dump in ascii and hex (%lu bytes):\n", - size); - ut_print_buf(stderr, read_buf, size); - fputs("\nInnoDB: End of page dump\n", stderr); - } + ut_print_timestamp(stderr); + fprintf(stderr, + " InnoDB: Page dump in ascii and hex (%lu bytes):\n", + size); + ut_print_buf(stderr, read_buf, size); + fputs("\nInnoDB: End of page dump\n", stderr); if (zip_size) { /* Print compressed page. */ @@ -1141,8 +1132,6 @@ buf_page_print( stderr); break; } - - ut_ad(flags & BUF_PAGE_PRINT_NO_CRASH); } #ifndef UNIV_HOTBACKUP @@ -4832,8 +4821,8 @@ database_corrupted: space->name, bpage->space, bpage->offset); - buf_page_print(frame, buf_page_get_zip_size(bpage), - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(frame, + buf_page_get_zip_size(bpage)); ib_logf(IB_LOG_LEVEL_INFO, "It is also possible that your" diff --git a/storage/xtradb/buf/buf0dblwr.cc b/storage/xtradb/buf/buf0dblwr.cc index 49371f9a6f1..4995df98165 100644 --- a/storage/xtradb/buf/buf0dblwr.cc +++ b/storage/xtradb/buf/buf0dblwr.cc @@ -800,7 +800,7 @@ buf_dblwr_assert_on_corrupt_block( /*==============================*/ const buf_block_t* block) /*!< in: block to check */ { - buf_page_print(block->frame, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(block->frame, 0); ut_print_timestamp(stderr); fprintf(stderr, diff --git a/storage/xtradb/fil/fil0crypt.cc b/storage/xtradb/fil/fil0crypt.cc index 81b1fd362af..167f9e48273 100644 --- a/storage/xtradb/fil/fil0crypt.cc +++ b/storage/xtradb/fil/fil0crypt.cc @@ -742,11 +742,12 @@ fil_space_encrypt( fprintf(stderr, "ok %d corrupted %d corrupted1 %d err %d different %d\n", ok , corrupted, corrupted1, err, different); fprintf(stderr, "src_frame\n"); - buf_page_print(src_frame, zip_size, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(src_frame, zip_size); fprintf(stderr, "encrypted_frame\n"); - buf_page_print(tmp, zip_size, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(tmp, zip_size); fprintf(stderr, "decrypted_frame\n"); - buf_page_print(tmp_mem, zip_size, 0); + buf_page_print(tmp_mem, zip_size); + ut_ad(0); } free(tmp_mem); diff --git a/storage/xtradb/fil/fil0pagecompress.cc b/storage/xtradb/fil/fil0pagecompress.cc index 2b6ae95640f..7a61f17836b 100644 --- a/storage/xtradb/fil/fil0pagecompress.cc +++ b/storage/xtradb/fil/fil0pagecompress.cc @@ -397,7 +397,8 @@ fil_compress_page( fil_decompress_page(uncomp_page, comp_page, ulong(len), NULL); if (buf_page_is_corrupted(false, uncomp_page, 0, space)) { - buf_page_print(uncomp_page, 0, 0); + buf_page_print(uncomp_page, 0); + ut_ad(0); } ut_free(comp_page); diff --git a/storage/xtradb/ibuf/ibuf0ibuf.cc b/storage/xtradb/ibuf/ibuf0ibuf.cc index b920c2ae594..e872198d927 100644 --- a/storage/xtradb/ibuf/ibuf0ibuf.cc +++ b/storage/xtradb/ibuf/ibuf0ibuf.cc @@ -4104,7 +4104,7 @@ ibuf_insert_to_index_page( "InnoDB: but the number of fields does not match!\n", stderr); dump: - buf_page_print(page, 0, BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page, 0); dtuple_print(stderr, entry); ut_ad(0); @@ -4723,15 +4723,13 @@ ibuf_merge_or_delete_for_page( fputs("InnoDB: cannot retrieve bitmap page\n", stderr); } else { - buf_page_print(bitmap_page, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(bitmap_page, 0); } ibuf_mtr_commit(&mtr); fputs("\nInnoDB: Dump of the page:\n", stderr); - buf_page_print(block->frame, 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(block->frame, 0); fprintf(stderr, "InnoDB: Error: corruption in the tablespace." diff --git a/storage/xtradb/include/btr0btr.ic b/storage/xtradb/include/btr0btr.ic index 0f5f025d6a3..9f13c9303ca 100644 --- a/storage/xtradb/include/btr0btr.ic +++ b/storage/xtradb/include/btr0btr.ic @@ -306,7 +306,7 @@ btr_node_ptr_get_child_page_no( "InnoDB: a nonsensical page number 0" " in a node ptr record at offset %lu\n", (ulong) page_offset(rec)); - buf_page_print(page_align(rec), 0, 0); + buf_page_print(page_align(rec), 0); ut_ad(0); } diff --git a/storage/xtradb/include/buf0buf.h b/storage/xtradb/include/buf0buf.h index 1899165ace0..88ee042e8c3 100644 --- a/storage/xtradb/include/buf0buf.h +++ b/storage/xtradb/include/buf0buf.h @@ -758,26 +758,15 @@ buf_print(void); /*============*/ #endif /* UNIV_DEBUG_PRINT || UNIV_DEBUG || UNIV_BUF_DEBUG */ #endif /* !UNIV_HOTBACKUP */ -enum buf_page_print_flags { - /** Do not crash at the end of buf_page_print(). */ - BUF_PAGE_PRINT_NO_CRASH = 1, - /** Do not print the full page dump. */ - BUF_PAGE_PRINT_NO_FULL = 2 -}; -/********************************************************************//** -Prints a page to stderr. */ +/** Dump a page to stderr. +@param[in] read_buf database page +@param[in] zip_size compressed page size, or 0 for uncompressed */ UNIV_INTERN void -buf_page_print( -/*===========*/ - const byte* read_buf, /*!< in: a database page */ - ulint zip_size, /*!< in: compressed page size, or - 0 for uncompressed pages */ - ulint flags) /*!< in: 0 or - BUF_PAGE_PRINT_NO_CRASH or - BUF_PAGE_PRINT_NO_FULL */ +buf_page_print(const byte* read_buf, ulint zip_size) UNIV_COLD; + /********************************************************************//** Decompress a block. @return TRUE if successful */ diff --git a/storage/xtradb/include/page0page.ic b/storage/xtradb/include/page0page.ic index 364536b86f8..b37715b53be 100644 --- a/storage/xtradb/include/page0page.ic +++ b/storage/xtradb/include/page0page.ic @@ -771,7 +771,7 @@ page_rec_get_next_low( (void*) rec, (ulong) page_get_space_id(page), (ulong) page_get_page_no(page)); - buf_page_print(page, 0, 0); + buf_page_print(page, 0); ut_error; } else if (offs == 0) { diff --git a/storage/xtradb/lock/lock0lock.cc b/storage/xtradb/lock/lock0lock.cc index 71612f66fcd..40ab9d9403c 100644 --- a/storage/xtradb/lock/lock0lock.cc +++ b/storage/xtradb/lock/lock0lock.cc @@ -1921,7 +1921,7 @@ lock_sec_rec_some_has_impl( } else if (!lock_check_trx_id_sanity(max_trx_id, rec, index, offsets)) { - buf_page_print(page, 0, 0); + buf_page_print(page, 0); /* The page is corrupt: try to avoid a crash by returning 0 */ trx_id = 0; diff --git a/storage/xtradb/log/log0recv.cc b/storage/xtradb/log/log0recv.cc index 0137cb44571..75fc7713c5b 100644 --- a/storage/xtradb/log/log0recv.cc +++ b/storage/xtradb/log/log0recv.cc @@ -3564,6 +3564,7 @@ recv_reset_logs( log_sys->tracked_lsn = log_sys->lsn; + memset(log_sys->buf, 0, log_sys->buf_size); log_block_init(log_sys->buf, log_sys->lsn); log_block_set_first_rec_group(log_sys->buf, LOG_BLOCK_HDR_SIZE); diff --git a/storage/xtradb/page/page0cur.cc b/storage/xtradb/page/page0cur.cc index 76e4c2aed9b..692cb393afd 100644 --- a/storage/xtradb/page/page0cur.cc +++ b/storage/xtradb/page/page0cur.cc @@ -903,7 +903,7 @@ page_cur_parse_insert_rec( ut_print_buf(stderr, ptr2, 300); putc('\n', stderr); - buf_page_print(page, 0, 0); + buf_page_print(page, 0); ut_error; } diff --git a/storage/xtradb/page/page0page.cc b/storage/xtradb/page/page0page.cc index 3f8e47adafd..800f76e1532 100644 --- a/storage/xtradb/page/page0page.cc +++ b/storage/xtradb/page/page0page.cc @@ -154,7 +154,7 @@ page_dir_find_owner_slot( fputs("\n" "InnoDB: on that page!\n", stderr); - buf_page_print(page, 0, 0); + buf_page_print(page, 0); ut_error; } @@ -618,10 +618,8 @@ page_copy_rec_list_end_no_locks( /* Track an assertion failure reported on the mailing list on June 18th, 2003 */ - buf_page_print(new_page, 0, - BUF_PAGE_PRINT_NO_CRASH); - buf_page_print(page_align(rec), 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(new_page, 0); + buf_page_print(page_align(rec), 0); ut_print_timestamp(stderr); fprintf(stderr, @@ -1953,7 +1951,8 @@ page_check_dir( fprintf(stderr, "InnoDB: Page directory corruption:" " infimum not pointed to\n"); - buf_page_print(page, 0, 0); + buf_page_print(page, 0); + ut_ad(0); } if (UNIV_UNLIKELY(!page_rec_is_supremum_low(supremum_offs))) { @@ -1961,7 +1960,8 @@ page_check_dir( fprintf(stderr, "InnoDB: Page directory corruption:" " supremum not pointed to\n"); - buf_page_print(page, 0, 0); + buf_page_print(page, 0); + ut_ad(0); } } #endif /* !UNIV_HOTBACKUP */ @@ -2679,7 +2679,8 @@ func_exit2: (ulong) page_get_space_id(page), (ulong) page_get_page_no(page), index->name); - buf_page_print(page, 0, 0); + buf_page_print(page, 0); + ut_ad(0); } return(ret); diff --git a/storage/xtradb/row/row0sel.cc b/storage/xtradb/row/row0sel.cc index 8e3ed3d1a4e..26fd7629a5d 100644 --- a/storage/xtradb/row/row0sel.cc +++ b/storage/xtradb/row/row0sel.cc @@ -1545,6 +1545,7 @@ rec_loop: switch (err) { case DB_SUCCESS_LOCKED_REC: err = DB_SUCCESS; + /* fall through */ case DB_SUCCESS: break; default: @@ -1603,6 +1604,7 @@ skip_lock: switch (err) { case DB_SUCCESS_LOCKED_REC: err = DB_SUCCESS; + /* fall through */ case DB_SUCCESS: break; default: @@ -4186,6 +4188,7 @@ wait_table_again: switch (err) { case DB_SUCCESS_LOCKED_REC: err = DB_SUCCESS; + /* fall through */ case DB_SUCCESS: break; default: @@ -4281,6 +4284,7 @@ rec_loop: switch (err) { case DB_SUCCESS_LOCKED_REC: err = DB_SUCCESS; + /* fall through */ case DB_SUCCESS: break; default: @@ -4323,8 +4327,7 @@ wrong_offs: if ((srv_force_recovery == 0 || moves_up == FALSE) && srv_pass_corrupt_table <= 1) { ut_print_timestamp(stderr); - buf_page_print(page_align(rec), 0, - BUF_PAGE_PRINT_NO_CRASH); + buf_page_print(page_align(rec), 0); fprintf(stderr, "\nInnoDB: rec address %p," " buf block fix count %lu\n", @@ -4569,6 +4572,7 @@ no_gap_lock: prebuilt->new_rec_locks = 1; } err = DB_SUCCESS; + /* fall through */ case DB_SUCCESS: break; case DB_LOCK_WAIT: