tapsoob 0.3.21 → 0.3.26

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7109b252c22de2c4c796068f6ac2fc4df267e4b1130ee875a40b08f9ee7a1224
4
- data.tar.gz: 5530cb2317ae8a4829335b20e90bbb1788a546f898839a1f330c379ecd2973c1
3
+ metadata.gz: 59b4084ddb364d71b2409a23fdd8604b3ef46d5dac7a96518fdb664e8f743943
4
+ data.tar.gz: 4d72e5bae7bd8fe4acf116c81c1a139e5fdde4d7bbd5731bf25f896b71a00a90
5
5
  SHA512:
6
- metadata.gz: cf1960e1ef01a40a0e22f66a042616d7a16b3030f8c7ad20227b7ab44805b175872ec3b030d4e1a3c08469ccf3a33f606b8bcdd14bfddb58ce2378ade773dfac
7
- data.tar.gz: 9abb44b2ca81049159c78dc771938bb13e8334f008f51d9c899f5b8c22928621d003a429537fc639eef713d3005ce9804731b09db95d5bde24f97d2615dd7bef
6
+ metadata.gz: b9ca0470b23447547e1967588c1230ed3a2f6f141d5d9b3f14854bdeb155329d604082895dd344a27a69540cbe9ac6e3b630e46ae61bb3e23467cc5194011948
7
+ data.tar.gz: ab7f6656768aa0e078a921530e25f8da5498504d9c5e4abd90175acaeeba4540393b6905021b40187ab9070c479d9fc2db1f88c10a82aa283ac7488c25778e7d
@@ -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 :"discard-identity", desc: "Remove identity when pushing data (may result in creating duplicates)", default: false, type: :boolean
42
43
  option :debug, desc: "Enable debug messages", default: false, type: :boolean, aliases: "-d"
43
44
  def push(dump_path, database_url)
44
45
  opts = parse_opts(options)
@@ -71,8 +72,9 @@ module Tapsoob
71
72
  debug: options[:debug]
72
73
  }
73
74
 
74
- # Purge (push only)
75
+ # Push only options
75
76
  opts[:purge] = options[:purge] if options.key?(:purge)
77
+ opts[:"discard-identity"] = options[:"discard-identity"] if options.key?(:"discard-identity")
76
78
 
77
79
  # Resume
78
80
  if options[:resume]
@@ -1,4 +1,7 @@
1
1
  # -*- encoding : utf-8 -*-
2
+ require 'date'
3
+ require 'time'
4
+
2
5
  require 'tapsoob/log'
3
6
  require 'tapsoob/utils'
4
7
 
@@ -6,9 +9,9 @@ module Tapsoob
6
9
  class DataStream
7
10
  DEFAULT_CHUNKSIZE = 1000
8
11
 
9
- attr_reader :db, :state
12
+ attr_reader :db, :state, :options
10
13
 
11
- def initialize(db, state)
14
+ def initialize(db, state, opts = {})
12
15
  @db = db
13
16
  @state = {
14
17
  :offset => 0,
@@ -17,6 +20,7 @@ module Tapsoob
17
20
  :total_chunksize => 0
18
21
  }.merge(state)
19
22
  @state[:chunksize] ||= DEFAULT_CHUNKSIZE
23
+ @options = opts
20
24
  @complete = false
21
25
  end
22
26
 
@@ -218,6 +222,9 @@ module Tapsoob
218
222
  end
219
223
 
220
224
  def import_rows(rows)
225
+ columns = rows[:header]
226
+ data = rows[:data]
227
+
221
228
  # Decode blobs
222
229
  if rows.has_key?(:types) && rows[:types].include?("blob")
223
230
  blob_indices = rows[:types].each_index.select { |idx| rows[:types][idx] == "blob" }
@@ -227,8 +234,38 @@ module Tapsoob
227
234
  end
228
235
  end
229
236
  end
237
+
238
+ # Parse date/datetime/time columns
239
+ if rows.has_key?(:types)
240
+ %w(date datetime time).each do |type|
241
+ if rows[:types].include?(type)
242
+ klass = case type
243
+ when "date"
244
+ Date
245
+ when "datetime"
246
+ DateTime
247
+ when "time"
248
+ Time
249
+ end
250
+
251
+
252
+ type_indices = rows[:types].each_index.select { |idx| rows[:types][idx] == type }
253
+ rows[:data].each_index do |idx|
254
+ type_indices.each do |ti|
255
+ rows[:data][idx][ti] = klass.parse(rows[:data][idx][ti])
256
+ end
257
+ end
258
+ end
259
+ end
260
+ end
261
+
262
+ # Remove id column
263
+ if @options[:"discard-identity"]
264
+ columns = rows[:header] - ["id"]
265
+ data = data.map { |d| d[1..-1] }
266
+ end
230
267
 
231
- table.import(rows[:header], rows[:data], :commit_every => 100)
268
+ table.import(columns, data, :commit_every => 100)
232
269
  state[:offset] += rows[:data].size
233
270
  rescue Exception => ex
234
271
  case ex.message
@@ -246,19 +283,19 @@ module Tapsoob
246
283
  state[:offset] = table.count
247
284
  end
248
285
 
249
- def self.factory(db, state)
286
+ def self.factory(db, state, opts)
250
287
  if defined?(Sequel::MySQL) && Sequel::MySQL.respond_to?(:convert_invalid_date_time=)
251
288
  Sequel::MySQL.convert_invalid_date_time = :nil
252
289
  end
253
290
 
254
291
  if state.has_key?(:klass)
255
- return eval(state[:klass]).new(db, state)
292
+ return eval(state[:klass]).new(db, state, opts)
256
293
  end
257
294
 
258
295
  if Tapsoob::Utils.single_integer_primary_key(db, state[:table_name].to_sym)
259
- DataStreamKeyed.new(db, state)
296
+ DataStreamKeyed.new(db, state, opts)
260
297
  else
261
- DataStream.new(db, state)
298
+ DataStream.new(db, state, opts)
262
299
  end
263
300
  end
264
301
  end
@@ -266,8 +303,8 @@ module Tapsoob
266
303
  class DataStreamKeyed < DataStream
267
304
  attr_accessor :buffer
268
305
 
269
- def initialize(db, state)
270
- super(db, state)
306
+ def initialize(db, state, opts = {})
307
+ super(db, state, opts)
271
308
  @state = { :primary_key => order_by(state[:table_name]).first, :filter => 0 }.merge(@state)
272
309
  @state[:chunksize] ||= DEFAULT_CHUNKSIZE
273
310
  @buffer = []
@@ -394,9 +394,9 @@ module Tapsoob
394
394
  tables.each do |table_name, count|
395
395
  next unless File.exists?(File.join(dump_path, "data", "#{table_name}.json"))
396
396
  db[table_name.to_sym].truncate if @opts[:purge]
397
- stream = Tapsoob::DataStream.factory(db,
397
+ stream = Tapsoob::DataStream.factory(db, {
398
398
  :table_name => table_name,
399
- :chunksize => default_chunksize)
399
+ :chunksize => default_chunksize }, { :"discard-identity" => @opts[:"discard-identity"] || false })
400
400
  progress = ProgressBar.new(table_name.to_s, count)
401
401
  push_data_from_file(stream, progress)
402
402
  end
@@ -1,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Tapsoob
3
- VERSION = "0.3.21".freeze
3
+ VERSION = "0.3.26".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.21
4
+ version: 0.3.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Félix Bellanger