mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Merge bb-10.2-ext into 10.3
This commit is contained in:
commit
ae02407ce3
35 changed files with 243 additions and 132 deletions
|
@ -1938,7 +1938,7 @@ cleanup:
|
|||
|
||||
ctxt->ret = ret;
|
||||
|
||||
os_thread_exit(NULL);
|
||||
os_thread_exit();
|
||||
OS_THREAD_DUMMY_RETURN;
|
||||
}
|
||||
|
||||
|
|
|
@ -840,7 +840,7 @@ stop_thread:
|
|||
|
||||
os_event_set(kill_query_thread_stopped);
|
||||
|
||||
os_thread_exit(NULL);
|
||||
os_thread_exit();
|
||||
OS_THREAD_DUMMY_RETURN;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -5052,6 +5052,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());
|
||||
|
@ -5148,11 +5153,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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
#
|
||||
#
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -181,7 +181,6 @@ a
|
|||
SELECT * FROM tp;
|
||||
a
|
||||
DROP TABLE tr,tc,td,tz,tp;
|
||||
ib_buffer_pool
|
||||
ib_logfile0
|
||||
ib_logfile1
|
||||
ibdata1
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
--innodb-file-per-table
|
||||
--innodb-buffer-pool-size=32M
|
||||
--innodb-log-file-size=32M
|
||||
--innodb-page-size=64k
|
||||
--innodb-strict-mode=OFF
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -204,6 +204,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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 #
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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). */
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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),
|
||||
|
@ -2041,8 +2041,26 @@ sp_head::execute_procedure(THD *thd, List<Item> *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)
|
||||
|
|
|
@ -235,6 +235,7 @@ private:
|
|||
*/
|
||||
uint32 unsafe_flags;
|
||||
|
||||
uint m_select_number;
|
||||
public:
|
||||
inline Stored_program_creation_ctx *get_creation_ctx()
|
||||
{
|
||||
|
@ -817,6 +818,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:
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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. */
|
||||
|
@ -1351,8 +1343,6 @@ buf_page_print(
|
|||
stderr);
|
||||
break;
|
||||
}
|
||||
|
||||
ut_ad(flags & BUF_PAGE_PRINT_NO_CRASH);
|
||||
}
|
||||
|
||||
# ifdef PFS_GROUP_BUFFER_SYNC
|
||||
|
@ -5976,8 +5966,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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
@ -641,6 +642,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);
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -3525,6 +3525,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);
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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<const uint32_t *>(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
|
||||
|
|
|
@ -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 <input_file> 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;
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#include <vector>
|
||||
|
||||
/* Rdb_io_watchdog doesn't work on Windows [yet] */
|
||||
#ifndef _WIN32
|
||||
#if !defined(_WIN32) && !defined(__APPLE__)
|
||||
|
||||
namespace myrocks {
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue