def execute(self): """The main method that splits the arguments and starts the magic""" left, right = self.left, self.right lcon = Source.connection(left) if not lcon: raise UnknownConnectionException( left.uri, map(lambda c: c.autocomplete(), Source.connections())) lopts = left.get(lcon.dbms) rcon = Source.connection(right) if not rcon: raise UnknownConnectionException( right.uri, map(lambda c: c.autocomplete(), Source.connections())) ropts = right.get(rcon.dbms) try: lcon.connect(lopts.database) rcon.connect(ropts.database) ltables = lcon.tables() if lopts.table not in ltables: raise UnknownTableException(lopts.table, ltables.keys()) ltable = ltables[lopts.table] rtables = rcon.tables() if ropts.table not in rtables: raise UnknownTableException(ropts.table, rtables.keys()) rtable = rtables[ropts.table] lcols = map( column_ddl if left.compare_ddl else column_name, ltable.columns()) rcols = map( column_ddl if right.compare_ddl else column_name, rtable.columns()) lplus = dict(map( lambda c: (c.split()[0], ltable.column(c.split()[0])), list(set(lcols) - set(rcols)))) rplus = dict(map( lambda c: (c.split()[0], rtable.column(c.split()[0])), list(set(rcols) - set(lcols)))) r = {} for k, v in lplus.iteritems(): if k in rplus: r[k] = (v, rplus[k]) else: r[k] = (v, None) for k, v in rplus.iteritems(): if k not in lplus: r[k] = (None, v) return to_dto(map(lambda (k, v): v, r.iteritems())) finally: lcon.close() rcon.close()
def execute(self): """The main method that splits the arguments and starts the magic""" left, right = self.left, self.right lcon = Source.connection(left) if not lcon: raise UnknownConnectionException( left.uri, map(lambda c: c.autocomplete(), Source.connections())) lopts = left.get(lcon.dbms) rcon = Source.connection(right) if not rcon: raise UnknownConnectionException( right.uri, map(lambda c: c.autocomplete(), Source.connections())) ropts = right.get(rcon.dbms) try: lcon.connect(lopts.database) rcon.connect(ropts.database) ltables = lcon.tables() if lopts.table not in ltables: raise UnknownTableException(lopts.table, ltables.keys()) ltable = ltables[lopts.table] rtables = rcon.tables() if ropts.table not in rtables: raise UnknownTableException(ropts.table, rtables.keys()) rtable = rtables[ropts.table] lcols = map(column_ddl if left.compare_ddl else column_name, ltable.columns()) rcols = map(column_ddl if right.compare_ddl else column_name, rtable.columns()) lplus = dict( map(lambda c: (c.split()[0], ltable.column(c.split()[0])), list(set(lcols) - set(rcols)))) rplus = dict( map(lambda c: (c.split()[0], rtable.column(c.split()[0])), list(set(rcols) - set(lcols)))) r = {} for k, v in lplus.iteritems(): if k in rplus: r[k] = (v, rplus[k]) else: r[k] = (v, None) for k, v in rplus.iteritems(): if k not in lplus: r[k] = (None, v) return to_dto(map(lambda (k, v): v, r.iteritems())) finally: lcon.close() rcon.close()