sqldump 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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: