daff 1.2.3 → 1.2.4

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 (42) hide show
  1. data/README.md +4 -1
  2. data/lib/daff.rb +20 -7
  3. data/lib/lib/coopy/alignment.rb +6 -0
  4. data/lib/lib/coopy/cell_info.rb +1 -0
  5. data/lib/lib/coopy/compare_flags.rb +2 -0
  6. data/lib/lib/coopy/compare_table.rb +1 -1
  7. data/lib/lib/coopy/coopy.rb +80 -18
  8. data/lib/lib/coopy/csv.rb +1 -1
  9. data/lib/lib/coopy/diff_render.rb +61 -22
  10. data/lib/lib/coopy/flat_cell_builder.rb +1 -1
  11. data/lib/lib/coopy/highlight_patch.rb +8 -6
  12. data/lib/lib/coopy/mover.rb +1 -1
  13. data/lib/lib/coopy/ndjson.rb +134 -0
  14. data/lib/lib/coopy/nested_cell_builder.rb +74 -0
  15. data/lib/lib/coopy/simple_view.rb +29 -0
  16. data/lib/lib/coopy/sql_column.rb +35 -0
  17. data/lib/lib/coopy/sql_compare.rb +245 -0
  18. data/lib/lib/coopy/sql_database.rb +19 -0
  19. data/lib/lib/coopy/sql_helper.rb +12 -0
  20. data/lib/lib/coopy/sql_table.rb +216 -0
  21. data/lib/lib/coopy/sql_table_name.rb +23 -0
  22. data/lib/lib/coopy/sqlite_helper.rb +47 -0
  23. data/lib/lib/coopy/table_diff.rb +18 -6
  24. data/lib/lib/coopy/table_io.rb +5 -0
  25. data/lib/lib/coopy/terminal_diff_render.rb +8 -9
  26. data/lib/lib/coopy/view.rb +5 -0
  27. data/lib/lib/haxe/ds/int_map.rb +4 -0
  28. data/lib/lib/haxe/ds/string_map.rb +4 -0
  29. data/lib/lib/haxe/format/json_parser.rb +8 -8
  30. data/lib/lib/haxe/imap.rb +1 -0
  31. data/lib/lib/haxe/io/bytes.rb +1 -1
  32. data/lib/lib/haxe/io/bytes_output.rb +1 -1
  33. data/lib/lib/haxe/io/error.rb +1 -0
  34. data/lib/lib/haxe/io/output.rb +2 -2
  35. data/lib/lib/hx_overrides.rb +12 -0
  36. data/lib/lib/hx_sys.rb +1 -1
  37. data/lib/lib/rb/boot.rb +5 -1
  38. data/lib/lib/reflect.rb +1 -0
  39. data/lib/lib/sys/io/file_handle.rb +1 -0
  40. data/lib/lib/sys/io/file_output.rb +1 -1
  41. data/lib/lib/value_type.rb +1 -0
  42. metadata +36 -25
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ module Coopy
5
+ class SqlDatabase
6
+ def getColumns(name) puts "Abstract SqlDatabase.getColumns called" end
7
+ def getQuotedTableName(name) puts "Abstract SqlDatabase.getQuotedTableName called" end
8
+ def getQuotedColumnName(name) puts "Abstract SqlDatabase.getQuotedColumnName called" end
9
+ def begin(query,args = nil,order = nil) puts "Abstract SqlDatabase.begin called" end
10
+ def beginRow(name,row,order = nil) puts "Abstract SqlDatabase.beginRow called" end
11
+ def read() puts "Abstract SqlDatabase.read called" end
12
+ def get(index) puts "Abstract SqlDatabase.get called" end
13
+ def end() puts "Abstract SqlDatabase.end called" end
14
+ def width() puts "Abstract SqlDatabase.width called" end
15
+ def rowid() puts "Abstract SqlDatabase.rowid called" end
16
+ haxe_me
17
+ end
18
+
19
+ end
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ module Coopy
5
+ class SqlHelper
6
+ def getTableNames(db) puts "Abstract SqlHelper.getTableNames called" end
7
+ def countRows(db,name) puts "Abstract SqlHelper.countRows called" end
8
+ def getRowIDs(db,name) puts "Abstract SqlHelper.getRowIDs called" end
9
+ haxe_me
10
+ end
11
+
12
+ end
@@ -0,0 +1,216 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ module Coopy
5
+ class SqlTable
6
+
7
+ def initialize(db,name,helper = nil)
8
+ @db = db
9
+ @name = name
10
+ @helper = helper
11
+ @cache = {}
12
+ @h = -1
13
+ @id2rid = nil
14
+ self.get_columns
15
+ end
16
+
17
+ protected
18
+
19
+ attr_accessor :db
20
+ attr_accessor :columns
21
+ attr_accessor :name
22
+ attr_accessor :quoted_table_name
23
+ attr_accessor :cache
24
+ attr_accessor :column_names
25
+ attr_accessor :h
26
+ attr_accessor :helper
27
+ attr_accessor :id2rid
28
+
29
+ def get_columns
30
+ return if @columns != nil
31
+ return if @db == nil
32
+ @columns = @db.get_columns(@name)
33
+ @column_names = Array.new
34
+ begin
35
+ _g = 0
36
+ _g1 = @columns
37
+ while(_g < _g1.length)
38
+ col = _g1[_g]
39
+ _g+=1
40
+ @column_names.push(col.get_name)
41
+ end
42
+ end
43
+ end
44
+
45
+ public
46
+
47
+ def get_primary_key
48
+ self.get_columns
49
+ result = Array.new
50
+ begin
51
+ _g = 0
52
+ _g1 = @columns
53
+ while(_g < _g1.length)
54
+ col = _g1[_g]
55
+ _g+=1
56
+ next if !col.is_primary_key
57
+ result.push(col.get_name)
58
+ end
59
+ end
60
+ return result
61
+ end
62
+
63
+ def get_all_but_primary_key
64
+ self.get_columns
65
+ result = Array.new
66
+ begin
67
+ _g = 0
68
+ _g1 = @columns
69
+ while(_g < _g1.length)
70
+ col = _g1[_g]
71
+ _g+=1
72
+ next if col.is_primary_key
73
+ result.push(col.get_name)
74
+ end
75
+ end
76
+ return result
77
+ end
78
+
79
+ def get_column_names
80
+ self.get_columns
81
+ return @column_names
82
+ end
83
+
84
+ def get_quoted_table_name
85
+ return @quoted_table_name if @quoted_table_name != nil
86
+ @quoted_table_name = @db.get_quoted_table_name(@name)
87
+ return @quoted_table_name
88
+ end
89
+
90
+ def get_quoted_column_name(name)
91
+ return @db.get_quoted_column_name(name)
92
+ end
93
+
94
+ def get_cell(x,y)
95
+ if @h >= 0
96
+ y = y - 1
97
+ y = @id2rid[y] if y >= 0
98
+ end
99
+ if y < 0
100
+ self.get_columns
101
+ return @columns[x].name
102
+ end
103
+ row = @cache[y]
104
+ if row == nil
105
+ row = {}
106
+ self.get_columns
107
+ @db.begin_row(@name,y,@column_names)
108
+ while(@db.read)
109
+ _g1 = 0
110
+ _g = self.get_width
111
+ while(_g1 < _g)
112
+ i = _g1
113
+ _g1+=1
114
+ begin
115
+ v = @db.get(i)
116
+ begin
117
+ value = v
118
+ row[i] = value
119
+ end
120
+ v
121
+ end
122
+ end
123
+ end
124
+ @db._end
125
+ begin
126
+ @cache[y] = row
127
+ row
128
+ end
129
+ end
130
+ begin
131
+ this1 = @cache[y]
132
+ return this1.get(x)
133
+ end
134
+ end
135
+
136
+ def set_cell_cache(x,y,c)
137
+ row = @cache[y]
138
+ if row == nil
139
+ row = {}
140
+ self.get_columns
141
+ begin
142
+ @cache[y] = row
143
+ row
144
+ end
145
+ end
146
+ begin
147
+ v = c
148
+ begin
149
+ value = v
150
+ row[x] = value
151
+ end
152
+ v
153
+ end
154
+ end
155
+
156
+ def set_cell(x,y,c)
157
+ puts "SqlTable cannot set cells yet"
158
+ end
159
+
160
+ def get_cell_view
161
+ return ::Coopy::SimpleView.new
162
+ end
163
+
164
+ def is_resizable
165
+ return false
166
+ end
167
+
168
+ def resize(w,h)
169
+ return false
170
+ end
171
+
172
+ def clear
173
+ end
174
+
175
+ def insert_or_delete_rows(fate,hfate)
176
+ return false
177
+ end
178
+
179
+ def insert_or_delete_columns(fate,wfate)
180
+ return false
181
+ end
182
+
183
+ def trim_blank
184
+ return false
185
+ end
186
+
187
+ def height() get_height end
188
+ def height=(__v) @height = __v end
189
+ def width() get_width end
190
+ def width=(__v) @width = __v end
191
+
192
+ def get_width
193
+ self.get_columns
194
+ return @columns.length
195
+ end
196
+
197
+ def get_height
198
+ return @h if @h >= 0
199
+ return -1 if @helper == nil
200
+ @id2rid = @helper.get_row_ids(@db,@name)
201
+ @h = @id2rid.length + 1
202
+ return @h
203
+ end
204
+
205
+ def get_data
206
+ return nil
207
+ end
208
+
209
+ def clone
210
+ return nil
211
+ end
212
+
213
+ haxe_me
214
+ end
215
+
216
+ end
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ module Coopy
5
+ class SqlTableName
6
+
7
+ def initialize(name = "",prefix = "")
8
+ @name = name
9
+ @prefix = prefix
10
+ end
11
+
12
+ attr_accessor :name
13
+ attr_accessor :prefix
14
+
15
+ def to_s
16
+ return @name if @prefix == ""
17
+ return _hx_str(@prefix) + "." + _hx_str(@name)
18
+ end
19
+
20
+ haxe_me
21
+ end
22
+
23
+ end
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ module Coopy
5
+ class SqliteHelper
6
+
7
+ def initialize
8
+ end
9
+
10
+ def get_table_names(db)
11
+ q = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"
12
+ return nil if !db._begin(q,nil,["name"])
13
+ names = Array.new
14
+ while(db.read)
15
+ names.push(db.get(0))
16
+ end
17
+ db._end
18
+ return names
19
+ end
20
+
21
+ def count_rows(db,name)
22
+ q = "SELECT COUNT(*) AS ct FROM " + _hx_str(db.get_quoted_table_name(name))
23
+ return -1 if !db._begin(q,nil,["ct"])
24
+ ct = -1
25
+ while(db.read)
26
+ ct = db.get(0)
27
+ end
28
+ db._end
29
+ return ct
30
+ end
31
+
32
+ def get_row_ids(db,name)
33
+ result = Array.new
34
+ q = "SELECT ROWID AS r FROM " + _hx_str(db.get_quoted_table_name(name)) + " ORDER BY ROWID"
35
+ return nil if !db._begin(q,nil,["r"])
36
+ while(db.read)
37
+ c = db.get(0)
38
+ result.push(c)
39
+ end
40
+ db._end
41
+ return result
42
+ end
43
+
44
+ haxe_me
45
+ end
46
+
47
+ end
@@ -89,7 +89,7 @@ module Coopy
89
89
  score+=1
90
90
  end
91
91
  end
92
- str = "_" + _hx_str(str) if str[score..-1] == _nil
92
+ str = "_" + _hx_str(str) if HxOverrides.substr(str,score,nil) == _nil
93
93
  return str
94
94
  end
95
95
 
@@ -216,7 +216,13 @@ module Coopy
216
216
 
217
217
  def hilite(output)
218
218
  return false if !output.is_resizable
219
- @builder = ::Coopy::FlatCellBuilder.new if @builder == nil
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
220
226
  output.resize(0,0)
221
227
  output.clear
222
228
  row_map = {}
@@ -453,9 +459,9 @@ module Coopy
453
459
  _g110+=1
454
460
  cunit2 = column_units[j3]
455
461
  if cunit2.r >= 0
456
- output.set_cell(j3 + 1,at1,b.get_cell(cunit2.r,rb_header)) if b.get_height > 0
462
+ output.set_cell(j3 + 1,at1,b.get_cell(cunit2.r,rb_header)) if b.get_height != 0
457
463
  elsif cunit2.lp >= 0
458
- output.set_cell(j3 + 1,at1,p.get_cell(cunit2.lp,rp_header)) if p.get_height > 0
464
+ output.set_cell(j3 + 1,at1,p.get_cell(cunit2.lp,rp_header)) if p.get_height != 0
459
465
  end
460
466
  col_map[j3 + 1] = cunit2
461
467
  end
@@ -698,7 +704,10 @@ module Coopy
698
704
  i7 = _g114
699
705
  _g114+=1
700
706
  unit2 = row_map[i7]
701
- next if unit2 == nil
707
+ if unit2 == nil
708
+ output.set_cell(0,i7,"")
709
+ next
710
+ end
702
711
  output.set_cell(0,i7,@builder.links(unit2))
703
712
  end
704
713
  end
@@ -720,7 +729,10 @@ module Coopy
720
729
  i9 = _g116
721
730
  _g116+=1
722
731
  unit3 = col_map[i9 - 1]
723
- next if unit3 == nil
732
+ if unit3 == nil
733
+ output.set_cell(i9,0,"")
734
+ next
735
+ end
724
736
  output.set_cell(i9,0,@builder.links(unit3))
725
737
  end
726
738
  end
@@ -32,6 +32,7 @@ module Coopy
32
32
  begin
33
33
  return HxSys.command(cmd,args)
34
34
  rescue => e
35
+ e = hx_rescued(e)
35
36
  return 1
36
37
  end
37
38
  end
@@ -44,6 +45,10 @@ module Coopy
44
45
  return File.exist?(path)
45
46
  end
46
47
 
48
+ def open_sqlite_database(path)
49
+ return nil
50
+ end
51
+
47
52
  haxe_me
48
53
  end
49
54
 
@@ -11,7 +11,7 @@ module Coopy
11
11
  protected
12
12
 
13
13
  attr_accessor :codes
14
- attr_accessor :tt
14
+ attr_accessor :t
15
15
  attr_accessor :csv
16
16
  attr_accessor :v
17
17
  attr_accessor :align_columns
@@ -28,8 +28,8 @@ module Coopy
28
28
  w = t.get_width
29
29
  h = t.get_height
30
30
  txt = ""
31
+ @t = t
31
32
  @v = t.get_cell_view
32
- @tt = ::Coopy::TableText.new(t)
33
33
  @codes = {}
34
34
  @codes["header"] = "\x1B[0;1m"
35
35
  @codes["spec"] = "\x1B[35;1m"
@@ -70,7 +70,8 @@ module Coopy
70
70
  txt += "\r\n"
71
71
  end
72
72
  end
73
- @tt = nil
73
+ @t = nil
74
+ @v = nil
74
75
  @csv = nil
75
76
  @codes = nil
76
77
  return txt
@@ -79,9 +80,8 @@ module Coopy
79
80
  protected
80
81
 
81
82
  def get_text(x,y,color)
82
- val = @tt.get_cell_text(x,y)
83
- val = "" if val == nil
84
- cell = ::Coopy::DiffRender.render_cell(@tt,x,y)
83
+ val = @t.get_cell(x,y)
84
+ cell = ::Coopy::DiffRender.render_cell(@t,@v,x,y)
85
85
  if color
86
86
  code = nil
87
87
  code = @codes[cell.category] if cell.category != nil
@@ -92,10 +92,10 @@ module Coopy
92
92
  if code != nil
93
93
  if cell.rvalue != nil
94
94
  val = _hx_str(@codes["remove"]) + _hx_str(cell.lvalue) + _hx_str(@codes["modify"]) + _hx_str(cell.pretty_separator) + _hx_str(@codes["add"]) + _hx_str(cell.rvalue) + _hx_str(@codes["done"])
95
- val = _hx_str(@codes["conflict"]) + _hx_str(cell.pvalue) + _hx_str(@codes["modify"]) + _hx_str(cell.pretty_separator) + _hx_str(val) if cell.pvalue != nil
95
+ val = _hx_str(@codes["conflict"]) + _hx_str(cell.pvalue) + _hx_str(@codes["modify"]) + _hx_str(cell.pretty_separator) + _hx_str(val.to_s) if cell.pvalue != nil
96
96
  else
97
97
  val = cell.pretty_value
98
- val = _hx_str(code) + _hx_str(val) + _hx_str(@codes["done"])
98
+ val = _hx_str(code) + _hx_str(val.to_s) + _hx_str(@codes["done"])
99
99
  end
100
100
  end
101
101
  else
@@ -108,7 +108,6 @@ module Coopy
108
108
  w = t.get_width
109
109
  h = t.get_height
110
110
  v = t.get_cell_view
111
- tt = ::Coopy::TableText.new(t)
112
111
  csv = ::Coopy::Csv.new
113
112
  sizes = Array.new
114
113
  row = -1