|    160         Yields one line at the time. |    160         Yields one line at the time. | 
|    161          |    161          | 
|    162         ''' |    162         ''' | 
|    163         curs1, curs2 = self._select() |    163         curs1, curs2 = self._select() | 
|    164          |    164          | 
|    165         row1 = curs1.fetchone_adapted() |    165         row1 = curs1.fetchone_dict() | 
|    166         row2 = curs2.fetchone_adapted() |    166         row2 = curs2.fetchone_dict() | 
|    167          |    167          | 
|    168         while True: |    168         while True: | 
|    169             if row1 is None and row2 is None: |    169             if row1 is None and row2 is None: | 
|    170                 break |    170                 break | 
|    171             diff = self._compare_row(row1, row2) |    171             diff = self._compare_row(row1, row2, curs1.adapt, curs2.adapt) | 
|    172              |    172              | 
|    173             if diff: |    173             if diff: | 
|    174                 yield diff |    174                 yield diff | 
|    175              |    175              | 
|    176                 if diff.change == '-': |    176                 if diff.change == '-': | 
|    177                     row1 = curs1.fetchone_adapted() |    177                     row1 = curs1.fetchone_dict() | 
|    178                     continue |    178                     continue | 
|    179                 if diff.change == '+': |    179                 if diff.change == '+': | 
|    180                     row2 = curs2.fetchone_adapted() |    180                     row2 = curs2.fetchone_dict() | 
|    181                     continue |    181                     continue | 
|    182             # change == '*' or not diff |    182             # change == '*' or not diff | 
|    183             row1 = curs1.fetchone_adapted() |    183             row1 = curs1.fetchone_dict() | 
|    184             row2 = curs2.fetchone_adapted() |    184             row2 = curs2.fetchone_dict() | 
|         |    185          | 
|         |    186         curs1.close() | 
|         |    187         curs2.close() | 
|    185      |    188      | 
|    186     def print_diff(self): |    189     def print_diff(self): | 
|    187         '''Print differencies between data of two tables. |    190         '''Print differencies between data of two tables. | 
|    188          |    191          | 
|    189         The output is in human readable form. |    192         The output is in human readable form. | 
|    220         self.pkeycolnames = pkey['columns'] |    223         self.pkeycolnames = pkey['columns'] | 
|    221          |    224          | 
|    222         query1 = 'SELECT ' + columns_sel + ' FROM ' + self.fulltable1 + ' ORDER BY ' + pkey_sel |    225         query1 = 'SELECT ' + columns_sel + ' FROM ' + self.fulltable1 + ' ORDER BY ' + pkey_sel | 
|    223         query2 = 'SELECT ' + columns_sel + ' FROM ' + self.fulltable2 + ' ORDER BY ' + pkey_sel |    226         query2 = 'SELECT ' + columns_sel + ' FROM ' + self.fulltable2 + ' ORDER BY ' + pkey_sel | 
|    224          |    227          | 
|    225         curs1 = self.conn1.cursor() |    228         curs1 = self.conn1.cursor('curs1') | 
|    226         curs2 = self.conn2.cursor() |    229         curs2 = self.conn2.cursor('curs2') | 
|    227          |    230          | 
|    228         curs1.execute(query1) |    231         curs1.execute(query1) | 
|    229         curs2.execute(query2) |    232         curs2.execute(query2) | 
|    230          |    233          | 
|    231         return curs1, curs2 |    234         return curs1, curs2 | 
|    241             key = OrderedDict(zip(self.pkeycolnames, [row1[colname] for colname in self.pkeycolnames])) |    244             key = OrderedDict(zip(self.pkeycolnames, [row1[colname] for colname in self.pkeycolnames])) | 
|    242             return DiffData('*', cols1, cols2, key=key) |    245             return DiffData('*', cols1, cols2, key=key) | 
|    243          |    246          | 
|    244         return None |    247         return None | 
|    245      |    248      | 
|    246     def _compare_row(self, row1, row2): |    249     def _compare_row(self, row1, row2, adapt1, adapt2): | 
|    247         if row2 is None: |    250         if row2 is None: | 
|         |    251             row1 = adapt1(row1) | 
|    248             key = OrderedDict(zip(self.pkeycolnames, [row1[colname] for colname in self.pkeycolnames])) |    252             key = OrderedDict(zip(self.pkeycolnames, [row1[colname] for colname in self.pkeycolnames])) | 
|    249             return DiffData('-', row1, None, key=key) |    253             return DiffData('-', row1, None, key=key) | 
|    250         if row1 is None: |    254         if row1 is None: | 
|         |    255             row2 = adapt2(row2) | 
|    251             return DiffData('+', None, row2) |    256             return DiffData('+', None, row2) | 
|    252          |         | 
|    253          |    257          | 
|    254         for keyname in self.pkeycolnames: |    258         for keyname in self.pkeycolnames: | 
|    255             if row1[keyname] < row2[keyname]: |    259             if row1[keyname] < row2[keyname]: | 
|         |    260                 row1 = adapt1(row1) | 
|    256                 key = OrderedDict(zip(self.pkeycolnames, [row1[colname] for colname in self.pkeycolnames])) |    261                 key = OrderedDict(zip(self.pkeycolnames, [row1[colname] for colname in self.pkeycolnames])) | 
|    257                 return DiffData('-', row1, None, key=key) |    262                 return DiffData('-', row1, None, key=key) | 
|    258         for keyname in self.pkeycolnames: |    263         for keyname in self.pkeycolnames: | 
|    259             if row1[keyname] > row2[keyname]: |    264             if row1[keyname] > row2[keyname]: | 
|         |    265                 row2 = adapt2(row2) | 
|    260                 return DiffData('+', None, row2) |    266                 return DiffData('+', None, row2) | 
|    261          |    267          | 
|         |    268         row1 = adapt1(row1) | 
|         |    269         row2 = adapt2(row2) | 
|    262         return self._compare_data(row1, row2) |    270         return self._compare_data(row1, row2) | 
|    263  |    271  |