List:Maria Storage Engine« Previous MessageNext Message »
From:Guilhem Bichot Date:June 11 2008 8:45pm
Subject:commit into MySQL/Maria:mysql-maria branch (guilhem:2650) Bug#37005
View as plain text  
#At bzr+ssh://bk-internal.mysql.com/bzrroot/server/mysql-maria/

 2650 Guilhem Bichot	2008-06-11
      Fix for BUG#37005 "Maria: ALTER TABLE TRANSACTIONAL=0 leaves table transactional
inside Maria"
modified:
  mysql-test/r/maria-page-checksum.result
  mysql-test/t/maria-page-checksum.test
  sql/sql_table.cc

per-file comments:
  mysql-test/r/maria-page-checksum.result
    result for new test portion. Without the code fix, you would see a wrong "yes" or "no"
in the "Crashsafe" line
    for iterations 2,9,14.
  mysql-test/t/maria-page-checksum.test
    Adding test for BUG#37005 "Maria: ALTER TABLE TRANSACTIONAL=0 leaves table
transactional inside Maria"
  sql/sql_table.cc
    In ALTER TABLE, we already rebuilt the table entirely if the DEFAULT CHARSET,
ROW_FORMAT or PAGE_CHECKSUM
    clauses were used; we have to do the same if the TRANSACTIONAL clause is used, because
it affects
    the table inside the engine (for example, Maria makes shorter rows in
non-transactional tables).
    Not doing so led to the BUG#37005, where ALTER TABLE TRANSACTIONAL=0 sometimes left
the table
    transactional into Maria though not in the frm.
=== modified file 'mysql-test/r/maria-page-checksum.result'
--- a/mysql-test/r/maria-page-checksum.result	2008-04-10 02:26:36 +0000
+++ b/mysql-test/r/maria-page-checksum.result	2008-06-11 20:45:14 +0000
@@ -650,3 +650,291 @@ t1	CREATE TABLE `t1` (
 ) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
 Page checksums are used
 drop table t1;
+# iteration 1
+create table t1(a int) engine=maria  ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
+Crashsafe:           yes
+alter table t1 modify a bigint ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` bigint(20) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
+Crashsafe:           yes
+drop table t1;
+# iteration 2
+create table t1(a int) engine=maria  ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
+Crashsafe:           yes
+alter table t1  transactional=0 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=0
+Crashsafe:           no
+drop table t1;
+# iteration 3
+create table t1(a int) engine=maria  ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
+Crashsafe:           yes
+alter table t1  transactional=1 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
+Crashsafe:           yes
+drop table t1;
+# iteration 4
+create table t1(a int) engine=maria  ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
+Crashsafe:           yes
+alter table t1 engine=maria  ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
+Crashsafe:           yes
+drop table t1;
+# iteration 5
+create table t1(a int) engine=maria  ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
+Crashsafe:           yes
+alter table t1 engine=maria transactional=0 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=0
+Crashsafe:           no
+drop table t1;
+# iteration 6
+create table t1(a int) engine=maria  ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
+Crashsafe:           yes
+alter table t1 engine=maria transactional=1 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
+Crashsafe:           yes
+drop table t1;
+# iteration 7
+create table t1(a int) engine=maria transactional=0 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=0
+Crashsafe:           no
+alter table t1 modify a bigint ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` bigint(20) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=0
+Crashsafe:           no
+drop table t1;
+# iteration 8
+create table t1(a int) engine=maria transactional=0 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=0
+Crashsafe:           no
+alter table t1  transactional=0 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=0
+Crashsafe:           no
+drop table t1;
+# iteration 9
+create table t1(a int) engine=maria transactional=0 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=0
+Crashsafe:           no
+alter table t1  transactional=1 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
+Crashsafe:           yes
+drop table t1;
+# iteration 10
+create table t1(a int) engine=maria transactional=0 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=0
+Crashsafe:           no
+alter table t1 engine=maria  ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=0
+Crashsafe:           no
+drop table t1;
+# iteration 11
+create table t1(a int) engine=maria transactional=0 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=0
+Crashsafe:           no
+alter table t1 engine=maria transactional=0 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=0
+Crashsafe:           no
+drop table t1;
+# iteration 12
+create table t1(a int) engine=maria transactional=0 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=0
+Crashsafe:           no
+alter table t1 engine=maria transactional=1 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
+Crashsafe:           yes
+drop table t1;
+# iteration 13
+create table t1(a int) engine=maria transactional=1 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
+Crashsafe:           yes
+alter table t1 modify a bigint ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` bigint(20) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
+Crashsafe:           yes
+drop table t1;
+# iteration 14
+create table t1(a int) engine=maria transactional=1 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
+Crashsafe:           yes
+alter table t1  transactional=0 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=0
+Crashsafe:           no
+drop table t1;
+# iteration 15
+create table t1(a int) engine=maria transactional=1 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
+Crashsafe:           yes
+alter table t1  transactional=1 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
+Crashsafe:           yes
+drop table t1;
+# iteration 16
+create table t1(a int) engine=maria transactional=1 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
+Crashsafe:           yes
+alter table t1 engine=maria  ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
+Crashsafe:           yes
+drop table t1;
+# iteration 17
+create table t1(a int) engine=maria transactional=1 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
+Crashsafe:           yes
+alter table t1 engine=maria transactional=0 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=0
+Crashsafe:           no
+drop table t1;
+# iteration 18
+create table t1(a int) engine=maria transactional=1 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
+Crashsafe:           yes
+alter table t1 engine=maria transactional=1 ;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT NULL
+) ENGINE=MARIA DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
+Crashsafe:           yes
+drop table t1;

=== modified file 'mysql-test/t/maria-page-checksum.test'
--- a/mysql-test/t/maria-page-checksum.test	2008-05-29 15:33:33 +0000
+++ b/mysql-test/t/maria-page-checksum.test	2008-06-11 20:45:14 +0000
@@ -1,7 +1,5 @@
-#
-# This can't be run with --extern as we are acccessing the tables in the
-# database directly
-#
+# Tests for two bugs related to ALTER TABLE and maria-specific alter
+# options (PAGE_CHECKSUM and TRANSACTIONAL).
 
 -- source include/have_maria.inc
 
@@ -9,8 +7,16 @@
 drop table if exists t1;
 --enable_warnings
 
+#
+# Test for BUG#35441 "Cannot change PAGE_CHECKSUM table option"
+#
+
 select @@global.maria_page_checksum;
 
+# we scan through combinations in the cartesian product of
+# (first value of maria_page_checksum) x (clauses in CREATE TABLE) x
+# (second value of maria_page_checksum) x (clauses in ALTER TABLE).
+
 --echo # iteration 1
 set global maria_page_checksum = 0 ;
 create table t1(a int) engine=maria  ;
@@ -1054,3 +1060,498 @@ perl;
     close FILE;
 EOF
 drop table t1;
+
+#
+# Test for BUG#37005
+# "Maria: ALTER TABLE TRANSACTIONAL=0 leaves table transactional inside Maria"
+#
+
+# we scan through combinations in the cartesian product of
+# (clauses in CREATE TABLE) x (clauses in ALTER TABLE).
+
+--echo # iteration 1
+create table t1(a int) engine=maria  ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1 modify a bigint ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 2
+create table t1(a int) engine=maria  ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1  transactional=0 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 3
+create table t1(a int) engine=maria  ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1  transactional=1 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 4
+create table t1(a int) engine=maria  ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1 engine=maria  ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 5
+create table t1(a int) engine=maria  ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1 engine=maria transactional=0 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 6
+create table t1(a int) engine=maria  ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1 engine=maria transactional=1 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 7
+create table t1(a int) engine=maria transactional=0 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1 modify a bigint ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 8
+create table t1(a int) engine=maria transactional=0 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1  transactional=0 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 9
+create table t1(a int) engine=maria transactional=0 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1  transactional=1 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 10
+create table t1(a int) engine=maria transactional=0 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1 engine=maria  ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 11
+create table t1(a int) engine=maria transactional=0 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1 engine=maria transactional=0 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 12
+create table t1(a int) engine=maria transactional=0 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1 engine=maria transactional=1 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 13
+create table t1(a int) engine=maria transactional=1 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1 modify a bigint ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 14
+create table t1(a int) engine=maria transactional=1 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1  transactional=0 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 15
+create table t1(a int) engine=maria transactional=1 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1  transactional=1 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 16
+create table t1(a int) engine=maria transactional=1 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1 engine=maria  ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 17
+create table t1(a int) engine=maria transactional=1 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1 engine=maria transactional=0 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+
+--echo # iteration 18
+create table t1(a int) engine=maria transactional=1 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+
+alter table t1 engine=maria transactional=1 ;
+show create table t1;
+--exec $MARIA_CHK -dv $MYSQLTEST_VARDIR/master-data/test/t1
>$MYSQLTEST_VARDIR/tmp/mariachk.txt
+perl;
+    use strict;
+    use warnings;
+    my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/mariachk.txt";
+    open(FILE, "<", $fname) or die;
+    print grep(/Crashsafe/, <FILE>);
+    close FILE;
+EOF
+drop table t1;
+
+

=== modified file 'sql/sql_table.cc'
--- a/sql/sql_table.cc	2008-05-29 18:39:25 +0000
+++ b/sql/sql_table.cc	2008-06-11 20:45:14 +0000
@@ -5229,6 +5229,7 @@ compare_tables(TABLE *table,
       create_info->used_fields & HA_CREATE_USED_DEFAULT_CHARSET ||
       create_info->used_fields & HA_CREATE_USED_ROW_FORMAT ||
       create_info->used_fields & HA_CREATE_USED_PAGE_CHECKSUM ||
+      create_info->used_fields & HA_CREATE_USED_TRANSACTIONAL ||
       (alter_info->flags & (ALTER_RECREATE | ALTER_FOREIGN_KEY)) ||
       order_num ||
       !table->s->mysql_version ||

Thread
commit into MySQL/Maria:mysql-maria branch (guilhem:2650) Bug#37005Guilhem Bichot11 Jun