tapsoob 0.8.1 → 0.8.2

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: 6e0df11d8a5cbaca53aab795175f2addae2e0c08c39f3955e4dad7f1e08ff436
4
- data.tar.gz: 991a74bb27b76dd013966c70590b953d8854c1982a7070ab05ec200b92ef3d30
3
+ metadata.gz: 1b462af6073abaf47bcb13d46504696b4dfa6f7dc7dca762e050b9664b6a6da9
4
+ data.tar.gz: e2e46b8b2d1f08cfe67a82c8c1ab542e39e801793142ad1a93ae6aaf63175790
5
5
  SHA512:
6
- metadata.gz: ee3899b17e99f919977cc2b77af18324c31cb9a7658f4a38d16f97d1cf8e2f2b1bdcd96e39b58e1545e273a22da52b96958b9c4246e1dd84739be18f427d380e
7
- data.tar.gz: d52a2ba30e681ccb522f5ea8b5c05114b44d09ce1e378afc509436edd51ba49f428262294b0b3207eb5aa4d6f47db138fde6cc1ce3886ede1b0852650ade1f1a
6
+ metadata.gz: 3f26a3c56a9a824fbd855924fc59fd6abdf4b8ff0f8c44747ecfbc26316f77dca7d603e39fce09cda03f3c4eabeed6522da1c7a8e8f6baa3c95e277531120f35
7
+ data.tar.gz: 0f22b48db14b094b3a93375ac9004f1f520537ce45918a7069a6e7141dfb437c4b0382c8376e1c52216d4407d83d15875adb1a11d6b9970bd333cf859167f179
@@ -47,6 +47,7 @@ module Tapsoob
47
47
  option :tables, desc: "Shortcut to filter on a list of tables", type: :array, aliases: "-t"
48
48
  option :"exclude-tables", desc: "Shortcut to exclude a list of tables", type: :array, aliases: "-e"
49
49
  option :purge, desc: "Purge data in tables prior to performing the import", default: false, type: :boolean, aliases: "-p"
50
+ option :"drop-tables", desc: "Drop tables before pushing the schema (implies --schema)", default: false, type: :boolean
50
51
  option :"skip-duplicates", desc: "Remove duplicates when loading data", default: false, type: :boolean
51
52
  option :"discard-identity", desc: "Remove identity when pushing data (may result in creating duplicates)", default: false, type: :boolean
52
53
  option :parallel, desc: "Number of parallel workers for table processing (default: 1)", default: 1, type: :numeric, aliases: "-j"
@@ -97,6 +98,7 @@ module Tapsoob
97
98
 
98
99
  # Push only options
99
100
  opts[:purge] = options[:purge] if options.key?(:purge)
101
+ opts[:"drop-tables"] = options[:"drop-tables"] if options.key?(:"drop-tables")
100
102
  opts[:"skip-duplicates"] = options[:"skip-duplicates"] if options.key?(:"skip-duplicates")
101
103
  opts[:"discard-identity"] = options[:"discard-identity"] if options.key?(:"discard-identity")
102
104
 
@@ -71,11 +71,12 @@ module Tapsoob
71
71
  log.info "Sending schema"
72
72
  Tapsoob::ProgressEvent.schema_start(tables.size)
73
73
 
74
+ schema_opts = { drop: opts[:"drop-tables"] || false }
74
75
  progress = opts[:progress] ? Tapsoob::Progress::Bar.new('Schema', tables.size) : nil
75
76
  tables.each do |table, count|
76
77
  log.debug "Loading '#{table}' schema\n"
77
78
  # Reuse existing db connection for better performance
78
- Tapsoob::Utils.load_schema(dump_path, db, table)
79
+ Tapsoob::Utils.load_schema(dump_path, db, table, schema_opts)
79
80
  progress.inc(1) if progress
80
81
  end
81
82
  progress.finish if progress
data/lib/tapsoob/utils.rb CHANGED
@@ -174,13 +174,13 @@ Data : #{data}
174
174
  end
175
175
  end
176
176
 
177
- def load_schema(dump_path, database_url_or_db, table)
177
+ def load_schema(dump_path, database_url_or_db, table, options = {})
178
178
  schema_file = File.join(dump_path, "schemas", "#{table}.rb")
179
179
  schema_content = File.read(schema_file)
180
180
 
181
181
  # If we have a connection object, use it directly for better performance
182
182
  if database_url_or_db.is_a?(Sequel::Database)
183
- Tapsoob::Schema.load(database_url_or_db, schema_content)
183
+ Tapsoob::Schema.load(database_url_or_db, schema_content, options)
184
184
  else
185
185
  schema_bin(:load, database_url_or_db, schema_file)
186
186
  end
@@ -1,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Tapsoob
3
- VERSION = "0.8.1".freeze
3
+ VERSION = "0.8.2".freeze
4
4
  end
@@ -79,6 +79,37 @@ RSpec.describe 'SQLite round-trip', :integration do
79
79
  end
80
80
  end
81
81
 
82
+ context 'with --drop-tables' do
83
+ let(:drop_dir) { Dir.mktmpdir }
84
+ after { FileUtils.rm_rf(drop_dir) }
85
+
86
+ it 'succeeds when destination tables already exist' do
87
+ pull(src_url, drop_dir)
88
+ push(dst_url, drop_dir)
89
+
90
+ # Second push with --drop-tables: tables exist, should drop and recreate
91
+ expect { push(dst_url, drop_dir, :"drop-tables" => true) }.not_to raise_error
92
+ end
93
+
94
+ it 'preserves row counts after drop and re-push' do
95
+ pull(src_url, drop_dir)
96
+ push(dst_url, drop_dir)
97
+ push(dst_url, drop_dir, :"drop-tables" => true)
98
+
99
+ expect_same_counts(src_db, dst_db)
100
+ end
101
+
102
+ it 'does not duplicate rows on re-push' do
103
+ pull(src_url, drop_dir)
104
+ push(dst_url, drop_dir)
105
+ push(dst_url, drop_dir, :"drop-tables" => true)
106
+
107
+ src_db.tables.each do |table|
108
+ expect(dst_db[table].count).to eq(src_db[table].count)
109
+ end
110
+ end
111
+ end
112
+
82
113
  context 'with custom chunksize' do
83
114
  let(:chunk_dir) { Dir.mktmpdir }
84
115
  after { FileUtils.rm_rf(chunk_dir) }
data/tapsoob.gemspec CHANGED
@@ -20,18 +20,18 @@ Gem::Specification.new do |s|
20
20
  s.require_paths = ["lib"]
21
21
 
22
22
  # Dependencies
23
- s.add_dependency "sequel", "~> 5.96.0"
24
- s.add_dependency "thor", "~> 1.4.0"
23
+ s.add_dependency "sequel", "~> 5.105.0"
24
+ s.add_dependency "thor", "~> 1.5.0"
25
25
 
26
26
  if (RUBY_PLATFORM =~ /java/).nil?
27
27
  s.add_development_dependency "mysql2", "~> 0.5.7"
28
- s.add_development_dependency "pg", "~> 1.6.2"
29
- s.add_development_dependency "sqlite3", "~> 2.7.4"
28
+ s.add_development_dependency "pg", "~> 1.6.3"
29
+ s.add_development_dependency "sqlite3", "~> 2.9.5"
30
30
  else
31
31
  s.platform = 'java'
32
32
 
33
33
  s.add_dependency "jdbc-mysql", "~> 9.1.0.1"
34
- s.add_dependency "jdbc-postgres", "~> 42.7.0"
34
+ s.add_dependency "jdbc-postgres", "~> 42.7.11"
35
35
  s.add_dependency "jdbc-sqlite3", "~> 3.46.1.1"
36
36
  end
37
37
  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.8.1
4
+ version: 0.8.2
5
5
  platform: ruby
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: 2026-06-12 00:00:00.000000000 Z
12
+ date: 2026-06-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sequel
@@ -17,28 +17,28 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 5.96.0
20
+ version: 5.105.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 5.96.0
27
+ version: 5.105.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: thor
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: 1.4.0
34
+ version: 1.5.0
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: 1.4.0
41
+ version: 1.5.0
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: mysql2
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -59,28 +59,28 @@ dependencies:
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: 1.6.2
62
+ version: 1.6.3
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: 1.6.2
69
+ version: 1.6.3
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: sqlite3
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: 2.7.4
76
+ version: 2.9.5
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: 2.7.4
83
+ version: 2.9.5
84
84
  description: Simple tool to import/export databases inspired by taps but OOB, meaning
85
85
  databases are imported/exported from the filesystem.
86
86
  email: felix.bellanger@faveod.com