Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-8733

Table storage engine conversion does not remove TRANSACTIONAL flags

    Details

      Description

      If a table is created as MyISAM or ARIA engine or was at some point in the past converted to this engine type, a later conversion to INNODB and any subsequent ALTER TABLE statement produces the warning #1478. This is a critical bug as e.g. Ruby on rails interprets this warning as a failed transaction and does not apply DB migrations.

      This can be reproduced using the following SQL:

      CREATE DATABASE testdb;
      CONNECT testdb;
      CREATE TABLE testtable (id INT(11)) ENGINE=INNODB;
      ALTER TABLE testtable ENGINE=INNODB;
      ALTER TABLE testtable ENGINE=INNODB;
      ALTER TABLE testtable ENGINE=ARIA TRANSACTIONAL=1;
      ALTER TABLE testtable ENGINE=INNODB;
      SHOW WARNINGS;
      ALTER TABLE testtable ENGINE=INNODB;
      SHOW WARNINGS;
      

      Result:

      MariaDB [(none)]> connect testdb;
      Connection id:    6698
      Current database: testdb
      
      MariaDB [testdb]> create table testtable (id INT(11)) ENGINE=INNODB;
      Query OK, 0 rows affected (0.30 sec)
      
      MariaDB [testdb]> alter table testtable ENGINE=INNODB;
      Query OK, 0 rows affected (0.35 sec)
      Records: 0  Duplicates: 0  Warnings: 0
      
      MariaDB [testdb]> alter table testtable ENGINE=INNODB;
      Query OK, 0 rows affected (0.36 sec)
      Records: 0  Duplicates: 0  Warnings: 0
      
      MariaDB [testdb]> alter table testtable ENGINE=ARIA TRANSACTIONAL=1;
      Query OK, 0 rows affected (0.49 sec)
      Records: 0  Duplicates: 0  Warnings: 0
      
      MariaDB [testdb]> alter table testtable ENGINE=INNODB;
      Query OK, 0 rows affected, 1 warning (0.54 sec)
      Records: 0  Duplicates: 0  Warnings: 1
      
      MariaDB [testdb]> show warnings;
      +---------+------+------------------------------------------------------------------------------------+
      | Level   | Code | Message                                                                            |
      +---------+------+------------------------------------------------------------------------------------+
      | Warning | 1478 | Table storage engine 'InnoDB' does not support the create option 'TRANSACTIONAL=1' |
      +---------+------+------------------------------------------------------------------------------------+
      1 row in set (0.00 sec)
      
      MariaDB [testdb]> alter table testtable ENGINE=INNODB;
      Query OK, 0 rows affected, 1 warning (0.39 sec)
      Records: 0  Duplicates: 0  Warnings: 1
      
      MariaDB [testdb]> show warnings;
      +---------+------+------------------------------------------------------------------------------------+
      | Level   | Code | Message                                                                            |
      +---------+------+------------------------------------------------------------------------------------+
      | Warning | 1478 | Table storage engine 'InnoDB' does not support the create option 'TRANSACTIONAL=1' |
      +---------+------+------------------------------------------------------------------------------------+
      

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

              Hide
              elenst Elena Stepanova added a comment -

              It's an upstream bug https://bugs.mysql.com/bug.php?id=67727 .

              Workaround:

              MariaDB [test]> create table t1 (i int) engine=Aria transactional=1;
              Query OK, 0 rows affected (0.42 sec)
              
              MariaDB [test]> alter table t1 transactional = default, engine=InnoDB;
              Query OK, 0 rows affected (1.65 sec)               
              Records: 0  Duplicates: 0  Warnings: 0
              
              Show
              elenst Elena Stepanova added a comment - It's an upstream bug https://bugs.mysql.com/bug.php?id=67727 . Workaround: MariaDB [test]> create table t1 (i int) engine=Aria transactional=1; Query OK, 0 rows affected (0.42 sec) MariaDB [test]> alter table t1 transactional = default, engine=InnoDB; Query OK, 0 rows affected (1.65 sec) Records: 0 Duplicates: 0 Warnings: 0

                People

                • Assignee:
                  Unassigned
                  Reporter:
                  kasi Karsten Richter
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  2 Start watching this issue

                  Dates

                  • Created:
                    Updated: