sqldump 0.0.1 → 0.0.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.
data/CHANGELOG CHANGED
@@ -1,6 +1,16 @@
1
1
  Version 0.0.1
2
2
  -------------
3
3
 
4
+ New
5
+ - Added MySQL support.
6
+
7
+ Bugfix
8
+ - Actually use the host parameter for PostgreSQL/MySQL.
9
+
10
+
11
+ Version 0.0.1
12
+ -------------
13
+
4
14
  Initial version.
5
15
  - Very simple INSERT support.
6
16
  - CSV support.
data/Guardfile CHANGED
@@ -4,3 +4,9 @@ guard 'rspec' do
4
4
  watch(%r{^lib/(.+)/(.+)\.rb$}) { |m| "spec/#{m[1]}/#{m[2]}_spec.rb" }
5
5
  watch('spec/spec_helper.rb') { "spec" }
6
6
  end
7
+
8
+ guard 'cucumber' do
9
+ watch(%r{^features/.+\.feature$})
10
+ watch(%r{^features/support/.+$}) { 'features' }
11
+ watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
12
+ end
data/README.md CHANGED
@@ -10,7 +10,11 @@ Just install the gem with
10
10
  $ gem install sqldump
11
11
  ```
12
12
 
13
- This will make the executable `sqldump` available from your command line.
13
+ This will make the executable `sqldump` available from your command line. SQLite3 is a direct dependency and is installed if you don't already have it. Other drivers must be installed manually. E.g.
14
+
15
+ ```bash
16
+ $ gem install pg
17
+ ```
14
18
 
15
19
  **Requires Ruby 1.9.2 or later.**
16
20
 
@@ -49,12 +53,14 @@ This gem is created by Mats Sigge and is under the MIT License.
49
53
  ## Roadmap
50
54
 
51
55
  ###Immediate goals
52
- * More databases. At least MySQL and SQL Server.
53
- * Selecting only some columns
54
- * Support for UPDATEs
55
- * Pretty-printing SQL on multiple lines
56
- * Suppressing NULL columns in output
57
- * Handling auto-incrementing columns, e.g. nextval('sequence_name') in PostgreSQL
56
+ * Selecting only some columns.
57
+ * Support for UPDATEs.
58
+ * Pretty-printing SQL.
59
+ * Suppressing NULL columns in output.
60
+ * Handling auto-incrementing columns, e.g. nextval('sequence_name') in PostgreSQL.
61
+ * ODBC driver to enable SQL Server.
62
+ * Ability to specify custom connection string parameters (or entire connection string).
63
+ * If possible, detecting if the specified DBD driver is installed, to give a better error message.
58
64
 
59
65
  ###Longer-term goals / pipe dreams
60
66
  * Configuration system, e.g. .sqldump file
@@ -66,6 +72,8 @@ This gem is created by Mats Sigge and is under the MIT License.
66
72
  * Initial support for dumping INSERTs
67
73
  * Support for SQLite3
68
74
  * Support for PostgreSQL
75
+ * Support for MySQL
76
+
69
77
 
70
78
  ## History
71
79
 
data/Rakefile CHANGED
@@ -1 +1,11 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+ require "cucumber/rake/task"
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ Cucumber::Rake::Task.new(:cucumber) do |task|
8
+ task.cucumber_opts = ["features"]
9
+ end
10
+
11
+ task default: :spec
@@ -19,7 +19,7 @@ Feature: dump data from different database types (e.g. MySQL, PostgreSQL, SQLite
19
19
  | 17 |
20
20
  | 42 |
21
21
  | 4711 |
22
- When I run `sqldump -T postgresql -d numbers -S localhost -U mats numbers`
22
+ When I run `sqldump -T postgresql -d numbers -S localhost -U sqldump -P sqldump numbers`
23
23
  Then it should pass with:
24
24
  """
25
25
  17
@@ -15,13 +15,12 @@ def drop_database_if_exists(driver, host, database, username, password)
15
15
  end
16
16
 
17
17
  def get_driver_string(driver)
18
- driver_string = case driver
19
- when :sqlite3
20
- "SQLite3"
21
- when :postgresql
22
- "Pg"
23
- end
24
- driver_string
18
+ case driver
19
+ when :sqlite3
20
+ "SQLite3"
21
+ when :postgresql
22
+ "Pg"
23
+ end
25
24
  end
26
25
 
27
26
  def create_and_connect_to_database(driver, host, database, username, password, &block)
@@ -48,8 +47,8 @@ def create_database(driver, host, database, username, password)
48
47
  end
49
48
 
50
49
  def create_dummy_database_with_data(driver, host, database, table_name, table_data)
51
- username = 'mats'
52
- password = nil
50
+ username = 'sqldump'
51
+ password = 'sqldump'
53
52
 
54
53
  in_current_dir do
55
54
  drop_database_if_exists(driver, host, database, username, password)
@@ -20,9 +20,12 @@ module Sqldump
20
20
  end
21
21
 
22
22
  def get_url
23
- database = @options.database
24
23
  driver = get_driver
25
- "DBI:#{driver}:#{database}"
24
+ url = "DBI:#{driver}:#{@options.database}"
25
+ if use_host
26
+ url += ":#{@options.host}"
27
+ end
28
+ url
26
29
  end
27
30
 
28
31
  def get_driver
@@ -31,9 +34,17 @@ module Sqldump
31
34
  "SQLite3"
32
35
  when :postgresql
33
36
  "Pg"
37
+ when :mysql
38
+ "Mysql"
39
+ else
40
+ raise "Unknown database type " + @options.database_type
34
41
  end
35
42
  end
36
43
 
44
+ def use_host
45
+ @options.database_type != :sqlite3
46
+ end
47
+
37
48
  def get_user
38
49
  @options.username
39
50
  end
@@ -4,6 +4,8 @@ module Sqldump
4
4
 
5
5
  class Options
6
6
 
7
+ SUPPORTED_DATABASES = ['postgresql', 'mysql', 'sqlite3']
8
+
7
9
  attr_accessor :database
8
10
  attr_accessor :host
9
11
  attr_accessor :username
@@ -70,7 +72,12 @@ module Sqldump
70
72
  end
71
73
 
72
74
  opts.on('-T', '--dbtype TYPE', 'Specify the type of database to connect to. Supported types are sqlite3, postgresql/pg.') do |type|
75
+ type.downcase!
73
76
  type = 'postgresql' if type == 'pg'
77
+ unless SUPPORTED_DATABASES.include?(type)
78
+ puts "Unsupported database type #{type}"
79
+ exit
80
+ end
74
81
  self.database_type = type.to_sym
75
82
  end
76
83
 
@@ -1,3 +1,3 @@
1
1
  module Sqldump
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -7,8 +7,9 @@ module Sqldump
7
7
 
8
8
  before(:each) do
9
9
  @options = double('options')
10
- @options.stub(:database).and_return('database')
11
10
  @options.stub(:database_type).and_return(:sqlite3)
11
+ @options.stub(:database).and_return('database')
12
+ @options.stub(:host).and_return('localhost')
12
13
  @options.stub(:username).and_return(nil)
13
14
  @options.stub(:password).and_return(nil)
14
15
  end
@@ -40,7 +41,22 @@ module Sqldump
40
41
  @options.stub(:database_type).and_return(:postgresql)
41
42
 
42
43
  connector = Connector.new(@options)
43
- connector.get_url.should == 'DBI:Pg:numbers'
44
+ connector.get_url.should == 'DBI:Pg:numbers:localhost'
45
+ end
46
+
47
+ it 'uses the Mysql driver when mysql is specified' do
48
+ @options.stub(:database).and_return('numbers')
49
+ @options.stub(:database_type).and_return(:mysql)
50
+
51
+ connector = Connector.new(@options)
52
+ connector.get_url.should == 'DBI:Mysql:numbers:localhost'
53
+ end
54
+
55
+ it "doesn't include the host for SQLite3" do
56
+ @options.stub(:database).and_return('numbers')
57
+
58
+ connector = Connector.new(@options)
59
+ connector.get_url.should == 'DBI:SQLite3:numbers'
44
60
  end
45
61
  end
46
62
 
@@ -62,6 +62,10 @@ module Sqldump
62
62
  @formatter.quote(17, "number").should == 17
63
63
  end
64
64
 
65
+ it "returns NULL on a nil value" do
66
+ @formatter.quote(nil, "string").should == "NULL"
67
+ end
68
+
65
69
  end
66
70
 
67
71
  end
@@ -54,6 +54,12 @@ module Sqldump
54
54
  options = make_options(%w(-T pg))
55
55
  options.database_type.should == :postgresql
56
56
  end
57
+
58
+ it 'sets the type to mysql if specified' do
59
+ options = make_options(%w(-T mysql))
60
+ options.database_type.should == :mysql
61
+ end
62
+
57
63
  end
58
64
 
59
65
  describe 'username' do
@@ -23,7 +23,9 @@ Gem::Specification.new do |s|
23
23
  s.add_dependency "dbd-sqlite3"
24
24
  s.add_development_dependency "rspec"
25
25
  s.add_development_dependency "cucumber"
26
+ s.add_development_dependency "aruba"
26
27
  s.add_development_dependency "guard-rspec"
28
+ s.add_development_dependency "guard-cucumber"
27
29
  s.add_development_dependency "rb-fsevent" if RUBY_PLATFORM =~ /darwin/i
28
30
  s.add_development_dependency "dbd-pg"
29
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqldump
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-05 00:00:00.000000000Z
12
+ date: 2012-02-06 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: dbi
16
- requirement: &2160361380 !ruby/object:Gem::Requirement
16
+ requirement: &2152906260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2160361380
24
+ version_requirements: *2152906260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: dbd-sqlite3
27
- requirement: &2160360440 !ruby/object:Gem::Requirement
27
+ requirement: &2152905460 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2160360440
35
+ version_requirements: *2152905460
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &2160359900 !ruby/object:Gem::Requirement
38
+ requirement: &2152897840 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2160359900
46
+ version_requirements: *2152897840
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: cucumber
49
- requirement: &2160359280 !ruby/object:Gem::Requirement
49
+ requirement: &2152896120 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,32 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2160359280
57
+ version_requirements: *2152896120
58
+ - !ruby/object:Gem::Dependency
59
+ name: aruba
60
+ requirement: &2152895320 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *2152895320
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: guard-rspec
60
- requirement: &2160358300 !ruby/object:Gem::Requirement
71
+ requirement: &2152894720 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *2152894720
80
+ - !ruby/object:Gem::Dependency
81
+ name: guard-cucumber
82
+ requirement: &2152893780 !ruby/object:Gem::Requirement
61
83
  none: false
62
84
  requirements:
63
85
  - - ! '>='
@@ -65,10 +87,10 @@ dependencies:
65
87
  version: '0'
66
88
  type: :development
67
89
  prerelease: false
68
- version_requirements: *2160358300
90
+ version_requirements: *2152893780
69
91
  - !ruby/object:Gem::Dependency
70
92
  name: rb-fsevent
71
- requirement: &2160357060 !ruby/object:Gem::Requirement
93
+ requirement: &2152892500 !ruby/object:Gem::Requirement
72
94
  none: false
73
95
  requirements:
74
96
  - - ! '>='
@@ -76,10 +98,10 @@ dependencies:
76
98
  version: '0'
77
99
  type: :development
78
100
  prerelease: false
79
- version_requirements: *2160357060
101
+ version_requirements: *2152892500
80
102
  - !ruby/object:Gem::Dependency
81
103
  name: dbd-pg
82
- requirement: &2160353280 !ruby/object:Gem::Requirement
104
+ requirement: &2152890760 !ruby/object:Gem::Requirement
83
105
  none: false
84
106
  requirements:
85
107
  - - ! '>='
@@ -87,7 +109,7 @@ dependencies:
87
109
  version: '0'
88
110
  type: :development
89
111
  prerelease: false
90
- version_requirements: *2160353280
112
+ version_requirements: *2152890760
91
113
  description: A command line tool to generate SQL insert or update statements from
92
114
  the data in a database.
93
115
  email: