Bug #72178 --skip-table-options does not work when DIFFTYPE=sql
| Submitted: | 1 Apr 2014 7:30 | Modified: | 15 Sep 2014 21:13 |
|---|---|---|---|
| Reporter: | HBSpy HB | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Utilities | Severity: | S3 (Non-critical) |
| Version: | 1.3.6, 1.4.2 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | mysqldiff | ||
[1 Apr 2014 7:30]
HBSpy HB
[21 Apr 2014 19:33]
Sveta Smirnova
Thank you for the report. Verified as described. Bug is only repeatable if there are other changes to the table, not only table options.
[24 Apr 2014 14:22]
Chuck Bell
What version of Utilities are you using? I have tested against 1.4.2 and the code is successfully skipping table options. Here are my results:
mysql> show create table t1.a1 \G
*************************** 1. row ***************************
Table: a1
Create Table: CREATE TABLE `a1` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`b` char(20) DEFAULT NULL,
PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> show create table t2.a1 \G
*************************** 1. row ***************************
Table: a1
Create Table: CREATE TABLE `a1` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`b` char(20) DEFAULT NULL,
`c` int(10) unsigned NOT NULL COMMENT 'hello',
PRIMARY KEY (`a`),
KEY `bb` (`b`),
KEY `cc` (`c`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
$ python ./scripts/mysqldiff.py --server1=root@localhost:13001 t1.a1:t2.a1 --skip-table-options
# server1 on localhost: ... connected.
# Comparing t1.a1 to t2.a1 [FAIL]
# Object definitions differ. (--changes-for=server1)
#
--- t1.a1
+++ t2.a1
@@ -1,5 +1,8 @@
CREATE TABLE `a1` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`b` char(20) DEFAULT NULL,
- PRIMARY KEY (`a`)
+ `c` int(10) unsigned NOT NULL COMMENT 'hello',
+ PRIMARY KEY (`a`),
+ KEY `bb` (`b`),
+ KEY `cc` (`c`)
)
Compare failed. One or more differences found.
^^^ No table options here!
$ python ./scripts/mysqldiff.py --server1=root@localhost:13001 t1.a1:t2.a1
# server1 on localhost: ... connected.
# Comparing t1.a1 to t2.a1 [FAIL]
# Object definitions differ. (--changes-for=server1)
#
--- t1.a1
+++ t2.a1
@@ -1,5 +1,8 @@
CREATE TABLE `a1` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`b` char(20) DEFAULT NULL,
- PRIMARY KEY (`a`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1
+ `c` int(10) unsigned NOT NULL COMMENT 'hello',
+ PRIMARY KEY (`a`),
+ KEY `bb` (`b`),
+ KEY `cc` (`c`)
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
Compare failed. One or more differences found.
^^^ Ah, there they are. But I didn't tell it to skip them so they should be there.
[24 Apr 2014 14:28]
HBSpy HB
the bug will repeat when you add the option "DIFFTYPE=sql"
[14 Jul 2014 23:13]
Garrett Plasky
This bug also surfaces when the column order is different. Normally the tool will issue a warning in these cases, however when --skip-table opts is used in comparing two tables that have different column ordering, the check fails.
[14 Jul 2014 23:50]
Garrett Plasky
FWIW the bug seems to be limited to code within the private method _check_tables_structure in .../mysql/utilities/common/dbcompare.py.
Lines 416-418 should be replaced with:
diff = None
if not options.get('skip_table_opts', False):
table1_opts = db_1.get_table_options(db1, name1)
table2_opts = db_2.get_table_options(db2, name2)
diff = _get_diff(table1_opts, table2_opts, object1, object2, diff_type)
I've tested every edge case I can think if with this code in place and the utility performs as expected.
I'm unable to contribute this code -- would someone with a contributor agreement be willing to submit this and double-check the fix?
[15 Sep 2014 21:13]
Philip Olson
Fixed as of the upcoming MySQL Utilities 1.5.2 release, and here's the changelog entry: The "mysqldiff" utility's "--skip-table-options" option would fail when comparing two tables with different column ordering, or when also setting the "--difftype" option to SQL. Thank you for the bug report.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.056 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.