tapsoob 0.3.21-java → 0.3.26-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/tapsoob/cli/root.rb +3 -1
- data/lib/tapsoob/data_stream.rb +46 -9
- data/lib/tapsoob/operation.rb +2 -2
- data/lib/tapsoob/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9257ce158006409f702d21898b3352d8269aa1dd4459096e76b89521125e45be
|
4
|
+
data.tar.gz: 45c341a28a30a5ac78d68b426b9afae60bb604172c9dd2bd7b2b0333774d4a97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d7a546a51d161e10bc35e7059cc80b1df2061653763daac67f8a3189ebb7b4d63fb68eff14150f13cedbcfb150142f1d3cc8401aaa1d97cf70aed9d7167fdbf
|
7
|
+
data.tar.gz: 12ab879416b51181480181e6ca41e538e332b2c88c94d40e968d68eff69069b1d98b7442b284aa429d016c07e9dcb1a6a0c2253d93982c5afda9d7f0e56a42a4
|
data/lib/tapsoob/cli/root.rb
CHANGED
@@ -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
|
-
#
|
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]
|
data/lib/tapsoob/data_stream.rb
CHANGED
@@ -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(
|
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 = []
|
data/lib/tapsoob/operation.rb
CHANGED
@@ -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
|
data/lib/tapsoob/version.rb
CHANGED