--- ./mysql/utilities/command/diff.py.save 2015-02-06 21:24:15.480969472 +0000 +++ ./mysql/utilities/command/diff.py 2015-02-09 08:35:33.590967374 +0000 @@ -26,7 +26,8 @@ from mysql.utilities.common.pattern_matching import REGEXP_QUALIFIED_OBJ_NAME from mysql.utilities.common.database import Database from mysql.utilities.common.dbcompare import (diff_objects, get_common_objects, - server_connect) + server_connect, check_consistency, + build_diff_list) from mysql.utilities.common.sql_transform import (is_quoted_with_backticks, quote_with_backticks) @@ -54,6 +55,9 @@ """ server1, server2 = server_connect(server1_val, server2_val, object1, object2, options) + direction = options.get('changes-for', 'server1') + reverse = options.get('reverse', False) + data_compare = options.get('data_compare',False) # Get the object type if unknown considering that objects of different # types can be found with the same name. @@ -85,12 +89,62 @@ obj_type) if res: result.append(res) + if data_compare and obj_type == 'TABLE': + res = _check_consistency(server1,server2,object1,object2,options) + if res: + result.append(res) return result if len(result) > 0 else None else: # Diff objects of known type - return diff_objects(server1, server2, object1, object2, options, + result = [] + res = diff_objects(server1, server2, object1, object2, options, object_type) + if res: + result.append(res) + if data_compare and obj_type == 'TABLE': + res = _check_consistency(server1,server2,object1,object2,options) + if res: + result.append(res) + return result if len(result) > 0 else None + +def _check_consistency(server1,server2,object1,object2,options): + direction = options.get('changes-for', 'server1') + reverse = options.get('reverse', False) + data_compare = options.get('data_compare',False) + result=[] + # Do the comparison based on direction + diff_server1 = [] + diff_server2 = [] + if direction == 'server1' or reverse: + diff_server1 = check_consistency(server1, server2, + object1, object2, options) + if direction == 'server2' or reverse: + diff_server2 = check_consistency(server2, server1, + object2, object1, options) + # if no differences, return + if (diff_server1 is None and diff_server2 is None) or \ + (not reverse and direction == 'server1' and + diff_server1 is None) or \ + (not reverse and direction == 'server2' and + diff_server2 is None): + return result + # Build diff list + new_opts = options.copy() + new_opts['data_diff'] = True + if direction == 'server1': + diff_list = build_diff_list(diff_server1, diff_server2, + diff_server1, diff_server2, + 'server1', 'server2', new_opts) + else: + diff_list = build_diff_list(diff_server2, diff_server1, + diff_server2, diff_server1, + 'server2', 'server1', new_opts) + if diff_list: + for diff in diff_list: + print diff + result.append(diff_list) + return result def database_diff(server1_val, server2_val, db1, db2, options): """Find differences among objects from two databases.