summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2021-08-31 09:22:21 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2021-08-31 09:22:21 +0300
commit04647611260a77041186ace12f96b05d50bed4da (patch)
tree3f8efa00ae2fa2bc6be5165658c34c79c9437a3f
parentdc6bc85cd29586631d927036451d955c7013206c (diff)
parente835cc851e389770219a33037af65db8887cc9a8 (diff)
downloadmariadb-git-04647611260a77041186ace12f96b05d50bed4da.tar.gz
Merge 10.3 into 10.4
-rwxr-xr-xBUILD/SETUP.sh2
-rw-r--r--extra/mariabackup/xtrabackup.cc2
-rw-r--r--include/mysql/psi/psi.h6
-rw-r--r--include/mysql/psi/psi_abi_v1.h.pp6
m---------libmariadb0
-rw-r--r--mysql-test/lib/My/Options.pm22
-rw-r--r--mysql-test/lib/mtr_cases.pm6
-rw-r--r--mysql-test/suite/maria/repair.result7
-rw-r--r--mysql-test/suite/maria/repair.test2
-rw-r--r--mysql-test/suite/sql_sequence/default.result10
-rw-r--r--mysql-test/suite/sql_sequence/default.test12
-rw-r--r--mysys/psi_noop.c6
-rw-r--r--scripts/mysql_setpermission.sh8
-rw-r--r--sql/sql_base.cc20
-rw-r--r--sql/sql_class.h5
-rw-r--r--storage/perfschema/pfs.cc6
-rw-r--r--storage/rocksdb/CMakeLists.txt9
17 files changed, 80 insertions, 49 deletions
diff --git a/BUILD/SETUP.sh b/BUILD/SETUP.sh
index c3c7acecf96..ebf900e3e56 100755
--- a/BUILD/SETUP.sh
+++ b/BUILD/SETUP.sh
@@ -211,7 +211,7 @@ fi
max_no_embedded_configs="$SSL_LIBRARY --with-plugins=max"
max_no_qc_configs="$SSL_LIBRARY --with-plugins=max --without-query-cache"
-max_configs="$SSL_LIBRARY --with-plugins=max --with-embedded-server --with-libevent --without-plugin=plugin_file_key_management --with-plugin-rocksdb=dynamic --with-plugin-test_sql_discovery=DYNAMIC --with-plugin-file_key_management=DYNAMIC"
+max_configs="$SSL_LIBRARY --with-plugins=max --with-embedded-server --with-libevent --without-plugin=plugin_file_key_management --with-plugin-rocksdb=dynamic --without-plugin-tokudb --with-plugin-test_sql_discovery=DYNAMIC --with-plugin-file_key_management=DYNAMIC"
all_configs="$SSL_LIBRARY --with-plugins=max --with-embedded-server --with-innodb_plugin --with-libevent"
#
diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc
index 2dd3f3eb929..8e202a8cd24 100644
--- a/extra/mariabackup/xtrabackup.cc
+++ b/extra/mariabackup/xtrabackup.cc
@@ -3402,7 +3402,7 @@ static void xb_load_single_table_tablespace(const char *dirname,
delete file;
if (err != DB_SUCCESS && xtrabackup_backup && !is_empty_file) {
- die("Failed to not validate first page of the file %s, error %d",name, (int)err);
+ die("Failed to validate first page of the file %s, error %d",name, (int)err);
}
ut_free(name);
diff --git a/include/mysql/psi/psi.h b/include/mysql/psi/psi.h
index 238471c7af1..e921233649e 100644
--- a/include/mysql/psi/psi.h
+++ b/include/mysql/psi/psi.h
@@ -1149,7 +1149,7 @@ typedef void (*register_socket_v1_t)
@return an instrumented mutex
*/
typedef struct PSI_mutex* (*init_mutex_v1_t)
- (PSI_mutex_key key, const void *identity);
+ (PSI_mutex_key key, void *identity);
/**
Mutex instrumentation destruction API.
@@ -1164,7 +1164,7 @@ typedef void (*destroy_mutex_v1_t)(struct PSI_mutex *mutex);
@return an instrumented rwlock
*/
typedef struct PSI_rwlock* (*init_rwlock_v1_t)
- (PSI_rwlock_key key, const void *identity);
+ (PSI_rwlock_key key, void *identity);
/**
Rwlock instrumentation destruction API.
@@ -1179,7 +1179,7 @@ typedef void (*destroy_rwlock_v1_t)(struct PSI_rwlock *rwlock);
@return an instrumented cond
*/
typedef struct PSI_cond* (*init_cond_v1_t)
- (PSI_cond_key key, const void *identity);
+ (PSI_cond_key key, void *identity);
/**
Cond instrumentation destruction API.
diff --git a/include/mysql/psi/psi_abi_v1.h.pp b/include/mysql/psi/psi_abi_v1.h.pp
index ef18f59e4a9..576d801b127 100644
--- a/include/mysql/psi/psi_abi_v1.h.pp
+++ b/include/mysql/psi/psi_abi_v1.h.pp
@@ -300,13 +300,13 @@ typedef void (*register_statement_v1_t)
typedef void (*register_socket_v1_t)
(const char *category, struct PSI_socket_info_v1 *info, int count);
typedef struct PSI_mutex* (*init_mutex_v1_t)
- (PSI_mutex_key key, const void *identity);
+ (PSI_mutex_key key, void *identity);
typedef void (*destroy_mutex_v1_t)(struct PSI_mutex *mutex);
typedef struct PSI_rwlock* (*init_rwlock_v1_t)
- (PSI_rwlock_key key, const void *identity);
+ (PSI_rwlock_key key, void *identity);
typedef void (*destroy_rwlock_v1_t)(struct PSI_rwlock *rwlock);
typedef struct PSI_cond* (*init_cond_v1_t)
- (PSI_cond_key key, const void *identity);
+ (PSI_cond_key key, void *identity);
typedef void (*destroy_cond_v1_t)(struct PSI_cond *cond);
typedef struct PSI_socket* (*init_socket_v1_t)
(PSI_socket_key key, const my_socket *fd,
diff --git a/libmariadb b/libmariadb
-Subproject 0cc16f18c1d87bbe6e360eaf578fcedeb947911
+Subproject 42cb1e442c43902e2866bea38d15f2ed1f5d38b
diff --git a/mysql-test/lib/My/Options.pm b/mysql-test/lib/My/Options.pm
index 6e0efe862e7..5827e0666a6 100644
--- a/mysql-test/lib/My/Options.pm
+++ b/mysql-test/lib/My/Options.pm
@@ -140,24 +140,16 @@ sub diff {
}
-sub is_set {
- my ($opts, $set_opts)= @_;
+sub is_subset {
+ my ($set, $subset)= @_;
+ my %cache = map { _split_option($_) } @$set;
- foreach my $opt (@$opts){
-
- my ($opt_name1, $value1)= _split_option($opt);
-
- foreach my $set_opt (@$set_opts){
- my ($opt_name2, $value2)= _split_option($set_opt);
-
- if ($opt_name1 eq $opt_name2 and $value1 eq $value2){
- # Option already set
- return 1;
- }
- }
+ for (@$subset){
+ my ($name, $value)= _split_option($_);
+ return 0 unless exists $cache{$name} and $cache{$name} eq $value;
}
- return 0;
+ return 1;
}
diff --git a/mysql-test/lib/mtr_cases.pm b/mysql-test/lib/mtr_cases.pm
index 97fbdcae838..fe4f316c31f 100644
--- a/mysql-test/lib/mtr_cases.pm
+++ b/mysql-test/lib/mtr_cases.pm
@@ -626,8 +626,10 @@ sub make_combinations($$@)
{
# Skip all other combinations if the values they change
# are already fixed in master_opt or slave_opt
- if (My::Options::is_set($test->{master_opt}, $comb->{comb_opt}) &&
- My::Options::is_set($test->{slave_opt}, $comb->{comb_opt}) ){
+ # (empty combinations are not considered a subset of anything)
+ if (@{$comb->{comb_opt}} &&
+ My::Options::is_subset($test->{master_opt}, $comb->{comb_opt}) &&
+ My::Options::is_subset($test->{slave_opt}, $comb->{comb_opt}) ){
$test_combs->{$comb->{name}} = 2;
diff --git a/mysql-test/suite/maria/repair.result b/mysql-test/suite/maria/repair.result
index 296f251aa36..722d9f28712 100644
--- a/mysql-test/suite/maria/repair.result
+++ b/mysql-test/suite/maria/repair.result
@@ -29,12 +29,5 @@ CREATE TABLE t1 (i INT) ENGINE=Aria;
INSERT INTO t1 VALUES (1);
SET max_session_mem_used=50000;
REPAIR LOCAL TABLE t1 USE_FRM;
-Table Op Msg_type Msg_text
-t1 repair error Failed to open partially repaired table
-Warnings:
-Error 1290 The MariaDB server is running with the --max-thread-mem-used=50000 option so it cannot execute this statement
REPAIR LOCAL TABLE t1;
-Table Op Msg_type Msg_text
-test.t1 repair Error The MariaDB server is running with the --max-thread-mem-used=50000 option so it cannot execute this statement
-test.t1 repair error Corrupt
DROP TABLE t1;
diff --git a/mysql-test/suite/maria/repair.test b/mysql-test/suite/maria/repair.test
index 13165269b76..571f861c512 100644
--- a/mysql-test/suite/maria/repair.test
+++ b/mysql-test/suite/maria/repair.test
@@ -36,6 +36,8 @@ DROP TABLE t1;
CREATE TABLE t1 (i INT) ENGINE=Aria;
INSERT INTO t1 VALUES (1);
SET max_session_mem_used=50000;
+--disable_result_log
REPAIR LOCAL TABLE t1 USE_FRM;
REPAIR LOCAL TABLE t1;
+--enable_result_log
DROP TABLE t1;
diff --git a/mysql-test/suite/sql_sequence/default.result b/mysql-test/suite/sql_sequence/default.result
index 37d536d9020..2f048c9e4e2 100644
--- a/mysql-test/suite/sql_sequence/default.result
+++ b/mysql-test/suite/sql_sequence/default.result
@@ -185,3 +185,13 @@ ALTER TABLE t1 add column d int default next value for s_not_exits;
ERROR 42S02: Table 'test.s_not_exits' doesn't exist
drop table t1;
drop sequence s1;
+#
+# MDEV 22785 Crash with prepared statements and NEXTVAL()
+#
+CREATE SEQUENCE s;
+CREATE TABLE t1 (id int NOT NULL DEFAULT NEXTVAL(s), PRIMARY KEY (id));
+PREPARE stmt FROM " INSERT INTO t1 () values ()";
+INSERT INTO t1 () values ();
+EXECUTE stmt;
+DROP TABLE t1;
+DROP SEQUENCE s;
diff --git a/mysql-test/suite/sql_sequence/default.test b/mysql-test/suite/sql_sequence/default.test
index 017165c1a80..e7c13211013 100644
--- a/mysql-test/suite/sql_sequence/default.test
+++ b/mysql-test/suite/sql_sequence/default.test
@@ -123,3 +123,15 @@ ALTER TABLE t1 add column c int;
ALTER TABLE t1 add column d int default next value for s_not_exits;
drop table t1;
drop sequence s1;
+
+--echo #
+--echo # MDEV 22785 Crash with prepared statements and NEXTVAL()
+--echo #
+CREATE SEQUENCE s;
+CREATE TABLE t1 (id int NOT NULL DEFAULT NEXTVAL(s), PRIMARY KEY (id));
+PREPARE stmt FROM " INSERT INTO t1 () values ()";
+INSERT INTO t1 () values ();
+EXECUTE stmt;
+# Cleanup
+DROP TABLE t1;
+DROP SEQUENCE s;
diff --git a/mysys/psi_noop.c b/mysys/psi_noop.c
index 9eec07a1cd8..8ab17f22cc4 100644
--- a/mysys/psi_noop.c
+++ b/mysys/psi_noop.c
@@ -86,7 +86,7 @@ static void register_socket_noop(const char *category NNN,
}
static PSI_mutex*
-init_mutex_noop(PSI_mutex_key key NNN, const void *identity NNN)
+init_mutex_noop(PSI_mutex_key key NNN, void *identity NNN)
{
return NULL;
}
@@ -97,7 +97,7 @@ static void destroy_mutex_noop(PSI_mutex* mutex NNN)
}
static PSI_rwlock*
-init_rwlock_noop(PSI_rwlock_key key NNN, const void *identity NNN)
+init_rwlock_noop(PSI_rwlock_key key NNN, void *identity NNN)
{
return NULL;
}
@@ -108,7 +108,7 @@ static void destroy_rwlock_noop(PSI_rwlock* rwlock NNN)
}
static PSI_cond*
-init_cond_noop(PSI_cond_key key NNN, const void *identity NNN)
+init_cond_noop(PSI_cond_key key NNN, void *identity NNN)
{
return NULL;
}
diff --git a/scripts/mysql_setpermission.sh b/scripts/mysql_setpermission.sh
index 71462d28622..7c0ef575db7 100644
--- a/scripts/mysql_setpermission.sh
+++ b/scripts/mysql_setpermission.sh
@@ -52,6 +52,7 @@ use strict;
use vars qw($dbh $sth $hostname $opt_user $opt_password $opt_help $opt_host
$opt_socket $opt_port $host $version);
+my $sqlport = "";
my $sqlhost = "";
my $user = "";
@@ -84,9 +85,13 @@ if ($opt_password eq '')
print "\n";
}
+# Using port argument with 'localhost' will cause an error
+if ($sqlhost ne "localhost") {
+ $sqlport = ":port=$opt_port";
+}
# make the connection to MariaDB
-$dbh= DBI->connect("DBI:mysql:mysql:host=$sqlhost:port=$opt_port:mysql_socket=$opt_socket",$opt_user,$opt_password, {PrintError => 0}) ||
+$dbh= DBI->connect("DBI:mysql:mysql:host=$sqlhost$sqlport:mysql_socket=$opt_socket",$opt_user,$opt_password, {PrintError => 0}) ||
die("Can't make a connection to the mysql server.\n The error: $DBI::errstr");
# the start of the program
@@ -278,7 +283,6 @@ sub addall {
$sth = $dbh->do("REVOKE ALL ON $db.* FROM \'$user\'\@\'$host\'") || die $dbh->errstr;
}
}
- $dbh->do("FLUSH PRIVILEGES") || print STDERR "Can't flush privileges\n";
print "Everything is inserted and mysql privileges have been reloaded.\n\n";
}
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 8408d8d31a4..0a351809c16 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -4638,13 +4638,13 @@ bool table_already_fk_prelocked(TABLE_LIST *tl, LEX_CSTRING *db,
}
-static bool internal_table_exists(TABLE_LIST *global_list,
- const char *table_name)
+static TABLE_LIST *internal_table_exists(TABLE_LIST *global_list,
+ const char *table_name)
{
do
{
if (global_list->table_name.str == table_name)
- return 1;
+ return global_list;
} while ((global_list= global_list->next_global));
return 0;
}
@@ -4659,13 +4659,23 @@ add_internal_tables(THD *thd, Query_tables_list *prelocking_ctx,
do
{
+ TABLE_LIST *tmp __attribute__((unused));
DBUG_PRINT("info", ("table name: %s", tables->table_name.str));
/*
Skip table if already in the list. Can happen with prepared statements
*/
- if (tables->next_local &&
- internal_table_exists(global_table_list, tables->table_name.str))
+ if ((tmp= internal_table_exists(global_table_list,
+ tables->table_name.str)))
+ {
+ /*
+ Use the original value for the next local, used by the
+ original prepared statement. We cannot trust the original
+ next_local value as it may have been changed by a previous
+ statement using the same table.
+ */
+ tables->next_local= tmp;
continue;
+ }
TABLE_LIST *tl= (TABLE_LIST *) thd->alloc(sizeof(TABLE_LIST));
if (!tl)
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 8e2b6eed338..7570211f586 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -4249,11 +4249,8 @@ public:
for any CTE references.
*/
if (!lex->with_cte_resolution)
- {
my_message(ER_NO_DB_ERROR, ER(ER_NO_DB_ERROR), MYF(0));
- return TRUE;
- }
- return FALSE;
+ return TRUE;
}
to->str= strmake(db.str, db.length);
diff --git a/storage/perfschema/pfs.cc b/storage/perfschema/pfs.cc
index 2f1081b3836..44bcbad87d7 100644
--- a/storage/perfschema/pfs.cc
+++ b/storage/perfschema/pfs.cc
@@ -1496,7 +1496,7 @@ static void register_socket_v1(const char *category,
@sa PSI_v1::init_mutex.
*/
static PSI_mutex*
-init_mutex_v1(PSI_mutex_key key, const void *identity)
+init_mutex_v1(PSI_mutex_key key, void *identity)
{
INIT_BODY_V1(mutex, key, identity);
}
@@ -1519,7 +1519,7 @@ static void destroy_mutex_v1(PSI_mutex* mutex)
@sa PSI_v1::init_rwlock.
*/
static PSI_rwlock*
-init_rwlock_v1(PSI_rwlock_key key, const void *identity)
+init_rwlock_v1(PSI_rwlock_key key, void *identity)
{
INIT_BODY_V1(rwlock, key, identity);
}
@@ -1542,7 +1542,7 @@ static void destroy_rwlock_v1(PSI_rwlock* rwlock)
@sa PSI_v1::init_cond.
*/
static PSI_cond*
-init_cond_v1(PSI_cond_key key, const void *identity)
+init_cond_v1(PSI_cond_key key, void *identity)
{
INIT_BODY_V1(cond, key, identity);
}
diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt
index 5dfd94c6212..f985d3c0b4f 100644
--- a/storage/rocksdb/CMakeLists.txt
+++ b/storage/rocksdb/CMakeLists.txt
@@ -44,6 +44,15 @@ IF (WIN32 AND CMAKE_SIZEOF_VOID_P EQUAL 4)
SKIP_ROCKSDB_PLUGIN("32-Bit Windows are temporarily disabled")
ENDIF()
+#
+# Also, disable on ARM64 when not Linux
+# Requires submodule update to v6.16.3
+# containing commit https://github.com/facebook/rocksdb/commit/ee4bd4780b321ddb5f92a0f4eb956f2a2ebd60dc
+#
+IF(CMAKE_SYSTEM_PROCESSOR MATCHES "(arm64|aarch64)" AND NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ SKIP_ROCKSDB_PLUGIN("ARM64 disabled on all except Linux")
+ENDIF()
+
# This plugin needs recent C++ compilers (it is using C++11 features)
# Skip build for the old compilers
SET(CXX11_FLAGS)