--echo # This test scripts covers upgrade of tables, views, tablespaces,
--echo # events, stored routines and triggers from 5.7 to 8.0.

--source include/big_test.inc
--source include/not_valgrind.inc
--source include/have_myisam.inc

--disable_query_log
call mtr.add_suppression("\\[Warning\\] .*MY-\\d+.* Parent table of FTS auxiliary table.*");
call mtr.add_suppression("You need to use --log-bin to make --binlog-format work");
--enable_query_log


--echo # Set different paths for --datadir
let $MYSQLD_DATADIR1 = $MYSQL_TMP_DIR/data57;

--echo # Copy the remote tablespace & DB zip files from suite location to working location.
--copy_file $MYSQLTEST_VARDIR/std_data/data57.zip $MYSQL_TMP_DIR/data57.zip

--echo # Check that the file exists in the working folder.
--file_exists $MYSQL_TMP_DIR/data57.zip

--echo # Unzip the zip file.
--exec unzip -qo $MYSQL_TMP_DIR/data57.zip -d $MYSQL_TMP_DIR

#########################
#  how to record this test JSON result content mismatch
#  If required fix regex patterns in mysql-test/include/ibd2sdi.pl
#  and mysql-test/suite/innodb/include/ibd2sdi_replace_pattern.inc,
#  then run the test with --record option.
#########################

--echo #
--echo # BUG#25805260: MYSQL 8.0.X CRASHES WHEN OLD-STYLE TRIGGER MISSES THE
--echo # "CREATED" LINE IN .TRG.
--echo #

--echo # Create a trigger without 'created' line. Without patch,
--echo # the server exits during upgrade of trigger.
--write_file $MYSQL_TMP_DIR/data57/test/vt2.TRG
TYPE=TRIGGERS
triggers='CREATE DEFINER=`root`@`localhost` TRIGGER tr1_bi BEFORE INSERT ON vt2 FOR EACH ROW SET @a:=1'
sql_modes=1073741824 1073741824
definers='root@localhost' 'root@localhost'
client_cs_names='latin1' 'latin1'
connection_cl_names='latin1_swedish_ci' 'latin1_swedish_ci'
db_cl_names='latin1_swedish_ci' 'latin1_swedish_ci'
EOF

--write_file $MYSQL_TMP_DIR/data57/test/tr1_bi.TRN
TYPE=TRIGGERNAME
trigger_table=vt2
EOF

--echo # Create a table as same as mysql.proc to repeat Bug#24805140
--echo # We need to add an entry in mysql.proc table of the zipped
--echo # data data directory before upgrade starts.
--echo # Without fix, data population for dictionary tables fail and
--echo # upgrade aborts.

SET sql_mode='';
--echo # CREATE statement is same as mysql.proc in mysql-5.7.
CREATE TABLE test.proc (db char(64) collate utf8_bin DEFAULT '' NOT NULL,
                        name char(64) DEFAULT '' NOT NULL,
                        type enum('FUNCTION','PROCEDURE') NOT NULL,
                        specific_name char(64) DEFAULT '' NOT NULL,
                        language enum('SQL') DEFAULT 'SQL' NOT NULL,
                        sql_data_access enum('CONTAINS_SQL',
                                             'NO_SQL',
                                             'READS_SQL_DATA',
                                             'MODIFIES_SQL_DATA')
                                        DEFAULT 'CONTAINS_SQL' NOT NULL,
                        is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL,
                        security_type enum('INVOKER','DEFINER')
                                      DEFAULT 'DEFINER' NOT NULL,
                        param_list blob NOT NULL,
                        returns longblob DEFAULT '' NOT NULL,
                        body longblob NOT NULL,
                        definer char(93) collate utf8_bin DEFAULT '' NOT NULL,
                        created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
                                          ON UPDATE CURRENT_TIMESTAMP,
                        modified timestamp NOT NULL
                                 DEFAULT '0000-00-00 00:00:00',
                        sql_mode set('REAL_AS_FLOAT', 'PIPES_AS_CONCAT',
                                     'ANSI_QUOTES', 'IGNORE_SPACE', 'NOT_USED',
                                     'ONLY_FULL_GROUP_BY',
                                     'NO_UNSIGNED_SUBTRACTION',
                                     'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE',
                                     'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS',
                                     'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS',
                                     'MYSQL323', 'MYSQL40', 'ANSI',
                                     'NO_AUTO_VALUE_ON_ZERO',
                                     'NO_BACKSLASH_ESCAPES',
                                     'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES',
                                     'NO_ZERO_IN_DATE', 'NO_ZERO_DATE',
                                     'INVALID_DATES',
                                     'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL',
                                     'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE',
                                     'NO_ENGINE_SUBSTITUTION',
                                     'PAD_CHAR_TO_FULL_LENGTH') DEFAULT '' NOT NULL,
                        comment text collate utf8_bin NOT NULL,
                        character_set_client char(32) collate utf8_bin,
                        collation_connection char(32) collate utf8_bin,
                        db_collation char(32) collate utf8_bin, body_utf8 longblob,
                        PRIMARY KEY (db,name,type)) engine=MyISAM character set utf8
                        comment='Stored Procedures';

--let $MYSQLD_DATADIR=`SELECT @@datadir`
--echo # Remove data and index files manually.
--remove_file $MYSQLD_DATADIR/test/proc.MYD
--remove_file $MYSQLD_DATADIR/test/proc.MYI

--echo # Copy data and index files from zipped data directory.
--copy_file $MYSQL_TMP_DIR/data57/mysql/proc.MYD $MYSQLD_DATADIR/test/proc.MYD
--copy_file $MYSQL_TMP_DIR/data57/mysql/proc.MYI $MYSQLD_DATADIR/test/proc.MYI

--echo # Insert data
INSERT INTO test.proc VALUES ('sp','bug24805140','PROCEDURE','bug24805140','SQL',
                              'CONTAINS_SQL','NO','DEFINER','out a int','',
                              'begin select requesting_trx_id from '
                              'information_schema.INNODB_LOCK_WAITS limit 1 into a; end',
                              'root@localhost','2016-10-05 21:44:21',
                              '2016-10-05 21:44:21',
                              'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,'
                              'NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,'
                              'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION',
                              '','utf8','utf8_general_ci','latin1_swedish_ci',
                              'begin select requesting_trx_id from '
                              'information_schema.INNODB_LOCK_WAITS limit 1 into a; end'),
                              ('sp','proc2','PROCEDURE','proc2','SQL',
                              'CONTAINS_SQL','NO','DEFINER','out b int','',
                              'begin select   @@show_compatibility_56 into b; end',
                              'root@localhost','2016-10-05 21:55:05',
                              '2016-10-05 21:55:05','ONLY_FULL_GROUP_BY,'
                              'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,'
                              'NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,'
                              'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION','',
                              'utf8','utf8_general_ci','latin1_swedish_ci',
                              'begin select   @@show_compatibility_56 into b; end');

--echo # Data for Bug#25633041 : SHOW CREATE PROC/FUNCTION RESULT
--echo #                         AFTER LIVEUPGR IS DIFFERENT TO DUMPUPGR
INSERT INTO `proc` VALUES ('test','downgrade_alter_proc','PROCEDURE',
                           'downgrade_alter_proc',
                           'SQL','CONTAINS_SQL','NO','INVOKER','','',
                           'BEGIN\n      SELECT c1, English, French FROM t1 '
                           'JOIN t2 ON t1.c3 = t2.col2;\n     END',
                           'root@localhost','1988-04-25 20:45:00',
                           '1988-04-25 20:45:00','NO_ZERO_DATE','','latin1',
                           'latin1_swedish_ci','latin1_swedish_ci',
                           'BEGIN\n      SELECT c1, English, French FROM t1 '
                           'JOIN t2 ON t1.c3 = t2.col2;\n     END'),
                          ('test','my_test_func','FUNCTION','myfunc','SQL',
                           'CONTAINS_SQL','NO','DEFINER', '',
                           'varchar(20) CHARSET latin1',
                           'BEGIN\n  RETURN \'å\';\nEND',
                           'root@localhost','2017-03-08 09:07:36',
                           '2017-03-08 09:07:36', 'ONLY_FULL_GROUP_BY,'
                           'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,'
                           'ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,'
                           'NO_ENGINE_SUBSTITUTION','','latin1','latin1_swedish_ci',
                           'latin1_swedish_ci','BEGIN\n  RETURN \'Ã¥\';\nEND');

--echo # Remove  the original zipped data and index files.
--remove_file $MYSQL_TMP_DIR/data57/mysql/proc.MYD
--remove_file $MYSQL_TMP_DIR/data57/mysql/proc.MYI

--echo # Copy data and index files to zipped data directory.
--copy_file $MYSQLD_DATADIR/test/proc.MYD $MYSQL_TMP_DIR/data57/mysql/proc.MYD
--copy_file $MYSQLD_DATADIR/test/proc.MYI $MYSQL_TMP_DIR/data57/mysql/proc.MYI

--echo # Delete the table for cleanup
DROP TABLE test.proc;

--echo # Stop DB server which was created by MTR default
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--shutdown_server
--source include/wait_until_disconnected.inc

--echo # These files are added to test error scenario, delete from for upgrade testing.
--remove_file $MYSQL_TMP_DIR/data57/test/55_temporal.frm
--remove_file $MYSQL_TMP_DIR/data57/test/55_temporal.MYD
--remove_file $MYSQL_TMP_DIR/data57/test/55_temporal.MYI
--echo # Remove myisam partitioned tables. There are used for negative testing.
--remove_files_wildcard $MYSQL_TMP_DIR/data57/partitions *
--rmdir $MYSQL_TMP_DIR/data57/partitions
--force-rmdir $MYSQL_TMP_DIR/data57/mismatch_frms

--echo # Copy table and view files as test case for Bug#24580586
--copy_file $MYSQLTEST_VARDIR/std_data/initial_t@1o.frm $MYSQL_TMP_DIR/data57/test/initial_t@1o.frm
--copy_file $MYSQLTEST_VARDIR/std_data/initial_v@1o.frm $MYSQL_TMP_DIR/data57/test/initial_v@1o.frm

--echo # Test case for Bug #25139901 : DB COLLATION CHANGED TO SERVER DEFAULT AFTER UPGRADE
--echo # Create a folder and db.opt file. Write a character set in db.opt file which is not default.
--mkdir $MYSQL_TMP_DIR/data57/db_charset_koi8r/
let DB_OPT_FILE= $MYSQL_TMP_DIR/data57/db_charset_koi8r/db.opt;
--echo # 1.1 Create db.opt file.
write_file $DB_OPT_FILE;
default-character-set=koi8r
default-collation=koi8r_bin
EOF

--echo # Files in 'test' dir
--list_files $MYSQL_TMP_DIR/data57/

let $MYSQLD_LOG= $MYSQLTEST_VARDIR/log/save_dd_upgrade_1.log;
let ENV_MYSQLD_LOG= $MYSQLD_LOG;

# Add '--read-only' option in the scope of fix of Bug#26636238, to avoid creation of another bulky test.
--echo # Start the DB server. Server will create and populate Dictionary tables.
--exec echo "restart: --loose-skip-log-bin --read-only --skip-log-slave-updates --datadir=$MYSQLD_DATADIR1 --log-error=$MYSQLD_LOG" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--enable_reconnect
--let $wait_counter= 10000
--source include/wait_until_connected_again.inc

--echo # Test for Bug#25518436 : MYSQL 8.0.1 - MYSQLD ERRORLOG HAS UPGRADE ERRORS
--echo #                         AT SERVER START AT LIVE UPGRADE
--echo # Check for errors from sys schema.
--echo # These errors should not be there.
--echo # Look for error.
perl;
  use strict;
  my $log= $ENV{'ENV_MYSQLD_LOG'} or die;
  open(FILE, "$log") or die;
  my $c_e= grep(/\[Warning\] Parsing \'sys\.diagnostics\' routine body failed\. Creating routine without parsing routine body/gi,<FILE>);
  print "# Sys Schema routine parsing warning found : $c_e times.\n";
  seek(FILE,0,0);
  $c_e= grep(/\[ERROR\] .* Unknown system variable \'show_compatibility_56\'/gi,<FILE>);
  print "# Sys Schema routine parsing error found : $c_e times.\n";
  seek(FILE,0,0);
  $c_e= grep(/\[Warning\] Resolving dependency for the view \'sys\.innodb_lock_waits\' failed\. View is no more valid to use/gi,<FILE>);
  print "# Sys Schema view parsing warning found : $c_e times.\n";
  seek(FILE,0,0);
  $c_e= grep(/\[ERROR\] .* Unknown table \'INNODB_LOCK_WAITS\' in information_schema/gi,<FILE>);
  print "# Sys Schema view parsing error found : $c_e times.\n";
  close(FILE);
EOF
# End of test case for Bug#25518436

--echo # Sanity Testing after Server start
CREATE SCHEMA test123;
CREATE TABLE test123.t1(a int);
INSERT INTO test123.t1 values(1);
SELECT * FROM test123.t1;
DROP SCHEMA test123;

CHECK TABLE test.t_myisam_compressed2, test.t_myisam_compressed3 FOR UPGRADE;

SHOW DATABASES;
--echo # Check table structures
SHOW CREATE TABLE mysql.user;

SHOW CREATE TABLE mysql.innodb_table_stats;
SHOW CREATE TABLE mysql.innodb_index_stats;

SELECT COLUMN_NAME,CHARACTER_MAXIMUM_LENGTH
  FROM INFORMATION_SCHEMA.COLUMNS col
    JOIN INFORMATION_SCHEMA.TABLES tab ON col.table_name=tab.table_name
  WHERE col.TABLE_NAME LIKE '%innodb_%_stats'
    AND col.COLUMN_NAME LIKE 'table_name';

SHOW CREATE TABLE test.t_compressed;
SHOW CREATE TABLE test.t_compressed2;
SHOW CREATE TABLE test.t_compressed3;
SHOW CREATE TABLE test.t_dynamic;
SHOW CREATE TABLE test.t_index;

SHOW CREATE TABLE test.vt2;
SELECT * FROM test.vt2;
SHOW CREATE TABLE test.t_gen_stored;
SHOW CREATE TABLE test.jemp;
SHOW CREATE TABLE test.t_gen_stored_myisam;
SHOW CREATE TABLE test.t_gen_stored_myisam2;
SHOW CREATE TABLE test.jemp_myisam;


SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, ENGINE, VERSION, ROW_FORMAT
 FROM INFORMATION_SCHEMA.tables WHERE table_schema='test';
--echo # Check for views
--echo # Invalid view
SHOW CREATE VIEW aview.view_invalid;
--echo # Valid views
SHOW CREATE VIEW aview.view_2;
SHOW CREATE VIEW aview.second_view;
SELECT * FROM aview.view_2;
SELECT * FROM aview.second_view;

SHOW CREATE VIEW aview.mixed_view;
SHOW CREATE VIEW aview.mixed_view2;
SELECT * FROM aview.mixed_view2;

--echo # View with different definer
SHOW CREATE VIEW aview.view_user;
SHOW CREATE VIEW aview.view_user2;
--echo # View with different character_set and connection collation
SHOW CREATE VIEW aview.view_character_set;

--echo # Data check after upgrade for Bug#25139901
SHOW CREATE DATABASE db_charset_koi8r;

--echo # Test case for Bug#24580586
SET names utf8;
DESC `test`.`initial_vü`;
--replace_column 15 CREATE_TIME
SELECT * FROM information_schema.tables WHERE table_schema = 'test' and table_type='VIEW';
SET names default;

--echo #Test case for Bug#26636238
#Check metadata of a performance schema table when upgrade is performed with --read-only
SHOW CREATE TABLE performance_schema.threads;

--echo # Check for SP/SF
SHOW CREATE PROCEDURE sp.simpleproc;
SHOW CREATE PROCEDURE sp.proc_123;
SHOW CREATE PROCEDURE sp.proc_456;
--echo # Without fix, server start on 5.7 data directory above will fail.
SHOW CREATE PROCEDURE sp.bug24805140;
--error ER_SP_LOAD_FAILED
call sp.bug24805140();
SHOW WARNINGS;
SHOW CREATE FUNCTION sp.hello;
--echo # Check for events
SHOW CREATE EVENT events.e_totals;
--echo # Check for fulltext index
SHOW CREATE TABLE test.opening_lines;

--echo # Check data for Bug#25633041
SHOW CREATE PROCEDURE test.downgrade_alter_proc;
SHOW CREATE FUNCTION test.my_test_func;
SELECT ROUTINE_NAME, CHARACTER_SET_NAME, CHARACTER_SET_CLIENT,  COLLATION_CONNECTION,
  DATABASE_COLLATION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='test'
  ORDER BY ROUTINE_NAME;

--echo # Check for General tablespace
SHOW CREATE TABLE tablespace.t2;
SHOW CREATE TABLE tablespace.t3;
SELECT * FROM tablespace.t3;
SHOW CREATE TABLE tablespace.t4;

--echo #
--echo # Bug#26431355 : ALTER TABLE COMMENT FAILS WITH FAILED TO DROP TABLE SDI AFTER UPGRADE
--echo #

--echo # Check for table with blackhole engine
SHOW CREATE TABLE test.t_blackhole;

--echo # Check for table with special character in name
SHOW CREATE TABLE `test`.`t_sc~!@#$%^&*(`;

--echo # Check for JSON types
SHOW CREATE TABLE test.t_json;

--echo # Check for geometry data types
SHOW CREATE TABLE test.geom;

--echo # Check for Triggers. Operations on t1 inserts data in t2.
INSERT INTO triggers.t1 VALUES(1);
UPDATE triggers.t1 SET a=2 WHERE a=1;
SELECT * FROM triggers.t2;

SELECT TRIGGER_SCHEMA, TRIGGER_NAME, EVENT_MANIPULATION, ACTION_TIMING,
 ACTION_ORDER FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA='triggers';

--replace_column 7 #
SHOW CREATE TRIGGER triggers.trg_t1_after_insert_3;
--replace_column 7 #
SHOW CREATE TRIGGER triggers.trg1;

--replace_column 7 #
SHOW CREATE TRIGGER triggers.t1_bi;

--replace_column 7 #
SHOW CREATE TRIGGER test.tr1_bi;

--echo # I_S query to check Foreign_keys
SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE
 CONSTRAINT_SCHEMA='foreign_keys' ORDER BY CONSTRAINT_SCHEMA,CONSTRAINT_NAME;

--echo # Check that views with column names are correct

SHOW CREATE VIEW view_with_column_names.v1;
SELECT * FROM view_with_column_names.v1;
SHOW CREATE VIEW view_with_column_names.v2;
SELECT * FROM view_with_column_names.v2;
SHOW CREATE VIEW view_with_column_names.v3;
SELECT * FROM view_with_column_names.v3;
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_SCHEMA='view_with_column_names' ORDER BY TABLE_NAME,ORDINAL_POSITION;

--echo # Bug #28480149 "UPGRADE FAIL: FAILED TO ADD THE FOREIGN KEY CONSTRAINT.
--echo # MISSING INDEX FOR CONSTR". Coverage for upgrade scenario. Main part
--echo # of coverage resides in foreign_key test.
SHOW CREATE TABLE foreign_keys.t9;
SHOW CREATE TABLE foreign_keys.ta;
SHOW CREATE TABLE foreign_keys.tb;
SHOW CREATE TABLE foreign_keys.tc;
SHOW CREATE TABLE foreign_keys.td;
SHOW CREATE TABLE foreign_keys.te;
SHOW CREATE TABLE foreign_keys.tf;

--echo # Restart on the upgraded data dir
--replace_result $MYSQLD_DATADIR1 MYSQLD_DATADIR1
let $restart_parameters = "restart: --loose-skip-log-bin --skip-log-slave-updates --datadir=$MYSQLD_DATADIR1";
--source include/restart_mysqld.inc
let $restart_parameters =;

--echo # Execute FTS queries that modify FTS pages
select count(*) from sakila.film_text;
select * from sakila.film_text where film_id = 984;
select * from sakila.film_text where match(title,description) against("SCISSORHANDS");
delete from sakila.film_text where film_id = 984;
SET GLOBAL innodb_optimize_fulltext_only=ON;
optimize table sakila.film_text;

--echo # Stop the server
--source include/shutdown_mysqld.inc

--echo # Check if .ibds have SDI after upgrade

--let $SRC_DIR=$MYSQL_TEST_DIR/std_data/dd/sdi/upgrade

# Create a directory to store json generated
--let $DEST_DIR=$MYSQL_TMP_DIR/sdi_dest/
--error 0,1
--force-rmdir $DEST_DIR
--mkdir $DEST_DIR

--echo # Check SDI from vt2.ibd
--let JSON_FILE_PATH = $DEST_DIR/vt2.json
--exec $IBD2SDI $MYSQLD_DATADIR1/test/vt2.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/vt2.json $JSON_FILE_PATH
}

--echo # Check SDI from t_json.ibd
--let JSON_FILE_PATH = $DEST_DIR/t_json.json
--exec $IBD2SDI $MYSQLD_DATADIR1/test/t_json.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/t_json.json $JSON_FILE_PATH
}

--echo # Check SDI from t_gen_stored.ibd
--let JSON_FILE_PATH = $DEST_DIR/t_gen_stored.json
--exec $IBD2SDI $MYSQLD_DATADIR1/test/t_gen_stored.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/t_gen_stored.json $JSON_FILE_PATH
}

--echo # Check SDI from t_dynamic.ibd
--let JSON_FILE_PATH = $DEST_DIR/t_dynamic.json
--exec $IBD2SDI $MYSQLD_DATADIR1/test/t_dynamic.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/t_dynamic.json $JSON_FILE_PATH
}

--echo # Check SDI from t_compressed3.ibd
--let JSON_FILE_PATH = $DEST_DIR/t_compressed3.json
--exec $IBD2SDI $MYSQLD_DATADIR1/test/t_compressed3.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/t_compressed3.json $JSON_FILE_PATH
}

--echo # Check SDI from t_compressed2.ibd
--let JSON_FILE_PATH = $DEST_DIR/t_compressed2.json
--exec $IBD2SDI $MYSQLD_DATADIR1/test/t_compressed2.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/t_compressed2.json $JSON_FILE_PATH
}

--echo # Check SDI from t_compressed.ibd
--let JSON_FILE_PATH = $DEST_DIR/t_compressed.json
--exec $IBD2SDI $MYSQLD_DATADIR1/test/t_compressed.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/t_compressed.json $JSON_FILE_PATH
}

--echo # Check SDI from t_blob_myisam.ibd
--let JSON_FILE_PATH = $DEST_DIR/t_blob_myisam.json
--exec $IBD2SDI $MYSQLD_DATADIR1/test/t_blob_myisam.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/t_blob_myisam.json $JSON_FILE_PATH
}

--echo # Check SDI from t_blob.ibd
--let JSON_FILE_PATH = $DEST_DIR/t_blob.json
--exec $IBD2SDI $MYSQLD_DATADIR1/test/t_blob.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/t_blob.json $JSON_FILE_PATH
}

--echo # Check SDI from opening_lines.ibd
--let JSON_FILE_PATH = $DEST_DIR/opening_lines.json
--exec $IBD2SDI $MYSQLD_DATADIR1/test/opening_lines.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/opening_lines.json $JSON_FILE_PATH
}

--echo # Check SDI from jemp.ibd
--let JSON_FILE_PATH = $DEST_DIR/jemp.json
--exec $IBD2SDI $MYSQLD_DATADIR1/test/jemp.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/jemp.json $JSON_FILE_PATH
}

--echo # Check SDI from geom.ibd
--let JSON_FILE_PATH = $DEST_DIR/geom.json
--exec $IBD2SDI $MYSQLD_DATADIR1/test/geom.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/geom.json $JSON_FILE_PATH
}

--echo # Check SDI from store.ibd
--let JSON_FILE_PATH = $DEST_DIR/store.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/store.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/store.json $JSON_FILE_PATH
}

--echo # Check SDI from staff.ibd
--let JSON_FILE_PATH = $DEST_DIR/staff.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/staff.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/staff.json $JSON_FILE_PATH
}

--echo # Check SDI from rental.ibd
--let JSON_FILE_PATH = $DEST_DIR/rental.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/rental.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/rental.json $JSON_FILE_PATH
}

--echo # Check SDI from payment.ibd
--let JSON_FILE_PATH = $DEST_DIR/payment.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/payment.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/payment.json $JSON_FILE_PATH
}

--echo # Check SDI from language.ibd
--let JSON_FILE_PATH = $DEST_DIR/language.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/language.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/language.json $JSON_FILE_PATH
}

--echo # Check SDI from inventory.ibd
--let JSON_FILE_PATH = $DEST_DIR/inventory.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/inventory.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/inventory.json $JSON_FILE_PATH
}

--echo # Check SDI from film_text.ibd
--let JSON_FILE_PATH = $DEST_DIR/film_text.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/film_text.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/film_text.json $JSON_FILE_PATH
}

--echo # Check SDI from film_category.ibd
--let JSON_FILE_PATH = $DEST_DIR/film_category.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/film_category.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/film_category.json $JSON_FILE_PATH
}

--echo # Check SDI from film_actor.ibd
--let JSON_FILE_PATH = $DEST_DIR/film_actor.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/film_actor.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/film_actor.json $JSON_FILE_PATH
}

--echo # Check SDI from film.ibd
--let JSON_FILE_PATH = $DEST_DIR/film.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/film.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/film.json $JSON_FILE_PATH
}

--echo # Check SDI from customer.ibd
--let JSON_FILE_PATH = $DEST_DIR/customer.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/customer.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/customer.json $JSON_FILE_PATH
}

--echo # Check SDI from country.ibd
--let JSON_FILE_PATH = $DEST_DIR/country.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/country.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/country.json $JSON_FILE_PATH
}

--echo # Check SDI from city.ibd
--let JSON_FILE_PATH = $DEST_DIR/city.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/city.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/city.json $JSON_FILE_PATH
}

--echo # Check SDI from category.ibd
--let JSON_FILE_PATH = $DEST_DIR/category.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/category.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/category.json $JSON_FILE_PATH
}

--echo # Check SDI from address.ibd
--let JSON_FILE_PATH = $DEST_DIR/address.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/address.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/address.json $JSON_FILE_PATH
}

--echo # Check SDI from actor.ibd
--let JSON_FILE_PATH = $DEST_DIR/actor.json
--exec $IBD2SDI $MYSQLD_DATADIR1/sakila/actor.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/actor.json $JSON_FILE_PATH
}

--echo # Check SDI from mysql.ibd
--let JSON_FILE_PATH = $DEST_DIR/mysql.json
--exec $IBD2SDI $MYSQLD_DATADIR1/mysql.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace_mysql.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/mysql.json $JSON_FILE_PATH
}

--echo # Check SDI from ibdata1
--let JSON_FILE_PATH = $DEST_DIR/ibdata1.json
--exec $IBD2SDI $MYSQLD_DATADIR1/ibdata1 -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace_system.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/ibdata1.json $JSON_FILE_PATH
}

--echo # Check SDI from test_tablespace_3.ibd
--let JSON_FILE_PATH = $DEST_DIR/test_tablespace_3.json
--exec $IBD2SDI $MYSQLD_DATADIR1/test_tablespace_3.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/test_tablespace_3.json $JSON_FILE_PATH
}

--echo # Check SDI from test_tablespace_2.ibd
--let JSON_FILE_PATH = $DEST_DIR/test_tablespace_2.json
--exec $IBD2SDI $MYSQLD_DATADIR1/test_tablespace_2.ibd -d $JSON_FILE_PATH 2>&1
--source suite/innodb/include/ibd2sdi_replace.inc
if ($MTR_RECORD == 0) {
--diff_files $SRC_DIR/test_tablespace_2.json $JSON_FILE_PATH
}

# If --record is used, save the json files created in the $DEST_DIR
# back to the $SRC_DIR.
if ($MTR_RECORD == 1) {
--copy_files_wildcard $DEST_DIR $SRC_DIR *.json
}

--echo # Remove json files
--force-rmdir $DEST_DIR

--echo # Remove copied files
--force-rmdir $MYSQL_TMP_DIR/data57

--echo #
--echo # Bug#26944731 : UPGRADE TO 8.0 FAILS: DUPLICATE SET VALUES IN TABLE FROM A PERMISSIVE SQL_MODE..
--echo # Bug#26948678 : MYSQLD: INVALID DEFAULT VALUE FOR 'CACHED_TIME'
--echo #
--echo # Unzip the zip file.
--exec unzip -qo $MYSQL_TMP_DIR/data57.zip -d $MYSQL_TMP_DIR

let $MYSQLD_LOG= $MYSQLTEST_VARDIR/log/save_dd_upgrade_2.log;

# These files are used by other test cases, and is not required here.
--remove_file $MYSQL_TMP_DIR/data57/test/55_temporal.frm
--remove_file $MYSQL_TMP_DIR/data57/test/55_temporal.MYD
--remove_file $MYSQL_TMP_DIR/data57/test/55_temporal.MYI
--force-rmdir $MYSQL_TMP_DIR/data57/partitions
--force-rmdir $MYSQL_TMP_DIR/data57/mismatch_frms

# Copy .frm file with blackhole engine and duplicate values in SET
--copy_file $MYSQLTEST_VARDIR/std_data/t_set.frm $MYSQL_TMP_DIR/data57/test/t_set.frm
# Test with --explicit-defaults-for-timestamp=0
--exec echo "restart: --loose-skip-log-bin --explicit-defaults-for-timestamp=0 --skip-log-slave-updates --skip-slave-preserve-commit-order --datadir=$MYSQLD_DATADIR1 --log-error=$MYSQLD_LOG" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--enable_reconnect
--let $wait_counter= 6000
--source include/wait_until_connected_again.inc

SHOW CREATE TABLE test.t_set;
--echo # Stop the server
--source include/shutdown_mysqld.inc

--echo # Remove copied files
--remove_file $MYSQL_TMP_DIR/data57.zip
--force-rmdir $MYSQL_TMP_DIR/data57

--echo # Restart the server with default options.
--source include/start_mysqld.inc

--echo #
--echo # Bug #27512609 5.7->8.0 UPGRADE CRASH WITH DEFAULT-TIME-ZONE SET
--echo #
--echo #

let $MYSQLD_LOG= $MYSQLTEST_VARDIR/log/save_dd_upgrade_3.log;

--echo # Zip file contains data directory of a clean 5.7 server.
--echo # made by: ./mtr --mem --mysqld=--default_time_zone="+01:00" main.1st
--echo #
--echo # Copy zip files from suite location to working location.
--copy_file $MYSQLTEST_VARDIR/std_data/data57_upgrade_default_timezone_bug.zip $MYSQL_TMP_DIR/data57_upgrade_default_timezone_bug.zip

--echo # Check that the file exists in the working folder.
--file_exists $MYSQL_TMP_DIR/data57_upgrade_default_timezone_bug.zip

--echo # Unzip the zip file.
--exec unzip -qo $MYSQL_TMP_DIR/data57_upgrade_default_timezone_bug.zip -d $MYSQL_TMP_DIR/data57_upgrade_default_timezone_bug

--echo # Set different paths for --datadir
let $MYSQLD_DATADIR2 = $MYSQL_TMP_DIR/data57_upgrade_default_timezone_bug/data;

--echo # Check that the file exits after unzip
--file_exists $MYSQL_TMP_DIR/data57_upgrade_default_timezone_bug/data

--echo # Stop DB server which was created by MTR default
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--shutdown_server
--source include/wait_until_disconnected.inc

--echo # Start the DB server
--exec echo "restart: --default_time_zone="+01:00" --datadir=$MYSQLD_DATADIR2 --log-error=$MYSQLD_LOG" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--enable_reconnect
--let $wait_counter= 6000
--source include/wait_until_connected_again.inc

--disable_query_log
call mtr.add_suppression("You need to use --log-bin to make --binlog-format work");
--enable_query_log

--echo # Stop the server
--source include/shutdown_mysqld.inc
--echo # Remove copied files
--remove_file $MYSQL_TMP_DIR/data57_upgrade_default_timezone_bug.zip
--force-rmdir $MYSQL_TMP_DIR/data57_upgrade_default_timezone_bug
--echo # Restart the server with default options.
--source include/start_mysqld.inc

--echo #
--echo # Bug #28884503 UPGRADE FROM 5.7.23+ TO 8.0.11+ FAILS WHEN INNODB_PAGE_SIZE=4K
--echo #

--let $MYSQLD_LOG= $MYSQLTEST_VARDIR/log/data57_innodb_page_size_4k.log

--echo # Zip file contains data directory of a clean 5.7 server.
--echo #
--echo # Copy zip files from suite location to working location.
--copy_file $MYSQLTEST_VARDIR/std_data/data57_upgrade_innodb_4k.zip $MYSQL_TMP_DIR/data57_upgrade_innodb_4k.zip

--echo # Check that the file exists in the working folder.
--file_exists $MYSQL_TMP_DIR/data57_upgrade_innodb_4k.zip

--echo # Unzip the zip file.
--exec unzip -qo $MYSQL_TMP_DIR/data57_upgrade_innodb_4k.zip -d $MYSQL_TMP_DIR/data57_upgrade_innodb_4k

--echo # Set different paths for --datadir
--let $MYSQLD_DATADIR2 = $MYSQL_TMP_DIR/data57_upgrade_innodb_4k/data57_upgrade_innodb_4k

--echo # Restart DB server which was created by MTR default
--replace_result $MYSQLD_DATADIR2 MYSQLD_DATADIR2 $MYSQLD_LOG MYSQLD_LOG
--let restart_parameters=restart: --datadir=$MYSQLD_DATADIR2 --innodb_page_size=4K --log-error=$MYSQLD_LOG
--let $wait_counter= 10000
--source include/restart_mysqld.inc

--source include/shutdown_mysqld.inc

--echo # Remove copied files
--remove_file $MYSQL_TMP_DIR/data57_upgrade_innodb_4k.zip
--force-rmdir $MYSQL_TMP_DIR/data57_upgrade_innodb_4k

--echo # Restart the server with default options.
let $restart_parameters =;
--source include/start_mysqld.inc


--echo #
--echo # Bug#29823053: VERY SMALL TABLE_OPEN_CACHE CAUSES SEGMENTATION FAULT WHEN UPGRADING TO 8.0.16
--echo #

let $MYSQLD_LOG= $MYSQLTEST_VARDIR/log/save_dd_upgrade_4.log;

--echo # Copy zip files from suite location to working location.
--copy_file $MYSQLTEST_VARDIR/std_data/upgrade/data_57022.zip $MYSQL_TMP_DIR/data_57022.zip

--echo # Check that the file exists in the working folder.
--file_exists $MYSQL_TMP_DIR/data_57022.zip

--echo # Unzip the zip file.
--exec unzip -qo $MYSQL_TMP_DIR/data_57022.zip -d $MYSQL_TMP_DIR

--echo # Set different paths for --datadir
let $MYSQLD_DATADIR3 = $MYSQL_TMP_DIR/data_57022;

--echo # Stop DB server which was created by MTR default
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--shutdown_server
--source include/wait_until_disconnected.inc

--echo # Start the DB server to do upgrade. Without the bugfix, the server will fail.
--exec echo "restart: --table_open_cache=1 --datadir=$MYSQLD_DATADIR3 --log-error=$MYSQLD_LOG" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--enable_reconnect
--let $wait_counter= 3000
--source include/wait_until_connected_again.inc

--echo # Stop the server
--source include/shutdown_mysqld.inc
--echo # Remove copied files
--remove_file $MYSQL_TMP_DIR/data_57022.zip
--force-rmdir $MYSQLD_DATADIR3
--echo # Restart the server with default options.
--source include/start_mysqld.inc

--echo # end of test
