Merge 10.4 into 10.5
This commit is contained in:
commit
a4b7232b2c
@ -61,6 +61,10 @@ Street, Fifth Floor, Boston, MA 02110-1335 USA
|
||||
#include <sys/resource.h>
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE__
|
||||
# include "libproc.h"
|
||||
#endif
|
||||
|
||||
|
||||
#include <btr0sea.h>
|
||||
#include <dict0priv.h>
|
||||
@ -6243,8 +6247,9 @@ void handle_options(int argc, char **argv, char ***argv_server,
|
||||
}
|
||||
}
|
||||
|
||||
mariabackup_args.push_back(nullptr);
|
||||
*argv_client= *argv_server= *argv_backup= &mariabackup_args[0];
|
||||
int argc_backup= static_cast<int>(mariabackup_args.size());
|
||||
int argc_backup= static_cast<int>(mariabackup_args.size() - 1);
|
||||
int argc_client= argc_backup;
|
||||
int argc_server= argc_backup;
|
||||
|
||||
@ -6707,6 +6712,12 @@ static int get_exepath(char *buf, size_t size, const char *argv0)
|
||||
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<uint32_t>(size));
|
||||
if (ret > 0) {
|
||||
buf[ret] = 0;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
return my_realpath(buf, argv0, 0);
|
||||
|
21
mysql-test/main/deadlock_ftwrl.result
Normal file
21
mysql-test/main/deadlock_ftwrl.result
Normal file
@ -0,0 +1,21 @@
|
||||
CREATE TABLE t1(a INT);
|
||||
SELECT GET_LOCK("l1", 0);
|
||||
GET_LOCK("l1", 0)
|
||||
1
|
||||
connect con1,localhost,root,,;
|
||||
LOCK TABLES t1 WRITE;
|
||||
connection default;
|
||||
set debug_sync='mdl_acquire_lock_wait SIGNAL ftwrl';
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
connection con1;
|
||||
set debug_sync='now WAIT_FOR ftwrl';
|
||||
SELECT GET_LOCK("l1", 1000);
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
disconnect con1;
|
||||
connection default;
|
||||
SELECT RELEASE_LOCK("l1");
|
||||
RELEASE_LOCK("l1")
|
||||
1
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE t1;
|
||||
set debug_sync='reset';
|
36
mysql-test/main/deadlock_ftwrl.test
Normal file
36
mysql-test/main/deadlock_ftwrl.test
Normal file
@ -0,0 +1,36 @@
|
||||
# MDEV-20946 Hard FTWRL deadlock under user level locks
|
||||
#
|
||||
# Deadlock detector should resolve conflicts between FTWRL and user locks.
|
||||
|
||||
--source include/have_debug_sync.inc
|
||||
--source include/count_sessions.inc
|
||||
|
||||
CREATE TABLE t1(a INT);
|
||||
SELECT GET_LOCK("l1", 0);
|
||||
|
||||
connect(con1,localhost,root,,);
|
||||
LOCK TABLES t1 WRITE;
|
||||
|
||||
connection default;
|
||||
set debug_sync='mdl_acquire_lock_wait SIGNAL ftwrl';
|
||||
send FLUSH TABLES WITH READ LOCK;
|
||||
# At this point "default" is waiting for tables to be unlocked from
|
||||
# LOCK TABLES WRITE issued by "con1".
|
||||
|
||||
connection con1;
|
||||
set debug_sync='now WAIT_FOR ftwrl';
|
||||
# The lock in the following GET_LOCK cannot be acquired since "default" holds
|
||||
# a lock on "l1" and is waiting in FLUSH TABLES for con1.
|
||||
--error ER_LOCK_DEADLOCK
|
||||
SELECT GET_LOCK("l1", 1000);
|
||||
disconnect con1; # Performs an implicit UNLOCK TABLES.
|
||||
|
||||
connection default;
|
||||
reap;
|
||||
SELECT RELEASE_LOCK("l1");
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE t1;
|
||||
|
||||
set debug_sync='reset';
|
||||
|
||||
--source include/wait_until_count_sessions.inc
|
@ -565,7 +565,7 @@ create view v2 (c) as select a from t1 WITH LOCAL CHECK OPTION;
|
||||
create view v3 (c) as select a from t1 WITH CASCADED CHECK OPTION;
|
||||
select * from information_schema.views;
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION ALGORITHM
|
||||
def mysql user select `mysql`.`global_priv`.`Host` AS `Host`,`mysql`.`global_priv`.`User` AS `User`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,'N' AS `password_expired`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` from `mysql`.`global_priv` NONE YES mariadb.sys@localhost DEFINER latin1 latin1_swedish_ci UNDEFINED
|
||||
def mysql user select `mysql`.`global_priv`.`Host` AS `Host`,`mysql`.`global_priv`.`User` AS `User`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,if(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.password_last_changed'),1) = 0,'Y','N') AS `password_expired`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` from `mysql`.`global_priv` NONE YES mariadb.sys@localhost DEFINER latin1 latin1_swedish_ci UNDEFINED
|
||||
def test v1 select `test`.`t1`.`a` AS `c` from `test`.`t1` CASCADED YES root@localhost DEFINER latin1 latin1_swedish_ci UNDEFINED
|
||||
def test v2 select `test`.`t1`.`a` AS `c` from `test`.`t1` LOCAL YES root@localhost DEFINER latin1 latin1_swedish_ci UNDEFINED
|
||||
def test v3 select `test`.`t1`.`a` AS `c` from `test`.`t1` CASCADED YES root@localhost DEFINER latin1 latin1_swedish_ci UNDEFINED
|
||||
@ -2338,5 +2338,12 @@ count(*)
|
||||
2
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-24868 Server crashes in optimize_schema_tables_memory_usage after select from information_schema.innodb_sys_columns
|
||||
#
|
||||
create table t1 ( name varchar(64) character set utf8, len int);
|
||||
select * from t1 where (name, len) in (select name, len from information_schema.innodb_sys_columns having len = 8);
|
||||
name len
|
||||
drop table t1;
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
|
@ -2042,6 +2042,14 @@ INSERT INTO t1 VALUES ('2012-12-12'),('2021-11-11');
|
||||
SELECT count(*) FROM t1 AS t1a LEFT JOIN (t1 AS t1b JOIN INFORMATION_SCHEMA.ROUTINES) ON (t1b.a IS NULL);
|
||||
SELECT count(*) FROM t1 AS t1a LEFT JOIN (t1 AS t1b JOIN INFORMATION_SCHEMA.PROFILING) ON (t1b.a IS NULL);
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-24868 Server crashes in optimize_schema_tables_memory_usage after select from information_schema.innodb_sys_columns
|
||||
--echo #
|
||||
create table t1 ( name varchar(64) character set utf8, len int);
|
||||
select * from t1 where (name, len) in (select name, len from information_schema.innodb_sys_columns having len = 8);
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
--echo #
|
||||
|
@ -675,7 +675,7 @@ Phase 7/7: Running 'FLUSH PRIVILEGES'
|
||||
OK
|
||||
SHOW CREATE TABLE mysql.user;
|
||||
View Create View character_set_client collation_connection
|
||||
user CREATE ALGORITHM=UNDEFINED DEFINER=`mariadb.sys`@`localhost` SQL SECURITY DEFINER VIEW `mysql`.`user` AS select `mysql`.`global_priv`.`Host` AS `Host`,`mysql`.`global_priv`.`User` AS `User`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,'N' AS `password_expired`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` from `mysql`.`global_priv` latin1 latin1_swedish_ci
|
||||
user CREATE ALGORITHM=UNDEFINED DEFINER=`mariadb.sys`@`localhost` SQL SECURITY DEFINER VIEW `mysql`.`user` AS select `mysql`.`global_priv`.`Host` AS `Host`,`mysql`.`global_priv`.`User` AS `User`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,if(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.password_last_changed'),1) = 0,'Y','N') AS `password_expired`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` from `mysql`.`global_priv` latin1 latin1_swedish_ci
|
||||
CREATE ROLE `aRole`;
|
||||
SET ROLE `aRole`;
|
||||
FLUSH PRIVILEGES;
|
||||
@ -749,7 +749,7 @@ Phase 7/7: Running 'FLUSH PRIVILEGES'
|
||||
OK
|
||||
SHOW CREATE TABLE mysql.user;
|
||||
View Create View character_set_client collation_connection
|
||||
user CREATE ALGORITHM=UNDEFINED DEFINER=`mariadb.sys`@`localhost` SQL SECURITY DEFINER VIEW `mysql`.`user` AS select `mysql`.`global_priv`.`Host` AS `Host`,`mysql`.`global_priv`.`User` AS `User`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,'N' AS `password_expired`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` from `mysql`.`global_priv` latin1 latin1_swedish_ci
|
||||
user CREATE ALGORITHM=UNDEFINED DEFINER=`mariadb.sys`@`localhost` SQL SECURITY DEFINER VIEW `mysql`.`user` AS select `mysql`.`global_priv`.`Host` AS `Host`,`mysql`.`global_priv`.`User` AS `User`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,if(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.password_last_changed'),1) = 0,'Y','N') AS `password_expired`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` from `mysql`.`global_priv` latin1 latin1_swedish_ci
|
||||
CREATE ROLE `aRole`;
|
||||
SET DEFAULT ROLE aRole;
|
||||
SHOW GRANTS;
|
||||
|
@ -8554,8 +8554,19 @@ JSON_DETAILED(JSON_EXTRACT(trace, '$**.range_scan_alternatives'))
|
||||
]
|
||||
]
|
||||
DROP TABLE t1;
|
||||
set optimizer_trace='enabled=off';
|
||||
#
|
||||
# MDEV-24975 Server consumes extra 4G memory upon querying INFORMATION_SCHEMA.OPTIIMIZER_TRACE
|
||||
#
|
||||
set max_session_mem_used=1024*1024*1024;
|
||||
select count(*) from information_schema.optimizer_trace;
|
||||
select * from information_schema.optimizer_trace;
|
||||
set max_session_mem_used=default;
|
||||
#
|
||||
# End of 10.4 tests
|
||||
#
|
||||
set optimizer_trace='enabled=on';
|
||||
#
|
||||
# Test many rows to see output of big cost numbers
|
||||
#
|
||||
select count(*) from seq_1_to_10000000;
|
||||
|
@ -622,7 +622,23 @@ UPDATE t1 SET b=10 WHERE a=1;
|
||||
SELECT JSON_DETAILED(JSON_EXTRACT(trace, '$**.range_scan_alternatives')) from INFORMATION_SCHEMA.OPTIMIZER_TRACE;
|
||||
DROP TABLE t1;
|
||||
|
||||
set optimizer_trace='enabled=off';
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-24975 Server consumes extra 4G memory upon querying INFORMATION_SCHEMA.OPTIIMIZER_TRACE
|
||||
--echo #
|
||||
set max_session_mem_used=1024*1024*1024;
|
||||
--disable_result_log
|
||||
select count(*) from information_schema.optimizer_trace;
|
||||
select * from information_schema.optimizer_trace;
|
||||
--enable_result_log
|
||||
set max_session_mem_used=default;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.4 tests
|
||||
--echo #
|
||||
|
||||
set optimizer_trace='enabled=on';
|
||||
|
||||
--echo #
|
||||
--echo # Test many rows to see output of big cost numbers
|
||||
|
@ -62,7 +62,7 @@ db CREATE TABLE `db` (
|
||||
) ENGINE=Aria DEFAULT CHARSET=utf8 COLLATE=utf8_bin PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Database privileges'
|
||||
show create table user;
|
||||
View Create View character_set_client collation_connection
|
||||
user CREATE ALGORITHM=UNDEFINED DEFINER=`mariadb.sys`@`localhost` SQL SECURITY DEFINER VIEW `user` AS select `global_priv`.`Host` AS `Host`,`global_priv`.`User` AS `User`,if(json_value(`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,'N' AS `password_expired`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` from `global_priv` latin1 latin1_swedish_ci
|
||||
user CREATE ALGORITHM=UNDEFINED DEFINER=`mariadb.sys`@`localhost` SQL SECURITY DEFINER VIEW `user` AS select `global_priv`.`Host` AS `Host`,`global_priv`.`User` AS `User`,if(json_value(`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,if(ifnull(json_value(`global_priv`.`Priv`,'$.password_last_changed'),1) = 0,'Y','N') AS `password_expired`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` from `global_priv` latin1 latin1_swedish_ci
|
||||
show create table func;
|
||||
Table Create Table
|
||||
func CREATE TABLE `func` (
|
||||
|
@ -100,7 +100,7 @@ db CREATE TABLE `db` (
|
||||
) ENGINE=Aria DEFAULT CHARSET=utf8 COLLATE=utf8_bin PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Database privileges'
|
||||
show create table user;
|
||||
View Create View character_set_client collation_connection
|
||||
user CREATE ALGORITHM=UNDEFINED DEFINER=`mariadb.sys`@`localhost` SQL SECURITY DEFINER VIEW `user` AS select `global_priv`.`Host` AS `Host`,`global_priv`.`User` AS `User`,if(json_value(`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,'N' AS `password_expired`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` from `global_priv` latin1 latin1_swedish_ci
|
||||
user CREATE ALGORITHM=UNDEFINED DEFINER=`mariadb.sys`@`localhost` SQL SECURITY DEFINER VIEW `user` AS select `global_priv`.`Host` AS `Host`,`global_priv`.`User` AS `User`,if(json_value(`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,if(ifnull(json_value(`global_priv`.`Priv`,'$.password_last_changed'),1) = 0,'Y','N') AS `password_expired`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` from `global_priv` latin1 latin1_swedish_ci
|
||||
show create table func;
|
||||
Table Create Table
|
||||
func CREATE TABLE `func` (
|
||||
|
@ -104,7 +104,7 @@ db CREATE TABLE `db` (
|
||||
) ENGINE=Aria DEFAULT CHARSET=utf8 COLLATE=utf8_bin PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Database privileges'
|
||||
show create table user;
|
||||
View Create View character_set_client collation_connection
|
||||
user CREATE ALGORITHM=UNDEFINED DEFINER=`mariadb.sys`@`localhost` SQL SECURITY DEFINER VIEW `user` AS select `global_priv`.`Host` AS `Host`,`global_priv`.`User` AS `User`,if(json_value(`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,'N' AS `password_expired`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` from `global_priv` latin1 latin1_swedish_ci
|
||||
user CREATE ALGORITHM=UNDEFINED DEFINER=`mariadb.sys`@`localhost` SQL SECURITY DEFINER VIEW `user` AS select `global_priv`.`Host` AS `Host`,`global_priv`.`User` AS `User`,if(json_value(`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,if(ifnull(json_value(`global_priv`.`Priv`,'$.password_last_changed'),1) = 0,'Y','N') AS `password_expired`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` from `global_priv` latin1 latin1_swedish_ci
|
||||
show create table func;
|
||||
Table Create Table
|
||||
func CREATE TABLE `func` (
|
||||
|
@ -84,7 +84,7 @@ db CREATE TABLE `db` (
|
||||
) ENGINE=Aria DEFAULT CHARSET=utf8 COLLATE=utf8_bin PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Database privileges'
|
||||
show create table user;
|
||||
View Create View character_set_client collation_connection
|
||||
user CREATE ALGORITHM=UNDEFINED DEFINER=`mariadb.sys`@`localhost` SQL SECURITY DEFINER VIEW `user` AS select `global_priv`.`Host` AS `Host`,`global_priv`.`User` AS `User`,if(json_value(`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,'N' AS `password_expired`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` from `global_priv` latin1 latin1_swedish_ci
|
||||
user CREATE ALGORITHM=UNDEFINED DEFINER=`mariadb.sys`@`localhost` SQL SECURITY DEFINER VIEW `user` AS select `global_priv`.`Host` AS `Host`,`global_priv`.`User` AS `User`,if(json_value(`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,if(ifnull(json_value(`global_priv`.`Priv`,'$.password_last_changed'),1) = 0,'Y','N') AS `password_expired`,elt(ifnull(json_value(`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` from `global_priv` latin1 latin1_swedish_ci
|
||||
show create table func;
|
||||
Table Create Table
|
||||
func CREATE TABLE `func` (
|
||||
|
@ -75,7 +75,6 @@ CREATE DEFINER='superuser'@'localhost' SQL SECURITY DEFINER VIEW IF NOT EXISTS u
|
||||
CAST(IFNULL(JSON_VALUE(Priv, '$.max_statement_time'), 0.0) AS DECIMAL(12,6)) AS max_statement_time
|
||||
FROM global_priv;
|
||||
|
||||
|
||||
SET sql_mode='';
|
||||
|
||||
DROP PROCEDURE IF EXISTS mysql.AddGeometryColumn;
|
||||
|
@ -75,7 +75,6 @@ CREATE DEFINER='superuser'@'localhost' SQL SECURITY DEFINER VIEW IF NOT EXISTS u
|
||||
CAST(IFNULL(JSON_VALUE(Priv, '$.max_statement_time'), 0.0) AS DECIMAL(12,6)) AS max_statement_time
|
||||
FROM global_priv;
|
||||
|
||||
|
||||
DROP PROCEDURE IF EXISTS mysql.AddGeometryColumn;
|
||||
DROP PROCEDURE IF EXISTS mysql.DropGeometryColumn;
|
||||
|
||||
|
129
mysql-test/main/upgrade_mdev_24363.result
Normal file
129
mysql-test/main/upgrade_mdev_24363.result
Normal file
@ -0,0 +1,129 @@
|
||||
#
|
||||
# MDEV-24363 10.4: change definition of mysql.user view
|
||||
# to reflect the correct value from mysql.global_priv
|
||||
# This change was added because mysql.user view definition
|
||||
# was already changed when mariadb.sys was introduced, so
|
||||
# it's decently ok if we change it again to fix mdev-24363
|
||||
#
|
||||
# Test that mysql.user password_expired column
|
||||
# shows the right value as in mysql.global_priv
|
||||
#
|
||||
create user gigi@localhost;
|
||||
show create user gigi@localhost;
|
||||
CREATE USER for gigi@localhost
|
||||
CREATE USER `gigi`@`localhost`
|
||||
select password_expired from mysql.user where user='gigi' and host='localhost';
|
||||
password_expired
|
||||
N
|
||||
alter user gigi@localhost password expire;
|
||||
show create user gigi@localhost;
|
||||
CREATE USER for gigi@localhost
|
||||
CREATE USER `gigi`@`localhost` PASSWORD EXPIRE
|
||||
select password_expired from mysql.user where user='gigi' and host='localhost';
|
||||
password_expired
|
||||
Y
|
||||
drop user gigi@localhost;
|
||||
#
|
||||
# Test that upgrades from 10.4+ versions before this mdev
|
||||
# correctly drop and recreate the mysql.user view
|
||||
#
|
||||
use mysql;
|
||||
set @def = (select view_definition from information_schema.views where table_name='user' and table_schema='mysql');
|
||||
set @trimmed_def = (select trim(trailing 'from `mysql`.`global_priv`' from @def));
|
||||
set @newdef = (select concat(@trimmed_def, ", 'N' AS password_expired from mysql.global_priv"));
|
||||
set @pos = (select instr(@newdef, 'password_expired'));
|
||||
create or replace view user as select `mysql`.`global_priv`.`Host` AS `Host`,`mysql`.`global_priv`.`User` AS `User`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin') in ('mysql_native_password','mysql_old_password'),ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),''),'') AS `Password`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1,'Y','N') AS `Select_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2,'Y','N') AS `Insert_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4,'Y','N') AS `Update_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8,'Y','N') AS `Delete_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16,'Y','N') AS `Create_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32,'Y','N') AS `Drop_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 64,'Y','N') AS `Reload_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 128,'Y','N') AS `Shutdown_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 256,'Y','N') AS `Process_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 512,'Y','N') AS `File_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1024,'Y','N') AS `Grant_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2048,'Y','N') AS `References_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4096,'Y','N') AS `Index_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8192,'Y','N') AS `Alter_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16384,'Y','N') AS `Show_db_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 32768,'Y','N') AS `Super_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 65536,'Y','N') AS `Create_tmp_table_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 131072,'Y','N') AS `Lock_tables_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 262144,'Y','N') AS `Execute_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 524288,'Y','N') AS `Repl_slave_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 1048576,'Y','N') AS `Repl_client_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 2097152,'Y','N') AS `Create_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 4194304,'Y','N') AS `Show_view_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 8388608,'Y','N') AS `Create_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 16777216,'Y','N') AS `Alter_routine_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 33554432,'Y','N') AS `Create_user_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 67108864,'Y','N') AS `Event_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 134217728,'Y','N') AS `Trigger_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 268435456,'Y','N') AS `Create_tablespace_priv`,if(json_value(`mysql`.`global_priv`.`Priv`,'$.access') & 536870912,'Y','N') AS `Delete_history_priv`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_type'),0) + 1,'','ANY','X509','SPECIFIED') AS `ssl_type`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.ssl_cipher'),'') AS `ssl_cipher`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_issuer'),'') AS `x509_issuer`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.x509_subject'),'') AS `x509_subject`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_questions'),0) as unsigned) AS `max_questions`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_updates'),0) as unsigned) AS `max_updates`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_connections'),0) as unsigned) AS `max_connections`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_user_connections'),0) as signed) AS `max_user_connections`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.plugin'),'') AS `plugin`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.authentication_string'),'') AS `authentication_string`,if(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.password_last_changed'),1) = 0,'Y','N') AS `abcsword_expired`,elt(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.is_role'),0) + 1,'N','Y') AS `is_role`,ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.default_role'),'') AS `default_role`,cast(ifnull(json_value(`mysql`.`global_priv`.`Priv`,'$.max_statement_time'),0.0) as decimal(12,6)) AS `max_statement_time` , 'N' AS password_expired from mysql.global_priv;;
|
||||
create user gigi@localhost;
|
||||
show create user gigi@localhost;
|
||||
CREATE USER for gigi@localhost
|
||||
CREATE USER `gigi`@`localhost`
|
||||
select password_expired from mysql.user where user='gigi' and host='localhost';
|
||||
password_expired
|
||||
N
|
||||
alter user gigi@localhost password expire;
|
||||
show create user gigi@localhost;
|
||||
CREATE USER for gigi@localhost
|
||||
CREATE USER `gigi`@`localhost` PASSWORD EXPIRE
|
||||
select password_expired from mysql.user where user='gigi' and host='localhost';
|
||||
password_expired
|
||||
N
|
||||
drop user gigi@localhost;
|
||||
# Run mysql_upgrade
|
||||
Phase 1/7: Checking and upgrading mysql database
|
||||
Processing databases
|
||||
mysql
|
||||
mysql.column_stats OK
|
||||
mysql.columns_priv OK
|
||||
mysql.db OK
|
||||
mysql.event OK
|
||||
mysql.func OK
|
||||
mysql.global_priv OK
|
||||
mysql.gtid_slave_pos OK
|
||||
mysql.help_category OK
|
||||
mysql.help_keyword OK
|
||||
mysql.help_relation OK
|
||||
mysql.help_topic OK
|
||||
mysql.index_stats OK
|
||||
mysql.innodb_index_stats
|
||||
Error : Unknown storage engine 'InnoDB'
|
||||
error : Corrupt
|
||||
mysql.innodb_table_stats
|
||||
Error : Unknown storage engine 'InnoDB'
|
||||
error : Corrupt
|
||||
mysql.plugin OK
|
||||
mysql.proc OK
|
||||
mysql.procs_priv OK
|
||||
mysql.proxies_priv OK
|
||||
mysql.roles_mapping OK
|
||||
mysql.servers OK
|
||||
mysql.table_stats OK
|
||||
mysql.tables_priv OK
|
||||
mysql.time_zone OK
|
||||
mysql.time_zone_leap_second OK
|
||||
mysql.time_zone_name OK
|
||||
mysql.time_zone_transition OK
|
||||
mysql.time_zone_transition_type OK
|
||||
mysql.transaction_registry
|
||||
Error : Unknown storage engine 'InnoDB'
|
||||
error : Corrupt
|
||||
|
||||
Repairing tables
|
||||
mysql.innodb_index_stats
|
||||
Error : Unknown storage engine 'InnoDB'
|
||||
error : Corrupt
|
||||
mysql.innodb_table_stats
|
||||
Error : Unknown storage engine 'InnoDB'
|
||||
error : Corrupt
|
||||
mysql.transaction_registry
|
||||
Error : Unknown storage engine 'InnoDB'
|
||||
error : Corrupt
|
||||
Phase 2/7: Installing used storage engines... Skipped
|
||||
Phase 3/7: Fixing views
|
||||
mysql.user OK
|
||||
Phase 4/7: Running 'mysql_fix_privilege_tables'
|
||||
Phase 5/7: Fixing table and database names
|
||||
Phase 6/7: Checking and upgrading tables
|
||||
Processing databases
|
||||
information_schema
|
||||
mtr
|
||||
mtr.global_suppressions OK
|
||||
mtr.test_suppressions OK
|
||||
performance_schema
|
||||
test
|
||||
Phase 7/7: Running 'FLUSH PRIVILEGES'
|
||||
OK
|
||||
create user gigi@localhost;
|
||||
show create user gigi@localhost;
|
||||
CREATE USER for gigi@localhost
|
||||
CREATE USER `gigi`@`localhost`
|
||||
select password_expired from mysql.user where user='gigi' and host='localhost';
|
||||
password_expired
|
||||
N
|
||||
alter user gigi@localhost password expire;
|
||||
show create user gigi@localhost;
|
||||
CREATE USER for gigi@localhost
|
||||
CREATE USER `gigi`@`localhost` PASSWORD EXPIRE
|
||||
select password_expired from mysql.user where user='gigi' and host='localhost';
|
||||
password_expired
|
||||
Y
|
||||
drop user gigi@localhost;
|
71
mysql-test/main/upgrade_mdev_24363.test
Normal file
71
mysql-test/main/upgrade_mdev_24363.test
Normal file
@ -0,0 +1,71 @@
|
||||
--echo #
|
||||
--echo # MDEV-24363 10.4: change definition of mysql.user view
|
||||
--echo # to reflect the correct value from mysql.global_priv
|
||||
--echo # This change was added because mysql.user view definition
|
||||
--echo # was already changed when mariadb.sys was introduced, so
|
||||
--echo # it's decently ok if we change it again to fix mdev-24363
|
||||
|
||||
--echo #
|
||||
--echo # Test that mysql.user password_expired column
|
||||
--echo # shows the right value as in mysql.global_priv
|
||||
--echo #
|
||||
|
||||
create user gigi@localhost;
|
||||
show create user gigi@localhost;
|
||||
select password_expired from mysql.user where user='gigi' and host='localhost';
|
||||
|
||||
alter user gigi@localhost password expire;
|
||||
show create user gigi@localhost;
|
||||
select password_expired from mysql.user where user='gigi' and host='localhost';
|
||||
|
||||
drop user gigi@localhost;
|
||||
|
||||
--echo #
|
||||
--echo # Test that upgrades from 10.4+ versions before this mdev
|
||||
--echo # correctly drop and recreate the mysql.user view
|
||||
--echo #
|
||||
|
||||
--source include/mysql_upgrade_preparation.inc
|
||||
|
||||
use mysql;
|
||||
|
||||
# Do all these string operations to replace password_expired definition
|
||||
# with "'N' as password_expired" and avoid listing in one more test
|
||||
# all the fields of the user view
|
||||
set @def = (select view_definition from information_schema.views where table_name='user' and table_schema='mysql');
|
||||
set @trimmed_def = (select trim(trailing 'from `mysql`.`global_priv`' from @def));
|
||||
set @newdef = (select concat(@trimmed_def, ", 'N' AS password_expired from mysql.global_priv"));
|
||||
set @pos = (select instr(@newdef, 'password_expired'));
|
||||
let $viewdef = `select insert(@newdef, @pos, 3, 'abc')`;
|
||||
|
||||
--eval create or replace view user as $viewdef;
|
||||
|
||||
create user gigi@localhost;
|
||||
show create user gigi@localhost;
|
||||
select password_expired from mysql.user where user='gigi' and host='localhost';
|
||||
|
||||
# password should be expired, but mysql.user.password_expired should be 'N'
|
||||
alter user gigi@localhost password expire;
|
||||
show create user gigi@localhost;
|
||||
select password_expired from mysql.user where user='gigi' and host='localhost';
|
||||
|
||||
drop user gigi@localhost;
|
||||
|
||||
--echo # Run mysql_upgrade
|
||||
--exec $MYSQL_UPGRADE 2>&1
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
--file_exists $MYSQLD_DATADIR/mysql_upgrade_info
|
||||
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
|
||||
|
||||
create user gigi@localhost;
|
||||
show create user gigi@localhost;
|
||||
select password_expired from mysql.user where user='gigi' and host='localhost';
|
||||
|
||||
# mysql.user view should've been recreated by mariadb_upgrade, thus
|
||||
# password_expired should show 'Y'
|
||||
alter user gigi@localhost password expire;
|
||||
show create user gigi@localhost;
|
||||
select password_expired from mysql.user where user='gigi' and host='localhost';
|
||||
|
||||
drop user gigi@localhost;
|
||||
|
@ -1,108 +0,0 @@
|
||||
#
|
||||
# This include file is used by more than one test suite
|
||||
# (currently binlog and binlog_encryption).
|
||||
# Please check all dependent tests after modifying it
|
||||
#
|
||||
|
||||
#
|
||||
# === Name ===
|
||||
#
|
||||
# binlog_write_error.test
|
||||
#
|
||||
# === Description ===
|
||||
#
|
||||
# This test case check if the error of writing binlog file is properly
|
||||
# reported and handled when executing statements.
|
||||
#
|
||||
# === Related Bugs ===
|
||||
#
|
||||
# BUG#37148
|
||||
#
|
||||
|
||||
source include/have_log_bin.inc;
|
||||
source include/have_debug.inc;
|
||||
source include/have_binlog_format_mixed_or_statement.inc;
|
||||
|
||||
--echo #
|
||||
--echo # Initialization
|
||||
--echo #
|
||||
|
||||
disable_warnings;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
DROP FUNCTION IF EXISTS f2;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
DROP PROCEDURE IF EXISTS p2;
|
||||
DROP TRIGGER IF EXISTS tr1;
|
||||
DROP TRIGGER IF EXISTS tr2;
|
||||
DROP VIEW IF EXISTS v1, v2;
|
||||
enable_warnings;
|
||||
|
||||
--echo #
|
||||
--echo # Test injecting binlog write error when executing queries
|
||||
--echo #
|
||||
|
||||
let $query= CREATE TABLE t1 (a INT);
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
|
||||
let $query= INSERT INTO t1 VALUES (4),(5),(6);
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= UPDATE t1 set a=a+1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= DELETE FROM t1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= CREATE TRIGGER tr1 AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t1 VALUES (new.a + 100);
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= DROP TRIGGER tr1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= ALTER TABLE t1 ADD (b INT);
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= CREATE VIEW v1 AS SELECT a FROM t1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= DROP VIEW v1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= CREATE PROCEDURE p1(OUT rows_cnt INT) SELECT count(*) INTO rows_cnt FROM t1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= DROP PROCEDURE p1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= DROP TABLE t1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= CREATE FUNCTION f1() RETURNS INT return 1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= DROP FUNCTION f1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= CREATE USER user1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= REVOKE ALL PRIVILEGES, GRANT OPTION FROM user1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= DROP USER user1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
--echo #
|
||||
--echo # Cleanup
|
||||
--echo #
|
||||
|
||||
disable_warnings;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
DROP TRIGGER IF EXISTS tr1;
|
||||
DROP VIEW IF EXISTS v1, v2;
|
||||
enable_warnings;
|
@ -1,15 +1,4 @@
|
||||
#
|
||||
# Initialization
|
||||
#
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
DROP FUNCTION IF EXISTS f2;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
DROP PROCEDURE IF EXISTS p2;
|
||||
DROP TRIGGER IF EXISTS tr1;
|
||||
DROP TRIGGER IF EXISTS tr2;
|
||||
DROP VIEW IF EXISTS v1, v2;
|
||||
#
|
||||
# Test injecting binlog write error when executing queries
|
||||
#
|
||||
set @saved_dbug = @@global.debug_dbug;
|
||||
@ -111,15 +100,13 @@ ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
set @@global.debug_dbug = @saved_dbug;
|
||||
set @saved_dbug = @@global.debug_dbug;
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
SET PASSWORD FOR user1=PASSWORD('foobar');
|
||||
SET PASSWORD FOR user1=PASSWORD('foobar');
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
set @@global.debug_dbug = @saved_dbug;
|
||||
set @saved_dbug = @@global.debug_dbug;
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
DROP USER user1;
|
||||
DROP USER user1;
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
set @@global.debug_dbug = @saved_dbug;
|
||||
#
|
||||
# Cleanup
|
||||
#
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
DROP TRIGGER IF EXISTS tr1;
|
||||
DROP VIEW IF EXISTS v1, v2;
|
||||
|
@ -1 +1,82 @@
|
||||
--source include/binlog_write_error.inc
|
||||
#
|
||||
# This file is included by binlog_encryption.binlog_write_error
|
||||
# Please check all dependent tests after modifying it
|
||||
#
|
||||
|
||||
#
|
||||
# === Name ===
|
||||
#
|
||||
# binlog_write_error.test
|
||||
#
|
||||
# === Description ===
|
||||
#
|
||||
# This test case check if the error of writing binlog file is properly
|
||||
# reported and handled when executing statements.
|
||||
#
|
||||
# === Related Bugs ===
|
||||
#
|
||||
# BUG#37148
|
||||
#
|
||||
|
||||
source include/have_debug.inc;
|
||||
source include/have_binlog_format_mixed_or_statement.inc;
|
||||
|
||||
--echo #
|
||||
--echo # Test injecting binlog write error when executing queries
|
||||
--echo #
|
||||
|
||||
let $query= CREATE TABLE t1 (a INT);
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
|
||||
let $query= INSERT INTO t1 VALUES (4),(5),(6);
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= UPDATE t1 set a=a+1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= DELETE FROM t1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= CREATE TRIGGER tr1 AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t1 VALUES (new.a + 100);
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= DROP TRIGGER tr1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= ALTER TABLE t1 ADD (b INT);
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= CREATE VIEW v1 AS SELECT a FROM t1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= DROP VIEW v1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= CREATE PROCEDURE p1(OUT rows_cnt INT) SELECT count(*) INTO rows_cnt FROM t1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= DROP PROCEDURE p1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= DROP TABLE t1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= CREATE FUNCTION f1() RETURNS INT return 1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= DROP FUNCTION f1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= CREATE USER user1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= REVOKE ALL PRIVILEGES, GRANT OPTION FROM user1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= SET PASSWORD FOR user1=PASSWORD('foobar');
|
||||
source include/binlog_inject_error.inc;
|
||||
|
||||
let $query= DROP USER user1;
|
||||
source include/binlog_inject_error.inc;
|
||||
|
@ -1,15 +1,4 @@
|
||||
#
|
||||
# Initialization
|
||||
#
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
DROP FUNCTION IF EXISTS f2;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
DROP PROCEDURE IF EXISTS p2;
|
||||
DROP TRIGGER IF EXISTS tr1;
|
||||
DROP TRIGGER IF EXISTS tr2;
|
||||
DROP VIEW IF EXISTS v1, v2;
|
||||
#
|
||||
# Test injecting binlog write error when executing queries
|
||||
#
|
||||
set @saved_dbug = @@global.debug_dbug;
|
||||
@ -111,15 +100,13 @@ ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
set @@global.debug_dbug = @saved_dbug;
|
||||
set @saved_dbug = @@global.debug_dbug;
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
SET PASSWORD FOR user1=PASSWORD('foobar');
|
||||
SET PASSWORD FOR user1=PASSWORD('foobar');
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
set @@global.debug_dbug = @saved_dbug;
|
||||
set @saved_dbug = @@global.debug_dbug;
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
DROP USER user1;
|
||||
DROP USER user1;
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
set @@global.debug_dbug = @saved_dbug;
|
||||
#
|
||||
# Cleanup
|
||||
#
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
DROP TRIGGER IF EXISTS tr1;
|
||||
DROP VIEW IF EXISTS v1, v2;
|
||||
|
@ -1 +1 @@
|
||||
--source suite/binlog/include/binlog_write_error.inc
|
||||
--source suite/binlog/t/binlog_write_error.test
|
||||
|
@ -8,6 +8,8 @@ SET GLOBAL innodb_encrypt_tables = ON;
|
||||
SET GLOBAL innodb_encryption_threads = 4;
|
||||
call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_(crc32|none|innodb)\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"(innodb|none|crc32)\"");
|
||||
SET GLOBAL innodb_checksum_algorithm = innodb;
|
||||
Warnings:
|
||||
Warning 138 Setting innodb_checksum_algorithm to values other than crc32, full_crc32, strict_crc32 or strict_full_crc32 is UNSAFE and DEPRECATED. These deprecated values will be disallowed in MariaDB 10.6.
|
||||
SET GLOBAL innodb_default_encryption_key_id=4;
|
||||
SET GLOBAL innodb_checksum_algorithm=crc32;
|
||||
create table tce_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||
@ -90,6 +92,8 @@ update tpe_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tp_crc32 IMPORT TABLESPACE;
|
||||
update tp_crc32 set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=innodb;
|
||||
Warnings:
|
||||
Warning 138 Setting innodb_checksum_algorithm to values other than crc32, full_crc32, strict_crc32 or strict_full_crc32 is UNSAFE and DEPRECATED. These deprecated values will be disallowed in MariaDB 10.6.
|
||||
ALTER TABLE tce_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE te_crc32 DISCARD TABLESPACE;
|
||||
@ -115,6 +119,8 @@ update tpe_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tp_crc32 IMPORT TABLESPACE;
|
||||
update tp_crc32 set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=none;
|
||||
Warnings:
|
||||
Warning 138 Setting innodb_checksum_algorithm to values other than crc32, full_crc32, strict_crc32 or strict_full_crc32 is UNSAFE and DEPRECATED. These deprecated values will be disallowed in MariaDB 10.6.
|
||||
ALTER TABLE tce_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE te_crc32 DISCARD TABLESPACE;
|
||||
@ -151,6 +157,8 @@ test.tp_crc32 check status OK
|
||||
DROP TABLE tce_crc32, tc_crc32, te_crc32,
|
||||
t_crc32, tpe_crc32, tp_crc32;
|
||||
SET GLOBAL innodb_checksum_algorithm=innodb;
|
||||
Warnings:
|
||||
Warning 138 Setting innodb_checksum_algorithm to values other than crc32, full_crc32, strict_crc32 or strict_full_crc32 is UNSAFE and DEPRECATED. These deprecated values will be disallowed in MariaDB 10.6.
|
||||
create table tce_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
ROW_FORMAT=COMPRESSED encrypted=yes;
|
||||
create table tc_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
@ -231,6 +239,8 @@ update tpe_innodb set b=substr(b,1);
|
||||
ALTER TABLE tp_innodb IMPORT TABLESPACE;
|
||||
update tp_innodb set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=innodb;
|
||||
Warnings:
|
||||
Warning 138 Setting innodb_checksum_algorithm to values other than crc32, full_crc32, strict_crc32 or strict_full_crc32 is UNSAFE and DEPRECATED. These deprecated values will be disallowed in MariaDB 10.6.
|
||||
ALTER TABLE tce_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE te_innodb DISCARD TABLESPACE;
|
||||
@ -256,6 +266,8 @@ update tpe_innodb set b=substr(b,1);
|
||||
ALTER TABLE tp_innodb IMPORT TABLESPACE;
|
||||
update tp_innodb set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=none;
|
||||
Warnings:
|
||||
Warning 138 Setting innodb_checksum_algorithm to values other than crc32, full_crc32, strict_crc32 or strict_full_crc32 is UNSAFE and DEPRECATED. These deprecated values will be disallowed in MariaDB 10.6.
|
||||
ALTER TABLE tce_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE te_innodb DISCARD TABLESPACE;
|
||||
@ -292,6 +304,8 @@ test.tp_innodb check status OK
|
||||
DROP TABLE tce_innodb, tc_innodb, te_innodb,
|
||||
t_innodb, tpe_innodb, tp_innodb;
|
||||
SET GLOBAL innodb_checksum_algorithm=none;
|
||||
Warnings:
|
||||
Warning 138 Setting innodb_checksum_algorithm to values other than crc32, full_crc32, strict_crc32 or strict_full_crc32 is UNSAFE and DEPRECATED. These deprecated values will be disallowed in MariaDB 10.6.
|
||||
create table tce_none(a serial, b blob, index(b(10))) engine=innodb
|
||||
ROW_FORMAT=COMPRESSED encrypted=yes;
|
||||
create table tc_none(a serial, b blob, index(b(10))) engine=innodb
|
||||
@ -372,6 +386,8 @@ update tpe_none set b=substr(b,1);
|
||||
ALTER TABLE tp_none IMPORT TABLESPACE;
|
||||
update tp_none set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=innodb;
|
||||
Warnings:
|
||||
Warning 138 Setting innodb_checksum_algorithm to values other than crc32, full_crc32, strict_crc32 or strict_full_crc32 is UNSAFE and DEPRECATED. These deprecated values will be disallowed in MariaDB 10.6.
|
||||
ALTER TABLE tce_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_none DISCARD TABLESPACE;
|
||||
ALTER TABLE te_none DISCARD TABLESPACE;
|
||||
@ -397,6 +413,8 @@ update tpe_none set b=substr(b,1);
|
||||
ALTER TABLE tp_none IMPORT TABLESPACE;
|
||||
update tp_none set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=none;
|
||||
Warnings:
|
||||
Warning 138 Setting innodb_checksum_algorithm to values other than crc32, full_crc32, strict_crc32 or strict_full_crc32 is UNSAFE and DEPRECATED. These deprecated values will be disallowed in MariaDB 10.6.
|
||||
ALTER TABLE tce_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_none DISCARD TABLESPACE;
|
||||
ALTER TABLE te_none DISCARD TABLESPACE;
|
||||
|
@ -2877,3 +2877,16 @@ t1 CREATE TABLE `t1` (
|
||||
KEY `i1` (`a`) COMMENT 'comment2'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-25057 Assertion `n_fields < dtuple_get_n_fields(entry)'
|
||||
# failed in dtuple_convert_big_rec
|
||||
#
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT,
|
||||
a CHAR(255) NOT NULL,
|
||||
b CHAR(255) NOT NULL, c INT) ENGINE=InnoDB CHARSET utf32;
|
||||
ALTER TABLE t1 DROP c;
|
||||
INSERT INTO t1(a, b) SELECT '', '' FROM seq_1_to_16;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
16
|
||||
DROP TABLE t1;
|
||||
|
@ -1,4 +1,5 @@
|
||||
--source include/innodb_page_size.inc
|
||||
--source include/have_sequence.inc
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-11369: Instant ADD COLUMN for InnoDB
|
||||
@ -915,3 +916,16 @@ CREATE INDEX i1 ON t1(a) COMMENT 'comment1';
|
||||
ALTER TABLE t1 DROP INDEX i1, ADD INDEX i1(a) COMMENT 'comment2', ALGORITHM=INSTANT;
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25057 Assertion `n_fields < dtuple_get_n_fields(entry)'
|
||||
--echo # failed in dtuple_convert_big_rec
|
||||
--echo #
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT,
|
||||
a CHAR(255) NOT NULL,
|
||||
b CHAR(255) NOT NULL, c INT) ENGINE=InnoDB CHARSET utf32;
|
||||
ALTER TABLE t1 DROP c;
|
||||
INSERT INTO t1(a, b) SELECT '', '' FROM seq_1_to_16;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
# Cleanup
|
||||
DROP TABLE t1;
|
||||
|
@ -689,3 +689,17 @@ FTS_DOC_ID t
|
||||
2 foo bar
|
||||
3 foo
|
||||
DROP TABLE t;
|
||||
#
|
||||
# MDEV-25070 SIGSEGV in fts_create_in_mem_aux_table
|
||||
#
|
||||
CREATE TABLE t1 (a CHAR, FULLTEXT KEY(a)) ENGINE=InnoDB;
|
||||
ALTER TABLE t1 DISCARD TABLESPACE;
|
||||
ALTER TABLE t1 ADD FULLTEXT INDEX (a);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` char(1) DEFAULT NULL,
|
||||
FULLTEXT KEY `a` (`a`),
|
||||
FULLTEXT KEY `a_2` (`a`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
|
@ -717,3 +717,14 @@ while ($N)
|
||||
}
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25070 SIGSEGV in fts_create_in_mem_aux_table
|
||||
--echo #
|
||||
CREATE TABLE t1 (a CHAR, FULLTEXT KEY(a)) ENGINE=InnoDB;
|
||||
--disable_warnings
|
||||
ALTER TABLE t1 DISCARD TABLESPACE;
|
||||
ALTER TABLE t1 ADD FULLTEXT INDEX (a);
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
--enable_warnings
|
||||
|
@ -11,18 +11,26 @@ SELECT @@global.innodb_checksum_algorithm;
|
||||
@@global.innodb_checksum_algorithm
|
||||
strict_crc32
|
||||
SET GLOBAL innodb_checksum_algorithm = 'innodb';
|
||||
Warnings:
|
||||
Warning 138 Setting innodb_checksum_algorithm to values other than crc32, full_crc32, strict_crc32 or strict_full_crc32 is UNSAFE and DEPRECATED. These deprecated values will be disallowed in MariaDB 10.6.
|
||||
SELECT @@global.innodb_checksum_algorithm;
|
||||
@@global.innodb_checksum_algorithm
|
||||
innodb
|
||||
SET GLOBAL innodb_checksum_algorithm = 'strict_innodb';
|
||||
Warnings:
|
||||
Warning 138 Setting innodb_checksum_algorithm to values other than crc32, full_crc32, strict_crc32 or strict_full_crc32 is UNSAFE and DEPRECATED. These deprecated values will be disallowed in MariaDB 10.6.
|
||||
SELECT @@global.innodb_checksum_algorithm;
|
||||
@@global.innodb_checksum_algorithm
|
||||
strict_innodb
|
||||
SET GLOBAL innodb_checksum_algorithm = 'none';
|
||||
Warnings:
|
||||
Warning 138 Setting innodb_checksum_algorithm to values other than crc32, full_crc32, strict_crc32 or strict_full_crc32 is UNSAFE and DEPRECATED. These deprecated values will be disallowed in MariaDB 10.6.
|
||||
SELECT @@global.innodb_checksum_algorithm;
|
||||
@@global.innodb_checksum_algorithm
|
||||
none
|
||||
SET GLOBAL innodb_checksum_algorithm = 'strict_none';
|
||||
Warnings:
|
||||
Warning 138 Setting innodb_checksum_algorithm to values other than crc32, full_crc32, strict_crc32 or strict_full_crc32 is UNSAFE and DEPRECATED. These deprecated values will be disallowed in MariaDB 10.6.
|
||||
SELECT @@global.innodb_checksum_algorithm;
|
||||
@@global.innodb_checksum_algorithm
|
||||
strict_none
|
||||
|
@ -93,7 +93,7 @@ CREATE DEFINER='mariadb.sys'@'localhost' SQL SECURITY DEFINER VIEW IF NOT EXISTS
|
||||
CAST(IFNULL(JSON_VALUE(Priv, '$.max_user_connections'), 0) AS SIGNED) AS max_user_connections,
|
||||
IFNULL(JSON_VALUE(Priv, '$.plugin'), '') AS plugin,
|
||||
IFNULL(JSON_VALUE(Priv, '$.authentication_string'), '') AS authentication_string,
|
||||
'N' AS password_expired,
|
||||
IF(IFNULL(JSON_VALUE(Priv, '$.password_last_changed'), 1) = 0, 'Y', 'N') AS password_expired,
|
||||
ELT(IFNULL(JSON_VALUE(Priv, '$.is_role'), 0) + 1, 'N', 'Y') AS is_role,
|
||||
IFNULL(JSON_VALUE(Priv, '$.default_role'), '') AS default_role,
|
||||
CAST(IFNULL(JSON_VALUE(Priv, '$.max_statement_time'), 0.0) AS DECIMAL(12,6)) AS max_statement_time
|
||||
|
@ -824,7 +824,7 @@ IF 'BASE TABLE' = (select table_type from information_schema.tables where table_
|
||||
DROP TABLE user;
|
||||
END IF//
|
||||
|
||||
IF 1 = (SELECT count(*) FROM information_schema.VIEWS WHERE TABLE_CATALOG = 'def' and TABLE_SCHEMA = 'mysql' and TABLE_NAME='user' and DEFINER = 'root@localhost') THEN
|
||||
IF 1 = (SELECT count(*) FROM information_schema.VIEWS WHERE TABLE_CATALOG = 'def' and TABLE_SCHEMA = 'mysql' and TABLE_NAME='user' and (DEFINER = 'root@localhost' or (DEFINER = 'mariadb.sys@localhost' and VIEW_DEFINITION LIKE "%'N' AS `password_expired`%"))) THEN
|
||||
DROP VIEW IF EXISTS mysql.user;
|
||||
END IF//
|
||||
|
||||
|
@ -2787,6 +2787,7 @@ void MDL_context::find_deadlock()
|
||||
context was waiting is concurrently satisfied.
|
||||
*/
|
||||
(void) victim->m_wait.set_status(MDL_wait::VICTIM);
|
||||
victim->inc_deadlock_overweight();
|
||||
victim->unlock_deadlock_victim();
|
||||
|
||||
if (victim == this)
|
||||
|
@ -929,7 +929,8 @@ public:
|
||||
|
||||
/** @pre Only valid if we started waiting for lock. */
|
||||
inline uint get_deadlock_weight() const
|
||||
{ return m_waiting_for->get_deadlock_weight(); }
|
||||
{ return m_waiting_for->get_deadlock_weight() + m_deadlock_overweight; }
|
||||
void inc_deadlock_overweight() { m_deadlock_overweight++; }
|
||||
/**
|
||||
Post signal to the context (and wake it up if necessary).
|
||||
|
||||
@ -1047,6 +1048,7 @@ private:
|
||||
*/
|
||||
MDL_wait_for_subgraph *m_waiting_for;
|
||||
LF_PINS *m_pins;
|
||||
uint m_deadlock_overweight= 0;
|
||||
private:
|
||||
MDL_ticket *find_ticket(MDL_request *mdl_req,
|
||||
enum_mdl_duration *duration);
|
||||
|
@ -3924,7 +3924,7 @@ bool change_password(THD *thd, LEX_USER *user)
|
||||
char buff[512];
|
||||
ulong query_length= 0;
|
||||
enum_binlog_format save_binlog_format;
|
||||
int result=0;
|
||||
bool result= false, acl_cache_is_locked= false;
|
||||
ACL_USER *acl_user;
|
||||
ACL_USER::AUTH auth;
|
||||
const char *password_plugin= 0;
|
||||
@ -3949,7 +3949,7 @@ bool change_password(THD *thd, LEX_USER *user)
|
||||
if ((result= tables.open_and_lock(thd, Table_user, TL_WRITE)))
|
||||
DBUG_RETURN(result != 1);
|
||||
|
||||
result= 1;
|
||||
acl_cache_is_locked= 1;
|
||||
mysql_mutex_lock(&acl_cache->lock);
|
||||
|
||||
if (!(acl_user= find_user_exact(user->host.str, user->user.str)))
|
||||
@ -4002,7 +4002,7 @@ bool change_password(THD *thd, LEX_USER *user)
|
||||
|
||||
acl_cache->clear(1); // Clear locked hostname cache
|
||||
mysql_mutex_unlock(&acl_cache->lock);
|
||||
result= 0;
|
||||
result= acl_cache_is_locked= 0;
|
||||
if (mysql_bin_log.is_open())
|
||||
{
|
||||
query_length= sprintf(buff, "SET PASSWORD FOR '%-.120s'@'%-.120s'='%-.120s'",
|
||||
@ -4013,7 +4013,7 @@ bool change_password(THD *thd, LEX_USER *user)
|
||||
FALSE, FALSE, FALSE, 0) > 0;
|
||||
}
|
||||
end:
|
||||
if (result)
|
||||
if (acl_cache_is_locked)
|
||||
mysql_mutex_unlock(&acl_cache->lock);
|
||||
close_mysql_tables(thd);
|
||||
|
||||
|
@ -8492,14 +8492,19 @@ end:
|
||||
|
||||
bool optimize_schema_tables_memory_usage(List<TABLE_LIST> &tables)
|
||||
{
|
||||
DBUG_ENTER("optimize_schema_tables_memory_usage");
|
||||
|
||||
List_iterator<TABLE_LIST> tli(tables);
|
||||
|
||||
while (TABLE_LIST *table_list= tli++)
|
||||
{
|
||||
if (!table_list->schema_table)
|
||||
continue;
|
||||
|
||||
TABLE *table= table_list->table;
|
||||
THD *thd=table->in_use;
|
||||
|
||||
if (!table_list->schema_table || !thd->fill_information_schema_tables())
|
||||
if (!thd->fill_information_schema_tables())
|
||||
continue;
|
||||
|
||||
if (!table->is_created())
|
||||
@ -8539,6 +8544,7 @@ bool optimize_schema_tables_memory_usage(List<TABLE_LIST> &tables)
|
||||
{
|
||||
/* all fields were optimized away. Force a non-0-length row */
|
||||
table->s->reclength= to_recinfo->length= 1;
|
||||
to_recinfo->type= FIELD_NORMAL;
|
||||
to_recinfo++;
|
||||
}
|
||||
p->recinfo= to_recinfo;
|
||||
@ -8546,10 +8552,10 @@ bool optimize_schema_tables_memory_usage(List<TABLE_LIST> &tables)
|
||||
// TODO switch from Aria to Memory if all blobs were optimized away?
|
||||
if (instantiate_tmp_table(table, p->keyinfo, p->start_recinfo, &p->recinfo,
|
||||
table_list->select_lex->options | thd->variables.option_bits))
|
||||
return 1;
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -4435,7 +4435,7 @@ n_field_mismatch:
|
||||
ulint extern_len = mach_read_from_4(
|
||||
data + len + BTR_EXTERN_LEN + 4);
|
||||
if (fixed_size == extern_len) {
|
||||
continue;
|
||||
goto next_field;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4470,7 +4470,7 @@ len_mismatch:
|
||||
}
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
next_field:
|
||||
field++;
|
||||
}
|
||||
|
||||
|
@ -688,7 +688,7 @@ dtuple_convert_big_rec(
|
||||
goto skip_field;
|
||||
}
|
||||
|
||||
longest_i = i;
|
||||
longest_i = i + mblob;
|
||||
longest = savings;
|
||||
|
||||
skip_field:
|
||||
|
@ -1717,7 +1717,7 @@ fts_create_in_mem_aux_table(
|
||||
dict_table_t* new_table = dict_mem_table_create(
|
||||
aux_table_name, NULL, n_cols, 0, table->flags,
|
||||
table->space_id == TRX_SYS_SPACE
|
||||
? 0 : table->space->purpose == FIL_TYPE_TEMPORARY
|
||||
? 0 : table->space_id == SRV_TMP_SPACE_ID
|
||||
? DICT_TF2_TEMPORARY : DICT_TF2_USE_FILE_PER_TABLE);
|
||||
|
||||
if (DICT_TF_HAS_DATA_DIR(table->flags)) {
|
||||
|
@ -3112,6 +3112,29 @@ static int innodb_init_abort()
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
static const char* deprecated_innodb_checksum_algorithm
|
||||
= "Setting innodb_checksum_algorithm to values other than"
|
||||
" crc32, full_crc32, strict_crc32 or strict_full_crc32"
|
||||
" is UNSAFE and DEPRECATED."
|
||||
" These deprecated values will be disallowed in MariaDB 10.6.";
|
||||
|
||||
static void innodb_checksum_algorithm_update(THD *thd, st_mysql_sys_var*,
|
||||
void *, const void *save)
|
||||
{
|
||||
srv_checksum_algorithm= *static_cast<const ulong*>(save);
|
||||
switch (srv_checksum_algorithm) {
|
||||
case SRV_CHECKSUM_ALGORITHM_CRC32:
|
||||
case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32:
|
||||
case SRV_CHECKSUM_ALGORITHM_FULL_CRC32:
|
||||
case SRV_CHECKSUM_ALGORITHM_STRICT_FULL_CRC32:
|
||||
break;
|
||||
default:
|
||||
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
|
||||
HA_ERR_UNSUPPORTED,
|
||||
deprecated_innodb_checksum_algorithm);
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************//**
|
||||
Gives the file extension of an InnoDB single-table tablespace. */
|
||||
static const char* ha_innobase_exts[] = {
|
||||
@ -3680,6 +3703,16 @@ static int innodb_init_params()
|
||||
|
||||
srv_buf_pool_size = ulint(innobase_buffer_pool_size);
|
||||
|
||||
switch (srv_checksum_algorithm) {
|
||||
case SRV_CHECKSUM_ALGORITHM_CRC32:
|
||||
case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32:
|
||||
case SRV_CHECKSUM_ALGORITHM_FULL_CRC32:
|
||||
case SRV_CHECKSUM_ALGORITHM_STRICT_FULL_CRC32:
|
||||
break;
|
||||
default:
|
||||
ib::warn() << deprecated_innodb_checksum_algorithm;
|
||||
}
|
||||
|
||||
row_rollback_on_timeout = (ibool) innobase_rollback_on_timeout;
|
||||
|
||||
if (innobase_open_files < 10) {
|
||||
@ -18926,7 +18959,7 @@ static MYSQL_SYSVAR_ENUM(checksum_algorithm, srv_checksum_algorithm,
|
||||
" Files updated when this option is set to crc32 or strict_crc32 will"
|
||||
" not be readable by MariaDB versions older than 10.0.4;"
|
||||
" new files created with full_crc32 are readable by MariaDB 10.4.3+",
|
||||
NULL, NULL, SRV_CHECKSUM_ALGORITHM_FULL_CRC32,
|
||||
NULL, innodb_checksum_algorithm_update, SRV_CHECKSUM_ALGORITHM_FULL_CRC32,
|
||||
&innodb_checksum_algorithm_typelib);
|
||||
|
||||
/** Description of deprecated and ignored parameters */
|
||||
|
@ -232,15 +232,16 @@ my_bool _ma_bitmap_init(MARIA_SHARE *share, File file,
|
||||
uint max_page_size;
|
||||
MARIA_FILE_BITMAP *bitmap= &share->bitmap;
|
||||
uint size= share->block_size;
|
||||
myf flag= MY_WME | (share->temporary ? MY_THREAD_SPECIFIC : 0);
|
||||
pgcache_page_no_t first_bitmap_with_space;
|
||||
#ifndef DBUG_OFF
|
||||
/* We want to have a copy of the bitmap to be able to print differences */
|
||||
size*= 2;
|
||||
#endif
|
||||
|
||||
if (!((bitmap->map= (uchar*) my_malloc(PSI_INSTRUMENT_ME, size, MYF(MY_WME)))) ||
|
||||
if (!((bitmap->map= (uchar*) my_malloc(PSI_INSTRUMENT_ME, size, flag))) ||
|
||||
my_init_dynamic_array(PSI_INSTRUMENT_ME, &bitmap->pinned_pages,
|
||||
sizeof(MARIA_PINNED_PAGE), 1, 1, MYF(0)))
|
||||
sizeof(MARIA_PINNED_PAGE), 1, 1, flag))
|
||||
return 1;
|
||||
|
||||
bitmap->share= share;
|
||||
|
@ -488,10 +488,11 @@ my_bool _ma_init_block_record(MARIA_HA *info)
|
||||
{
|
||||
MARIA_ROW *row= &info->cur_row, *new_row= &info->new_row;
|
||||
MARIA_SHARE *share= info->s;
|
||||
myf flag= MY_WME | (share->temporary ? MY_THREAD_SPECIFIC : 0);
|
||||
uint default_extents;
|
||||
DBUG_ENTER("_ma_init_block_record");
|
||||
|
||||
if (!my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
|
||||
if (!my_multi_malloc(PSI_INSTRUMENT_ME, flag,
|
||||
&row->empty_bits, share->base.pack_bytes,
|
||||
&row->field_lengths,
|
||||
share->base.max_field_lengths + 2,
|
||||
@ -531,13 +532,13 @@ my_bool _ma_init_block_record(MARIA_HA *info)
|
||||
BLOB_SEGMENT_MIN_SIZE));
|
||||
|
||||
if (my_init_dynamic_array(PSI_INSTRUMENT_ME, &info->bitmap_blocks,
|
||||
sizeof(MARIA_BITMAP_BLOCK), default_extents,
|
||||
64, MYF(0)))
|
||||
sizeof(MARIA_BITMAP_BLOCK),
|
||||
default_extents, 64, flag))
|
||||
goto err;
|
||||
info->cur_row.extents_buffer_length= default_extents * ROW_EXTENT_SIZE;
|
||||
if (!(info->cur_row.extents= my_malloc(PSI_INSTRUMENT_ME,
|
||||
info->cur_row.extents_buffer_length,
|
||||
MYF(MY_WME))))
|
||||
flag)))
|
||||
goto err;
|
||||
|
||||
info->row_base_length= share->base_length;
|
||||
@ -2647,6 +2648,7 @@ static my_bool write_block_record(MARIA_HA *info,
|
||||
LSN lsn;
|
||||
my_off_t position;
|
||||
uint save_my_errno;
|
||||
myf myflag= MY_WME | (share->temporary ? MY_THREAD_SPECIFIC : 0);
|
||||
DBUG_ENTER("write_block_record");
|
||||
|
||||
head_block= bitmap_blocks->block;
|
||||
@ -2713,7 +2715,7 @@ static my_bool write_block_record(MARIA_HA *info,
|
||||
for every data segment we want to store.
|
||||
*/
|
||||
if (_ma_alloc_buffer(&info->rec_buff, &info->rec_buff_size,
|
||||
row->head_length))
|
||||
row->head_length, myflag))
|
||||
DBUG_RETURN(1);
|
||||
|
||||
tmp_data_used= 0; /* Either 0 or last used uchar in 'data' */
|
||||
@ -4732,6 +4734,7 @@ int _ma_read_block_record2(MARIA_HA *info, uchar *record,
|
||||
MARIA_EXTENT_CURSOR extent;
|
||||
MARIA_COLUMNDEF *column, *end_column;
|
||||
MARIA_ROW *cur_row= &info->cur_row;
|
||||
myf myflag= MY_WME | (share->temporary ? MY_THREAD_SPECIFIC : 0);
|
||||
DBUG_ENTER("_ma_read_block_record2");
|
||||
|
||||
start_of_data= data;
|
||||
@ -4777,7 +4780,7 @@ int _ma_read_block_record2(MARIA_HA *info, uchar *record,
|
||||
if (cur_row->extents_buffer_length < row_extent_size &&
|
||||
_ma_alloc_buffer(&cur_row->extents,
|
||||
&cur_row->extents_buffer_length,
|
||||
row_extent_size))
|
||||
row_extent_size, myflag))
|
||||
DBUG_RETURN(my_errno);
|
||||
memcpy(cur_row->extents, data, ROW_EXTENT_SIZE);
|
||||
data+= ROW_EXTENT_SIZE;
|
||||
@ -4958,7 +4961,7 @@ int _ma_read_block_record2(MARIA_HA *info, uchar *record,
|
||||
cur_row->blob_length= blob_lengths;
|
||||
DBUG_PRINT("info", ("Total blob length: %lu", blob_lengths));
|
||||
if (_ma_alloc_buffer(&info->blob_buff, &info->blob_buff_size,
|
||||
blob_lengths))
|
||||
blob_lengths, myflag))
|
||||
DBUG_RETURN(my_errno);
|
||||
blob_buffer= info->blob_buff;
|
||||
}
|
||||
@ -5064,6 +5067,7 @@ static my_bool read_row_extent_info(MARIA_HA *info, uchar *buff,
|
||||
uint flag, row_extents, row_extents_size;
|
||||
uint field_lengths __attribute__ ((unused));
|
||||
uchar *extents, *end;
|
||||
myf myflag= MY_WME | (share->temporary ? MY_THREAD_SPECIFIC : 0);
|
||||
DBUG_ENTER("read_row_extent_info");
|
||||
|
||||
if (!(data= get_record_position(share, buff,
|
||||
@ -5087,7 +5091,7 @@ static my_bool read_row_extent_info(MARIA_HA *info, uchar *buff,
|
||||
if (info->cur_row.extents_buffer_length < row_extents_size &&
|
||||
_ma_alloc_buffer(&info->cur_row.extents,
|
||||
&info->cur_row.extents_buffer_length,
|
||||
row_extents_size))
|
||||
row_extents_size, myflag))
|
||||
DBUG_RETURN(1);
|
||||
memcpy(info->cur_row.extents, data, ROW_EXTENT_SIZE);
|
||||
data+= ROW_EXTENT_SIZE;
|
||||
@ -5257,6 +5261,7 @@ my_bool _ma_cmp_block_unique(MARIA_HA *info, MARIA_UNIQUEDEF *def,
|
||||
my_bool _ma_scan_init_block_record(MARIA_HA *info)
|
||||
{
|
||||
MARIA_SHARE *share= info->s;
|
||||
myf flag= MY_WME | (share->temporary ? MY_THREAD_SPECIFIC : 0);
|
||||
DBUG_ENTER("_ma_scan_init_block_record");
|
||||
DBUG_ASSERT(info->dfile.file == share->bitmap.file.file);
|
||||
|
||||
@ -5267,7 +5272,7 @@ my_bool _ma_scan_init_block_record(MARIA_HA *info)
|
||||
if (!(info->scan.bitmap_buff ||
|
||||
((info->scan.bitmap_buff=
|
||||
(uchar *) my_malloc(PSI_INSTRUMENT_ME, share->block_size * 2,
|
||||
MYF(MY_WME))))))
|
||||
flag)))))
|
||||
DBUG_RETURN(1);
|
||||
info->scan.page_buff= info->scan.bitmap_buff + share->block_size;
|
||||
info->scan.bitmap_end= info->scan.bitmap_buff + share->bitmap.max_total_size;
|
||||
|
@ -1279,6 +1279,7 @@ static int check_dynamic_record(HA_CHECK *param, MARIA_HA *info, int extend,
|
||||
ulong UNINIT_VAR(left_length);
|
||||
uint b_type;
|
||||
char llbuff[22],llbuff2[22],llbuff3[22];
|
||||
myf myflag= MY_WME | (share->temporary ? MY_THREAD_SPECIFIC : 0);
|
||||
DBUG_ENTER("check_dynamic_record");
|
||||
|
||||
pos= 0;
|
||||
@ -1386,7 +1387,7 @@ static int check_dynamic_record(HA_CHECK *param, MARIA_HA *info, int extend,
|
||||
{
|
||||
if (_ma_alloc_buffer(&info->rec_buff, &info->rec_buff_size,
|
||||
block_info.rec_len +
|
||||
share->base.extra_rec_buff_size))
|
||||
share->base.extra_rec_buff_size, myflag))
|
||||
|
||||
{
|
||||
_ma_check_print_error(param,
|
||||
@ -2720,7 +2721,7 @@ int maria_repair(HA_CHECK *param, register MARIA_HA *info,
|
||||
(uchar *) my_malloc(PSI_INSTRUMENT_ME, (uint)
|
||||
share->base.default_rec_buff_size, MYF(0))) ||
|
||||
_ma_alloc_buffer(&sort_param.rec_buff, &sort_param.rec_buff_size,
|
||||
share->base.default_rec_buff_size))
|
||||
share->base.default_rec_buff_size, MYF(0)))
|
||||
{
|
||||
_ma_check_print_error(param, "Not enough memory for extra record");
|
||||
goto err;
|
||||
@ -3813,7 +3814,7 @@ int maria_repair_by_sort(HA_CHECK *param, register MARIA_HA *info,
|
||||
(size_t) share->base.default_rec_buff_size,
|
||||
MYF(0))) ||
|
||||
_ma_alloc_buffer(&sort_param.rec_buff, &sort_param.rec_buff_size,
|
||||
share->base.default_rec_buff_size))
|
||||
share->base.default_rec_buff_size, MYF(0)))
|
||||
{
|
||||
_ma_check_print_error(param, "Not enough memory for extra record");
|
||||
goto err;
|
||||
@ -4456,7 +4457,7 @@ int maria_repair_parallel(HA_CHECK *param, register MARIA_HA *info,
|
||||
sort_param[i].record= (((uchar *)(sort_param+share->base.keys))+
|
||||
(share->base.pack_reclength * i));
|
||||
if (_ma_alloc_buffer(&sort_param[i].rec_buff, &sort_param[i].rec_buff_size,
|
||||
share->base.default_rec_buff_size))
|
||||
share->base.default_rec_buff_size, MYF(0)))
|
||||
{
|
||||
_ma_check_print_error(param,"Not enough memory!");
|
||||
goto err;
|
||||
@ -5188,7 +5189,7 @@ static int sort_get_next_record(MARIA_SORT_PARAM *sort_param)
|
||||
if (_ma_alloc_buffer(&sort_param->rec_buff,
|
||||
&sort_param->rec_buff_size,
|
||||
block_info.rec_len +
|
||||
share->base.extra_rec_buff_size))
|
||||
share->base.extra_rec_buff_size, MYF(0)))
|
||||
|
||||
{
|
||||
if (param->max_record_length >= block_info.rec_len)
|
||||
|
@ -64,10 +64,10 @@ int maria_create(const char *name, enum data_file_type datafile_type,
|
||||
uint uniques, MARIA_UNIQUEDEF *uniquedefs,
|
||||
MARIA_CREATE_INFO *ci,uint flags)
|
||||
{
|
||||
register uint i,j;
|
||||
uint i,j;
|
||||
File UNINIT_VAR(dfile), UNINIT_VAR(file);
|
||||
int errpos,save_errno, create_mode= O_RDWR | O_TRUNC, res;
|
||||
myf create_flag;
|
||||
myf create_flag, common_flag= MY_WME, sync_dir= 0;
|
||||
uint length,max_key_length,packed,pack_bytes,pointer,real_length_diff,
|
||||
key_length,info_length,key_segs,options,min_key_length,
|
||||
base_pos,long_varchar_count,
|
||||
@ -93,7 +93,6 @@ int maria_create(const char *name, enum data_file_type datafile_type,
|
||||
MARIA_CREATE_INFO tmp_create_info;
|
||||
my_bool tmp_table= FALSE; /* cache for presence of HA_OPTION_TMP_TABLE */
|
||||
my_bool forced_packed;
|
||||
myf sync_dir= 0;
|
||||
uchar *log_data= NULL;
|
||||
my_bool encrypted= ci->encrypted && datafile_type == BLOCK_RECORD;
|
||||
my_bool insert_order= MY_TEST(flags & HA_PRESERVE_INSERT_ORDER);
|
||||
@ -104,6 +103,9 @@ int maria_create(const char *name, enum data_file_type datafile_type,
|
||||
|
||||
DBUG_ASSERT(maria_inited);
|
||||
|
||||
if (flags & HA_CREATE_TMP_TABLE)
|
||||
common_flag|= MY_THREAD_SPECIFIC;
|
||||
|
||||
if (!ci)
|
||||
{
|
||||
bzero((char*) &tmp_create_info,sizeof(tmp_create_info));
|
||||
@ -149,7 +151,7 @@ int maria_create(const char *name, enum data_file_type datafile_type,
|
||||
(keys + uniques)*HA_MAX_KEY_SEG*sizeof(double) +
|
||||
(keys + uniques)*HA_MAX_KEY_SEG*sizeof(ulong) +
|
||||
sizeof(uint16) * columns,
|
||||
MYF(MY_WME | MY_ZEROFILL))))
|
||||
MYF(common_flag | MY_ZEROFILL))))
|
||||
DBUG_RETURN(my_errno);
|
||||
nulls_per_key_part= (ulong*) (rec_per_key_part +
|
||||
(keys + uniques) * HA_MAX_KEY_SEG);
|
||||
@ -928,7 +930,7 @@ int maria_create(const char *name, enum data_file_type datafile_type,
|
||||
|
||||
if ((file= mysql_file_create_with_symlink(key_file_kfile, klinkname_ptr,
|
||||
kfilename, 0, create_mode,
|
||||
MYF(MY_WME|create_flag))) < 0)
|
||||
MYF(common_flag|create_flag))) < 0)
|
||||
goto err;
|
||||
errpos=1;
|
||||
|
||||
@ -1032,7 +1034,7 @@ int maria_create(const char *name, enum data_file_type datafile_type,
|
||||
if (!(col_order= (MARIA_COLUMNDEF**) my_malloc(PSI_INSTRUMENT_ME,
|
||||
share.base.fields *
|
||||
sizeof(MARIA_COLUMNDEF*),
|
||||
MYF(MY_WME))))
|
||||
common_flag)))
|
||||
goto err;
|
||||
for (column= columndef, pos= col_order ;
|
||||
column != end_column ;
|
||||
@ -1212,8 +1214,8 @@ int maria_create(const char *name, enum data_file_type datafile_type,
|
||||
}
|
||||
if ((dfile=
|
||||
mysql_file_create_with_symlink(key_file_dfile, dlinkname_ptr,
|
||||
dfilename, 0, create_mode,
|
||||
MYF(MY_WME | create_flag | sync_dir))) < 0)
|
||||
dfilename, 0, create_mode,
|
||||
MYF(common_flag | create_flag | sync_dir))) < 0)
|
||||
goto err;
|
||||
errpos=3;
|
||||
|
||||
|
@ -1485,6 +1485,8 @@ int _ma_read_dynamic_record(MARIA_HA *info, uchar *buf,
|
||||
File file;
|
||||
uchar *UNINIT_VAR(to);
|
||||
uint UNINIT_VAR(left_length);
|
||||
MARIA_SHARE *share= info->s;
|
||||
myf flag= MY_WME | (share->temporary ? MY_THREAD_SPECIFIC : 0);
|
||||
DBUG_ENTER("_ma_read_dynamic_record");
|
||||
|
||||
if (filepos == HA_OFFSET_ERROR)
|
||||
@ -1515,13 +1517,13 @@ int _ma_read_dynamic_record(MARIA_HA *info, uchar *buf,
|
||||
if (block_of_record++ == 0) /* First block */
|
||||
{
|
||||
info->cur_row.total_length= block_info.rec_len;
|
||||
if (block_info.rec_len > (uint) info->s->base.max_pack_length)
|
||||
if (block_info.rec_len > (uint) share->base.max_pack_length)
|
||||
goto panic;
|
||||
if (info->s->base.blobs)
|
||||
if (share->base.blobs)
|
||||
{
|
||||
if (_ma_alloc_buffer(&info->rec_buff, &info->rec_buff_size,
|
||||
block_info.rec_len +
|
||||
info->s->base.extra_rec_buff_size))
|
||||
share->base.extra_rec_buff_size, flag))
|
||||
goto err;
|
||||
}
|
||||
to= info->rec_buff;
|
||||
@ -1557,7 +1559,7 @@ int _ma_read_dynamic_record(MARIA_HA *info, uchar *buf,
|
||||
there is no equivalent without seeking. We are at the right
|
||||
position already. :(
|
||||
*/
|
||||
if (info->s->file_read(info, to, block_info.data_len,
|
||||
if (share->file_read(info, to, block_info.data_len,
|
||||
filepos, MYF(MY_NABP)))
|
||||
goto panic;
|
||||
left_length-=block_info.data_len;
|
||||
@ -1780,6 +1782,7 @@ int _ma_read_rnd_dynamic_record(MARIA_HA *info,
|
||||
uchar *UNINIT_VAR(to);
|
||||
MARIA_BLOCK_INFO block_info;
|
||||
MARIA_SHARE *share= info->s;
|
||||
myf flag= MY_WME | (share->temporary ? MY_THREAD_SPECIFIC : 0);
|
||||
DBUG_ENTER("_ma_read_rnd_dynamic_record");
|
||||
|
||||
#ifdef MARIA_EXTERNAL_LOCKING
|
||||
@ -1870,7 +1873,7 @@ int _ma_read_rnd_dynamic_record(MARIA_HA *info,
|
||||
{
|
||||
if (_ma_alloc_buffer(&info->rec_buff, &info->rec_buff_size,
|
||||
block_info.rec_len +
|
||||
info->s->base.extra_rec_buff_size))
|
||||
share->base.extra_rec_buff_size, flag))
|
||||
goto err;
|
||||
}
|
||||
to= info->rec_buff;
|
||||
|
@ -536,6 +536,7 @@ int maria_reset(MARIA_HA *info)
|
||||
{
|
||||
int error= 0;
|
||||
MARIA_SHARE *share= info->s;
|
||||
myf flag= MY_WME | (share->temporary ? MY_THREAD_SPECIFIC : 0);
|
||||
DBUG_ENTER("maria_reset");
|
||||
/*
|
||||
Free buffers and reset the following flags:
|
||||
@ -556,13 +557,13 @@ int maria_reset(MARIA_HA *info)
|
||||
{
|
||||
info->rec_buff_size= 1; /* Force realloc */
|
||||
_ma_alloc_buffer(&info->rec_buff, &info->rec_buff_size,
|
||||
share->base.default_rec_buff_size);
|
||||
share->base.default_rec_buff_size, flag);
|
||||
}
|
||||
if (info->blob_buff_size > MARIA_SMALL_BLOB_BUFFER)
|
||||
{
|
||||
info->blob_buff_size= 1; /* Force realloc */
|
||||
_ma_alloc_buffer(&info->blob_buff, &info->blob_buff_size,
|
||||
MARIA_SMALL_BLOB_BUFFER);
|
||||
MARIA_SMALL_BLOB_BUFFER, flag);
|
||||
}
|
||||
}
|
||||
#if defined(HAVE_MMAP) && defined(HAVE_MADVISE)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Copyright (C) 2006 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
|
||||
Copyright (c) 2009, 2020, MariaDB Corporation Ab
|
||||
Copyright (c) 2009, 2021, 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
|
||||
@ -39,7 +39,7 @@ static my_bool maria_scan_init_dummy(MARIA_HA *info);
|
||||
static void maria_scan_end_dummy(MARIA_HA *info);
|
||||
static my_bool maria_once_init_dummy(MARIA_SHARE *, File);
|
||||
static my_bool maria_once_end_dummy(MARIA_SHARE *);
|
||||
static uchar *_ma_state_info_read(uchar *ptr, MARIA_STATE_INFO *state);
|
||||
static uchar *_ma_state_info_read(uchar *, MARIA_STATE_INFO *, myf);
|
||||
|
||||
#define get_next_element(to,pos,size) { memcpy((char*) to,pos,(size_t) size); \
|
||||
pos+=size;}
|
||||
@ -98,6 +98,7 @@ static MARIA_HA *maria_clone_internal(MARIA_SHARE *share,
|
||||
uint errpos;
|
||||
MARIA_HA info,*m_info;
|
||||
my_bitmap_map *changed_fields_bitmap;
|
||||
myf flag= MY_WME | (share->temporary ? MY_THREAD_SPECIFIC : 0);
|
||||
DBUG_ENTER("maria_clone_internal");
|
||||
|
||||
errpos= 0;
|
||||
@ -115,7 +116,7 @@ static MARIA_HA *maria_clone_internal(MARIA_SHARE *share,
|
||||
errpos= 5;
|
||||
|
||||
/* alloc and set up private structure parts */
|
||||
if (!my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
|
||||
if (!my_multi_malloc(PSI_INSTRUMENT_ME, flag,
|
||||
&m_info,sizeof(MARIA_HA),
|
||||
&info.blobs,sizeof(MARIA_BLOB)*share->base.blobs,
|
||||
&info.buff,(share->base.max_key_block_length*2+
|
||||
@ -168,7 +169,7 @@ static MARIA_HA *maria_clone_internal(MARIA_SHARE *share,
|
||||
if (my_init_dynamic_array(PSI_INSTRUMENT_ME, &info.pinned_pages,
|
||||
sizeof(MARIA_PINNED_PAGE),
|
||||
MY_MAX(share->base.blobs*2 + 4,
|
||||
MARIA_MAX_TREE_LEVELS*3), 16, MYF(0)))
|
||||
MARIA_MAX_TREE_LEVELS*3), 16, flag))
|
||||
goto err;
|
||||
|
||||
|
||||
@ -204,7 +205,7 @@ static MARIA_HA *maria_clone_internal(MARIA_SHARE *share,
|
||||
/* Allocate buffer for one record */
|
||||
/* prerequisites: info->rec_buffer == 0 && info->rec_buff_size == 0 */
|
||||
if (_ma_alloc_buffer(&info.rec_buff, &info.rec_buff_size,
|
||||
share->base.default_rec_buff_size))
|
||||
share->base.default_rec_buff_size, flag))
|
||||
goto err;
|
||||
|
||||
bzero(info.rec_buff, share->base.default_rec_buff_size);
|
||||
@ -269,6 +270,7 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
|
||||
uint i,j,len,errpos,head_length,base_pos,keys, realpath_err,
|
||||
key_parts,base_key_parts,unique_key_parts,fulltext_keys,uniques;
|
||||
uint internal_table= MY_TEST(open_flags & HA_OPEN_INTERNAL_TABLE);
|
||||
myf common_flag= open_flags & HA_OPEN_TMP_TABLE ? MY_THREAD_SPECIFIC : 0;
|
||||
uint file_version;
|
||||
size_t info_length;
|
||||
char name_buff[FN_REFLEN], org_name[FN_REFLEN], index_name[FN_REFLEN],
|
||||
@ -349,13 +351,13 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
|
||||
DEBUG_SYNC_C("mi_open_kfile");
|
||||
if ((kfile=mysql_file_open(key_file_kfile, name_buff,
|
||||
(open_mode=O_RDWR) | O_SHARE | O_NOFOLLOW | O_CLOEXEC,
|
||||
MYF(MY_NOSYMLINKS))) < 0)
|
||||
MYF(common_flag | MY_NOSYMLINKS))) < 0)
|
||||
{
|
||||
if ((errno != EROFS && errno != EACCES) ||
|
||||
mode != O_RDONLY ||
|
||||
(kfile=mysql_file_open(key_file_kfile, name_buff,
|
||||
(open_mode=O_RDONLY) | O_SHARE | O_NOFOLLOW | O_CLOEXEC,
|
||||
MYF(MY_NOSYMLINKS))) < 0)
|
||||
MYF(common_flag | MY_NOSYMLINKS))) < 0)
|
||||
goto err;
|
||||
}
|
||||
errpos= 1;
|
||||
@ -465,7 +467,8 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
|
||||
Allocate space for header information and for data that is too
|
||||
big to keep on stack
|
||||
*/
|
||||
if (!(disk_cache= my_malloc(PSI_INSTRUMENT_ME, info_length+128, MYF(MY_WME))))
|
||||
if (!(disk_cache= my_malloc(PSI_INSTRUMENT_ME, info_length+128,
|
||||
MYF(MY_WME | common_flag))))
|
||||
{
|
||||
my_errno=ENOMEM;
|
||||
goto err;
|
||||
@ -507,7 +510,7 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
|
||||
}
|
||||
share->state_diff_length=len-MARIA_STATE_INFO_SIZE;
|
||||
|
||||
if (!_ma_state_info_read(disk_cache, &share->state))
|
||||
if (!_ma_state_info_read(disk_cache, &share->state, common_flag))
|
||||
goto err;
|
||||
len= mi_uint2korr(share->state.header.base_info_length);
|
||||
if (len != MARIA_BASE_INFO_SIZE)
|
||||
@ -648,12 +651,10 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
|
||||
share->index_file_name.length= strlen(index_name);
|
||||
share->data_file_name.length= strlen(data_name);
|
||||
share->open_file_name.length= strlen(name);
|
||||
if (!my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME),
|
||||
if (!my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME | common_flag),
|
||||
&share,sizeof(*share),
|
||||
&rec_per_key_part,
|
||||
sizeof(double) * key_parts,
|
||||
&nulls_per_key_part,
|
||||
sizeof(long)* key_parts,
|
||||
&rec_per_key_part, sizeof(double) * key_parts,
|
||||
&nulls_per_key_part, sizeof(long)* key_parts,
|
||||
&share->keyinfo,keys*sizeof(MARIA_KEYDEF),
|
||||
&share->uniqueinfo,uniques*sizeof(MARIA_UNIQUEDEF),
|
||||
&share->keyparts,
|
||||
@ -983,9 +984,9 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags,
|
||||
share->options|= HA_OPTION_READ_ONLY_DATA;
|
||||
share->is_log_table= FALSE;
|
||||
|
||||
if (open_flags & HA_OPEN_TMP_TABLE ||
|
||||
(share->options & HA_OPTION_TMP_TABLE))
|
||||
if (open_flags & HA_OPEN_TMP_TABLE || share->options & HA_OPTION_TMP_TABLE)
|
||||
{
|
||||
common_flag|= MY_THREAD_SPECIFIC;
|
||||
share->options|= HA_OPTION_TMP_TABLE;
|
||||
share->temporary= share->delay_key_write= 1;
|
||||
share->write_flag=MYF(MY_NABP);
|
||||
@ -1244,13 +1245,13 @@ err:
|
||||
*/
|
||||
|
||||
my_bool _ma_alloc_buffer(uchar **old_addr, size_t *old_size,
|
||||
size_t new_size)
|
||||
size_t new_size, myf flag)
|
||||
{
|
||||
if (*old_size < new_size)
|
||||
{
|
||||
uchar *addr;
|
||||
if (!(addr= (uchar*) my_realloc(PSI_INSTRUMENT_ME, *old_addr, new_size,
|
||||
MYF(MY_ALLOW_ZERO_PTR))))
|
||||
MYF(MY_ALLOW_ZERO_PTR | flag))))
|
||||
return 1;
|
||||
*old_addr= addr;
|
||||
*old_size= new_size;
|
||||
@ -1629,7 +1630,7 @@ uint _ma_state_info_write_sub(File file, MARIA_STATE_INFO *state, uint pWrite)
|
||||
}
|
||||
|
||||
|
||||
static uchar *_ma_state_info_read(uchar *ptr, MARIA_STATE_INFO *state)
|
||||
static uchar *_ma_state_info_read(uchar *ptr, MARIA_STATE_INFO *state, myf flag)
|
||||
{
|
||||
uint i,keys,key_parts;
|
||||
DBUG_ENTER("_ma_state_info_read");
|
||||
@ -1641,7 +1642,7 @@ static uchar *_ma_state_info_read(uchar *ptr, MARIA_STATE_INFO *state)
|
||||
|
||||
/* Allocate memory for key parts if not already done */
|
||||
if (!state->rec_per_key_part &&
|
||||
!my_multi_malloc(PSI_INSTRUMENT_ME, MY_WME,
|
||||
!my_multi_malloc(PSI_INSTRUMENT_ME, MYF(MY_WME | flag),
|
||||
&state->rec_per_key_part,
|
||||
sizeof(*state->rec_per_key_part) * key_parts,
|
||||
&state->nulls_per_key_part,
|
||||
@ -2044,11 +2045,13 @@ void _ma_set_index_pagecache_callbacks(PAGECACHE_FILE *file,
|
||||
|
||||
int _ma_open_datafile(MARIA_HA *info, MARIA_SHARE *share)
|
||||
{
|
||||
myf flags= MY_WME | (share->mode & O_NOFOLLOW ? MY_NOSYMLINKS : 0);
|
||||
myf flags= (share->mode & O_NOFOLLOW) ? MY_NOSYMLINKS | MY_WME : MY_WME;
|
||||
if (share->temporary)
|
||||
flags|= MY_THREAD_SPECIFIC;
|
||||
DEBUG_SYNC_C("mi_open_datafile");
|
||||
info->dfile.file= share->bitmap.file.file=
|
||||
mysql_file_open(key_file_dfile, share->data_file_name.str,
|
||||
share->mode | O_SHARE | O_CLOEXEC, MYF(flags));
|
||||
share->mode | O_SHARE | O_CLOEXEC, flags);
|
||||
return info->dfile.file >= 0 ? 0 : 1;
|
||||
}
|
||||
|
||||
|
@ -1416,10 +1416,12 @@ uint _ma_pack_get_block_info(MARIA_HA *maria, MARIA_BIT_BUFF *bit_buff,
|
||||
{
|
||||
uchar *header= info->header;
|
||||
uint head_length,UNINIT_VAR(ref_length);
|
||||
MARIA_SHARE *share= maria->s;
|
||||
myf flag= MY_WME | (share->temporary ? MY_THREAD_SPECIFIC : 0);
|
||||
|
||||
if (file >= 0)
|
||||
{
|
||||
ref_length=maria->s->pack.ref_length;
|
||||
ref_length=share->pack.ref_length;
|
||||
/*
|
||||
We can't use my_pread() here because _ma_read_rnd_pack_record assumes
|
||||
position is ok
|
||||
@ -1429,11 +1431,11 @@ uint _ma_pack_get_block_info(MARIA_HA *maria, MARIA_BIT_BUFF *bit_buff,
|
||||
return BLOCK_FATAL_ERROR;
|
||||
DBUG_DUMP("header", header, ref_length);
|
||||
}
|
||||
head_length= read_pack_length((uint) maria->s->pack.version, header,
|
||||
head_length= read_pack_length((uint) share->pack.version, header,
|
||||
&info->rec_len);
|
||||
if (maria->s->base.blobs)
|
||||
if (share->base.blobs)
|
||||
{
|
||||
head_length+= read_pack_length((uint) maria->s->pack.version,
|
||||
head_length+= read_pack_length((uint) share->pack.version,
|
||||
header + head_length, &info->blob_len);
|
||||
/*
|
||||
Ensure that the record buffer is big enough for the compressed
|
||||
@ -1442,7 +1444,7 @@ uint _ma_pack_get_block_info(MARIA_HA *maria, MARIA_BIT_BUFF *bit_buff,
|
||||
*/
|
||||
if (_ma_alloc_buffer(rec_buff_p, rec_buff_size_p,
|
||||
info->rec_len + info->blob_len +
|
||||
maria->s->base.extra_rec_buff_size))
|
||||
share->base.extra_rec_buff_size, flag))
|
||||
return BLOCK_FATAL_ERROR; /* not enough memory */
|
||||
bit_buff->blob_pos= *rec_buff_p + info->rec_len;
|
||||
bit_buff->blob_end= bit_buff->blob_pos + info->blob_len;
|
||||
@ -1583,15 +1585,18 @@ _ma_mempack_get_block_info(MARIA_HA *maria,
|
||||
size_t *rec_buff_size_p,
|
||||
uchar *header)
|
||||
{
|
||||
header+= read_pack_length((uint) maria->s->pack.version, header,
|
||||
MARIA_SHARE *share= maria->s;
|
||||
myf flag= MY_WME | (share->temporary ? MY_THREAD_SPECIFIC : 0);
|
||||
|
||||
header+= read_pack_length((uint) share->pack.version, header,
|
||||
&info->rec_len);
|
||||
if (maria->s->base.blobs)
|
||||
if (share->base.blobs)
|
||||
{
|
||||
header+= read_pack_length((uint) maria->s->pack.version, header,
|
||||
header+= read_pack_length((uint) share->pack.version, header,
|
||||
&info->blob_len);
|
||||
/* _ma_alloc_rec_buff sets my_errno on error */
|
||||
if (_ma_alloc_buffer(rec_buff_p, rec_buff_size_p,
|
||||
info->blob_len + maria->s->base.extra_rec_buff_size))
|
||||
info->blob_len + share->base.extra_rec_buff_size, flag))
|
||||
return 0; /* not enough memory */
|
||||
bit_buff->blob_pos= *rec_buff_p;
|
||||
bit_buff->blob_end= *rec_buff_p + info->blob_len;
|
||||
|
@ -1511,7 +1511,7 @@ extern my_bool _ma_read_cache(MARIA_HA *, IO_CACHE *info, uchar *buff,
|
||||
uint re_read_if_possibly);
|
||||
extern ulonglong ma_retrieve_auto_increment(const uchar *key, uint8 key_type);
|
||||
extern my_bool _ma_alloc_buffer(uchar **old_addr, size_t *old_size,
|
||||
size_t new_size);
|
||||
size_t new_size, myf flag);
|
||||
extern size_t _ma_rec_unpack(MARIA_HA *info, uchar *to, uchar *from,
|
||||
size_t reclength);
|
||||
extern my_bool _ma_rec_check(MARIA_HA *info, const uchar *record,
|
||||
|
Loading…
x
Reference in New Issue
Block a user