daff 1.2.6 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -6
  3. data/bin/daff.rb +0 -0
  4. data/lib/daff.rb +6 -0
  5. data/lib/lib/coopy/alignment.rb +146 -169
  6. data/lib/lib/coopy/cell_builder.rb +1 -1
  7. data/lib/lib/coopy/cell_info.rb +2 -1
  8. data/lib/lib/coopy/column_change.rb +16 -0
  9. data/lib/lib/coopy/compare_flags.rb +33 -5
  10. data/lib/lib/coopy/compare_table.rb +219 -99
  11. data/lib/lib/coopy/coopy.rb +205 -99
  12. data/lib/lib/coopy/csv.rb +17 -22
  13. data/lib/lib/coopy/diff_render.rb +16 -8
  14. data/lib/lib/coopy/flat_cell_builder.rb +11 -8
  15. data/lib/lib/coopy/highlight_patch.rb +363 -63
  16. data/lib/lib/coopy/highlight_patch_unit.rb +1 -1
  17. data/lib/lib/coopy/index.rb +21 -8
  18. data/lib/lib/coopy/index_item.rb +7 -3
  19. data/lib/lib/coopy/index_pair.rb +13 -10
  20. data/lib/lib/coopy/merger.rb +3 -3
  21. data/lib/lib/coopy/meta.rb +17 -0
  22. data/lib/lib/coopy/mover.rb +7 -5
  23. data/lib/lib/coopy/ndjson.rb +2 -2
  24. data/lib/lib/coopy/nested_cell_builder.rb +7 -7
  25. data/lib/lib/coopy/ordering.rb +6 -2
  26. data/lib/lib/coopy/property_change.rb +16 -0
  27. data/lib/lib/coopy/row.rb +1 -0
  28. data/lib/lib/coopy/row_change.rb +42 -0
  29. data/lib/lib/coopy/row_stream.rb +11 -0
  30. data/lib/lib/coopy/simple_table.rb +84 -30
  31. data/lib/lib/coopy/simple_view.rb +8 -8
  32. data/lib/lib/coopy/sparse_sheet.rb +1 -1
  33. data/lib/lib/coopy/sql_column.rb +22 -10
  34. data/lib/lib/coopy/sql_compare.rb +397 -85
  35. data/lib/lib/coopy/sql_database.rb +2 -0
  36. data/lib/lib/coopy/sql_helper.rb +5 -0
  37. data/lib/lib/coopy/sql_table.rb +122 -19
  38. data/lib/lib/coopy/sql_table_name.rb +1 -1
  39. data/lib/lib/coopy/sqlite_helper.rb +250 -3
  40. data/lib/lib/coopy/table.rb +1 -0
  41. data/lib/lib/coopy/table_diff.rb +643 -464
  42. data/lib/lib/coopy/table_io.rb +19 -6
  43. data/lib/lib/coopy/table_modifier.rb +1 -1
  44. data/lib/lib/coopy/table_stream.rb +102 -0
  45. data/lib/lib/coopy/terminal_diff_render.rb +4 -3
  46. data/lib/lib/coopy/unit.rb +22 -2
  47. data/lib/lib/coopy/viterbi.rb +4 -4
  48. data/lib/lib/haxe/ds/int_map.rb +1 -1
  49. data/lib/lib/haxe/ds/string_map.rb +1 -1
  50. data/lib/lib/haxe/format/json_parser.rb +1 -1
  51. data/lib/lib/haxe/format/json_printer.rb +1 -1
  52. data/lib/lib/haxe/io/bytes.rb +2 -2
  53. data/lib/lib/haxe/io/eof.rb +1 -1
  54. data/lib/lib/haxe/io/output.rb +1 -1
  55. data/lib/lib/hx_overrides.rb +1 -1
  56. data/lib/lib/hx_sys.rb +9 -5
  57. data/lib/lib/lambda.rb +3 -3
  58. data/lib/lib/list.rb +1 -1
  59. data/lib/lib/rb/ruby_iterator.rb +2 -2
  60. data/lib/lib/reflect.rb +1 -1
  61. data/lib/lib/sys/io/file_output.rb +1 -1
  62. data/lib/lib/sys/io/hx_file.rb +1 -1
  63. data/lib/lib/x_list/list_iterator.rb +2 -2
  64. metadata +29 -25
  65. data/lib/lib/coopy/table_text.rb +0 -26
  66. data/lib/lib/haxe/io/bytes_buffer.rb +0 -19
  67. data/lib/lib/haxe/io/bytes_input.rb +0 -13
  68. data/lib/lib/haxe/io/bytes_output.rb +0 -33
  69. data/lib/lib/haxe/io/input.rb +0 -11
@@ -16,6 +16,7 @@ module Coopy
16
16
  def get_height() puts "Abstract Table.get_height called" end
17
17
  def getData() puts "Abstract Table.getData called" end
18
18
  def clone() puts "Abstract Table.clone called" end
19
+ def getMeta() puts "Abstract Table.getMeta called" end
19
20
  haxe_me ["coopy", "Table"]
20
21
  end
21
22
 
@@ -8,6 +8,7 @@ module Coopy
8
8
  @align = align
9
9
  @flags = flags
10
10
  @builder = nil
11
+ @preserve_columns = false
11
12
  end
12
13
 
13
14
  protected
@@ -15,6 +16,41 @@ module Coopy
15
16
  attr_accessor :align
16
17
  attr_accessor :flags
17
18
  attr_accessor :builder
19
+ attr_accessor :row_map
20
+ attr_accessor :col_map
21
+ attr_accessor :has_parent
22
+ attr_accessor :a
23
+ attr_accessor :b
24
+ attr_accessor :p
25
+ attr_accessor :rp_header
26
+ attr_accessor :ra_header
27
+ attr_accessor :rb_header
28
+ attr_accessor :is_index_p
29
+ attr_accessor :is_index_a
30
+ attr_accessor :is_index_b
31
+ attr_accessor :order
32
+ attr_accessor :row_units
33
+ attr_accessor :column_units
34
+ attr_accessor :show_rc_numbers
35
+ attr_accessor :row_moves
36
+ attr_accessor :col_moves
37
+ attr_accessor :active_row
38
+ attr_accessor :active_column
39
+ attr_accessor :allow_insert
40
+ attr_accessor :allow_delete
41
+ attr_accessor :allow_update
42
+ attr_accessor :v
43
+ attr_accessor :sep
44
+ attr_accessor :conflict_sep
45
+ attr_accessor :schema
46
+ attr_accessor :have_schema
47
+ attr_accessor :top_line_done
48
+ attr_accessor :have_addition
49
+ attr_accessor :act
50
+ attr_accessor :publish
51
+ attr_accessor :diff_found
52
+ attr_accessor :schema_diff_found
53
+ attr_accessor :preserve_columns
18
54
 
19
55
  public
20
56
 
@@ -71,7 +107,7 @@ module Coopy
71
107
  end
72
108
  end
73
109
  end
74
- return sep
110
+ sep
75
111
  end
76
112
 
77
113
  def quote_for_diff(v,d)
@@ -90,7 +126,7 @@ module Coopy
90
126
  end
91
127
  end
92
128
  str = "_" + _hx_str(str) if str[score..-1] == _nil
93
- return str
129
+ str
94
130
  end
95
131
 
96
132
  def is_reordered(m,ct)
@@ -120,7 +156,7 @@ module Coopy
120
156
  end
121
157
  end
122
158
  end
123
- return reordered
159
+ reordered
124
160
  end
125
161
 
126
162
  def spread_context(units,del,active)
@@ -209,51 +245,47 @@ module Coopy
209
245
  ct+=1
210
246
  end
211
247
  end
212
- return ct
248
+ ct
213
249
  end
214
250
 
215
- public
251
+ def reset
252
+ @has_parent = false
253
+ @rp_header = @ra_header = @rb_header = 0
254
+ @is_index_p = {}
255
+ @is_index_a = {}
256
+ @is_index_b = {}
257
+ @row_map = {}
258
+ @col_map = {}
259
+ @show_rc_numbers = false
260
+ @row_moves = nil
261
+ @col_moves = nil
262
+ @allow_insert = @allow_delete = @allow_update = true
263
+ @sep = ""
264
+ @conflict_sep = ""
265
+ @top_line_done = false
266
+ @diff_found = false
267
+ @schema_diff_found = false
268
+ end
216
269
 
217
- def hilite(output)
218
- return false if !output.is_resizable
219
- if @builder == nil
220
- if @flags.allow_nested_cells
221
- @builder = ::Coopy::NestedCellBuilder.new
222
- else
223
- @builder = ::Coopy::FlatCellBuilder.new
224
- end
225
- end
226
- output.resize(0,0)
227
- output.clear
228
- row_map = {}
229
- col_map = {}
230
- order = @align.to_order
231
- units = order.get_list
232
- has_parent = @align.reference != nil
233
- a = nil
234
- b = nil
235
- p = nil
236
- rp_header = 0
237
- ra_header = 0
238
- rb_header = 0
239
- is_index_p = {}
240
- is_index_a = {}
241
- is_index_b = {}
242
- if has_parent
243
- p = @align.get_source
244
- a = @align.reference.get_target
245
- b = @align.get_target
246
- rp_header = @align.reference.meta.get_source_header
247
- ra_header = @align.reference.meta.get_target_header
248
- rb_header = @align.meta.get_target_header
270
+ def setup_tables
271
+ @order = @align.to_order
272
+ @row_units = @order.get_list
273
+ @has_parent = @align.reference != nil
274
+ if @has_parent
275
+ @p = @align.get_source
276
+ @a = @align.reference.get_target
277
+ @b = @align.get_target
278
+ @rp_header = @align.reference.meta.get_source_header
279
+ @ra_header = @align.reference.meta.get_target_header
280
+ @rb_header = @align.meta.get_target_header
249
281
  if @align.get_index_columns != nil
250
282
  _g = 0
251
283
  _g1 = @align.get_index_columns
252
284
  while(_g < _g1.length)
253
285
  p2b = _g1[_g]
254
286
  _g+=1
255
- is_index_p[p2b.l] = true if p2b.l >= 0
256
- is_index_b[p2b.r] = true if p2b.r >= 0
287
+ @is_index_p[p2b.l] = true if p2b.l >= 0
288
+ @is_index_b[p2b.r] = true if p2b.r >= 0
257
289
  end
258
290
  end
259
291
  if @align.reference.get_index_columns != nil
@@ -262,491 +294,259 @@ module Coopy
262
294
  while(_g2 < _g11.length)
263
295
  p2a = _g11[_g2]
264
296
  _g2+=1
265
- is_index_p[p2a.l] = true if p2a.l >= 0
266
- is_index_a[p2a.r] = true if p2a.r >= 0
297
+ @is_index_p[p2a.l] = true if p2a.l >= 0
298
+ @is_index_a[p2a.r] = true if p2a.r >= 0
267
299
  end
268
300
  end
269
301
  else
270
- a = @align.get_source
271
- b = @align.get_target
272
- p = a
273
- ra_header = @align.meta.get_source_header
274
- rp_header = ra_header
275
- rb_header = @align.meta.get_target_header
302
+ @a = @align.get_source
303
+ @b = @align.get_target
304
+ @p = @a
305
+ @ra_header = @align.meta.get_source_header
306
+ @rp_header = @ra_header
307
+ @rb_header = @align.meta.get_target_header
276
308
  if @align.get_index_columns != nil
277
309
  _g3 = 0
278
310
  _g12 = @align.get_index_columns
279
311
  while(_g3 < _g12.length)
280
312
  a2b = _g12[_g3]
281
313
  _g3+=1
282
- is_index_a[a2b.l] = true if a2b.l >= 0
283
- is_index_b[a2b.r] = true if a2b.r >= 0
314
+ @is_index_a[a2b.l] = true if a2b.l >= 0
315
+ @is_index_b[a2b.r] = true if a2b.r >= 0
284
316
  end
285
317
  end
286
318
  end
319
+ @allow_insert = @flags.allow_insert
320
+ @allow_delete = @flags.allow_delete
321
+ @allow_update = @flags.allow_update
322
+ @v = @a.get_cell_view
323
+ @builder.set_view(@v)
324
+ end
325
+
326
+ def scan_activity
327
+ @active_row = Array.new
328
+ @active_column = nil
329
+ if !@flags.show_unchanged
330
+ _g1 = 0
331
+ _g = @row_units.length
332
+ while(_g1 < _g)
333
+ i = _g1
334
+ _g1+=1
335
+ @active_row[@row_units.length - 1 - i] = 0
336
+ end
337
+ end
338
+ if !@flags.show_unchanged_columns
339
+ @active_column = Array.new
340
+ begin
341
+ _g11 = 0
342
+ _g2 = @column_units.length
343
+ while(_g11 < _g2)
344
+ i1 = _g11
345
+ _g11+=1
346
+ v = 0
347
+ unit = @column_units[i1]
348
+ v = 1 if unit.l >= 0 && @is_index_a[unit.l]
349
+ v = 1 if unit.r >= 0 && @is_index_b[unit.r]
350
+ v = 1 if unit.p >= 0 && @is_index_p[unit.p]
351
+ @active_column[i1] = v
352
+ end
353
+ end
354
+ end
355
+ end
356
+
357
+ def setup_columns
287
358
  column_order = @align.meta.to_order
288
- column_units = column_order.get_list
289
- p_ignore = {}
290
- a_ignore = {}
291
- b_ignore = {}
359
+ @column_units = column_order.get_list
292
360
  ignore = @flags.get_ignored_columns
293
361
  if ignore != nil
294
- self.set_ignore(ignore,p_ignore,p,rp_header)
295
- self.set_ignore(ignore,a_ignore,a,ra_header)
296
- self.set_ignore(ignore,b_ignore,b,rb_header)
362
+ p_ignore = {}
363
+ a_ignore = {}
364
+ b_ignore = {}
365
+ self.set_ignore(ignore,p_ignore,@p,@rp_header)
366
+ self.set_ignore(ignore,a_ignore,@a,@ra_header)
367
+ self.set_ignore(ignore,b_ignore,@b,@rb_header)
297
368
  ncolumn_units = Array.new
298
369
  begin
299
- _g13 = 0
300
- _g4 = column_units.length
301
- while(_g13 < _g4)
302
- j = _g13
303
- _g13+=1
304
- cunit = column_units[j]
370
+ _g1 = 0
371
+ _g = @column_units.length
372
+ while(_g1 < _g)
373
+ j = _g1
374
+ _g1+=1
375
+ cunit = @column_units[j]
305
376
  next if p_ignore.include?(cunit.p) || a_ignore.include?(cunit.l) || b_ignore.include?(cunit.r)
306
377
  ncolumn_units.push(cunit)
307
378
  end
308
379
  end
309
- column_units = ncolumn_units
380
+ @column_units = ncolumn_units
310
381
  end
311
- show_rc_numbers = false
312
- row_moves = nil
313
- col_moves = nil
382
+ end
383
+
384
+ def setup_moves
314
385
  if @flags.ordered
315
- row_moves = {}
316
- moves = ::Coopy::Mover.move_units(units)
386
+ @row_moves = {}
387
+ moves = ::Coopy::Mover.move_units(@row_units)
317
388
  begin
318
- _g14 = 0
319
- _g5 = moves.length
320
- while(_g14 < _g5)
321
- i = _g14
322
- _g14+=1
389
+ _g1 = 0
390
+ _g = moves.length
391
+ while(_g1 < _g)
392
+ i = _g1
393
+ _g1+=1
323
394
  begin
324
- row_moves[moves[i]] = i
395
+ @row_moves[moves[i]] = i
325
396
  i
326
397
  end
327
398
  end
328
399
  end
329
- col_moves = {}
330
- moves = ::Coopy::Mover.move_units(column_units)
400
+ @col_moves = {}
401
+ moves = ::Coopy::Mover.move_units(@column_units)
331
402
  begin
332
- _g15 = 0
333
- _g6 = moves.length
334
- while(_g15 < _g6)
335
- i1 = _g15
336
- _g15+=1
403
+ _g11 = 0
404
+ _g2 = moves.length
405
+ while(_g11 < _g2)
406
+ i1 = _g11
407
+ _g11+=1
337
408
  begin
338
- col_moves[moves[i1]] = i1
409
+ @col_moves[moves[i1]] = i1
339
410
  i1
340
411
  end
341
412
  end
342
413
  end
343
414
  end
344
- active = Array.new
345
- active_column = nil
346
- if !@flags.show_unchanged
347
- _g16 = 0
348
- _g7 = units.length
349
- while(_g16 < _g7)
350
- i2 = _g16
351
- _g16+=1
352
- active[units.length - 1 - i2] = 0
353
- end
354
- end
355
- allow_insert = @flags.allow_insert
356
- allow_delete = @flags.allow_delete
357
- allow_update = @flags.allow_update
358
- if !@flags.show_unchanged_columns
359
- active_column = Array.new
360
- begin
361
- _g17 = 0
362
- _g8 = column_units.length
363
- while(_g17 < _g8)
364
- i3 = _g17
365
- _g17+=1
366
- v = 0
367
- unit = column_units[i3]
368
- v = 1 if unit.l >= 0 && is_index_a[unit.l]
369
- v = 1 if unit.r >= 0 && is_index_b[unit.r]
370
- v = 1 if unit.p >= 0 && is_index_p[unit.p]
371
- active_column[i3] = v
372
- end
373
- end
374
- end
375
- v1 = a.get_cell_view
376
- @builder.set_view(v1)
377
- outer_reps_needed = nil
378
- if @flags.show_unchanged && @flags.show_unchanged_columns
379
- outer_reps_needed = 1
380
- else
381
- outer_reps_needed = 2
382
- end
383
- sep = ""
384
- conflict_sep = ""
385
- schema = Array.new
386
- have_schema = false
415
+ end
416
+
417
+ def scan_schema
418
+ @schema = Array.new
419
+ @have_schema = false
387
420
  begin
388
- _g18 = 0
389
- _g9 = column_units.length
390
- while(_g18 < _g9)
391
- j1 = _g18
392
- _g18+=1
393
- cunit1 = column_units[j1]
421
+ _g1 = 0
422
+ _g = @column_units.length
423
+ while(_g1 < _g)
424
+ j = _g1
425
+ _g1+=1
426
+ cunit = @column_units[j]
394
427
  reordered = false
395
428
  if @flags.ordered
396
- reordered = true if col_moves.include?(j1)
397
- show_rc_numbers = true if reordered
429
+ reordered = true if @col_moves.include?(j)
430
+ @show_rc_numbers = true if reordered
398
431
  end
399
432
  act = ""
400
- if cunit1.r >= 0 && cunit1.lp == -1
401
- have_schema = true
433
+ if cunit.r >= 0 && cunit.lp == -1
434
+ @have_schema = true
402
435
  act = "+++"
403
- if active_column != nil
404
- active_column[j1] = 1 if allow_update
436
+ if @active_column != nil
437
+ @active_column[j] = 1 if @allow_update
405
438
  end
406
439
  end
407
- if cunit1.r < 0 && cunit1.lp >= 0
408
- have_schema = true
440
+ if cunit.r < 0 && cunit.lp >= 0
441
+ @have_schema = true
409
442
  act = "---"
410
- if active_column != nil
411
- active_column[j1] = 1 if allow_update
443
+ if @active_column != nil
444
+ @active_column[j] = 1 if @allow_update
412
445
  end
413
446
  end
414
- if cunit1.r >= 0 && cunit1.lp >= 0
415
- if p.get_height >= rp_header && b.get_height >= rb_header
416
- pp = p.get_cell(cunit1.lp,rp_header)
417
- bb = b.get_cell(cunit1.r,rb_header)
418
- if !v1.equals(pp,bb)
419
- have_schema = true
447
+ if cunit.r >= 0 && cunit.lp >= 0
448
+ if @p.get_height >= @rp_header && @b.get_height >= @rb_header
449
+ pp = @p.get_cell(cunit.lp,@rp_header)
450
+ bb = @b.get_cell(cunit.r,@rb_header)
451
+ if !@v.equals(pp,bb)
452
+ @have_schema = true
420
453
  act = "("
421
- act += v1.to_s(pp)
454
+ act += @v.to_s(pp)
422
455
  act += ")"
423
- active_column[j1] = 1 if active_column != nil
456
+ @active_column[j] = 1 if @active_column != nil
424
457
  end
425
458
  end
426
459
  end
427
460
  if reordered
428
461
  act = ":" + _hx_str(act)
429
- have_schema = true
430
- active_column = nil if active_column != nil
431
- end
432
- schema.push(act)
433
- end
434
- end
435
- if have_schema
436
- at = output.get_height
437
- output.resize(column_units.length + 1,at + 1)
438
- output.set_cell(0,at,@builder.marker("!"))
439
- begin
440
- _g19 = 0
441
- _g10 = column_units.length
442
- while(_g19 < _g10)
443
- j2 = _g19
444
- _g19+=1
445
- output.set_cell(j2 + 1,at,v1.to_datum(schema[j2]))
446
- end
447
- end
448
- end
449
- top_line_done = false
450
- if @flags.always_show_header
451
- at1 = output.get_height
452
- output.resize(column_units.length + 1,at1 + 1)
453
- output.set_cell(0,at1,@builder.marker("@@"))
454
- begin
455
- _g110 = 0
456
- _g20 = column_units.length
457
- while(_g110 < _g20)
458
- j3 = _g110
459
- _g110+=1
460
- cunit2 = column_units[j3]
461
- if cunit2.r >= 0
462
- output.set_cell(j3 + 1,at1,b.get_cell(cunit2.r,rb_header)) if b.get_height != 0
463
- elsif cunit2.lp >= 0
464
- output.set_cell(j3 + 1,at1,p.get_cell(cunit2.lp,rp_header)) if p.get_height != 0
465
- end
466
- col_map[j3 + 1] = cunit2
467
- end
468
- end
469
- top_line_done = true
470
- end
471
- output_height = output.get_height
472
- output_height_init = output.get_height
473
- begin
474
- _g21 = 0
475
- while(_g21 < outer_reps_needed)
476
- out = _g21
477
- _g21+=1
478
- if out == 1
479
- self.spread_context(units,@flags.unchanged_context,active)
480
- self.spread_context(column_units,@flags.unchanged_column_context,active_column)
481
- if active_column != nil
482
- _g22 = 0
483
- _g111 = column_units.length
484
- while(_g22 < _g111)
485
- i4 = _g22
486
- _g22+=1
487
- active_column[i4] = 0 if active_column[i4] == 3
488
- end
489
- end
490
- rows = self.count_active(active) + output_height_init
491
- rows-=1 if top_line_done
492
- output_height = output_height_init
493
- output.resize(column_units.length + 1,rows) if rows > output.get_height
494
- end
495
- showed_dummy = false
496
- l = -1
497
- r = -1
498
- begin
499
- _g23 = 0
500
- _g112 = units.length
501
- while(_g23 < _g112)
502
- i5 = _g23
503
- _g23+=1
504
- unit1 = units[i5]
505
- reordered1 = false
506
- if @flags.ordered
507
- reordered1 = true if row_moves.include?(i5)
508
- show_rc_numbers = true if reordered1
509
- end
510
- next if unit1.r < 0 && unit1.l < 0
511
- next if unit1.r == 0 && unit1.lp == 0 && top_line_done
512
- act1 = ""
513
- act1 = ":" if reordered1
514
- publish = @flags.show_unchanged
515
- dummy = false
516
- if out == 1
517
- publish = active[i5] > 0
518
- dummy = active[i5] == 3
519
- next if dummy && showed_dummy
520
- next if !publish
521
- end
522
- showed_dummy = false if !dummy
523
- at2 = output_height
524
- if publish
525
- output_height+=1
526
- output.resize(column_units.length + 1,output_height) if output.get_height < output_height
527
- end
528
- if dummy
529
- begin
530
- _g41 = 0
531
- _g31 = column_units.length + 1
532
- while(_g41 < _g31)
533
- j4 = _g41
534
- _g41+=1
535
- output.set_cell(j4,at2,v1.to_datum("..."))
536
- end
537
- end
538
- showed_dummy = true
539
- next
540
- end
541
- have_addition = false
542
- skip = false
543
- if unit1.p < 0 && unit1.l < 0 && unit1.r >= 0
544
- skip = true if !allow_insert
545
- act1 = "+++"
546
- end
547
- if (unit1.p >= 0 || !has_parent) && unit1.l >= 0 && unit1.r < 0
548
- skip = true if !allow_delete
549
- act1 = "---"
550
- end
551
- if skip
552
- if !publish
553
- active[i5] = -3 if active != nil
554
- end
555
- next
556
- end
557
- begin
558
- _g42 = 0
559
- _g32 = column_units.length
560
- while(_g42 < _g32)
561
- j5 = _g42
562
- _g42+=1
563
- cunit3 = column_units[j5]
564
- pp1 = nil
565
- ll = nil
566
- rr = nil
567
- dd = nil
568
- dd_to = nil
569
- have_dd_to = false
570
- dd_to_alt = nil
571
- have_dd_to_alt = false
572
- have_pp = false
573
- have_ll = false
574
- have_rr = false
575
- if cunit3.p >= 0 && unit1.p >= 0
576
- pp1 = p.get_cell(cunit3.p,unit1.p)
577
- have_pp = true
578
- end
579
- if cunit3.l >= 0 && unit1.l >= 0
580
- ll = a.get_cell(cunit3.l,unit1.l)
581
- have_ll = true
582
- end
583
- if cunit3.r >= 0 && unit1.r >= 0
584
- rr = b.get_cell(cunit3.r,unit1.r)
585
- have_rr = true
586
- if (((have_pp) ? cunit3.p : cunit3.l)) < 0
587
- if rr != nil
588
- if v1.to_s(rr) != ""
589
- have_addition = true if @flags.allow_update
590
- end
591
- end
592
- end
593
- end
594
- if have_pp
595
- if !have_rr
596
- dd = pp1
597
- elsif v1.equals(pp1,rr)
598
- dd = pp1
599
- else
600
- dd = pp1
601
- dd_to = rr
602
- have_dd_to = true
603
- if !v1.equals(pp1,ll)
604
- if !v1.equals(pp1,rr)
605
- dd_to_alt = ll
606
- have_dd_to_alt = true
607
- end
608
- end
609
- end
610
- elsif have_ll
611
- if !have_rr
612
- dd = ll
613
- elsif v1.equals(ll,rr)
614
- dd = ll
615
- else
616
- dd = ll
617
- dd_to = rr
618
- have_dd_to = true
619
- end
620
- else
621
- dd = rr
622
- end
623
- cell = dd
624
- if have_dd_to && allow_update
625
- active_column[j5] = 1 if active_column != nil
626
- if sep == ""
627
- if @builder.need_separator
628
- sep = self.get_separator(a,b,"->")
629
- @builder.set_separator(sep)
630
- else
631
- sep = "->"
632
- end
633
- end
634
- is_conflict = false
635
- if have_dd_to_alt
636
- is_conflict = true if !v1.equals(dd_to,dd_to_alt)
637
- end
638
- if !is_conflict
639
- cell = @builder.update(dd,dd_to)
640
- act1 = sep if sep.length > act1.length
641
- else
642
- if conflict_sep == ""
643
- if @builder.need_separator
644
- conflict_sep = _hx_str(self.get_separator(p,a,"!")) + _hx_str(sep)
645
- @builder.set_conflict_separator(conflict_sep)
646
- else
647
- conflict_sep = "!->"
648
- end
649
- end
650
- cell = @builder.conflict(dd,dd_to_alt,dd_to)
651
- act1 = conflict_sep
652
- end
653
- end
654
- act1 = "+" if act1 == "" && have_addition
655
- if act1 == "+++"
656
- if have_rr
657
- active_column[j5] = 1 if active_column != nil
658
- end
659
- end
660
- if publish
661
- output.set_cell(j5 + 1,at2,cell) if active_column == nil || active_column[j5] > 0
662
- end
663
- end
664
- end
665
- if publish
666
- output.set_cell(0,at2,@builder.marker(act1))
667
- row_map[at2] = unit1
668
- end
669
- if act1 != ""
670
- if !publish
671
- active[i5] = 1 if active != nil
672
- end
673
- end
674
- end
462
+ @have_schema = true
463
+ @active_column = nil if @active_column != nil
675
464
  end
465
+ @schema.push(act)
676
466
  end
677
467
  end
678
- if !show_rc_numbers
468
+ end
469
+
470
+ def check_rc_numbers(w,h)
471
+ if !@show_rc_numbers
679
472
  if @flags.always_show_order
680
- show_rc_numbers = true
473
+ @show_rc_numbers = true
681
474
  elsif @flags.ordered
682
- show_rc_numbers = self.is_reordered(row_map,output.get_height)
683
- show_rc_numbers = self.is_reordered(col_map,output.get_width) if !show_rc_numbers
475
+ @show_rc_numbers = self.is_reordered(@row_map,h)
476
+ @show_rc_numbers = self.is_reordered(@col_map,w) if !@show_rc_numbers
684
477
  end
685
478
  end
479
+ end
480
+
481
+ def add_rc_numbers(output)
686
482
  admin_w = 1
687
- if show_rc_numbers && !@flags.never_show_order
483
+ if @show_rc_numbers && !@flags.never_show_order
688
484
  admin_w+=1
689
485
  target = Array.new
690
486
  begin
691
- _g113 = 0
692
- _g24 = output.get_width
693
- while(_g113 < _g24)
694
- i6 = _g113
695
- _g113+=1
696
- target.push(i6 + 1)
487
+ _g1 = 0
488
+ _g = output.get_width
489
+ while(_g1 < _g)
490
+ i = _g1
491
+ _g1+=1
492
+ target.push(i + 1)
697
493
  end
698
494
  end
699
495
  output.insert_or_delete_columns(target,output.get_width + 1)
700
496
  begin
701
- _g114 = 0
702
- _g25 = output.get_height
703
- while(_g114 < _g25)
704
- i7 = _g114
705
- _g114+=1
706
- unit2 = row_map[i7]
707
- if unit2 == nil
708
- output.set_cell(0,i7,"")
497
+ _g11 = 0
498
+ _g2 = output.get_height
499
+ while(_g11 < _g2)
500
+ i1 = _g11
501
+ _g11+=1
502
+ unit = @row_map[i1]
503
+ if unit == nil
504
+ output.set_cell(0,i1,"")
709
505
  next
710
506
  end
711
- output.set_cell(0,i7,@builder.links(unit2))
507
+ output.set_cell(0,i1,@builder.links(unit,true))
712
508
  end
713
509
  end
714
510
  target = Array.new
715
511
  begin
716
- _g115 = 0
717
- _g26 = output.get_height
718
- while(_g115 < _g26)
719
- i8 = _g115
720
- _g115+=1
721
- target.push(i8 + 1)
512
+ _g12 = 0
513
+ _g3 = output.get_height
514
+ while(_g12 < _g3)
515
+ i2 = _g12
516
+ _g12+=1
517
+ target.push(i2 + 1)
722
518
  end
723
519
  end
724
520
  output.insert_or_delete_rows(target,output.get_height + 1)
725
521
  begin
726
- _g116 = 1
727
- _g27 = output.get_width
728
- while(_g116 < _g27)
729
- i9 = _g116
730
- _g116+=1
731
- unit3 = col_map[i9 - 1]
732
- if unit3 == nil
733
- output.set_cell(i9,0,"")
522
+ _g13 = 1
523
+ _g4 = output.get_width
524
+ while(_g13 < _g4)
525
+ i3 = _g13
526
+ _g13+=1
527
+ unit1 = @col_map[i3 - 1]
528
+ if unit1 == nil
529
+ output.set_cell(i3,0,"")
734
530
  next
735
531
  end
736
- output.set_cell(i9,0,@builder.links(unit3))
532
+ output.set_cell(i3,0,@builder.links(unit1,false))
737
533
  end
738
534
  end
739
535
  output.set_cell(0,0,@builder.marker("@:@"))
740
536
  end
741
- if active_column != nil
537
+ admin_w
538
+ end
539
+
540
+ def elide_columns(output,admin_w)
541
+ if @active_column != nil
742
542
  all_active = true
743
543
  begin
744
- _g117 = 0
745
- _g28 = active_column.length
746
- while(_g117 < _g28)
747
- i10 = _g117
748
- _g117+=1
749
- if active_column[i10] == 0
544
+ _g1 = 0
545
+ _g = @active_column.length
546
+ while(_g1 < _g)
547
+ i = _g1
548
+ _g1+=1
549
+ if @active_column[i] == 0
750
550
  all_active = false
751
551
  break
752
552
  end
@@ -755,23 +555,23 @@ module Coopy
755
555
  if !all_active
756
556
  fate = Array.new
757
557
  begin
758
- _g29 = 0
759
- while(_g29 < admin_w)
760
- i11 = _g29
761
- _g29+=1
762
- fate.push(i11)
558
+ _g2 = 0
559
+ while(_g2 < admin_w)
560
+ i1 = _g2
561
+ _g2+=1
562
+ fate.push(i1)
763
563
  end
764
564
  end
765
- at3 = admin_w
565
+ at = admin_w
766
566
  ct = 0
767
567
  dots = Array.new
768
568
  begin
769
- _g118 = 0
770
- _g30 = active_column.length
771
- while(_g118 < _g30)
772
- i12 = _g118
773
- _g118+=1
774
- off = active_column[i12] == 0
569
+ _g11 = 0
570
+ _g3 = @active_column.length
571
+ while(_g11 < _g3)
572
+ i2 = _g11
573
+ _g11+=1
574
+ off = @active_column[i2] == 0
775
575
  if off
776
576
  ct = ct + 1
777
577
  else
@@ -780,32 +580,411 @@ module Coopy
780
580
  if off && ct > 1
781
581
  fate.push(-1)
782
582
  else
783
- dots.push(at3) if off
784
- fate.push(at3)
785
- at3+=1
583
+ dots.push(at) if off
584
+ fate.push(at)
585
+ at+=1
786
586
  end
787
587
  end
788
588
  end
789
- output.insert_or_delete_columns(fate,at3)
589
+ output.insert_or_delete_columns(fate,at)
790
590
  begin
791
- _g33 = 0
792
- while(_g33 < dots.length)
793
- d = dots[_g33]
794
- _g33+=1
591
+ _g4 = 0
592
+ while(_g4 < dots.length)
593
+ d = dots[_g4]
594
+ _g4+=1
795
595
  begin
796
- _g210 = 0
797
- _g119 = output.get_height
798
- while(_g210 < _g119)
799
- j6 = _g210
800
- _g210+=1
801
- output.set_cell(d,j6,@builder.marker("..."))
596
+ _g21 = 0
597
+ _g12 = output.get_height
598
+ while(_g21 < _g12)
599
+ j = _g21
600
+ _g21+=1
601
+ output.set_cell(d,j,@builder.marker("..."))
802
602
  end
803
603
  end
804
604
  end
805
605
  end
806
606
  end
807
607
  end
808
- return true
608
+ end
609
+
610
+ def add_schema(output)
611
+ if @have_schema
612
+ at = output.get_height
613
+ output.resize(@column_units.length + 1,at + 1)
614
+ output.set_cell(0,at,@builder.marker("!"))
615
+ begin
616
+ _g1 = 0
617
+ _g = @column_units.length
618
+ while(_g1 < _g)
619
+ j = _g1
620
+ _g1+=1
621
+ output.set_cell(j + 1,at,@v.to_datum(@schema[j]))
622
+ end
623
+ end
624
+ @schema_diff_found = true
625
+ end
626
+ end
627
+
628
+ def add_header(output)
629
+ if @flags.always_show_header
630
+ at = output.get_height
631
+ output.resize(@column_units.length + 1,at + 1)
632
+ output.set_cell(0,at,@builder.marker("@@"))
633
+ begin
634
+ _g1 = 0
635
+ _g = @column_units.length
636
+ while(_g1 < _g)
637
+ j = _g1
638
+ _g1+=1
639
+ cunit = @column_units[j]
640
+ if cunit.r >= 0
641
+ output.set_cell(j + 1,at,@b.get_cell(cunit.r,@rb_header)) if @b.get_height != 0
642
+ elsif cunit.l >= 0
643
+ output.set_cell(j + 1,at,@a.get_cell(cunit.l,@ra_header)) if @a.get_height != 0
644
+ elsif cunit.lp >= 0
645
+ output.set_cell(j + 1,at,@p.get_cell(cunit.lp,@rp_header)) if @p.get_height != 0
646
+ end
647
+ @col_map[j + 1] = cunit
648
+ end
649
+ end
650
+ @top_line_done = true
651
+ end
652
+ end
653
+
654
+ def check_meta(t,meta)
655
+ return false if meta.get_width != t.get_width + 1
656
+ return false if meta.get_width == 0 || meta.get_height == 0
657
+ true
658
+ end
659
+
660
+ def get_meta_table(t)
661
+ meta = t.get_meta
662
+ return nil if meta == nil
663
+ meta.as_table
664
+ end
665
+
666
+ def add_meta(output)
667
+ a_meta = nil
668
+ b_meta = nil
669
+ p_meta = nil
670
+ a_meta = self.get_meta_table(@a)
671
+ b_meta = self.get_meta_table(@b)
672
+ p_meta = self.get_meta_table(@p)
673
+ return false if a_meta == nil || b_meta == nil || p_meta == nil
674
+ return false if !self.check_meta(@a,a_meta)
675
+ return false if !self.check_meta(@b,b_meta)
676
+ return false if !self.check_meta(@p,p_meta)
677
+ return false if !@flags.show_meta
678
+ meta_diff = ::Coopy::SimpleTable.new(0,0)
679
+ meta_flags = ::Coopy::CompareFlags.new
680
+ meta_flags.add_primary_key("@@")
681
+ meta_flags.add_primary_key("@")
682
+ meta_flags.unchanged_column_context = 65536
683
+ meta_flags.unchanged_context = 0
684
+ meta_align = ::Coopy::Coopy.compare_tables3(((a_meta == p_meta) ? nil : p_meta),a_meta,b_meta,meta_flags).align
685
+ td = ::Coopy::TableDiff.new(meta_align,meta_flags)
686
+ td.preserve_columns = true
687
+ td.hilite(meta_diff)
688
+ if td.has_difference
689
+ h = output.get_height
690
+ dh = meta_diff.get_height
691
+ offset = nil
692
+ if td.has_schema_difference
693
+ offset = 2
694
+ else
695
+ offset = 1
696
+ end
697
+ output.resize(output.get_width,h + dh - offset)
698
+ v = meta_diff.get_cell_view
699
+ begin
700
+ _g = offset
701
+ while(_g < dh)
702
+ y = _g
703
+ _g+=1
704
+ begin
705
+ _g2 = 1
706
+ _g1 = meta_diff.get_width
707
+ while(_g2 < _g1)
708
+ x = _g2
709
+ _g2+=1
710
+ c = meta_diff.get_cell(x,y)
711
+ c = "@" + _hx_str(v.to_s(c)) + "@" + _hx_str(v.to_s(meta_diff.get_cell(0,y))) if x == 1
712
+ output.set_cell(x - 1,h + y - offset,c)
713
+ end
714
+ end
715
+ end
716
+ end
717
+ if @active_column != nil
718
+ if td.active_column.length == meta_diff.get_width
719
+ _g11 = 1
720
+ _g3 = meta_diff.get_width
721
+ while(_g11 < _g3)
722
+ i = _g11
723
+ _g11+=1
724
+ @active_column[i - 1] = 1 if td.active_column[i] >= 0
725
+ end
726
+ end
727
+ end
728
+ end
729
+ false
730
+ end
731
+
732
+ def refine_activity
733
+ self.spread_context(@row_units,@flags.unchanged_context,@active_row)
734
+ self.spread_context(@column_units,@flags.unchanged_column_context,@active_column)
735
+ if @active_column != nil
736
+ _g1 = 0
737
+ _g = @column_units.length
738
+ while(_g1 < _g)
739
+ i = _g1
740
+ _g1+=1
741
+ @active_column[i] = 0 if @active_column[i] == 3
742
+ end
743
+ end
744
+ end
745
+
746
+ def scan_row(unit,output,at,i)
747
+ begin
748
+ _g1 = 0
749
+ _g = @column_units.length
750
+ while(_g1 < _g)
751
+ j = _g1
752
+ _g1+=1
753
+ cunit = @column_units[j]
754
+ pp = nil
755
+ ll = nil
756
+ rr = nil
757
+ dd = nil
758
+ dd_to = nil
759
+ have_dd_to = false
760
+ dd_to_alt = nil
761
+ have_dd_to_alt = false
762
+ have_pp = false
763
+ have_ll = false
764
+ have_rr = false
765
+ if cunit.p >= 0 && unit.p >= 0
766
+ pp = @p.get_cell(cunit.p,unit.p)
767
+ have_pp = true
768
+ end
769
+ if cunit.l >= 0 && unit.l >= 0
770
+ ll = @a.get_cell(cunit.l,unit.l)
771
+ have_ll = true
772
+ end
773
+ if cunit.r >= 0 && unit.r >= 0
774
+ rr = @b.get_cell(cunit.r,unit.r)
775
+ have_rr = true
776
+ if (((have_pp) ? cunit.p : cunit.l)) < 0
777
+ if rr != nil
778
+ if @v.to_s(rr) != ""
779
+ @have_addition = true if @flags.allow_update
780
+ end
781
+ end
782
+ end
783
+ end
784
+ if have_pp
785
+ if !have_rr
786
+ dd = pp
787
+ elsif @v.equals(pp,rr)
788
+ dd = ll
789
+ else
790
+ dd = pp
791
+ dd_to = rr
792
+ have_dd_to = true
793
+ if !@v.equals(pp,ll)
794
+ if !@v.equals(pp,rr)
795
+ dd_to_alt = ll
796
+ have_dd_to_alt = true
797
+ end
798
+ end
799
+ end
800
+ elsif have_ll
801
+ if !have_rr
802
+ dd = ll
803
+ elsif @v.equals(ll,rr)
804
+ dd = ll
805
+ else
806
+ dd = ll
807
+ dd_to = rr
808
+ have_dd_to = true
809
+ end
810
+ else
811
+ dd = rr
812
+ end
813
+ cell = dd
814
+ if have_dd_to && @allow_update
815
+ @active_column[j] = 1 if @active_column != nil
816
+ if @sep == ""
817
+ if @builder.need_separator
818
+ @sep = self.get_separator(@a,@b,"->")
819
+ @builder.set_separator(@sep)
820
+ else
821
+ @sep = "->"
822
+ end
823
+ end
824
+ is_conflict = false
825
+ if have_dd_to_alt
826
+ is_conflict = true if !@v.equals(dd_to,dd_to_alt)
827
+ end
828
+ if !is_conflict
829
+ cell = @builder.update(dd,dd_to)
830
+ @act = @sep if @sep.length > @act.length
831
+ else
832
+ if @conflict_sep == ""
833
+ if @builder.need_separator
834
+ @conflict_sep = _hx_str(self.get_separator(@p,@a,"!")) + _hx_str(@sep)
835
+ @builder.set_conflict_separator(@conflict_sep)
836
+ else
837
+ @conflict_sep = "!->"
838
+ end
839
+ end
840
+ cell = @builder.conflict(dd,dd_to_alt,dd_to)
841
+ @act = @conflict_sep
842
+ end
843
+ end
844
+ @act = "+" if @act == "" && @have_addition
845
+ if @act == "+++"
846
+ if have_rr
847
+ @active_column[j] = 1 if @active_column != nil
848
+ end
849
+ end
850
+ if @publish
851
+ output.set_cell(j + 1,at,cell) if @active_column == nil || @active_column[j] > 0
852
+ end
853
+ end
854
+ end
855
+ if @publish
856
+ output.set_cell(0,at,@builder.marker(@act))
857
+ @row_map[at] = unit
858
+ end
859
+ if @act != ""
860
+ @diff_found = true
861
+ if !@publish
862
+ @active_row[i] = 1 if @active_row != nil
863
+ end
864
+ end
865
+ end
866
+
867
+ public
868
+
869
+ def hilite(output)
870
+ return false if !output.is_resizable
871
+ if @builder == nil
872
+ if @flags.allow_nested_cells
873
+ @builder = ::Coopy::NestedCellBuilder.new
874
+ else
875
+ @builder = ::Coopy::FlatCellBuilder.new(@flags)
876
+ end
877
+ end
878
+ output.resize(0,0)
879
+ output.clear
880
+ self.reset
881
+ self.setup_tables
882
+ self.setup_columns
883
+ self.setup_moves
884
+ self.scan_activity
885
+ self.scan_schema
886
+ self.add_schema(output)
887
+ self.add_header(output)
888
+ self.add_meta(output)
889
+ outer_reps_needed = nil
890
+ if @flags.show_unchanged && @flags.show_unchanged_columns
891
+ outer_reps_needed = 1
892
+ else
893
+ outer_reps_needed = 2
894
+ end
895
+ output_height = output.get_height
896
+ output_height_init = output.get_height
897
+ begin
898
+ _g = 0
899
+ while(_g < outer_reps_needed)
900
+ out = _g
901
+ _g+=1
902
+ if out == 1
903
+ self.refine_activity
904
+ rows = self.count_active(@active_row) + output_height_init
905
+ rows-=1 if @top_line_done
906
+ output_height = output_height_init
907
+ output.resize(@column_units.length + 1,rows) if rows > output.get_height
908
+ end
909
+ showed_dummy = false
910
+ l = -1
911
+ r = -1
912
+ begin
913
+ _g2 = 0
914
+ _g1 = @row_units.length
915
+ while(_g2 < _g1)
916
+ i = _g2
917
+ _g2+=1
918
+ unit = @row_units[i]
919
+ reordered = false
920
+ if @flags.ordered
921
+ reordered = true if @row_moves.include?(i)
922
+ @show_rc_numbers = true if reordered
923
+ end
924
+ next if unit.r < 0 && unit.l < 0
925
+ next if unit.r == 0 && unit.lp <= 0 && @top_line_done
926
+ @publish = @flags.show_unchanged
927
+ dummy = false
928
+ if out == 1
929
+ @publish = @active_row[i] > 0
930
+ dummy = @active_row[i] == 3
931
+ next if dummy && showed_dummy
932
+ next if !@publish
933
+ end
934
+ showed_dummy = false if !dummy
935
+ at = output_height
936
+ if @publish
937
+ output_height+=1
938
+ output.resize(@column_units.length + 1,output_height) if output.get_height < output_height
939
+ end
940
+ if dummy
941
+ begin
942
+ _g4 = 0
943
+ _g3 = @column_units.length + 1
944
+ while(_g4 < _g3)
945
+ j = _g4
946
+ _g4+=1
947
+ output.set_cell(j,at,@v.to_datum("..."))
948
+ end
949
+ end
950
+ showed_dummy = true
951
+ next
952
+ end
953
+ @have_addition = false
954
+ skip = false
955
+ @act = ""
956
+ @act = ":" if reordered
957
+ if unit.p < 0 && unit.l < 0 && unit.r >= 0
958
+ skip = true if !@allow_insert
959
+ @act = "+++"
960
+ end
961
+ if (unit.p >= 0 || !@has_parent) && unit.l >= 0 && unit.r < 0
962
+ skip = true if !@allow_delete
963
+ @act = "---"
964
+ end
965
+ if skip
966
+ if !@publish
967
+ @active_row[i] = -3 if @active_row != nil
968
+ end
969
+ next
970
+ end
971
+ self.scan_row(unit,output,at,i)
972
+ end
973
+ end
974
+ end
975
+ end
976
+ self.check_rc_numbers(output.get_width,output.get_height)
977
+ admin_w = self.add_rc_numbers(output)
978
+ self.elide_columns(output,admin_w) if !@preserve_columns
979
+ true
980
+ end
981
+
982
+ def has_difference
983
+ @diff_found
984
+ end
985
+
986
+ def has_schema_difference
987
+ @schema_diff_found
809
988
  end
810
989
 
811
990
  haxe_me ["coopy", "TableDiff"]