You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
673 lines
20 KiB
673 lines
20 KiB
#Test requires MyISAM SE
|
|
--source include/force_myisam_default.inc
|
|
--source include/have_myisam.inc
|
|
|
|
--echo #
|
|
--echo # Testing WL#7524 - Import from SDI files
|
|
--echo #
|
|
|
|
--echo # Setup test environment
|
|
let $MYSQLD_DATADIR=`SELECT @@datadir`;
|
|
--perl
|
|
chdir $ENV{'MYSQL_TMP_DIR'};
|
|
mkdir "export";
|
|
EOF
|
|
let $EXPORT_DIR= $MYSQL_TMP_DIR/export;
|
|
|
|
|
|
--echo #
|
|
--echo # IM-NEG-1: Schema missing/wrong schema name in SDI
|
|
--echo #
|
|
CREATE SCHEMA s1;
|
|
CREATE TABLE s1.t1(i VARCHAR(32)) ENGINE MYISAM;
|
|
INSERT INTO s1.t1 VALUES ('abc'), ('DEF'), ('Ghi'), ('ghI');
|
|
SELECT I FROM s1.t1 ORDER BY i;
|
|
|
|
FLUSH TABLES WITH READ LOCK;
|
|
--echo # Copy s1.t1 files to tmp dir
|
|
--copy_files_wildcard $MYSQLD_DATADIR/s1/ $EXPORT_DIR t1*
|
|
UNLOCK TABLES;
|
|
DROP TABLE s1.t1;
|
|
DROP SCHEMA s1;
|
|
|
|
CREATE SCHEMA s2;
|
|
--echo # Copy t1 files into s2
|
|
--copy_files_wildcard $EXPORT_DIR $MYSQLD_DATADIR/s2/ t1*
|
|
--replace_regex /_[0-9]+\.sdi/_XXX.sdi/
|
|
--list_files $MYSQLD_DATADIR/s2
|
|
|
|
--error ER_IMP_SCHEMA_DOES_NOT_EXIST
|
|
IMPORT TABLE FROM 's2/t1*.sdi';
|
|
--remove_files_wildcard $MYSQLD_DATADIR/s2/ *
|
|
DROP SCHEMA s2;
|
|
--echo # Clean \$EXPORT_DIR
|
|
--remove_files_wildcard $EXPORT_DIR *
|
|
|
|
--echo #
|
|
--echo # IM-NEG-1.1: Verfy that import using relative path to .sdi file
|
|
--echo # fails when not having a default schema.
|
|
--echo #
|
|
--echo # Connect without schema
|
|
connect (con_noschema,localhost,root,,*NO-ONE*);
|
|
--error ER_NO_DB_ERROR
|
|
IMPORT TABLE FROM 't1_*.sdi';
|
|
--echo # Don't need the current schema in this case, but check_access()
|
|
--echo # requires it
|
|
--error ER_NO_DB_ERROR
|
|
IMPORT TABLE FROM 's1/t1_*.sdi';
|
|
|
|
disconnect con_noschema;
|
|
connection default;
|
|
|
|
--echo #
|
|
--echo # IM-NEG-2: Table already exists in schema
|
|
--echo #
|
|
CREATE TABLE t1(i VARCHAR(32)) ENGINE MYISAM;
|
|
INSERT INTO t1 VALUES ('abc'), ('DEF'), ('Ghi'), ('ghI');
|
|
SELECT i FROM t1 ORDER BY i;
|
|
|
|
--error ER_IMP_TABLE_ALREADY_EXISTS
|
|
IMPORT TABLE FROM 't1*.sdi';
|
|
|
|
DROP TABLE t1;
|
|
|
|
|
|
--echo #
|
|
--echo # IM-NEG-3: Detection/diagnosis of non-matching pattern.
|
|
--echo #
|
|
--error ER_IMP_NO_FILES_MATCHED
|
|
IMPORT TABLE FROM 'pattern_which_matches_nothing';
|
|
|
|
--echo #
|
|
--echo # IM-NEG-4: Detection/diagnosis of access to path not permitted by
|
|
--echo # --secure-file-priv setting
|
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
|
--error ER_OPTION_PREVENTS_STATEMENT,ER_OPTION_PREVENTS_STATEMENT
|
|
eval IMPORT TABLE FROM '$MYSQL_TEST_DIR/t/import.test';
|
|
|
|
--echo #
|
|
--echo # IM-NEG-5: Detection/diagnosis of corrupted SDI
|
|
--echo #
|
|
CREATE TABLE t1 (i int) ENGINE MYISAM;
|
|
|
|
--error ER_WRONG_FILE_NAME
|
|
IMPORT TABLE FROM 't1.MYD';
|
|
|
|
--copy_file $MYSQLD_DATADIR/test/t1.MYD $MYSQLD_DATADIR/test/t1.sdi
|
|
--error ER_INVALID_JSON_DATA
|
|
IMPORT TABLE FROM 't1.sdi';
|
|
DROP TABLE t1;
|
|
--remove_file $MYSQLD_DATADIR/test/t1.sdi
|
|
|
|
--echo #
|
|
--echo # IM-NEG-5.1: Verfy that import of an .sdi file which is valid json, but
|
|
--echo # corrupt at the application level is handled correctly.
|
|
--echo #
|
|
|
|
CREATE TABLE t1(i INT) ENGINE MYISAM;
|
|
--echo # Save SDI file in export dir
|
|
--copy_files_wildcard $MYSQLD_DATADIR/test/ $EXPORT_DIR t1_*.sdi
|
|
DROP TABLE t1;
|
|
--echo # Create new version of t1
|
|
CREATE TABLE t1(i VARCHAR(32)) ENGINE MYISAM;
|
|
INSERT INTO t1 VALUES ('AAA'), ('BBB'), ('CCC');
|
|
FLUSH TABLES WITH READ LOCK;
|
|
--echo # Export .MYD and .MYI of the new t1
|
|
--copy_files_wildcard $MYSQLD_DATADIR/test/ $EXPORT_DIR t1.MY*
|
|
UNLOCK TABLES;
|
|
DROP TABLE t1;
|
|
|
|
--echo # First attempt to import without having copied back the data files,
|
|
--echo # which will fail
|
|
--copy_files_wildcard $EXPORT_DIR $MYSQLD_DATADIR/test/ t1_*.sdi
|
|
--error ER_FILE_NOT_FOUND
|
|
IMPORT TABLE FROM 't1_*.sdi';
|
|
|
|
--echo # Restore .MYD and .MYI of the new t1
|
|
--copy_files_wildcard $EXPORT_DIR $MYSQLD_DATADIR/test/ t1*
|
|
--echo # Import t1 using the old SDI file. Will succeed with warning since
|
|
--echo # we cannot open the imported table
|
|
IMPORT TABLE FROM 't1_*.sdi';
|
|
|
|
--echo # Try to repair table as suggested in warning (will not work in
|
|
--echo # this case)
|
|
REPAIR TABLE t1;
|
|
DROP TABLE t1;
|
|
|
|
--echo # Clean datadir and \$EXPORT_DIR
|
|
--remove_files_wildcard $MYSQLD_DATADIR/test/ t1*
|
|
--remove_files_wildcard $EXPORT_DIR *
|
|
|
|
--echo #
|
|
--echo # IM-NEG-6: Verify that concurrent use (from other threads)
|
|
--echo # of names of objects involved in import are detected,
|
|
--echo # and rejected as appropriate.
|
|
--echo #
|
|
CREATE TABLE t1(i INT) ENGINE MYISAM;
|
|
LOCK TABLES t1 WRITE;
|
|
|
|
--echo # Start new connection which will attempt to import locked table
|
|
connect (importcon,localhost,root,,);
|
|
SET @@session.lock_wait_timeout= 1;
|
|
--error ER_LOCK_WAIT_TIMEOUT
|
|
IMPORT TABLE FROM 't1_*.sdi';
|
|
|
|
--echo # Switch back to default and disconnect import connection
|
|
connection default;
|
|
disconnect importcon;
|
|
|
|
UNLOCK TABLES;
|
|
DROP TABLE t1;
|
|
|
|
|
|
--echo #
|
|
--echo # IM-NEG-7: Verify that SDI version mismatch is
|
|
--echo # diagnosed appropriately.
|
|
--echo #
|
|
CREATE TABLE t1(i INT) ENGINE=MYISAM;
|
|
|
|
--echo # Copy SDI file to export dir
|
|
--copy_files_wildcard $MYSQLD_DATADIR/test/ $EXPORT_DIR t1_*.sdi
|
|
|
|
--echo # Use perl to patch sdi_version in SDI file
|
|
--perl
|
|
opendir(TMP, "$ENV{'MYSQL_TMP_DIR'}/export");
|
|
chdir "$ENV{'MYSQL_TMP_DIR'}/export";
|
|
while ($_= readdir(TMP))
|
|
{
|
|
next unless (/(.+)_\d+\.sdi/);
|
|
my $base= $1;
|
|
rename $_, "${base}.sdi";
|
|
}
|
|
closedir(TMP);
|
|
open(T1, "t1.sdi");
|
|
open(T1_, ">t1_.sdi");
|
|
while (<T1>)
|
|
{
|
|
s/("sdi_version": ?)\d+,/${1}42,/g;
|
|
print T1_ $_;
|
|
}
|
|
close(T1);
|
|
close(T1_);
|
|
EOF
|
|
|
|
--echo # Copy SDI file back into data dir
|
|
--copy_files_wildcard $EXPORT_DIR $MYSQLD_DATADIR/test/ t1_.sdi
|
|
|
|
# List error twice to avoid echoing error message, which will contain the
|
|
# current server version number
|
|
--error ER_IMP_INCOMPATIBLE_SDI_VERSION,ER_IMP_INCOMPATIBLE_SDI_VERSION
|
|
IMPORT TABLE FROM 't1_.sdi';
|
|
DROP TABLE t1;
|
|
--remove_files_wildcard $EXPORT_DIR *
|
|
--remove_files_wildcard $MYSQLD_DATADIR/test/ t1_.sdi
|
|
|
|
|
|
--echo #
|
|
--echo # IM-NEG-8 Verify that CREATE and FILE privileges are required
|
|
--echo # for IMPORT
|
|
--echo #
|
|
--echo # Create schema which does not match test* pattern which has special
|
|
--echo # privileges
|
|
CREATE SCHEMA s1;
|
|
CREATE TABLE s1.t1(i INT) ENGINE MYISAM;
|
|
--echo # Create user without any privileges.
|
|
CREATE USER noimportforyou@localhost;
|
|
REVOKE ALL ON *.* FROM noimportforyou@localhost;
|
|
|
|
--echo # Connect as user noimportforyou@localhost;
|
|
connect (con_noimport,localhost,noimportforyou,,);
|
|
|
|
--echo # Should fail due to missing privileges
|
|
--error ER_ACCESS_DENIED_ERROR
|
|
IMPORT TABLE FROM 's1/t1_*.sdi';
|
|
|
|
--echo # Disconnect and switch back to default connection
|
|
disconnect con_noimport;
|
|
connection default;
|
|
GRANT FILE ON *.* TO noimportforyou@localhost;
|
|
|
|
--echo # Connect as user noimportforyou@localhost - now with FILE privilege
|
|
connect (con_noimport,localhost,noimportforyou,,);
|
|
--echo # Should fail due to missing CREATE privilege
|
|
--error ER_TABLEACCESS_DENIED_ERROR
|
|
IMPORT TABLE FROM 's1/t1_*.sdi';
|
|
|
|
--echo # Disconnect and switch back to default connection
|
|
disconnect con_noimport;
|
|
connection default;
|
|
--echo # Grant general CREATE privilege
|
|
GRANT CREATE ON *.* TO noimportforyou@localhost;
|
|
--echo # Connect as user noimportforyou@localhost - now with FILE & CREATE
|
|
--echo # privilege
|
|
connect (con_noimport,localhost,noimportforyou,,s1);
|
|
|
|
--echo # Should have sufficient privileges, but fail because t1 already exist
|
|
--error ER_IMP_TABLE_ALREADY_EXISTS
|
|
IMPORT TABLE FROM 't1_*.sdi';
|
|
--list_files $MYSQLD_DATADIR/test t*
|
|
|
|
--echo # Disconnect and switch back to default connection
|
|
disconnect con_noimport;
|
|
connection default;
|
|
--echo # Revoke general CREATE privilege
|
|
REVOKE CREATE ON *.* FROM noimportforyou@localhost;
|
|
--echo # Grant CREATE privilege on s1 schema
|
|
GRANT CREATE ON s1.* TO noimportforyou@localhost;
|
|
|
|
--echo # Connect as user noimportforyou@localhost - now with FILE & CREATE
|
|
--echo # privilege on s1.*
|
|
connect (con_noimport,localhost,noimportforyou,,s1);
|
|
--echo # Should have sufficient privileges, but fail because t1 already exist
|
|
--error ER_IMP_TABLE_ALREADY_EXISTS
|
|
IMPORT TABLE FROM 't1_*.sdi';
|
|
|
|
--echo # Disconnect and switch back to default connection
|
|
disconnect con_noimport;
|
|
connection default;
|
|
--echo # Revoke CREATE privilege on s1 schema
|
|
REVOKE CREATE ON s1.* FROM noimportforyou@localhost;
|
|
--echo # Grant CREATE privilege on s1.t1
|
|
GRANT CREATE ON s1.t1 TO noimportforyou@localhost;
|
|
|
|
--echo # Connect as user noimportforyou@localhost - now with FILE & CREATE
|
|
--echo # privilege on test.t1
|
|
connect (con_noimport,localhost,noimportforyou,,s1);
|
|
|
|
--echo # Should have sufficient privileges, but fail because t1 already exist
|
|
--error ER_IMP_TABLE_ALREADY_EXISTS
|
|
IMPORT TABLE FROM 't1_*.sdi';
|
|
|
|
--echo # Disconnect and switch back to default connection
|
|
disconnect con_noimport;
|
|
connection default;
|
|
--echo # Revoke FILE privilege
|
|
REVOKE FILE ON *.* FROM noimportforyou@localhost;
|
|
|
|
--echo # Connect as user noimportforyou@localhost - now with only CREATE
|
|
--echo # privilege on test.t1
|
|
connect (con_noimport,localhost,noimportforyou,,s1);
|
|
|
|
--echo # Should fail due to missing FILE privilege
|
|
--error ER_ACCESS_DENIED_ERROR
|
|
IMPORT TABLE FROM 't1_*.sdi';
|
|
|
|
--echo # Disconnect and switch back to default connection
|
|
disconnect con_noimport;
|
|
connection default;
|
|
|
|
DROP USER noimportforyou@localhost;
|
|
DROP TABLE s1.t1;
|
|
DROP SCHEMA s1;
|
|
|
|
|
|
--echo #
|
|
--echo # IM-POS-2: Export, drop and import back table
|
|
--echo #
|
|
CREATE TABLE t1 (i INT) ENGINE=MYISAM;
|
|
INSERT INTO t1 VALUES (1), (3), (5);
|
|
SELECT * FROM t1;
|
|
CREATE TABLE t2 (i INT) ENGINE=MYISAM;
|
|
INSERT INTO t2 VALUES (2), (4), (6);
|
|
SELECT * FROM t2;
|
|
CREATE VIEW v2 AS SELECT * FROM t2;
|
|
SELECT * FROM v2;
|
|
|
|
FLUSH TABLES WITH READ LOCK;
|
|
--echo # Copy t1 files to export dir
|
|
--copy_files_wildcard $MYSQLD_DATADIR/test/ $EXPORT_DIR t*
|
|
UNLOCK TABLES;
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
--echo # Check that the view is now invalid.
|
|
CHECK TABLE v2;
|
|
--echo # Copy files back into datadir
|
|
--copy_files_wildcard $EXPORT_DIR $MYSQLD_DATADIR/test/ t*
|
|
IMPORT TABLE FROM 't1_*.sdi', 't2_*.sdi';
|
|
SHOW CREATE TABLE t1;
|
|
SHOW CREATE TABLE t2;
|
|
SELECT * FROM t1;
|
|
SELECT * FROM t2;
|
|
--echo # Check that the view is now valid.
|
|
CHECK TABLE v2;
|
|
SELECT * FROM v2;
|
|
DROP VIEW v2;
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
--echo # Clean SDI files in \$EXPORT_DIR
|
|
--remove_files_wildcard $EXPORT_DIR t*
|
|
|
|
--echo #
|
|
--echo # IM-POS-3: Verfiy that the .sdi file can be manually edited
|
|
--echo # (e.g. the schema name is changed, the name of a column).
|
|
--echo #
|
|
CREATE TABLE t1 (i INT) ENGINE MYISAM;
|
|
INSERT INTO t1 VALUES (1), (3), (5);
|
|
SELECT * FROM t1 ORDER BY i;
|
|
FLUSH TABLES WITH READ LOCK;
|
|
--echo # Copy t1 files to export dir
|
|
--copy_files_wildcard $MYSQLD_DATADIR/test/ $EXPORT_DIR t*
|
|
UNLOCK TABLES;
|
|
DROP TABLE t1;
|
|
|
|
--echo # Use perl to rename and patch SDI file
|
|
--perl
|
|
opendir(TMP, "$ENV{'MYSQL_TMP_DIR'}/export");
|
|
chdir "$ENV{'MYSQL_TMP_DIR'}/export";
|
|
while ($_= readdir(TMP))
|
|
{
|
|
next unless (/(.+)_\d+\.sdi/);
|
|
my $base= $1;
|
|
rename $_, "${base}.sdi";
|
|
}
|
|
closedir(TMP);
|
|
open(T1, "t1.sdi");
|
|
open(T1_, ">t1_.sdi");
|
|
while (<T1>)
|
|
{
|
|
s/("name": ?)"i"/$1"k"/g;
|
|
print T1_ $_;
|
|
}
|
|
close(T1);
|
|
close(T1_);
|
|
EOF
|
|
|
|
--list_files $EXPORT_DIR
|
|
--copy_files_wildcard $EXPORT_DIR $MYSQLD_DATADIR/test/ t1*
|
|
IMPORT TABLE FROM 't1_.sdi';
|
|
SELECT * FROM t1 ORDER BY k;
|
|
DROP TABLE t1;
|
|
--echo # Clean \$EXPORT_DIR
|
|
--remove_files_wildcard $EXPORT_DIR *
|
|
--echo # Clean \$DATA_DIR/test
|
|
--remove_files_wildcard $MYSQLD_DATADIR/test t1*
|
|
|
|
--echo #
|
|
--echo # IM-POS-4: Verify that at table can be imported into a schema
|
|
--echo # with a different collation id
|
|
--echo #
|
|
|
|
CREATE SCHEMA s1;
|
|
CREATE TABLE s1.t1(i VARCHAR(32)) ENGINE MYISAM;
|
|
INSERT INTO s1.t1 VALUES ('abc'), ('DEF'), ('Ghi'), ('ghI');
|
|
SELECT I FROM s1.t1 ORDER BY i;
|
|
|
|
FLUSH TABLES WITH READ LOCK;
|
|
--echo # Copy s1.t1 to export dir
|
|
--copy_files_wildcard $MYSQLD_DATADIR/s1/ $EXPORT_DIR t1*
|
|
UNLOCK TABLES;
|
|
|
|
DROP TABLE s1.t1;
|
|
ALTER SCHEMA s1 DEFAULT COLLATE latin1_bin;
|
|
|
|
--echo Copy MYD and MYI back into datadir
|
|
--copy_files_wildcard $EXPORT_DIR $MYSQLD_DATADIR/s1/ t1*
|
|
|
|
IMPORT TABLE FROM 's1/t1*.sdi';
|
|
--replace_regex /_[0-9]+\.sdi/_XXX.sdi/
|
|
--list_files $MYSQLD_DATADIR/s1
|
|
--echo # Verfy that collation for t1 has not changed
|
|
SELECT i FROM s1.t1 ORDER BY i;
|
|
SHOW CREATE TABLE s1.t1;
|
|
|
|
--echo # Create new table which will get the s1's new default collation
|
|
CREATE TABLE s1.t2(i VARCHAR(32));
|
|
INSERT INTO s1.t2 VALUES ('abc'), ('DEF'), ('Ghi'), ('ghI');
|
|
--echo # Verify that the collation for t2 is different
|
|
SELECT I FROM s1.t2 ORDER BY i;
|
|
SHOW CREATE TABLE s1.t2;
|
|
|
|
DROP TABLE s1.t1;
|
|
DROP SCHEMA s1;
|
|
|
|
--echo # Clean \$EXPORT_DIR
|
|
--remove_files_wildcard $EXPORT_DIR *
|
|
|
|
--echo #
|
|
--echo # IM-POS-5: Verify that concurrent DROP SCHEMA|DATABASE, after the
|
|
--echo # data and index files to import have been placed in the schema dir,
|
|
--echo # fails because it is unable to delete the schema directory. Verify
|
|
--echo # that manual intervention can fix the problem.
|
|
--echo #
|
|
CREATE SCHEMA s1;
|
|
CREATE TABLE s1.t1(i VARCHAR(32)) ENGINE MYISAM;
|
|
INSERT INTO s1.t1 VALUES ('abc'), ('DEF'), ('Ghi'), ('ghI');
|
|
SELECT i FROM s1.t1 ORDER BY i;
|
|
|
|
FLUSH TABLES WITH READ LOCK;
|
|
--echo # Copy t1 to tmp dir
|
|
--copy_files_wildcard $MYSQLD_DATADIR/s1/ $EXPORT_DIR t1*
|
|
UNLOCK TABLES;
|
|
DROP TABLE s1.t1;
|
|
|
|
--echo # Copy t1 files back into s1
|
|
--copy_files_wildcard $EXPORT_DIR $MYSQLD_DATADIR/s1/ t1*
|
|
|
|
--echo # Drop s1 which is empty in DD, but which has files in directory
|
|
#--error ER_DB_DROP_RMDIR,ER_DB_DROP_RMDIR
|
|
--disable_query_log
|
|
CALL mtr.add_suppression("Problem while dropping database. Can't remove database directory .* Please remove it manually.");
|
|
--enable_query_log
|
|
--replace_result $MYSQLD_DATADIR ./ \\ /
|
|
--replace_regex /errno: [0-9]+ - .*\)/errno: ## - ...)/
|
|
DROP SCHEMA s1;
|
|
--echo # Show offending files
|
|
--list_files $MYSQLD_DATADIR/s1
|
|
--echo # Manual intervention which removes files...
|
|
--force-rmdir $MYSQLD_DATADIR/s1
|
|
#DROP SCHEMA s1;
|
|
CREATE SCHEMA s1;
|
|
--echo Copy t1 files back into s1
|
|
--copy_files_wildcard $EXPORT_DIR $MYSQLD_DATADIR/s1/ t1*
|
|
IMPORT TABLE FROM 's1/t1*.sdi';
|
|
SELECT i FROM s1.t1 ORDER BY i;
|
|
|
|
DROP TABLE s1.t1;
|
|
DROP SCHEMA s1;
|
|
--echo # Clean \$EXPORT_DIR
|
|
--remove_files_wildcard $EXPORT_DIR *
|
|
|
|
|
|
--echo #
|
|
--echo # IM-POS-6: Import into server with l_c_t_n=true
|
|
--echo #
|
|
CREATE TABLE T_CASE(i INT) ENGINE MYISAM;
|
|
INSERT INTO T_CASE VALUES (1), (3), (5);
|
|
SELECT * FROM T_CASE ORDER BY i;
|
|
FLUSH TABLES WITH READ LOCK;
|
|
--echo # Copy T_CASE files to export dir
|
|
--copy_files_wildcard $MYSQLD_DATADIR/test/ $EXPORT_DIR *
|
|
UNLOCK TABLES;
|
|
DROP TABLE T_CASE;
|
|
|
|
--echo # Use perl to rename and patch SDI file
|
|
--perl
|
|
opendir(TMP, "$ENV{'MYSQL_TMP_DIR'}/export");
|
|
chdir "$ENV{'MYSQL_TMP_DIR'}/export";
|
|
while ($_= readdir(TMP))
|
|
{
|
|
if (/(.+)_\d+\.sdi/)
|
|
{
|
|
my $b= lc($1);
|
|
rename $_, "${b}.sdi";
|
|
next;
|
|
}
|
|
if (/(.+)\.MYD/)
|
|
{
|
|
my $b= lc($1);
|
|
rename $_, "${b}.MYD";
|
|
next;
|
|
}
|
|
if (/(.+)\.MYI/)
|
|
{
|
|
my $b= lc($1);
|
|
rename $_, "${b}.MYI";
|
|
}
|
|
|
|
}
|
|
closedir(TMP);
|
|
open(T1, "t_case.sdi");
|
|
open(T1_, ">t_case_.sdi");
|
|
while (<T1>)
|
|
{
|
|
s/T_CASE/t_case/g;
|
|
print T1_ $_;
|
|
}
|
|
close(T1);
|
|
close(T1_);
|
|
rename "t_case_.sdi", "t_case.sdi";
|
|
EOF
|
|
|
|
--list_files $EXPORT_DIR
|
|
--copy_files_wildcard $EXPORT_DIR $MYSQLD_DATADIR/test/ t_case*
|
|
IMPORT TABLE FROM 't_case.sdi';
|
|
SELECT i FROM t_case ORDER BY i;
|
|
DROP TABLE t_case;
|
|
|
|
|
|
--echo #
|
|
--echo # Start new server with --lower_case_table_names and import t_case there
|
|
--echo #
|
|
|
|
let BASEDIR= `select @@basedir`;
|
|
let DDIR= $MYSQL_TMP_DIR/lctn_test;
|
|
let MYSQLD_LOG= $MYSQL_TMP_DIR/server.log;
|
|
let extra_args= --no-defaults --innodb_dedicated_server=OFF --log-error=$MYSQLD_LOG --loose-skip-auto_generate_certs --loose-skip-sha256_password_auto_generate_rsa_keys --skip-ssl --lower_case_table_names=1 --basedir=$BASEDIR --lc-messages-dir=$MYSQL_SHAREDIR;
|
|
let BOOTSTRAP_SQL= $MYSQL_TMP_DIR/tiny_bootstrap.sql;
|
|
|
|
--echo # 0. Shut server down.
|
|
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
--shutdown_server
|
|
--source include/wait_until_disconnected.inc
|
|
|
|
--echo # 1. Create bootstrap file.
|
|
write_file $BOOTSTRAP_SQL;
|
|
CREATE SCHEMA test;
|
|
EOF
|
|
|
|
--echo # 2. First start the server with --initialize
|
|
--exec $MYSQLD $extra_args --secure-file-priv="" --initialize-insecure --datadir=$DDIR --init-file=$BOOTSTRAP_SQL
|
|
|
|
--echo # 3. Restart the server against DDIR - should succeed.
|
|
--exec echo "restart:" --datadir=$DDIR --lower_case_table_names=1 --secure-file-priv="" --no-console --log-error=$MYSQLD_LOG > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
--enable_reconnect
|
|
--source include/wait_until_connected_again.inc
|
|
|
|
--echo # 4. Import file created on server without lctn
|
|
--echo # Copying exported t_case files into \$DDIR/test
|
|
--copy_files_wildcard $EXPORT_DIR $DDIR/test/ t_case*
|
|
--echo # Listing \$DDIR/test:
|
|
--list_files $DDIR/test
|
|
|
|
IMPORT TABLE FROM 't_case.sdi';
|
|
SELECT i FROM t_case ORDER BY i;
|
|
DROP TABLE t_case;
|
|
|
|
--echo # 5. Shut server down.
|
|
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
--shutdown_server
|
|
--source include/wait_until_disconnected.inc
|
|
|
|
--echo # 6. Cleanup: Restarting the server against default datadir.
|
|
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
--enable_reconnect
|
|
--source include/wait_until_connected_again.inc
|
|
|
|
--echo # Delete \$DDIR
|
|
--force-rmdir $DDIR
|
|
|
|
--echo # Delete sql files
|
|
--remove_files_wildcard $MYSQL_TMP_DIR *.sql
|
|
|
|
--echo # Delete log files
|
|
--remove_files_wildcard $MYSQL_TMP_DIR *.log
|
|
|
|
--echo # Delete expect files
|
|
--remove_files_wildcard $MYSQL_TMP_DIR *.expect
|
|
|
|
--remove_files_wildcard $EXPORT_DIR t_case*
|
|
|
|
--echo #
|
|
--echo # Bug#25792649: SDI DESERIALIZE MISSING COLUMNIMPL::M_NUMERIC_SCALE_NULL
|
|
--echo # Export, drop and import back table with columns that have attributes
|
|
--echo # which are null by default
|
|
--echo #
|
|
CREATE TABLE t1 (i INT DEFAULT 42, dt DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3),
|
|
de DECIMAL(10,2), j INT GENERATED ALWAYS AS (42+i)) ENGINE=MYISAM;
|
|
SHOW CREATE TABLE t1;
|
|
INSERT INTO t1(dt,de) VALUES ('2017-03-28 18:48:01', 1.1),
|
|
('2017-03-28 18:48:02', 1.2),
|
|
('2017-03-28 18:48:03', 1.5);
|
|
SELECT * FROM t1;
|
|
|
|
FLUSH TABLES WITH READ LOCK;
|
|
--echo # Copy t1 files to export dir
|
|
--copy_files_wildcard $MYSQLD_DATADIR/test/ $EXPORT_DIR t*
|
|
UNLOCK TABLES;
|
|
DROP TABLE t1;
|
|
|
|
--echo # Copy files back into datadir
|
|
--copy_files_wildcard $EXPORT_DIR $MYSQLD_DATADIR/test/ t*
|
|
IMPORT TABLE FROM 't1_*.sdi';
|
|
SHOW CREATE TABLE t1;
|
|
SELECT * FROM t1;
|
|
DROP TABLE t1;
|
|
--echo # Clean SDI files in \$EXPORT_DIR
|
|
--remove_files_wildcard $EXPORT_DIR t*
|
|
|
|
|
|
--echo #
|
|
--echo # Bug#25914953 ASSERTION FAILED: M_THD->GET_TRANSACTION()->
|
|
--echo # IS_EMPTY(TRANSACTION_CTX::STMT)
|
|
--echo #
|
|
--echo # Need to commit any existing txn before using Disable_autocommit_guard
|
|
|
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
|
--error ER_IMP_NO_FILES_MATCHED
|
|
IMPORT TABLE FROM '';
|
|
|
|
--echo #
|
|
--echo # Bug#17468242/Wl#11807: Provide an option to prevent creation of tables
|
|
--echo # without a unique/pk
|
|
--echo # Ensure that a PK-less table cannot be imported when
|
|
--echo # sql_require_primary_key is set
|
|
|
|
CREATE TABLE t1 (i INT) ENGINE=MYISAM;
|
|
|
|
FLUSH TABLES WITH READ LOCK;
|
|
--echo # Copy t1 files to export dir
|
|
--copy_files_wildcard $MYSQLD_DATADIR/test/ $EXPORT_DIR t*
|
|
UNLOCK TABLES;
|
|
DROP TABLE t1;
|
|
|
|
--echo # Copy files back into datadir
|
|
--copy_files_wildcard $EXPORT_DIR $MYSQLD_DATADIR/test/ t*
|
|
|
|
SET SESSION sql_require_primary_key= ON;
|
|
--error ER_TABLE_WITHOUT_PK
|
|
IMPORT TABLE FROM 't1_*.sdi';
|
|
--remove_files_wildcard $MYSQLD_DATADIR/test/ t*
|
|
|
|
SET SESSION sql_require_primary_key= OFF;
|
|
--echo # Clean SDI files in \$EXPORT_DIR
|
|
--remove_files_wildcard $EXPORT_DIR t*
|
|
|
|
--echo #-----------------------------------------------------------------------
|
|
--echo # WL#929 - Check constraint.
|
|
--echo # Test case to verify check constraint import from SDI.
|
|
--echo #-----------------------------------------------------------------------
|
|
CREATE TABLE t1 (f1 INT CHECK (f1 < 10)) ENGINE=MyISAM;
|
|
let $MYSQLD_DATADIR=`SELECT @@datadir`;
|
|
--copy_files_wildcard $MYSQLD_DATADIR/test/ $MYSQL_TMP_DIR/ t*
|
|
DROP TABLE t1;
|
|
--copy_files_wildcard $MYSQL_TMP_DIR/ $MYSQLD_DATADIR/test/ t*
|
|
IMPORT TABLE FROM 'test/t1*.sdi';
|
|
SHOW CREATE TABLE t1;
|
|
DROP TABLE t1;
|
|
--remove_files_wildcard $MYSQL_TMP_DIR/ t*
|
|
|
|
--echo # Remove 'export' folder created at the beginning of test file.
|
|
--force-rmdir $EXPORT_DIR
|
|
|
|
|
|
|
|
|