14
14
15
15
from .utils import safezip , run_as_daemon
16
16
from .thread_utils import ThreadedYielder
17
- from .databases .database_types import IKey , NumericType , PrecisionType , StringType
17
+ from .databases .database_types import IKey , NumericType , PrecisionType , StringType , ColType_UUID
18
18
from .table_segment import TableSegment
19
19
from .tracking import create_end_event_json , create_start_event_json , send_event_json , is_tracking_enabled
20
20
@@ -209,6 +209,10 @@ def _validate_and_adjust_columns(self, table1, table2):
209
209
table1 ._schema [c1 ] = col1 .replace (precision = lowest .precision )
210
210
table2 ._schema [c2 ] = col2 .replace (precision = lowest .precision )
211
211
212
+ elif isinstance (col1 , ColType_UUID ):
213
+ if not isinstance (col2 , ColType_UUID ):
214
+ raise TypeError (f"Incompatible types for column '{ c1 } ': { col1 } <-> { col2 } " )
215
+
212
216
elif isinstance (col1 , StringType ):
213
217
if not isinstance (col2 , StringType ):
214
218
raise TypeError (f"Incompatible types for column '{ c1 } ': { col1 } <-> { col2 } " )
@@ -222,7 +226,9 @@ def _validate_and_adjust_columns(self, table1, table2):
222
226
"If encoding/formatting differs between databases, it may result in false positives."
223
227
)
224
228
225
- def _bisect_and_diff_tables (self , ti : ThreadedYielder , table1 : TableSegment , table2 : TableSegment , level = 0 , max_rows = None ):
229
+ def _bisect_and_diff_tables (
230
+ self , ti : ThreadedYielder , table1 : TableSegment , table2 : TableSegment , level = 0 , max_rows = None
231
+ ):
226
232
assert table1 .is_bounded and table2 .is_bounded
227
233
228
234
if max_rows is None :
@@ -259,7 +265,16 @@ def _bisect_and_diff_tables(self, ti: ThreadedYielder, table1: TableSegment, tab
259
265
for i , (t1 , t2 ) in enumerate (safezip (segmented1 , segmented2 )):
260
266
ti .submit (self ._diff_tables , ti , t1 , t2 , max_rows , level + 1 , i + 1 , len (segmented1 ), priority = level )
261
267
262
- def _diff_tables (self , ti : ThreadedYielder , table1 : TableSegment , table2 : TableSegment , max_rows : int , level = 0 , segment_index = None , segment_count = None ):
268
+ def _diff_tables (
269
+ self ,
270
+ ti : ThreadedYielder ,
271
+ table1 : TableSegment ,
272
+ table2 : TableSegment ,
273
+ max_rows : int ,
274
+ level = 0 ,
275
+ segment_index = None ,
276
+ segment_count = None ,
277
+ ):
263
278
logger .info (
264
279
". " * level + f"Diffing segment { segment_index } /{ segment_count } , "
265
280
f"key-range: { table1 .min_key } ..{ table2 .max_key } , "
0 commit comments