tapsoob 0.3.25-java → 0.4.2-java

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d124a866776acf86f71e3158dadd3e81f2030f858caa81e82999a3dc3cad82f4
4
- data.tar.gz: d68c1125793da5e9d0862345148a9b4e8b7d874517d79a46cb39752b092af0f8
3
+ metadata.gz: 8c68c7c37d61f0a8458f88a9c8c724d8c74230d96d292f1fc877a5a797090cdd
4
+ data.tar.gz: 2b23d6e4038fbdbc9377a6afccebace67bfa6bfbbfd7db778c78360a05b2374b
5
5
  SHA512:
6
- metadata.gz: 60a875dc77e9476993b60b64d2596bd659dd7e61b791349914c6eafbc843d9b2ad06e08c77c9345c1e3101ba9d2ef166acb479e31e595c7bca4ef35d7617dc5c
7
- data.tar.gz: ffa787880d5db54be32f66c42f5daccc08d0dccb4542606d0ed37bf484194c914e81169f958501299acc6c377fe055a505ba5f5b81c8c9295697c88e18eb4d13
6
+ metadata.gz: 8b055bfb3796e5a07cab64b68c98f8f5dd2b228e353ebdfcfaec40fe20706483632e9fee0bc0caaede8a64f071d7b6dd95e1fd84ffd5b662936fcd4a650c9015
7
+ data.tar.gz: 35db0a64bfc55522cbf1c0222bbd7cb113b174f0389eb96184eba11a23970a310f4c895605f35f9c9eb49be8a3cad5e3cde82c40cd0717ccd87a4462a113eaf0
@@ -28,6 +28,9 @@ module Tapsoob
28
28
  option :tables, desc: "Shortcut to filter on a list of tables", type: :array, aliases: "-t"
29
29
  option :"exclude-tables", desc: "Shortcut to exclude a list of tables", type: :array, aliases: "-e"
30
30
  option :progress, desc: "Show progress", default: true, type: :boolean, aliases: "-p"
31
+ option :purge, desc: "Purge data in tables prior to performing the import", default: false, type: :boolean, aliases: "-p"
32
+ option :"skip-duplicates", desc: "Remove duplicates when loading data", default: false, type: :boolean
33
+ option :"discard-identity", desc: "Remove identity when pushing data (may result in creating duplicates)", default: false, type: :boolean
31
34
  option :debug, desc: "Enable debug messages", default: false, type: :boolean, aliases: "-d"
32
35
  def push(database_url, dump_path = nil)
33
36
  # instantiate stuff
@@ -46,9 +49,8 @@ module Tapsoob
46
49
  data.each do |table|
47
50
  stream = Tapsoob::DataStream.factory(db(database_url, opts), {
48
51
  table_name: table[:table_name],
49
- chunksize: opts[:default_chunksize],
50
- debug: opts[:debug]
51
- })
52
+ chunksize: opts[:default_chunksize]
53
+ }, { :"discard-identity" => opts[:"discard-identity"] || false, :purge => opts[:purge] || false, :debug => opts[:debug] })
52
54
 
53
55
  begin
54
56
  stream.import_rows(table)
@@ -66,6 +68,11 @@ module Tapsoob
66
68
  debug: options[:debug]
67
69
  }
68
70
 
71
+ # Push only options
72
+ opts[:purge] = options[:purge] if options.key?(:purge)
73
+ opts[:"skip-duplicates"] = options[:"skip-duplicates"] if options.key?(:"skip-duplicates")
74
+ opts[:"discard-identity"] = options[:"discard-identity"] if options.key?(:"discard-identity")
75
+
69
76
  # Default chunksize
70
77
  if options[:chunksize]
71
78
  opts[:default_chunksize] = (options[:chunksize] < 10 ? 10 : options[:chunksize])
@@ -39,6 +39,7 @@ module Tapsoob
39
39
  option :tables, desc: "Shortcut to filter on a list of tables", type: :array, aliases: "-t"
40
40
  option :"exclude-tables", desc: "Shortcut to exclude a list of tables", type: :array, aliases: "-e"
41
41
  option :purge, desc: "Purge data in tables prior to performing the import", default: false, type: :boolean, aliases: "-p"
42
+ option :"skip-duplicates", desc: "Remove duplicates when loading data", default: false, type: :boolean
42
43
  option :"discard-identity", desc: "Remove identity when pushing data (may result in creating duplicates)", default: false, type: :boolean
43
44
  option :debug, desc: "Enable debug messages", default: false, type: :boolean, aliases: "-d"
44
45
  def push(dump_path, database_url)
@@ -74,6 +75,7 @@ module Tapsoob
74
75
 
75
76
  # Push only options
76
77
  opts[:purge] = options[:purge] if options.key?(:purge)
78
+ opts[:"skip-duplicates"] = options[:"skip-duplicates"] if options.key?(:"skip-duplicates")
77
79
  opts[:"discard-identity"] = options[:"discard-identity"] if options.key?(:"discard-identity")
78
80
 
79
81
  # Resume
@@ -91,7 +91,8 @@ module Tapsoob
91
91
  rows = {
92
92
  :table_name => ds["table_name"],
93
93
  :header => ds["header"],
94
- :data => ds["data"][state[:offset], (state[:offset] + state[:chunksize])] || [ ]
94
+ :data => ((@options[:"skip-duplicates"] ? ds["data"].uniq : ds["data"])[state[:offset], (state[:offset] + state[:chunksize])] || [ ]),
95
+ :types => ds["types"]
95
96
  }
96
97
  update_chunksize_stats
97
98
  rows
@@ -222,22 +223,48 @@ module Tapsoob
222
223
  columns = rows[:header]
223
224
  data = rows[:data]
224
225
 
226
+ # Only import existing columns
227
+ if table.columns.size != columns.size
228
+ existing_columns = table.columns.map(&:to_s)
229
+ additional_columns = columns - existing_columns
230
+ additional_columns_idxs = additional_columns.map { |c| columns.index(c) }
231
+ additional_columns_idxs.reverse.each do |idx|
232
+ columns.delete_at(idx)
233
+ rows[:types].delete_at(idx)
234
+ end
235
+ data.each_index { |didx| additional_columns_idxs.reverse.each { |idx| data[didx].delete_at(idx) } }
236
+ end
237
+
225
238
  # Decode blobs
226
239
  if rows.has_key?(:types) && rows[:types].include?("blob")
227
240
  blob_indices = rows[:types].each_index.select { |idx| rows[:types][idx] == "blob" }
228
- rows[:data].each_index do |idx|
241
+ data.each_index do |idx|
229
242
  blob_indices.each do |bi|
230
- rows[:data][idx][bi] = Sequel::SQL::Blob.new(Tapsoob::Utils.base64decode(rows[:data][idx][bi])) unless rows[:data][idx][bi].nil?
243
+ data[idx][bi] = Sequel::SQL::Blob.new(Tapsoob::Utils.base64decode(data[idx][bi])) unless data[idx][bi].nil?
244
+ end
245
+ end
246
+ end
247
+
248
+ # Parse date/datetime/time columns
249
+ if rows.has_key?(:types)
250
+ %w(date datetime time).each do |type|
251
+ if rows[:types].include?(type)
252
+ type_indices = rows[:types].each_index.select { |idx| rows[:types][idx] == type }
253
+ data.each_index do |idx|
254
+ type_indices.each do |ti|
255
+ data[idx][ti] = Sequel.send("string_to_#{type}".to_sym, data[idx][ti]) unless data[idx][ti].nil?
256
+ end
257
+ end
231
258
  end
232
259
  end
233
260
  end
234
261
 
235
262
  # Remove id column
236
- if @options[:"discard-identity"]
263
+ if @options[:"discard-identity"] && rows[:header].include?("id")
237
264
  columns = rows[:header] - ["id"]
238
265
  data = data.map { |d| d[1..-1] }
239
266
  end
240
-
267
+
241
268
  table.import(columns, data, :commit_every => 100)
242
269
  state[:offset] += rows[:data].size
243
270
  rescue Exception => ex
@@ -198,7 +198,7 @@ module Tapsoob
198
198
  stream = Tapsoob::DataStream.factory(db, {
199
199
  :chunksize => default_chunksize,
200
200
  :table_name => table_name
201
- })
201
+ }, { :debug => opts[:debug] })
202
202
  pull_data_from_table(stream, progress)
203
203
  end
204
204
  end
@@ -396,7 +396,13 @@ module Tapsoob
396
396
  db[table_name.to_sym].truncate if @opts[:purge]
397
397
  stream = Tapsoob::DataStream.factory(db, {
398
398
  :table_name => table_name,
399
- :chunksize => default_chunksize }, { :"discard-identity" => @opts[:"discard-identity"] || false })
399
+ :chunksize => default_chunksize
400
+ }, {
401
+ :"skip-duplicates" => opts[:"skip-duplicates"] || false,
402
+ :"discard-identity" => opts[:"discard-identity"] || false,
403
+ :purge => opts[:purge] || false,
404
+ :debug => opts[:debug]
405
+ })
400
406
  progress = ProgressBar.new(table_name.to_s, count)
401
407
  push_data_from_file(stream, progress)
402
408
  end
@@ -429,7 +435,8 @@ module Tapsoob
429
435
  }
430
436
  end
431
437
 
432
- size = stream.fetch_data_in_database({ :encoded_data => encoded_data, :checksum => data[:checksum] })
438
+ row_size = stream.fetch_data_in_database({ :encoded_data => encoded_data, :checksum => data[:checksum] })
439
+ log.debug "row size: #{row_size}"
433
440
  self.stream_state = stream.to_hash
434
441
 
435
442
  c.idle_secs = (d1 + d2)
@@ -481,7 +488,7 @@ module Tapsoob
481
488
  tbls.each do |table|
482
489
  if File.exists?(File.join(dump_path, "data", "#{table}.json"))
483
490
  data = JSON.parse(File.read(File.join(dump_path, "data", "#{table}.json")))
484
- tables_with_counts[table] = data.size
491
+ tables_with_counts[table] = data["data"].size
485
492
  else
486
493
  tables_with_counts[table] = 0
487
494
  end
@@ -22,7 +22,7 @@ class ProgressBar
22
22
  @current = 0
23
23
  @previous = 0
24
24
  @finished_p = false
25
- @start_time = Time.now
25
+ @start_time = ::Time.now
26
26
  @previous_time = @start_time
27
27
  @title_width = 14
28
28
  @format = "%-#{@title_width}s %3d%% %s %s"
@@ -76,7 +76,7 @@ class ProgressBar
76
76
  end
77
77
 
78
78
  def transfer_rate
79
- bytes_per_second = @current.to_f / (Time.now - @start_time)
79
+ bytes_per_second = @current.to_f / (::Time.now - @start_time)
80
80
  sprintf("%s/s", convert_bytes(bytes_per_second))
81
81
  end
82
82
 
@@ -97,14 +97,14 @@ class ProgressBar
97
97
  if @current == 0
98
98
  "ETA: --:--:--"
99
99
  else
100
- elapsed = Time.now - @start_time
100
+ elapsed = ::Time.now - @start_time
101
101
  eta = elapsed * @total / @current - elapsed;
102
102
  sprintf("ETA: %s", format_time(eta))
103
103
  end
104
104
  end
105
105
 
106
106
  def elapsed
107
- elapsed = Time.now - @start_time
107
+ elapsed = ::Time.now - @start_time
108
108
  sprintf("Time: %s", format_time(elapsed))
109
109
  end
110
110
 
@@ -155,7 +155,7 @@ class ProgressBar
155
155
  @terminal_width += width - line.length + 1
156
156
  show
157
157
  end
158
- @previous_time = Time.now
158
+ @previous_time = ::Time.now
159
159
  end
160
160
 
161
161
  def show_if_needed
@@ -169,7 +169,7 @@ class ProgressBar
169
169
 
170
170
  # Use "!=" instead of ">" to support negative changes
171
171
  if cur_percentage != prev_percentage ||
172
- Time.now - @previous_time >= 1 || @finished_p
172
+ ::Time.now - @previous_time >= 1 || @finished_p
173
173
  show
174
174
  end
175
175
  end
@@ -1,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Tapsoob
3
- VERSION = "0.3.25".freeze
3
+ VERSION = "0.4.2".freeze
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tapsoob
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.25
4
+ version: 0.4.2
5
5
  platform: java
6
6
  authors:
7
7
  - Félix Bellanger
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-06-11 00:00:00.000000000 Z
12
+ date: 2021-06-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  requirement: !ruby/object:Gem::Requirement