mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge mysql.com:/home/stewart/Documents/MySQL/5.1/wl1359
into mysql.com:/home/stewart/Documents/MySQL/5.1/tmp_merge mysql-test/r/information_schema.result: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/handler.h: Auto merged sql/sql_show.cc: Auto merged
This commit is contained in:
@@ -11,8 +11,8 @@ GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' REQUIRE CIPHER 'EDH-RSA-DES-CBC3
|
||||
GRANT SELECT ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
|
||||
grant delete on mysqltest.* to mysqltest_1@localhost;
|
||||
select * from mysql.user where user="mysqltest_1";
|
||||
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections
|
||||
localhost mysqltest_1 N N N N N N N N N N N N N N N N N N N N N N N N N N N SPECIFIED EDH-RSA-DES-CBC3-SHA 0 0 0 0
|
||||
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections
|
||||
localhost mysqltest_1 N N N N N N N N N N N N N N N N N N N N N N N N N N N N SPECIFIED EDH-RSA-DES-CBC3-SHA 0 0 0 0
|
||||
show grants for mysqltest_1@localhost;
|
||||
Grants for mysqltest_1@localhost
|
||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA'
|
||||
@@ -42,15 +42,15 @@ delete from mysql.user where user='mysqltest_1';
|
||||
flush privileges;
|
||||
grant usage on *.* to mysqltest_1@localhost with max_queries_per_hour 10;
|
||||
select * from mysql.user where user="mysqltest_1";
|
||||
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections
|
||||
localhost mysqltest_1 N N N N N N N N N N N N N N N N N N N N N N N N N N N 10 0 0 0
|
||||
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections
|
||||
localhost mysqltest_1 N N N N N N N N N N N N N N N N N N N N N N N N N N N N 10 0 0 0
|
||||
show grants for mysqltest_1@localhost;
|
||||
Grants for mysqltest_1@localhost
|
||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' WITH MAX_QUERIES_PER_HOUR 10
|
||||
grant usage on *.* to mysqltest_1@localhost with max_updates_per_hour 20 max_connections_per_hour 30;
|
||||
select * from mysql.user where user="mysqltest_1";
|
||||
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections
|
||||
localhost mysqltest_1 N N N N N N N N N N N N N N N N N N N N N N N N N N N 10 20 30 0
|
||||
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections
|
||||
localhost mysqltest_1 N N N N N N N N N N N N N N N N N N N N N N N N N N N N 10 20 30 0
|
||||
show grants for mysqltest_1@localhost;
|
||||
Grants for mysqltest_1@localhost
|
||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' WITH MAX_QUERIES_PER_HOUR 10 MAX_UPDATES_PER_HOUR 20 MAX_CONNECTIONS_PER_HOUR 30
|
||||
@@ -85,7 +85,7 @@ revoke LOCK TABLES, ALTER on mysqltest.* from mysqltest_1@localhost;
|
||||
show grants for mysqltest_1@localhost;
|
||||
Grants for mysqltest_1@localhost
|
||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, CREATE TEMPORARY TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT ON `mysqltest`.* TO 'mysqltest_1'@'localhost' WITH GRANT OPTION
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, CREATE TEMPORARY TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `mysqltest`.* TO 'mysqltest_1'@'localhost' WITH GRANT OPTION
|
||||
revoke all privileges on mysqltest.* from mysqltest_1@localhost;
|
||||
delete from mysql.user where user='mysqltest_1';
|
||||
flush privileges;
|
||||
@@ -465,6 +465,7 @@ Show databases Server Admin To see all databases with SHOW DATABASES
|
||||
Show view Tables To see views with SHOW CREATE VIEW
|
||||
Shutdown Server Admin To shut down the server
|
||||
Super Server Admin To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.
|
||||
Trigger Tables To use triggers
|
||||
Update Tables To update existing rows
|
||||
Usage Server Admin No privileges - allow connect only
|
||||
create database mysqltest;
|
||||
@@ -491,8 +492,8 @@ SELECT TABLE_SCHEMA, TABLE_NAME, GROUP_CONCAT(PRIVILEGE_TYPE ORDER BY
|
||||
PRIVILEGE_TYPE SEPARATOR ', ') AS PRIVILEGES FROM TABLE_PRIVILEGES WHERE GRANTEE
|
||||
= '\'dummy\'@\'localhost\'' GROUP BY TABLE_SCHEMA, TABLE_NAME;
|
||||
TABLE_SCHEMA TABLE_NAME PRIVILEGES
|
||||
mysqltest dummytable ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, UPDATE
|
||||
mysqltest dummyview ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, UPDATE
|
||||
mysqltest dummytable ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE
|
||||
mysqltest dummyview ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE
|
||||
FLUSH PRIVILEGES;
|
||||
SHOW GRANTS FOR dummy@localhost;
|
||||
Grants for dummy@localhost
|
||||
@@ -503,8 +504,8 @@ SELECT TABLE_SCHEMA, TABLE_NAME, GROUP_CONCAT(PRIVILEGE_TYPE ORDER BY
|
||||
PRIVILEGE_TYPE SEPARATOR ', ') AS PRIVILEGES FROM TABLE_PRIVILEGES WHERE GRANTEE
|
||||
= '\'dummy\'@\'localhost\'' GROUP BY TABLE_SCHEMA, TABLE_NAME;
|
||||
TABLE_SCHEMA TABLE_NAME PRIVILEGES
|
||||
mysqltest dummytable ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, UPDATE
|
||||
mysqltest dummyview ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, UPDATE
|
||||
mysqltest dummytable ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE
|
||||
mysqltest dummyview ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE
|
||||
SHOW FIELDS FROM mysql.tables_priv;
|
||||
Field Type Null Key Default Extra
|
||||
Host char(60) NO PRI
|
||||
@@ -513,7 +514,7 @@ User char(16) NO PRI
|
||||
Table_name char(64) NO PRI
|
||||
Grantor char(77) NO MUL
|
||||
Timestamp timestamp YES CURRENT_TIMESTAMP
|
||||
Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view') NO
|
||||
Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') NO
|
||||
Column_priv set('Select','Insert','Update','References') NO
|
||||
use test;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM dummy@localhost;
|
||||
@@ -594,7 +595,7 @@ delete from tables_priv where host = '' and user = 'mysqltest_1';
|
||||
flush privileges;
|
||||
set @user123="non-existent";
|
||||
select * from mysql.db where user=@user123;
|
||||
Host Db User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv References_priv Index_priv Alter_priv Create_tmp_table_priv Lock_tables_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Execute_priv Event_priv
|
||||
Host Db User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv References_priv Index_priv Alter_priv Create_tmp_table_priv Lock_tables_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Execute_priv Event_priv Trigger_priv
|
||||
set names koi8r;
|
||||
create database <20><>;
|
||||
grant select on <20><>.* to root@localhost;
|
||||
|
@@ -407,6 +407,7 @@ GRANTEE TABLE_CATALOG TABLE_SCHEMA PRIVILEGE_TYPE IS_GRANTABLE
|
||||
'mysqltest_1'@'localhost' NULL test CREATE ROUTINE YES
|
||||
'mysqltest_1'@'localhost' NULL test ALTER ROUTINE YES
|
||||
'mysqltest_1'@'localhost' NULL test EVENT YES
|
||||
'mysqltest_1'@'localhost' NULL test TRIGGER YES
|
||||
select * from information_schema.TABLE_PRIVILEGES where grantee like '%mysqltest_1%';
|
||||
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE
|
||||
'mysqltest_1'@'localhost' NULL test t1 SELECT NO
|
||||
|
@@ -6,8 +6,8 @@ Grants for mysqltest_1@localhost
|
||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
|
||||
GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
|
||||
select * from db where user = 'mysqltest_1';
|
||||
Host Db User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv References_priv Index_priv Alter_priv Create_tmp_table_priv Lock_tables_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Execute_priv Event_priv
|
||||
localhost mysqltest mysqltest_1 Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y
|
||||
Host Db User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv References_priv Index_priv Alter_priv Create_tmp_table_priv Lock_tables_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Execute_priv Event_priv Trigger_priv
|
||||
localhost mysqltest mysqltest_1 Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y
|
||||
update db set db = 'MYSQLtest' where db = 'mysqltest' and user = 'mysqltest_1' and host = 'localhost';
|
||||
flush privileges;
|
||||
show grants for mysqltest_1@localhost;
|
||||
@@ -15,8 +15,8 @@ Grants for mysqltest_1@localhost
|
||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
|
||||
GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
|
||||
select * from db where user = 'mysqltest_1';
|
||||
Host Db User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv References_priv Index_priv Alter_priv Create_tmp_table_priv Lock_tables_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Execute_priv Event_priv
|
||||
localhost MYSQLtest mysqltest_1 Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y
|
||||
Host Db User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv References_priv Index_priv Alter_priv Create_tmp_table_priv Lock_tables_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Execute_priv Event_priv Trigger_priv
|
||||
localhost MYSQLtest mysqltest_1 Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y
|
||||
delete from db where db = 'MYSQLtest' and user = 'mysqltest_1' and host = 'localhost';
|
||||
flush privileges;
|
||||
drop user mysqltest_1@localhost;
|
||||
|
@@ -20,9 +20,6 @@ master-bin.000001 # Query # # use `mysqltest`; create table t1 (a int primary ke
|
||||
master-bin.000001 # Query # # use `test`; create table t2 (a int primary key) engine=ndb
|
||||
reset master;
|
||||
reset master;
|
||||
use mysqltest;
|
||||
drop table test.t2;
|
||||
create table t2 (a int primary key) engine=ndb;
|
||||
alter table t2 add column (b int);
|
||||
show binlog events from 102;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
@@ -30,53 +27,36 @@ master-bin1.000001 # Query # # BEGIN
|
||||
master-bin1.000001 # Table_map # # cluster_replication.apply_status
|
||||
master-bin1.000001 # Write_rows # #
|
||||
master-bin1.000001 # Query # # COMMIT
|
||||
master-bin1.000001 # Query # # use `mysqltest`; drop table test.t2
|
||||
master-bin1.000001 # Query # # use `mysqltest`; create table t2 (a int primary key) engine=ndb
|
||||
master-bin1.000001 # Query # # BEGIN
|
||||
master-bin1.000001 # Table_map # # cluster_replication.apply_status
|
||||
master-bin1.000001 # Write_rows # #
|
||||
master-bin1.000001 # Query # # COMMIT
|
||||
master-bin1.000001 # Query # # use `mysqltest`; alter table t2 add column (b int)
|
||||
master-bin1.000001 # Query # # use `test`; alter table t2 add column (b int)
|
||||
reset master;
|
||||
reset master;
|
||||
ALTER DATABASE mysqltest CHARACTER SET latin1;
|
||||
insert into t1 values (1);
|
||||
drop table t1;
|
||||
drop table mysqltest.t1;
|
||||
show binlog events from 102;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # ALTER DATABASE mysqltest CHARACTER SET latin1
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # cluster_replication.apply_status
|
||||
master-bin.000001 # Write_rows # #
|
||||
master-bin.000001 # Table_map # # mysqltest.t1
|
||||
master-bin.000001 # Write_rows # #
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # cluster_replication.apply_status
|
||||
master-bin.000001 # Write_rows # #
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # use `mysqltest`; drop table `t1`
|
||||
reset master;
|
||||
reset master;
|
||||
use test;
|
||||
insert into t2 values (1,2);
|
||||
drop database mysqltest;
|
||||
use test;
|
||||
create table t1 (a int primary key) engine=ndb;
|
||||
use test;
|
||||
show binlog events from 102;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin1.000001 # Query # # BEGIN
|
||||
master-bin1.000001 # Table_map # # cluster_replication.apply_status
|
||||
master-bin1.000001 # Write_rows # #
|
||||
master-bin1.000001 # Table_map # # mysqltest.t2
|
||||
master-bin1.000001 # Write_rows # #
|
||||
master-bin1.000001 # Query # # COMMIT
|
||||
master-bin1.000001 # Query # # BEGIN
|
||||
master-bin1.000001 # Table_map # # cluster_replication.apply_status
|
||||
master-bin1.000001 # Table_map # # test.t2
|
||||
master-bin1.000001 # Write_rows # #
|
||||
master-bin1.000001 # Query # # COMMIT
|
||||
master-bin1.000001 # Query # # drop database mysqltest
|
||||
master-bin1.000001 # Query # # use `test`; create table t1 (a int primary key) engine=ndb
|
||||
drop table t2;
|
||||
reset master;
|
||||
reset master;
|
||||
CREATE LOGFILE GROUP lg1
|
||||
|
@@ -21,6 +21,14 @@ CREATE TABLE t1
|
||||
(pk1 INT NOT NULL PRIMARY KEY, b INT NOT NULL, c INT NOT NULL)
|
||||
TABLESPACE ts1 STORAGE DISK
|
||||
ENGINE=NDB;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`pk1` int(11) NOT NULL,
|
||||
`b` int(11) NOT NULL,
|
||||
`c` int(11) NOT NULL,
|
||||
PRIMARY KEY (`pk1`)
|
||||
) TABLESPACE ts1 STORAGE DISK ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
|
||||
INSERT INTO t1 VALUES (0, 0, 0);
|
||||
SELECT * FROM t1;
|
||||
pk1 b c
|
||||
|
@@ -226,7 +226,7 @@ t1 CREATE TABLE `t1` (
|
||||
`b` int(11) NOT NULL,
|
||||
`c` int(11) NOT NULL,
|
||||
PRIMARY KEY (`pk1`)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
|
||||
) TABLESPACE table_space1 STORAGE DISK ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
|
||||
ALTER TABLE test.t2 TABLESPACE table_space1 STORAGE DISK
|
||||
ENGINE=NDB;
|
||||
SHOW CREATE TABLE test.t2;
|
||||
@@ -236,7 +236,7 @@ t2 CREATE TABLE `t2` (
|
||||
`b2` int(11) NOT NULL,
|
||||
`c2` int(11) NOT NULL,
|
||||
PRIMARY KEY (`pk2`)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
|
||||
) TABLESPACE table_space1 STORAGE DISK ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
|
||||
ALTER TABLE test.t1 ENGINE=NDBCLUSTER;
|
||||
SHOW CREATE TABLE test.t1;
|
||||
Table Create Table
|
||||
|
@@ -533,13 +533,13 @@ SET @aux= "SELECT COUNT(*)
|
||||
prepare my_stmt from @aux;
|
||||
execute my_stmt;
|
||||
COUNT(*)
|
||||
38
|
||||
39
|
||||
execute my_stmt;
|
||||
COUNT(*)
|
||||
38
|
||||
39
|
||||
execute my_stmt;
|
||||
COUNT(*)
|
||||
38
|
||||
39
|
||||
deallocate prepare my_stmt;
|
||||
drop procedure if exists p1|
|
||||
drop table if exists t1|
|
||||
|
@@ -2197,6 +2197,7 @@ Show databases Server Admin To see all databases with SHOW DATABASES
|
||||
Show view Tables To see views with SHOW CREATE VIEW
|
||||
Shutdown Server Admin To shut down the server
|
||||
Super Server Admin To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.
|
||||
Trigger Tables To use triggers
|
||||
Update Tables To update existing rows
|
||||
Usage Server Admin No privileges - allow connect only
|
||||
Variable_name Value
|
||||
@@ -2250,6 +2251,7 @@ Show databases Server Admin To see all databases with SHOW DATABASES
|
||||
Show view Tables To see views with SHOW CREATE VIEW
|
||||
Shutdown Server Admin To shut down the server
|
||||
Super Server Admin To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.
|
||||
Trigger Tables To use triggers
|
||||
Update Tables To update existing rows
|
||||
Usage Server Admin No privileges - allow connect only
|
||||
Variable_name Value
|
||||
|
@@ -7,8 +7,7 @@ DROP DATABASE IF EXISTS mysqltest_db1;
|
||||
CREATE DATABASE mysqltest_db1;
|
||||
CREATE USER mysqltest_dfn@localhost;
|
||||
CREATE USER mysqltest_inv@localhost;
|
||||
GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
|
||||
GRANT CREATE ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
||||
GRANT CREATE, TRIGGER ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
||||
|
||||
---> connection: wl2818_definer_con
|
||||
CREATE TABLE t1(num_value INT);
|
||||
|
@@ -7,12 +7,57 @@ DROP DATABASE IF EXISTS mysqltest_db1;
|
||||
CREATE DATABASE mysqltest_db1;
|
||||
CREATE USER mysqltest_dfn@localhost;
|
||||
CREATE USER mysqltest_inv@localhost;
|
||||
GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
|
||||
GRANT CREATE ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
||||
|
||||
---> connection: wl2818_definer_con
|
||||
CREATE TABLE t1(num_value INT);
|
||||
CREATE TABLE t2(user_str TEXT);
|
||||
|
||||
---> connection: default
|
||||
GRANT INSERT, DELETE ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
|
||||
GRANT INSERT, DELETE ON mysqltest_db1.t2 TO mysqltest_dfn@localhost;
|
||||
|
||||
---> connection: default
|
||||
GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
|
||||
|
||||
---> connection: wl2818_definer_con
|
||||
CREATE TRIGGER trg1 AFTER INSERT ON t1
|
||||
FOR EACH ROW
|
||||
INSERT INTO t2 VALUES(CURRENT_USER());
|
||||
ERROR 42000: TRIGGER command denied to user 'mysqltest_dfn'@'localhost' for table 't1'
|
||||
|
||||
---> connection: default
|
||||
GRANT TRIGGER ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
|
||||
|
||||
---> connection: wl2818_definer_con
|
||||
CREATE TRIGGER trg1 AFTER INSERT ON t1
|
||||
FOR EACH ROW
|
||||
INSERT INTO t2 VALUES(CURRENT_USER());
|
||||
|
||||
---> connection: default
|
||||
REVOKE TRIGGER ON mysqltest_db1.t1 FROM mysqltest_dfn@localhost;
|
||||
|
||||
---> connection: wl2818_definer_con
|
||||
DROP TRIGGER trg1;
|
||||
ERROR 42000: TRIGGER command denied to user 'mysqltest_dfn'@'localhost' for table 't1'
|
||||
|
||||
---> connection: wl2818_definer_con
|
||||
INSERT INTO t1 VALUES(0);
|
||||
ERROR 42000: TRIGGER command denied to user 'mysqltest_dfn'@'localhost' for table 't1'
|
||||
|
||||
---> connection: default
|
||||
GRANT TRIGGER ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
|
||||
|
||||
---> connection: wl2818_definer_con
|
||||
INSERT INTO t1 VALUES(0);
|
||||
DROP TRIGGER trg1;
|
||||
DELETE FROM t1;
|
||||
DELETE FROM t2;
|
||||
|
||||
---> connection: default
|
||||
REVOKE SUPER ON *.* FROM mysqltest_dfn@localhost;
|
||||
|
||||
---> connection: wl2818_definer_con
|
||||
CREATE TRIGGER trg1 AFTER INSERT ON t1
|
||||
FOR EACH ROW
|
||||
INSERT INTO t2 VALUES(CURRENT_USER());
|
||||
@@ -175,6 +220,17 @@ CREATE DEFINER='mysqltest_inv'@'localhost'
|
||||
TRIGGER trg1 BEFORE INSERT ON t1
|
||||
FOR EACH ROW
|
||||
SET @new_sum = 0;
|
||||
ERROR 42000: Access denied; you need the SUPER privilege for this operation
|
||||
|
||||
---> connection: default
|
||||
use mysqltest_db1;
|
||||
GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
|
||||
|
||||
---> connection: wl2818_definer_con
|
||||
CREATE DEFINER='mysqltest_inv'@'localhost'
|
||||
TRIGGER trg1 BEFORE INSERT ON t1
|
||||
FOR EACH ROW
|
||||
SET @new_sum = 0;
|
||||
CREATE DEFINER='mysqltest_nonexs'@'localhost'
|
||||
TRIGGER trg2 AFTER INSERT ON t1
|
||||
FOR EACH ROW
|
||||
@@ -182,7 +238,6 @@ SET @new_sum = 0;
|
||||
Warnings:
|
||||
Note 1449 There is no 'mysqltest_nonexs'@'localhost' registered
|
||||
INSERT INTO t1 VALUES(6);
|
||||
ERROR 42000: Access denied; you need the SUPER privilege for this operation
|
||||
SHOW TRIGGERS;
|
||||
Trigger Event Table Statement Timing Created sql_mode Definer
|
||||
trg1 INSERT t1 SET @new_sum = 0 BEFORE NULL mysqltest_inv@localhost
|
||||
|
@@ -48,10 +48,6 @@ reset master;
|
||||
reset master;
|
||||
|
||||
--connection server2
|
||||
use mysqltest;
|
||||
#alter table test.t2 rename t2;
|
||||
drop table test.t2;
|
||||
create table t2 (a int primary key) engine=ndb;
|
||||
alter table t2 add column (b int);
|
||||
|
||||
--connections server1
|
||||
@@ -71,8 +67,7 @@ ALTER DATABASE mysqltest CHARACTER SET latin1;
|
||||
|
||||
# drop table and drop should come after data events
|
||||
--connection server2
|
||||
insert into t1 values (1);
|
||||
drop table t1;
|
||||
drop table mysqltest.t1;
|
||||
|
||||
--connection server1
|
||||
--replace_column 2 # 4 # 5 #
|
||||
@@ -86,16 +81,18 @@ reset master;
|
||||
reset master;
|
||||
|
||||
--connection server1
|
||||
use test;
|
||||
insert into t2 values (1,2);
|
||||
drop database mysqltest;
|
||||
use test;
|
||||
create table t1 (a int primary key) engine=ndb;
|
||||
|
||||
--connection server2
|
||||
use test;
|
||||
--replace_column 2 # 4 # 5 #
|
||||
--eval show binlog events from $binlog_start
|
||||
|
||||
--connection server2
|
||||
drop table t2;
|
||||
|
||||
# logfile groups and table spaces
|
||||
--connection server1
|
||||
reset master;
|
||||
|
@@ -54,6 +54,8 @@ CREATE TABLE t1
|
||||
TABLESPACE ts1 STORAGE DISK
|
||||
ENGINE=NDB;
|
||||
|
||||
SHOW CREATE TABLE t1;
|
||||
|
||||
INSERT INTO t1 VALUES (0, 0, 0);
|
||||
SELECT * FROM t1;
|
||||
|
||||
|
@@ -35,8 +35,7 @@ CREATE DATABASE mysqltest_db1;
|
||||
CREATE USER mysqltest_dfn@localhost;
|
||||
CREATE USER mysqltest_inv@localhost;
|
||||
|
||||
GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
|
||||
GRANT CREATE ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
||||
GRANT CREATE, TRIGGER ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
||||
|
||||
#
|
||||
# Create a table and the first trigger.
|
||||
|
@@ -44,9 +44,124 @@ CREATE DATABASE mysqltest_db1;
|
||||
CREATE USER mysqltest_dfn@localhost;
|
||||
CREATE USER mysqltest_inv@localhost;
|
||||
|
||||
GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
|
||||
GRANT CREATE ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
||||
|
||||
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
|
||||
--connection wl2818_definer_con
|
||||
--echo
|
||||
--echo ---> connection: wl2818_definer_con
|
||||
|
||||
CREATE TABLE t1(num_value INT);
|
||||
CREATE TABLE t2(user_str TEXT);
|
||||
|
||||
--disconnect wl2818_definer_con
|
||||
|
||||
--connection default
|
||||
--echo
|
||||
--echo ---> connection: default
|
||||
|
||||
GRANT INSERT, DELETE ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
|
||||
GRANT INSERT, DELETE ON mysqltest_db1.t2 TO mysqltest_dfn@localhost;
|
||||
|
||||
#
|
||||
# Check that the user must have TRIGGER privilege to create a trigger.
|
||||
#
|
||||
|
||||
--connection default
|
||||
--echo
|
||||
--echo ---> connection: default
|
||||
|
||||
GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
|
||||
|
||||
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
|
||||
--connection wl2818_definer_con
|
||||
--echo
|
||||
--echo ---> connection: wl2818_definer_con
|
||||
|
||||
--error ER_TABLEACCESS_DENIED_ERROR
|
||||
CREATE TRIGGER trg1 AFTER INSERT ON t1
|
||||
FOR EACH ROW
|
||||
INSERT INTO t2 VALUES(CURRENT_USER());
|
||||
|
||||
--disconnect wl2818_definer_con
|
||||
|
||||
#
|
||||
# Check that the user must have TRIGGER privilege to drop a trigger.
|
||||
#
|
||||
|
||||
--connection default
|
||||
--echo
|
||||
--echo ---> connection: default
|
||||
|
||||
GRANT TRIGGER ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
|
||||
|
||||
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
|
||||
--connection wl2818_definer_con
|
||||
--echo
|
||||
--echo ---> connection: wl2818_definer_con
|
||||
|
||||
CREATE TRIGGER trg1 AFTER INSERT ON t1
|
||||
FOR EACH ROW
|
||||
INSERT INTO t2 VALUES(CURRENT_USER());
|
||||
|
||||
--disconnect wl2818_definer_con
|
||||
|
||||
--connection default
|
||||
--echo
|
||||
--echo ---> connection: default
|
||||
|
||||
REVOKE TRIGGER ON mysqltest_db1.t1 FROM mysqltest_dfn@localhost;
|
||||
|
||||
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
|
||||
--connection wl2818_definer_con
|
||||
--echo
|
||||
--echo ---> connection: wl2818_definer_con
|
||||
|
||||
--error ER_TABLEACCESS_DENIED_ERROR
|
||||
DROP TRIGGER trg1;
|
||||
|
||||
--disconnect wl2818_definer_con
|
||||
|
||||
#
|
||||
# Check that the definer must have TRIGGER privilege to activate a trigger.
|
||||
#
|
||||
|
||||
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
|
||||
--connection wl2818_definer_con
|
||||
--echo
|
||||
--echo ---> connection: wl2818_definer_con
|
||||
|
||||
--error ER_TABLEACCESS_DENIED_ERROR
|
||||
INSERT INTO t1 VALUES(0);
|
||||
|
||||
--disconnect wl2818_definer_con
|
||||
|
||||
--connection default
|
||||
--echo
|
||||
--echo ---> connection: default
|
||||
|
||||
GRANT TRIGGER ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
|
||||
|
||||
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
|
||||
--connection wl2818_definer_con
|
||||
--echo
|
||||
--echo ---> connection: wl2818_definer_con
|
||||
|
||||
INSERT INTO t1 VALUES(0);
|
||||
|
||||
# Cleanup for further tests.
|
||||
DROP TRIGGER trg1;
|
||||
DELETE FROM t1;
|
||||
DELETE FROM t2;
|
||||
|
||||
--disconnect wl2818_definer_con
|
||||
|
||||
--connection default
|
||||
--echo
|
||||
--echo ---> connection: default
|
||||
|
||||
REVOKE SUPER ON *.* FROM mysqltest_dfn@localhost;
|
||||
|
||||
#
|
||||
# Check that triggers are executed under the authorization of the definer:
|
||||
# - create two tables under "definer";
|
||||
@@ -64,9 +179,6 @@ GRANT CREATE ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
||||
--echo
|
||||
--echo ---> connection: wl2818_definer_con
|
||||
|
||||
CREATE TABLE t1(num_value INT);
|
||||
CREATE TABLE t2(user_str TEXT);
|
||||
|
||||
CREATE TRIGGER trg1 AFTER INSERT ON t1
|
||||
FOR EACH ROW
|
||||
INSERT INTO t2 VALUES(CURRENT_USER());
|
||||
@@ -362,10 +474,6 @@ DELETE FROM t1;
|
||||
#
|
||||
# Check DEFINER clause of CREATE TRIGGER statement.
|
||||
#
|
||||
# NOTE: there is no dedicated TRIGGER privilege for CREATE TRIGGER statement.
|
||||
# SUPER privilege is used instead. I.e., if one invokes CREATE TRIGGER, it should
|
||||
# have SUPER privilege, so this test is meaningless right now.
|
||||
#
|
||||
# - Check that SUPER privilege required to create a trigger with different
|
||||
# definer:
|
||||
# - try to create a trigger with DEFINER="definer@localhost" under
|
||||
@@ -391,7 +499,26 @@ use mysqltest_db1;
|
||||
DROP TRIGGER trg1;
|
||||
|
||||
# Check that SUPER is required to specify different DEFINER.
|
||||
# NOTE: meaningless at the moment
|
||||
|
||||
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
||||
CREATE DEFINER='mysqltest_inv'@'localhost'
|
||||
TRIGGER trg1 BEFORE INSERT ON t1
|
||||
FOR EACH ROW
|
||||
SET @new_sum = 0;
|
||||
|
||||
--connection default
|
||||
--echo
|
||||
--echo ---> connection: default
|
||||
|
||||
use mysqltest_db1;
|
||||
|
||||
GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
|
||||
|
||||
--disconnect wl2818_definer_con
|
||||
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
|
||||
--connection wl2818_definer_con
|
||||
--echo
|
||||
--echo ---> connection: wl2818_definer_con
|
||||
|
||||
CREATE DEFINER='mysqltest_inv'@'localhost'
|
||||
TRIGGER trg1 BEFORE INSERT ON t1
|
||||
@@ -407,7 +534,10 @@ CREATE DEFINER='mysqltest_nonexs'@'localhost'
|
||||
|
||||
# Check that trg2 will not be activated.
|
||||
|
||||
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
||||
# --error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
||||
#
|
||||
# TODO: Due to the BUG#13198(SP executes if definer does not exist) the
|
||||
# following statement does not fail as it should.
|
||||
INSERT INTO t1 VALUES(6);
|
||||
|
||||
#
|
||||
|
@@ -75,14 +75,15 @@ then
|
||||
c_d="$c_d Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Event_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||
c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
|
||||
c_d="$c_d KEY User (User)"
|
||||
c_d="$c_d ) engine=MyISAM"
|
||||
c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
|
||||
c_d="$c_d comment='Database privileges';"
|
||||
|
||||
i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y');
|
||||
INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y');"
|
||||
i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y','Y');
|
||||
INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y','Y');"
|
||||
fi
|
||||
|
||||
if test ! -f $mdata/host.frm
|
||||
@@ -111,6 +112,7 @@ then
|
||||
c_h="$c_h Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||
c_h="$c_h PRIMARY KEY Host (Host,Db)"
|
||||
c_h="$c_h ) engine=MyISAM"
|
||||
c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
|
||||
@@ -154,6 +156,7 @@ then
|
||||
c_u="$c_u Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Create_user_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Event_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||
c_u="$c_u ssl_type enum('','ANY','X509', 'SPECIFIED') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
|
||||
c_u="$c_u ssl_cipher BLOB NOT NULL,"
|
||||
c_u="$c_u x509_issuer BLOB NOT NULL,"
|
||||
@@ -169,22 +172,22 @@ then
|
||||
|
||||
if test "$1" = "test"
|
||||
then
|
||||
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||
REPLACE INTO user VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||
REPLACE INTO user VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||
INSERT INTO user (host,user) values ('localhost','');
|
||||
INSERT INTO user (host,user) values ('$hostname','');"
|
||||
else
|
||||
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);"
|
||||
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);"
|
||||
if test "$windows" = "0"
|
||||
then
|
||||
i_u="$i_u
|
||||
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||
INSERT INTO user (host,user) values ('$hostname','');
|
||||
INSERT INTO user (host,user) values ('localhost','');"
|
||||
else
|
||||
i_u="$i_u
|
||||
INSERT INTO user VALUES ('localhost','','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);"
|
||||
INSERT INTO user VALUES ('localhost','','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -234,7 +237,7 @@ then
|
||||
c_t="$c_t Table_name char(64) binary DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t Grantor char(77) DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t Timestamp timestamp,"
|
||||
c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
|
||||
c_t="$c_t PRIMARY KEY (Host,Db,User,Table_name),"
|
||||
c_t="$c_t KEY Grantor (Grantor)"
|
||||
|
@@ -667,3 +667,12 @@ ALTER TABLE event ADD sql_mode
|
||||
'HIGH_NOT_PRECEDENCE'
|
||||
) DEFAULT '' NOT NULL AFTER on_completion;
|
||||
|
||||
--
|
||||
-- TRIGGER privilege
|
||||
--
|
||||
|
||||
SET @hadTriggerPriv := 0;
|
||||
SELECT @hadTriggerPriv :=1 FROM user WHERE Trigger_priv LIKE '%';
|
||||
|
||||
ALTER TABLE user add Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
|
||||
UPDATE user SET Trigger_priv=Super_priv WHERE @hadTriggerPriv = 0;
|
||||
|
@@ -1042,7 +1042,8 @@ int ha_ndbcluster::get_metadata(const char *path)
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
if (m_share->state != NSS_ALTERED && cmp_frm(tab, pack_data, pack_length))
|
||||
if (get_ndb_share_state(m_share) != NSS_ALTERED
|
||||
&& cmp_frm(tab, pack_data, pack_length))
|
||||
{
|
||||
if (!invalidating_ndb_table)
|
||||
{
|
||||
@@ -4435,7 +4436,7 @@ int ha_ndbcluster::create_handler_files(const char *file)
|
||||
NDBDICT *dict= ndb->getDictionary();
|
||||
if (!(tab= dict->getTable(m_tabname)))
|
||||
DBUG_RETURN(0); // Must be a create, ignore since frm is saved in create
|
||||
DBUG_ASSERT(m_share->state == NSS_ALTERED);
|
||||
DBUG_ASSERT(get_ndb_share_state(m_share) == NSS_ALTERED);
|
||||
name= table->s->normalized_path.str;
|
||||
DBUG_PRINT("enter", ("m_tabname: %s, path: %s", m_tabname, name));
|
||||
if (readfrm(name, &data, &length) ||
|
||||
@@ -4454,7 +4455,7 @@ int ha_ndbcluster::create_handler_files(const char *file)
|
||||
my_free((char*)data, MYF(MY_ALLOW_ZERO_PTR));
|
||||
my_free((char*)pack_data, MYF(MY_ALLOW_ZERO_PTR));
|
||||
}
|
||||
m_share->state= NSS_INITIAL;
|
||||
set_ndb_share_state(m_share, NSS_INITIAL);
|
||||
free_share(&m_share); // Decrease ref_count
|
||||
|
||||
DBUG_RETURN(error);
|
||||
@@ -4591,7 +4592,7 @@ int ha_ndbcluster::add_index(TABLE *table_arg,
|
||||
if (!error)
|
||||
{
|
||||
ndbcluster_get_share(m_share); // Increase ref_count
|
||||
m_share->state= NSS_ALTERED;
|
||||
set_ndb_share_state(m_share, NSS_ALTERED);
|
||||
}
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
@@ -4630,7 +4631,7 @@ int ha_ndbcluster::prepare_drop_index(TABLE *table_arg,
|
||||
Ndb *ndb= thd_ndb->ndb;
|
||||
renumber_indexes(ndb, table_arg);
|
||||
ndbcluster_get_share(m_share); // Increase ref_count
|
||||
m_share->state= NSS_ALTERED;
|
||||
set_ndb_share_state(m_share, NSS_ALTERED);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
@@ -5281,7 +5282,7 @@ int ndbcluster_discover(THD* thd, const char *db, const char *name,
|
||||
dict->invalidateTable(name);
|
||||
strxnmov(key, FN_LEN-1, mysql_data_home, "/", db, "/", name, NullS);
|
||||
NDB_SHARE *share= get_share(key, 0, false);
|
||||
if (share && share->state == NSS_ALTERED)
|
||||
if (share && get_ndb_share_state(share) == NSS_ALTERED)
|
||||
{
|
||||
// Frm has been altered on disk, but not yet written to ndb
|
||||
if (readfrm(key, &data, &len))
|
||||
@@ -5533,7 +5534,7 @@ int ndbcluster_find_all_files(THD *thd)
|
||||
else if (cmp_frm(ndbtab, pack_data, pack_length))
|
||||
{
|
||||
NDB_SHARE *share= get_share(key, 0, false);
|
||||
if (!share || share->state != NSS_ALTERED)
|
||||
if (!share || get_ndb_share_state(share) != NSS_ALTERED)
|
||||
{
|
||||
discover= 1;
|
||||
sql_print_information("NDB: mismatch in frm for %s.%s, discovering...",
|
||||
@@ -8907,28 +8908,40 @@ ha_ndbcluster::generate_scan_filter(Ndb_cond_stack *ndb_cond_stack,
|
||||
/*
|
||||
get table space info for SHOW CREATE TABLE
|
||||
*/
|
||||
char* ha_ndbcluster::get_tablespace_create_info()
|
||||
char* ha_ndbcluster::get_tablespace_name()
|
||||
{
|
||||
const char tablespace_key[]= " TABLESPACE ";
|
||||
const char storage_key[]= " STORAGE DISK";
|
||||
char* str= 0;
|
||||
|
||||
Ndb *ndb= get_ndb();
|
||||
NDBDICT *ndbdict= ndb->getDictionary();
|
||||
NdbError ndberr;
|
||||
Uint32 id;
|
||||
ndb->setDatabaseName(m_dbname);
|
||||
const NDBTAB *ndbtab= ndbdict->getTable(m_tabname);
|
||||
if (ndbtab == 0)
|
||||
{
|
||||
ndberr= ndbdict->getNdbError();
|
||||
goto err;
|
||||
}
|
||||
if (!ndbtab->getTablespace(&id))
|
||||
{
|
||||
return 0;
|
||||
|
||||
// TODO retrieve table space name if there is one
|
||||
}
|
||||
{
|
||||
NdbDictionary::Tablespace ts= ndbdict->getTablespace(id);
|
||||
ndberr= ndbdict->getNdbError();
|
||||
if(ndberr.classification != ndberror_cl_none)
|
||||
goto err;
|
||||
return (my_strdup(ts.getName(), MYF(0)));
|
||||
}
|
||||
err:
|
||||
if (ndberr.status == NdbError::TemporaryError)
|
||||
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
|
||||
ER_GET_TEMPORARY_ERRMSG, ER(ER_GET_TEMPORARY_ERRMSG),
|
||||
ndberr.code, ndberr.message, "NDB");
|
||||
else
|
||||
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
|
||||
ER_GET_ERRMSG, ER(ER_GET_ERRMSG),
|
||||
ndberr.code, ndberr.message, "NDB");
|
||||
return 0;
|
||||
|
||||
const char *tablespace_name= "<name>";
|
||||
|
||||
uint len= sizeof(tablespace_key) + strlen(tablespace_name) + sizeof(storage_key);
|
||||
str= my_malloc(len, MYF(0));
|
||||
strxnmov(str, len, tablespace_key, tablespace_name, storage_key, NullS);
|
||||
return(str);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -9526,7 +9539,7 @@ int ndbcluster_alter_tablespace(THD* thd, st_alter_tablespace *info)
|
||||
DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_NDB_BINLOG
|
||||
if (is_tablespace)
|
||||
ndbcluster_log_schema_op(thd, 0,
|
||||
thd->query, thd->query_length,
|
||||
@@ -9539,7 +9552,7 @@ int ndbcluster_alter_tablespace(THD* thd, st_alter_tablespace *info)
|
||||
"", info->logfile_group_name,
|
||||
0, 0,
|
||||
SOT_LOGFILE_GROUP);
|
||||
|
||||
#endif
|
||||
DBUG_RETURN(FALSE);
|
||||
|
||||
ndberror:
|
||||
|
@@ -118,6 +118,26 @@ typedef struct st_ndbcluster_share {
|
||||
#endif
|
||||
} NDB_SHARE;
|
||||
|
||||
inline
|
||||
NDB_SHARE_STATE
|
||||
get_ndb_share_state(NDB_SHARE *share)
|
||||
{
|
||||
NDB_SHARE_STATE state;
|
||||
pthread_mutex_lock(&share->mutex);
|
||||
state= share->state;
|
||||
pthread_mutex_unlock(&share->mutex);
|
||||
return state;
|
||||
}
|
||||
|
||||
inline
|
||||
void
|
||||
set_ndb_share_state(NDB_SHARE *share, NDB_SHARE_STATE state)
|
||||
{
|
||||
pthread_mutex_lock(&share->mutex);
|
||||
share->state= state;
|
||||
pthread_mutex_unlock(&share->mutex);
|
||||
}
|
||||
|
||||
#ifdef HAVE_NDB_BINLOG
|
||||
/* NDB_SHARE.flags */
|
||||
#define NSF_HIDDEN_PK 1 /* table has hidden primary key */
|
||||
@@ -701,7 +721,7 @@ private:
|
||||
uint set_up_partition_info(partition_info *part_info,
|
||||
TABLE *table,
|
||||
void *tab);
|
||||
char* get_tablespace_create_info();
|
||||
char* get_tablespace_name();
|
||||
int set_range_data(void *tab, partition_info* part_info);
|
||||
int set_list_data(void *tab, partition_info* part_info);
|
||||
int complemented_pk_read(const byte *old_data, byte *new_data,
|
||||
|
@@ -1715,6 +1715,12 @@ int ndbcluster_create_binlog_setup(Ndb *ndb, const char *key,
|
||||
|
||||
if (share)
|
||||
{
|
||||
if (share->op || share->op_old)
|
||||
{
|
||||
my_errno= HA_ERR_TABLE_EXIST;
|
||||
pthread_mutex_unlock(&ndbcluster_mutex);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
handle_trailing_share(share);
|
||||
}
|
||||
|
||||
|
@@ -1716,8 +1716,8 @@ public:
|
||||
{ return FALSE; }
|
||||
virtual char* get_foreign_key_create_info()
|
||||
{ return(NULL);} /* gets foreign key create string from InnoDB */
|
||||
virtual char* get_tablespace_create_info()
|
||||
{ return(NULL);} /* gets tablespace create string from handler */
|
||||
virtual char* get_tablespace_name()
|
||||
{ return(NULL);} /* gets tablespace name from handler */
|
||||
/* used in ALTER TABLE; 1 if changing storage engine is allowed */
|
||||
virtual bool can_switch_engines() { return 1; }
|
||||
/* used in REPLACE; is > 0 if table is referred by a FOREIGN KEY */
|
||||
|
@@ -361,6 +361,12 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
|
||||
if (table->s->fields <= 37 && (user.access & CREATE_ACL))
|
||||
user.access|= EVENT_ACL;
|
||||
|
||||
/*
|
||||
if it is pre 5.1.6 privilege then map TRIGGER privilege on CREATE.
|
||||
*/
|
||||
if (table->s->fields <= 38 && (user.access & SUPER_ACL))
|
||||
user.access|= TRIGGER_ACL;
|
||||
|
||||
user.sort= get_sort(2,user.host.hostname,user.user);
|
||||
user.hostname_length= (user.host.hostname ?
|
||||
(uint) strlen(user.host.hostname) : 0);
|
||||
@@ -4070,13 +4076,13 @@ static const char *command_array[]=
|
||||
"ALTER", "SHOW DATABASES", "SUPER", "CREATE TEMPORARY TABLES",
|
||||
"LOCK TABLES", "EXECUTE", "REPLICATION SLAVE", "REPLICATION CLIENT",
|
||||
"CREATE VIEW", "SHOW VIEW", "CREATE ROUTINE", "ALTER ROUTINE",
|
||||
"CREATE USER", "EVENT"
|
||||
"CREATE USER", "EVENT", "TRIGGER"
|
||||
};
|
||||
|
||||
static uint command_lengths[]=
|
||||
{
|
||||
6, 6, 6, 6, 6, 4, 6, 8, 7, 4, 5, 10, 5, 5, 14, 5, 23, 11, 7, 17, 18, 11, 9,
|
||||
14, 13, 11, 5
|
||||
14, 13, 11, 5, 7
|
||||
};
|
||||
|
||||
|
||||
|
@@ -43,6 +43,7 @@
|
||||
#define ALTER_PROC_ACL (1L << 24)
|
||||
#define CREATE_USER_ACL (1L << 25)
|
||||
#define EVENT_ACL (1L << 26)
|
||||
#define TRIGGER_ACL (1L << 27)
|
||||
/*
|
||||
don't forget to update
|
||||
1. static struct show_privileges_st sys_privileges[]
|
||||
@@ -57,12 +58,12 @@
|
||||
(UPDATE_ACL | SELECT_ACL | INSERT_ACL | DELETE_ACL | CREATE_ACL | DROP_ACL | \
|
||||
GRANT_ACL | REFERENCES_ACL | INDEX_ACL | ALTER_ACL | CREATE_TMP_ACL | \
|
||||
LOCK_TABLES_ACL | EXECUTE_ACL | CREATE_VIEW_ACL | SHOW_VIEW_ACL | \
|
||||
CREATE_PROC_ACL | ALTER_PROC_ACL | EVENT_ACL)
|
||||
CREATE_PROC_ACL | ALTER_PROC_ACL | EVENT_ACL | TRIGGER_ACL)
|
||||
|
||||
#define TABLE_ACLS \
|
||||
(SELECT_ACL | INSERT_ACL | UPDATE_ACL | DELETE_ACL | CREATE_ACL | DROP_ACL | \
|
||||
GRANT_ACL | REFERENCES_ACL | INDEX_ACL | ALTER_ACL | CREATE_VIEW_ACL | \
|
||||
SHOW_VIEW_ACL)
|
||||
SHOW_VIEW_ACL | TRIGGER_ACL)
|
||||
|
||||
#define COL_ACLS \
|
||||
(SELECT_ACL | INSERT_ACL | UPDATE_ACL | REFERENCES_ACL)
|
||||
@@ -79,7 +80,7 @@
|
||||
REFERENCES_ACL | INDEX_ACL | ALTER_ACL | SHOW_DB_ACL | SUPER_ACL | \
|
||||
CREATE_TMP_ACL | LOCK_TABLES_ACL | REPL_SLAVE_ACL | REPL_CLIENT_ACL | \
|
||||
EXECUTE_ACL | CREATE_VIEW_ACL | SHOW_VIEW_ACL | CREATE_PROC_ACL | \
|
||||
ALTER_PROC_ACL | CREATE_USER_ACL | EVENT_ACL)
|
||||
ALTER_PROC_ACL | CREATE_USER_ACL | EVENT_ACL | TRIGGER_ACL)
|
||||
|
||||
#define DEFAULT_CREATE_PROC_ACLS \
|
||||
(ALTER_PROC_ACL | EXECUTE_ACL)
|
||||
@@ -97,7 +98,7 @@
|
||||
#define DB_CHUNK3 (CREATE_VIEW_ACL | SHOW_VIEW_ACL | \
|
||||
CREATE_PROC_ACL | ALTER_PROC_ACL )
|
||||
#define DB_CHUNK4 (EXECUTE_ACL)
|
||||
#define DB_CHUNK5 (EVENT_ACL)
|
||||
#define DB_CHUNK5 (EVENT_ACL | TRIGGER_ACL)
|
||||
|
||||
#define fix_rights_for_db(A) (((A) & DB_CHUNK0) | \
|
||||
(((A) << 4) & DB_CHUNK1) | \
|
||||
@@ -114,12 +115,15 @@
|
||||
#define TBL_CHUNK0 DB_CHUNK0
|
||||
#define TBL_CHUNK1 DB_CHUNK1
|
||||
#define TBL_CHUNK2 (CREATE_VIEW_ACL | SHOW_VIEW_ACL)
|
||||
#define TBL_CHUNK3 TRIGGER_ACL
|
||||
#define fix_rights_for_table(A) (((A) & TBL_CHUNK0) | \
|
||||
(((A) << 4) & TBL_CHUNK1) | \
|
||||
(((A) << 11) & TBL_CHUNK2))
|
||||
(((A) << 11) & TBL_CHUNK2) | \
|
||||
(((A) << 15) & TBL_CHUNK3))
|
||||
#define get_rights_for_table(A) (((A) & TBL_CHUNK0) | \
|
||||
(((A) & TBL_CHUNK1) >> 4) | \
|
||||
(((A) & TBL_CHUNK2) >> 11))
|
||||
(((A) & TBL_CHUNK2) >> 11) | \
|
||||
(((A) & TBL_CHUNK3) >> 15))
|
||||
#define fix_rights_for_column(A) (((A) & 7) | (((A) & ~7) << 8))
|
||||
#define get_rights_for_column(A) (((A) & 7) | ((A) >> 8))
|
||||
#define fix_rights_for_procedure(A) ((((A) << 18) & EXECUTE_ACL) | \
|
||||
|
@@ -264,6 +264,7 @@ static struct show_privileges_st sys_privileges[]=
|
||||
{"Show view","Tables","To see views with SHOW CREATE VIEW"},
|
||||
{"Shutdown","Server Admin", "To shut down the server"},
|
||||
{"Super","Server Admin","To use KILL thread, SET GLOBAL, CHANGE MASTER, etc."},
|
||||
{"Trigger","Tables", "To use triggers"},
|
||||
{"Update", "Tables", "To update existing rows"},
|
||||
{"Usage","Server Admin","No privileges - allow connect only"},
|
||||
{NullS, NullS, NullS}
|
||||
@@ -1137,9 +1138,11 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
|
||||
to the CREATE TABLE statement
|
||||
*/
|
||||
|
||||
if ((for_str= file->get_tablespace_create_info()))
|
||||
if ((for_str= file->get_tablespace_name()))
|
||||
{
|
||||
packet->append(" TABLESPACE ");
|
||||
packet->append(for_str, strlen(for_str));
|
||||
packet->append(" STORAGE DISK");
|
||||
my_free(for_str, MYF(0));
|
||||
}
|
||||
|
||||
|
@@ -177,12 +177,20 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
|
||||
DBUG_ASSERT(tables->next_global == 0);
|
||||
|
||||
/*
|
||||
TODO: We should check if user has TRIGGER privilege for table here.
|
||||
Now we just require SUPER privilege for creating/dropping because
|
||||
we don't have proper privilege checking for triggers in place yet.
|
||||
Check that the user has TRIGGER privilege on the subject table.
|
||||
*/
|
||||
if (check_global_access(thd, SUPER_ACL))
|
||||
{
|
||||
bool err_status;
|
||||
TABLE_LIST **save_query_tables_own_last= thd->lex->query_tables_own_last;
|
||||
thd->lex->query_tables_own_last= 0;
|
||||
|
||||
err_status= check_table_access(thd, TRIGGER_ACL, tables, 0);
|
||||
|
||||
thd->lex->query_tables_own_last= save_query_tables_own_last;
|
||||
|
||||
if (err_status)
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
/*
|
||||
There is no DETERMINISTIC clause for triggers, so can't check it.
|
||||
@@ -1151,24 +1159,10 @@ bool Table_triggers_list::process_triggers(THD *thd, trg_event_type event,
|
||||
if (sp_change_security_context(thd, sp_trigger, &save_ctx))
|
||||
return TRUE;
|
||||
|
||||
/*
|
||||
NOTE: TRIGGER_ACL should be used below.
|
||||
*/
|
||||
|
||||
if (check_global_access(thd, SUPER_ACL))
|
||||
{
|
||||
sp_restore_security_context(thd, save_ctx);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
If the trigger uses special variables (NEW/OLD), check that we have
|
||||
SELECT and UPDATE privileges on the subject table.
|
||||
*/
|
||||
|
||||
if (is_special_var_used(event, time_type))
|
||||
{
|
||||
TABLE_LIST table_list, **save_query_tables_own_last;
|
||||
ulong wanted_access = TRIGGER_ACL;
|
||||
|
||||
bzero((char *) &table_list, sizeof (table_list));
|
||||
table_list.db= (char *) table->s->db.str;
|
||||
table_list.db_length= table->s->db.length;
|
||||
@@ -1179,8 +1173,16 @@ bool Table_triggers_list::process_triggers(THD *thd, trg_event_type event,
|
||||
save_query_tables_own_last= thd->lex->query_tables_own_last;
|
||||
thd->lex->query_tables_own_last= 0;
|
||||
|
||||
err_status= check_table_access(thd, SELECT_ACL | UPDATE_ACL,
|
||||
&table_list, 0);
|
||||
/*
|
||||
If the trigger uses special variables (NEW/OLD), check that we have
|
||||
SELECT and UPDATE privileges on the subject table.
|
||||
*/
|
||||
|
||||
if (is_special_var_used(event, time_type))
|
||||
wanted_access|= SELECT_ACL | UPDATE_ACL;
|
||||
|
||||
err_status= check_table_access(thd, wanted_access, &table_list, 0);
|
||||
|
||||
thd->lex->query_tables_own_last= save_query_tables_own_last;
|
||||
if (err_status)
|
||||
{
|
||||
|
@@ -10237,6 +10237,7 @@ object_privilege:
|
||||
| ALTER ROUTINE_SYM { Lex->grant |= ALTER_PROC_ACL; }
|
||||
| CREATE USER { Lex->grant |= CREATE_USER_ACL; }
|
||||
| EVENT_SYM { Lex->grant |= EVENT_ACL;}
|
||||
| TRIGGER_SYM { Lex->grant |= TRIGGER_ACL; }
|
||||
;
|
||||
|
||||
|
||||
|
@@ -783,7 +783,7 @@ public:
|
||||
void setTablespace(const char * name);
|
||||
void setTablespace(const class Tablespace &);
|
||||
const char * getTablespace() const;
|
||||
Uint32 getTablespaceId() const;
|
||||
bool getTablespace(Uint32 *id= 0, Uint32 *version= 0) const;
|
||||
|
||||
/**
|
||||
* Get table object type
|
||||
@@ -1736,6 +1736,7 @@ public:
|
||||
int createTablespace(const Tablespace &);
|
||||
int dropTablespace(const Tablespace&);
|
||||
Tablespace getTablespace(const char * name);
|
||||
Tablespace getTablespace(Uint32 tablespaceId);
|
||||
|
||||
int createDatafile(const Datafile &, bool overwrite_existing = false);
|
||||
int dropDatafile(const Datafile&);
|
||||
|
@@ -181,7 +181,15 @@ Suma::execREAD_CONFIG_REQ(Signal* signal)
|
||||
c_subscriptionPool.setSize(noTables);
|
||||
c_syncPool.setSize(2);
|
||||
c_dataBufferPool.setSize(noAttrs);
|
||||
c_gcp_pool.setSize(10);
|
||||
|
||||
// Calculate needed gcp pool as 10 records + the ones needed
|
||||
// during a possible api timeout
|
||||
Uint32 dbApiHbInterval, gcpInterval;
|
||||
ndb_mgm_get_int_parameter(p, CFG_DB_API_HEARTBEAT_INTERVAL,
|
||||
&dbApiHbInterval);
|
||||
ndb_mgm_get_int_parameter(p, CFG_DB_GCP_INTERVAL,
|
||||
&gcpInterval);
|
||||
c_gcp_pool.setSize(10 + (4*dbApiHbInterval)/gcpInterval);
|
||||
|
||||
c_page_chunk_pool.setSize(50);
|
||||
|
||||
|
@@ -600,10 +600,16 @@ NdbDictionary::Table::createTableInDb(Ndb* pNdb, bool equalOk) const {
|
||||
return pNdb->getDictionary()->createTable(* this);
|
||||
}
|
||||
|
||||
Uint32
|
||||
NdbDictionary::Table::getTablespaceId() const
|
||||
bool
|
||||
NdbDictionary::Table::getTablespace(Uint32 *id, Uint32 *version) const
|
||||
{
|
||||
return m_impl.m_tablespace_id;
|
||||
if (m_impl.m_tablespace_id == RNIL)
|
||||
return false;
|
||||
if (id)
|
||||
*id= m_impl.m_tablespace_id;
|
||||
if (version)
|
||||
*version= m_impl.m_version;
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1687,6 +1693,15 @@ NdbDictionary::Dictionary::getTablespace(const char * name){
|
||||
return tmp;
|
||||
}
|
||||
|
||||
NdbDictionary::Tablespace
|
||||
NdbDictionary::Dictionary::getTablespace(Uint32 tablespaceId){
|
||||
NdbDictionary::Tablespace tmp;
|
||||
m_impl.m_receiver.get_filegroup(NdbTablespaceImpl::getImpl(tmp),
|
||||
NdbDictionary::Object::Tablespace,
|
||||
tablespaceId);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
int
|
||||
NdbDictionary::Dictionary::createDatafile(const Datafile & df, bool force){
|
||||
return m_impl.createDatafile(NdbDatafileImpl::getImpl(df), force);
|
||||
|
@@ -658,11 +658,11 @@ BackupRestore::table(const TableS & table){
|
||||
NdbDictionary::Table copy(*table.m_dictTable);
|
||||
|
||||
copy.setName(split[2].c_str());
|
||||
if (copy.getTablespaceId() != RNIL)
|
||||
Uint32 id;
|
||||
if (copy.getTablespace(&id))
|
||||
{
|
||||
Uint32 id = copy.getTablespaceId();
|
||||
debug << "Connecting " << name << " to tablespace oldid: " << id << flush;
|
||||
NdbDictionary::Tablespace* ts = m_tablespaces[copy.getTablespaceId()];
|
||||
NdbDictionary::Tablespace* ts = m_tablespaces[id];
|
||||
debug << " newid: " << ts->getObjectId() << endl;
|
||||
copy.setTablespace(* ts);
|
||||
}
|
||||
|
Reference in New Issue
Block a user