tapsoob 0.2.6 → 0.2.7

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: a9f89e46ef22f2e9408bd4613bd3da2b9c191ca13f3cf76f571a2932a68e8f25
4
- data.tar.gz: b21fbaf6196cda1dcb6b9452e4be5e693333d09c48f07b608f5700df55a3cdc3
3
+ metadata.gz: 2c6a5d0ed2f7a08b6cb726bc5665c2d5a092e55fa68a6ea746127b210c32958c
4
+ data.tar.gz: cde8aeb717eed72da5b30090ce0d6e3b4771a9a4b01073941560f07d4ddcaa4c
5
5
  SHA512:
6
- metadata.gz: 11accb2c8934253b8ca96c7ca7fd4e014674af03b43675534239e511941fe40c75b6bea07ae64d055c2bd236ad4ce8e6e5eb1fedf171bec4812511e958fb8ccd
7
- data.tar.gz: 66a644912171360147ced4c8f6941cdaff439111f0074d2ea61a59bcabf7c7bb7dc530260e708ed543dd0e007c46059ec30395db292799683696553ebb506f6c
6
+ metadata.gz: 0dd87ff8b5d2e0d28437b2d6bc315ef52dd6aa87406393aa882573848eacb0fee97207fe7a3d8ce8dc716aa1e0f269eb3f43501b4754a3f95a195add4b4fd34c
7
+ data.tar.gz: 0deaf4217e61ce5ca09db15b0314135ae45b57482fdb96adabf2e818c0fb64374a1efeb66395421cc44cf4e61ca76f1d11631ebb85facbf61a3285ef5b7734a4
@@ -1,191 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'rubygems'
4
- require 'fileutils'
5
- require 'sequel'
6
- require 'tempfile'
7
- require 'thor'
8
-
9
3
  $:.unshift File.dirname(__FILE__) + '/../lib'
10
- require 'tapsoob/config'
11
- require 'tapsoob/log'
12
- require 'tapsoob/operation'
13
- require 'tapsoob/schema'
14
- require 'tapsoob/version'
15
-
16
- Tapsoob::Config.tapsoob_database_url = ENV['TAPSOOB_DATABASE_URL'] || begin
17
- # this is dirty but it solves a weird problem where the tempfile disappears mid-process
18
- #require ((RUBY_PLATFORM =~ /java/).nil? ? 'sqlite3' : 'jdbc-sqlite3')
19
- $__taps_database = Tempfile.new('tapsoob.db')
20
- $__taps_database.open()
21
- "sqlite://#{$__taps_database.path}"
22
- end
23
-
24
- module TapsoobCLI
25
- class Schema < Thor
26
- desc "console DATABASE_URL", "Create an IRB REPL connected to a database"
27
- def console(database_url)
28
- $db = Sequel.connect(database_url)
29
- require 'irb'
30
- require 'irb/completion'
31
- IRB.start
32
- end
33
-
34
- desc "dump DATABASE_URL", "Dump a database using a database URL"
35
- def dump(database_url)
36
- puts Tapsoob::Schema.dump(database_url)
37
- end
38
-
39
- desc "dump_table DATABASE_URL TABLE", "Dump a table from a database using a database URL"
40
- def dump_table(database_url, table)
41
- puts Tapsoob::Schema.dump_table(database_url, table)
42
- end
43
-
44
- desc "indexes DATABASE_URL", "Dump indexes from a database using a database URL"
45
- def indexes(database_url)
46
- puts Tapsoob::Schema.indexes(database_url)
47
- end
48
-
49
- desc "indexes_individual DATABASE_URL", "Dump indexes per table individually using a database URL"
50
- def indexes_individual(database_url)
51
- puts Tapsoob::Schema.indexes_individual(database_url)
52
- end
53
-
54
- desc "reset_db_sequences DATABASE_URL", "Reset database sequences using a database URL"
55
- def reset_db_sequences(database_url)
56
- Tapsoob::Schema.reset_db_sequences(database_url)
57
- end
58
-
59
- desc "load DATABASE_URL FILENAME", "Load a database schema from a file to a database using a database URL"
60
- def load(database_url, filename)
61
- schema = File.read(filename) rescue help
62
- Tapsoob::Schema.load(database_url, schema)
63
- end
64
-
65
- desc "load_indexes DATABASE_URL FILENAME", "Load indexes from a file to a database using a database URL"
66
- def load_indexes(database_url, filename)
67
- indexes = File.read(filename) rescue help
68
- Tapsoob::Schema.load_indexes(database_url, indexes)
69
- end
70
- end
71
-
72
- class Root < Thor
73
- desc "pull DUMP_PATH DATABASE_URL", "Pull a dump from a database to a folder"
74
- option :"skip-schema", desc: "Don't transfer the schema just data", default: false, type: :boolean, aliases: "-s"
75
- option :"indexes-first", desc: "Transfer indexes first before data", default: false, type: :boolean, aliases: "-i"
76
- option :resume, desc: "Resume a Tapsoob Session from a stored file", type: :string, aliases: "-r"
77
- option :chunksize, desc: "Initial chunksize", default: 1000, type: :numeric, aliases: "-c"
78
- option :"disable-compression", desc: "Disable Compression", default: false, type: :boolean, aliases: "-g"
79
- option :filter, desc: "Regex Filter for tables", type: :string, aliases: "-f"
80
- option :tables, desc: "Shortcut to filter on a list of tables", type: :array, aliases: "-t"
81
- option :"exclude-tables", desc: "Shortcut to exclude a list of tables", type: :array, aliases: "-e"
82
- option :debug, desc: "Enable debug messages", default: false, type: :boolean, aliases: "-d"
83
- def pull(dump_path, database_url)
84
- opts = parse_opts(options)
85
- Tapsoob.log.level = Logger::DEBUG if opts[:debug]
86
- if opts[:resume_filename]
87
- clientresumexfer(:pull, dump_path, database_url, opts)
88
- else
89
- clientxfer(:pull, dump_path, database_url, opts)
90
- end
91
- end
92
-
93
- desc "push DUMP_PATH DATABASE_URL", "Push a previously tapsoob dump to a database"
94
- option :"skip-schema", desc: "Don't transfer the schema just data", default: false, type: :boolean, aliases: "-s"
95
- option :"indexes-first", desc: "Transfer indexes first before data", default: false, type: :boolean, aliases: "-i"
96
- option :resume, desc: "Resume a Tapsoob Session from a stored file", type: :string, aliases: "-r"
97
- option :chunksize, desc: "Initial chunksize", default: 1000, type: :numeric, aliases: "-c"
98
- option :"disable-compression", desc: "Disable Compression", default: false, type: :boolean, aliases: "-g"
99
- option :filter, desc: "Regex Filter for tables", type: :string, aliases: "-f"
100
- option :tables, desc: "Shortcut to filter on a list of tables", type: :array, aliases: "-t"
101
- option :"exclude-tables", desc: "Shortcut to exclude a list of tables", type: :array, aliases: "-e"
102
- option :debug, desc: "Enable debug messages", default: false, type: :boolean, aliases: "-d"
103
- def push(dump_path, database_url)
104
- opts = parse_opts(options)
105
- Tapsoob.log.level = Logger::DEBUG if opts[:debug]
106
- if opts[:resume_filename]
107
- clientresumexfer(:push, dump_path, database_url, opts)
108
- else
109
- clientxfer(:push, dump_path, database_url, opts)
110
- end
111
- end
112
-
113
- desc "version", "Show tapsoob version"
114
- def version
115
- puts Tapsoob::VERSION.dup
116
- end
117
-
118
- desc "schema SUBCOMMAND ...ARGS", "Direct access to Tapsoob::Schema class methods"
119
- subcommand "schema", Schema
120
-
121
- private
122
- def parse_opts(options)
123
- # Default options
124
- opts = {
125
- skip_schema: options[:"skip-schema"],
126
- indexes_first: options[:"indexes_first"],
127
- disable_compression: options[:"disable-compression"],
128
- debug: options[:debug]
129
- }
130
-
131
- # Resume
132
- if options[:resume]
133
- if File.exists?(options[:resume])
134
- opts[:resume_file] = options[:resume]
135
- else
136
- raise "Unable to find resume file."
137
- end
138
- end
139
-
140
- # Default chunksize
141
- if options[:chunksize]
142
- opts[:default_chunksize] = (options[:chunksize] < 10 ? 10 : options[:chunksize])
143
- end
144
-
145
- # Regex filter
146
- opts[:table_filter] = options[:filter] if options[:filter]
147
-
148
- # Table filter
149
- if options[:tables]
150
- r_tables = options[:tables].collect { |t| "^#{t}" }.join("|")
151
- opts[:table_filter] = "#{r_tables}"
152
- end
153
-
154
- # Exclude tables
155
- opts[:exclude_tables] = options[:"exclude-tables"] if options[:"exclude-tables"]
156
-
157
- opts
158
- end
159
-
160
- def clientxfer(method, dump_path, database_url, opts)
161
- Tapsoob::Config.verify_database_url(database_url)
162
-
163
- FileUtils.mkpath "#{dump_path}/schemas"
164
- FileUtils.mkpath "#{dump_path}/data"
165
- FileUtils.mkpath "#{dump_path}/indexes"
166
-
167
- require 'tapsoob/operation'
168
-
169
- Tapsoob::Operation.factory(method, database_url, dump_path, opts).run
170
- end
171
-
172
- def clientresumexfer(method, dump_path, database_url, opts)
173
- session = JSON.parse(File.read(opts.delete(:resume_filename)))
174
- session.symbolize_recursively!
175
-
176
- dump_path = dump_path || session.delete(:dump_path)
177
-
178
- require 'taps/operation'
179
-
180
- newsession = session.merge({
181
- :default_chunksize => opts[:default_chunksize],
182
- :disable_compression => opts[:disable_compression],
183
- :resume => true
184
- })
185
-
186
- Tapsoob::Operation.factory(method, database_url, dump_path, newsession).run
187
- end
188
- end
189
- end
4
+ require 'tapsoob/cli'
190
5
 
191
- TapsoobCLI::Root.start(ARGV)
6
+ Tapsoob::CLI::Root.start(ARGV)
@@ -0,0 +1,192 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'fileutils'
5
+ require 'sequel'
6
+ require 'tempfile'
7
+ require 'thor'
8
+
9
+ # tapsoob deps
10
+ require 'tapsoob/config'
11
+ require 'tapsoob/log'
12
+ require 'tapsoob/operation'
13
+ require 'tapsoob/schema'
14
+ require 'tapsoob/version'
15
+
16
+ Tapsoob::Config.tapsoob_database_url = ENV['TAPSOOB_DATABASE_URL'] || begin
17
+ # this is dirty but it solves a weird problem where the tempfile disappears mid-process
18
+ #require ((RUBY_PLATFORM =~ /java/).nil? ? 'sqlite3' : 'jdbc-sqlite3')
19
+ $__taps_database = Tempfile.new('tapsoob.db')
20
+ $__taps_database.open()
21
+ "sqlite://#{$__taps_database.path}"
22
+ end
23
+
24
+ module Tapsoob
25
+ module CLI
26
+ class Schema < Thor
27
+ desc "console DATABASE_URL", "Create an IRB REPL connected to a database"
28
+ def console(database_url)
29
+ $db = Sequel.connect(database_url)
30
+ require 'irb'
31
+ require 'irb/completion'
32
+ IRB.start
33
+ end
34
+
35
+ desc "dump DATABASE_URL", "Dump a database using a database URL"
36
+ def dump(database_url)
37
+ puts Tapsoob::Schema.dump(database_url)
38
+ end
39
+
40
+ desc "dump_table DATABASE_URL TABLE", "Dump a table from a database using a database URL"
41
+ def dump_table(database_url, table)
42
+ puts Tapsoob::Schema.dump_table(database_url, table)
43
+ end
44
+
45
+ desc "indexes DATABASE_URL", "Dump indexes from a database using a database URL"
46
+ def indexes(database_url)
47
+ puts Tapsoob::Schema.indexes(database_url)
48
+ end
49
+
50
+ desc "indexes_individual DATABASE_URL", "Dump indexes per table individually using a database URL"
51
+ def indexes_individual(database_url)
52
+ puts Tapsoob::Schema.indexes_individual(database_url)
53
+ end
54
+
55
+ desc "reset_db_sequences DATABASE_URL", "Reset database sequences using a database URL"
56
+ def reset_db_sequences(database_url)
57
+ Tapsoob::Schema.reset_db_sequences(database_url)
58
+ end
59
+
60
+ desc "load DATABASE_URL FILENAME", "Load a database schema from a file to a database using a database URL"
61
+ def load(database_url, filename)
62
+ schema = File.read(filename) rescue help
63
+ Tapsoob::Schema.load(database_url, schema)
64
+ end
65
+
66
+ desc "load_indexes DATABASE_URL FILENAME", "Load indexes from a file to a database using a database URL"
67
+ def load_indexes(database_url, filename)
68
+ indexes = File.read(filename) rescue help
69
+ Tapsoob::Schema.load_indexes(database_url, indexes)
70
+ end
71
+ end
72
+
73
+ class Root < Thor
74
+ desc "pull DUMP_PATH DATABASE_URL", "Pull a dump from a database to a folder"
75
+ option :"skip-schema", desc: "Don't transfer the schema just data", default: false, type: :boolean, aliases: "-s"
76
+ option :"indexes-first", desc: "Transfer indexes first before data", default: false, type: :boolean, aliases: "-i"
77
+ option :resume, desc: "Resume a Tapsoob Session from a stored file", type: :string, aliases: "-r"
78
+ option :chunksize, desc: "Initial chunksize", default: 1000, type: :numeric, aliases: "-c"
79
+ option :"disable-compression", desc: "Disable Compression", default: false, type: :boolean, aliases: "-g"
80
+ option :filter, desc: "Regex Filter for tables", type: :string, aliases: "-f"
81
+ option :tables, desc: "Shortcut to filter on a list of tables", type: :array, aliases: "-t"
82
+ option :"exclude-tables", desc: "Shortcut to exclude a list of tables", type: :array, aliases: "-e"
83
+ option :debug, desc: "Enable debug messages", default: false, type: :boolean, aliases: "-d"
84
+ def pull(dump_path, database_url)
85
+ opts = parse_opts(options)
86
+ Tapsoob.log.level = Logger::DEBUG if opts[:debug]
87
+ if opts[:resume_filename]
88
+ clientresumexfer(:pull, dump_path, database_url, opts)
89
+ else
90
+ clientxfer(:pull, dump_path, database_url, opts)
91
+ end
92
+ end
93
+
94
+ desc "push DUMP_PATH DATABASE_URL", "Push a previously tapsoob dump to a database"
95
+ option :"skip-schema", desc: "Don't transfer the schema just data", default: false, type: :boolean, aliases: "-s"
96
+ option :"indexes-first", desc: "Transfer indexes first before data", default: false, type: :boolean, aliases: "-i"
97
+ option :resume, desc: "Resume a Tapsoob Session from a stored file", type: :string, aliases: "-r"
98
+ option :chunksize, desc: "Initial chunksize", default: 1000, type: :numeric, aliases: "-c"
99
+ option :"disable-compression", desc: "Disable Compression", default: false, type: :boolean, aliases: "-g"
100
+ option :filter, desc: "Regex Filter for tables", type: :string, aliases: "-f"
101
+ option :tables, desc: "Shortcut to filter on a list of tables", type: :array, aliases: "-t"
102
+ option :"exclude-tables", desc: "Shortcut to exclude a list of tables", type: :array, aliases: "-e"
103
+ option :debug, desc: "Enable debug messages", default: false, type: :boolean, aliases: "-d"
104
+ def push(dump_path, database_url)
105
+ opts = parse_opts(options)
106
+ Tapsoob.log.level = Logger::DEBUG if opts[:debug]
107
+ if opts[:resume_filename]
108
+ clientresumexfer(:push, dump_path, database_url, opts)
109
+ else
110
+ clientxfer(:push, dump_path, database_url, opts)
111
+ end
112
+ end
113
+
114
+ desc "version", "Show tapsoob version"
115
+ def version
116
+ puts Tapsoob::VERSION.dup
117
+ end
118
+
119
+ desc "schema SUBCOMMAND ...ARGS", "Direct access to Tapsoob::Schema class methods"
120
+ subcommand "schema", Schema
121
+
122
+ private
123
+ def parse_opts(options)
124
+ # Default options
125
+ opts = {
126
+ skip_schema: options[:"skip-schema"],
127
+ indexes_first: options[:"indexes_first"],
128
+ disable_compression: options[:"disable-compression"],
129
+ debug: options[:debug]
130
+ }
131
+
132
+ # Resume
133
+ if options[:resume]
134
+ if File.exists?(options[:resume])
135
+ opts[:resume_file] = options[:resume]
136
+ else
137
+ raise "Unable to find resume file."
138
+ end
139
+ end
140
+
141
+ # Default chunksize
142
+ if options[:chunksize]
143
+ opts[:default_chunksize] = (options[:chunksize] < 10 ? 10 : options[:chunksize])
144
+ end
145
+
146
+ # Regex filter
147
+ opts[:table_filter] = options[:filter] if options[:filter]
148
+
149
+ # Table filter
150
+ if options[:tables]
151
+ r_tables = options[:tables].collect { |t| "^#{t}" }.join("|")
152
+ opts[:table_filter] = "#{r_tables}"
153
+ end
154
+
155
+ # Exclude tables
156
+ opts[:exclude_tables] = options[:"exclude-tables"] if options[:"exclude-tables"]
157
+
158
+ opts
159
+ end
160
+
161
+ def clientxfer(method, dump_path, database_url, opts)
162
+ Tapsoob::Config.verify_database_url(database_url)
163
+
164
+ FileUtils.mkpath "#{dump_path}/schemas"
165
+ FileUtils.mkpath "#{dump_path}/data"
166
+ FileUtils.mkpath "#{dump_path}/indexes"
167
+
168
+ require 'tapsoob/operation'
169
+
170
+ Tapsoob::Operation.factory(method, database_url, dump_path, opts).run
171
+ end
172
+
173
+ def clientresumexfer(method, dump_path, database_url, opts)
174
+ session = JSON.parse(File.read(opts.delete(:resume_filename)))
175
+ session.symbolize_recursively!
176
+
177
+ dump_path = dump_path || session.delete(:dump_path)
178
+
179
+ require 'taps/operation'
180
+
181
+ newsession = session.merge({
182
+ :default_chunksize => opts[:default_chunksize],
183
+ :disable_compression => opts[:disable_compression],
184
+ :resume => true
185
+ })
186
+
187
+ Tapsoob::Operation.factory(method, database_url, dump_path, newsession).run
188
+ end
189
+ end
190
+ end
191
+ end
192
+
@@ -154,10 +154,11 @@ Data : #{data}
154
154
  Tapsoob::Schema.load_indexes(database_url, index)
155
155
  end
156
156
 
157
- def schema_bin(*args)
158
- bin_path = File.expand_path("#{File.dirname(__FILE__)}/../../bin/#{bin('tapsoob')}")
157
+ def schema_bin(command, *args)
158
+ require 'tapsoob/cli'
159
159
  subcommand = "schema"
160
- `#{Gem.ruby} -S "#{bin_path}" "#{subcommand}" #{args.map { |a| "'#{a}'" }.join(' ') }`
160
+ script = Tapsoob::CLI::Schema.new
161
+ script.invoke(command, args.map { |a| "#{a}" })
161
162
  end
162
163
 
163
164
  def primary_key(db, table)
@@ -1,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Tapsoob
3
- VERSION = "0.2.6".freeze
3
+ VERSION = "0.2.7".freeze
4
4
  end
@@ -30,8 +30,8 @@ Gem::Specification.new do |s|
30
30
  else
31
31
  s.platform = 'java'
32
32
 
33
- s.add_development_dependency "jdbc-mysql", "~> 5.1.44"
34
- s.add_development_dependency "jdbc-postgres", "~> 42.1.4"
35
- s.add_development_dependency "jdbc-sqlite3", "~> 3.20.1"
33
+ s.add_dependency "jdbc-mysql", "~> 5.1.44"
34
+ s.add_dependency "jdbc-postgres", "~> 42.1.4"
35
+ s.add_dependency "jdbc-sqlite3", "~> 3.20.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.2.6
4
+ version: 0.2.7
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: 2018-01-31 00:00:00.000000000 Z
12
+ date: 2018-02-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sequel
@@ -97,6 +97,7 @@ files:
97
97
  - bin/tapsoob
98
98
  - lib/tapsoob.rb
99
99
  - lib/tapsoob/chunksize.rb
100
+ - lib/tapsoob/cli.rb
100
101
  - lib/tapsoob/config.rb
101
102
  - lib/tapsoob/data_stream.rb
102
103
  - lib/tapsoob/errors.rb