sqldump 0.0.2 → 0.0.3
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 +7 -1
- data/README.md +1 -1
- data/features/dump_as_csv.feature +1 -1
- data/features/dump_as_insert.feature +17 -0
- data/lib/sqldump/insert_formatter.rb +21 -3
- data/lib/sqldump/options.rb +5 -0
- data/lib/sqldump/version.rb +1 -1
- data/spec/sqldump/insert_formatter_spec.rb +22 -3
- data/spec/sqldump/options_spec.rb +10 -4
- metadata +20 -20
data/CHANGELOG
CHANGED
data/README.md
CHANGED
@@ -55,7 +55,6 @@ This gem is created by Mats Sigge and is under the MIT License.
|
|
55
55
|
###Immediate goals
|
56
56
|
* Selecting only some columns.
|
57
57
|
* Support for UPDATEs.
|
58
|
-
* Pretty-printing SQL.
|
59
58
|
* Suppressing NULL columns in output.
|
60
59
|
* Handling auto-incrementing columns, e.g. nextval('sequence_name') in PostgreSQL.
|
61
60
|
* ODBC driver to enable SQL Server.
|
@@ -73,6 +72,7 @@ This gem is created by Mats Sigge and is under the MIT License.
|
|
73
72
|
* Support for SQLite3
|
74
73
|
* Support for PostgreSQL
|
75
74
|
* Support for MySQL
|
75
|
+
* Pretty-printing SQL.
|
76
76
|
|
77
77
|
|
78
78
|
## History
|
@@ -21,3 +21,20 @@ Feature: dump data as INSERT statements
|
|
21
21
|
"""
|
22
22
|
INSERT INTO number (number) VALUES (NULL);
|
23
23
|
"""
|
24
|
+
|
25
|
+
Scenario: pretty print
|
26
|
+
Given a database "foo.sqlite" with a table "numbers_and_strings" with the following data
|
27
|
+
| number[int] | string |
|
28
|
+
| 42 | thingy |
|
29
|
+
When I run `sqldump -d foo.sqlite -it numbers_and_strings`
|
30
|
+
Then it should pass with:
|
31
|
+
"""
|
32
|
+
INSERT INTO numbers_and_strings (
|
33
|
+
number,
|
34
|
+
string
|
35
|
+
)
|
36
|
+
VALUES (
|
37
|
+
42,
|
38
|
+
'thingy'
|
39
|
+
);
|
40
|
+
"""
|
@@ -18,8 +18,15 @@ module Sqldump
|
|
18
18
|
@column_type_by_name[column_name]
|
19
19
|
end
|
20
20
|
|
21
|
+
def output_list(list)
|
22
|
+
@io.print "\n#{indent}" if pretty
|
23
|
+
join_string = pretty ? ",\n#{indent}" : ", "
|
24
|
+
@io.print list.join(join_string)
|
25
|
+
@io.print "\n" if pretty
|
26
|
+
end
|
27
|
+
|
21
28
|
def output_column_names
|
22
|
-
@
|
29
|
+
output_list(@sth.column_names)
|
23
30
|
end
|
24
31
|
|
25
32
|
def output_values(row)
|
@@ -27,14 +34,17 @@ module Sqldump
|
|
27
34
|
row.each_with_name do |value, column_name|
|
28
35
|
quoted_list.push quote(value, column_name)
|
29
36
|
end
|
30
|
-
|
37
|
+
output_list(quoted_list)
|
38
|
+
#@io.print quoted_list.join(", ")
|
31
39
|
end
|
32
40
|
|
33
41
|
def output
|
34
42
|
@sth.fetch do |row|
|
35
43
|
@io.print("INSERT INTO #{@options.table} (")
|
36
44
|
output_column_names()
|
37
|
-
@io.print ")
|
45
|
+
@io.print ")"
|
46
|
+
@io.print pretty ? "\n" : " "
|
47
|
+
@io.print "VALUES ("
|
38
48
|
output_values(row)
|
39
49
|
@io.print ");\n"
|
40
50
|
end
|
@@ -54,6 +64,14 @@ module Sqldump
|
|
54
64
|
end
|
55
65
|
end
|
56
66
|
|
67
|
+
def indent
|
68
|
+
" " * 4
|
69
|
+
end
|
70
|
+
|
71
|
+
def pretty
|
72
|
+
@options.pretty
|
73
|
+
end
|
74
|
+
|
57
75
|
end
|
58
76
|
|
59
77
|
end
|
data/lib/sqldump/options.rb
CHANGED
@@ -15,6 +15,7 @@ module Sqldump
|
|
15
15
|
attr_accessor :sql
|
16
16
|
attr_accessor :csv_header
|
17
17
|
attr_accessor :dump_mode
|
18
|
+
attr_accessor :pretty
|
18
19
|
|
19
20
|
def initialize(argv)
|
20
21
|
parse_options(argv)
|
@@ -85,6 +86,10 @@ module Sqldump
|
|
85
86
|
self.dump_mode = :insert
|
86
87
|
end
|
87
88
|
|
89
|
+
opts.on('-t', '--pretty', 'Pretty-print SQL output (i.e. columns on separate lines, indentation).') do
|
90
|
+
self.pretty = true
|
91
|
+
end
|
92
|
+
|
88
93
|
opts.on('-H', '--header', 'Include column names in csv mode.') do
|
89
94
|
self.csv_header = true
|
90
95
|
end
|
data/lib/sqldump/version.rb
CHANGED
@@ -8,11 +8,14 @@ module Sqldump
|
|
8
8
|
|
9
9
|
describe "#output" do
|
10
10
|
|
11
|
-
def formatter_example(expected_result)
|
11
|
+
def formatter_example(expected_result, options = nil)
|
12
12
|
strio = StringIO.new
|
13
13
|
|
14
|
-
options
|
15
|
-
|
14
|
+
unless options
|
15
|
+
options = double("Options")
|
16
|
+
options.stub(:table).and_return('numbers_and_strings')
|
17
|
+
options.stub(:pretty).and_return(false)
|
18
|
+
end
|
16
19
|
|
17
20
|
formatter = InsertFormatter.new(@sth, strio, options)
|
18
21
|
formatter.output
|
@@ -37,6 +40,22 @@ module Sqldump
|
|
37
40
|
formatter_example("INSERT INTO numbers_and_strings (number, string) VALUES (42, 'thingy');\n")
|
38
41
|
end
|
39
42
|
|
43
|
+
it "pretty-prints output with the pretty option" do
|
44
|
+
options = double("options")
|
45
|
+
options.stub(:table).and_return('numbers_and_strings')
|
46
|
+
options.stub(:pretty).and_return(true)
|
47
|
+
formatter_example(<<"EOT", options)
|
48
|
+
INSERT INTO numbers_and_strings (
|
49
|
+
number,
|
50
|
+
string
|
51
|
+
)
|
52
|
+
VALUES (
|
53
|
+
42,
|
54
|
+
'thingy'
|
55
|
+
);
|
56
|
+
EOT
|
57
|
+
end
|
58
|
+
|
40
59
|
end
|
41
60
|
|
42
61
|
describe "#quote" do
|
@@ -62,7 +62,7 @@ module Sqldump
|
|
62
62
|
|
63
63
|
end
|
64
64
|
|
65
|
-
describe 'username' do
|
65
|
+
describe '-U --username' do
|
66
66
|
it 'sets the username to nil if not specified' do
|
67
67
|
options = make_options([])
|
68
68
|
options.username.should be_nil
|
@@ -74,7 +74,7 @@ module Sqldump
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
-
describe 'password' do
|
77
|
+
describe '-P --password' do
|
78
78
|
it 'sets the password to nil if not specified' do
|
79
79
|
options = make_options([])
|
80
80
|
options.password.should be_nil
|
@@ -93,7 +93,7 @@ module Sqldump
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
describe 'csv header option' do
|
96
|
+
describe '-H --header : csv header option' do
|
97
97
|
it "the csv_header flag is false by default" do
|
98
98
|
options = make_options([])
|
99
99
|
options.csv_header.should be_false
|
@@ -105,13 +105,19 @@ module Sqldump
|
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
|
-
describe 'insert mode option' do
|
108
|
+
describe '-i --insert : insert mode option' do
|
109
109
|
it "sets the mode to :insert" do
|
110
110
|
options = make_options(%w(-i table))
|
111
111
|
options.dump_mode.should == :insert
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
115
|
+
describe '-t --pretty : pretty print option' do
|
116
|
+
it "sets the pretty flag" do
|
117
|
+
options = make_options(%w(-t))
|
118
|
+
options.pretty.should be_true
|
119
|
+
end
|
120
|
+
end
|
115
121
|
end
|
116
122
|
|
117
123
|
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.
|
4
|
+
version: 0.0.3
|
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-
|
12
|
+
date: 2012-02-07 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: dbi
|
16
|
-
requirement: &
|
16
|
+
requirement: &2160964240 !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: *
|
24
|
+
version_requirements: *2160964240
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: dbd-sqlite3
|
27
|
-
requirement: &
|
27
|
+
requirement: &2160963440 !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: *
|
35
|
+
version_requirements: *2160963440
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &2160962740 !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: *
|
46
|
+
version_requirements: *2160962740
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: cucumber
|
49
|
-
requirement: &
|
49
|
+
requirement: &2160961720 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2160961720
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: aruba
|
60
|
-
requirement: &
|
60
|
+
requirement: &2160960920 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2160960920
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: guard-rspec
|
71
|
-
requirement: &
|
71
|
+
requirement: &2160959940 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2160959940
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: guard-cucumber
|
82
|
-
requirement: &
|
82
|
+
requirement: &2160958740 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2160958740
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rb-fsevent
|
93
|
-
requirement: &
|
93
|
+
requirement: &2160956780 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2160956780
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: dbd-pg
|
104
|
-
requirement: &
|
104
|
+
requirement: &2160955100 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *2160955100
|
113
113
|
description: A command line tool to generate SQL insert or update statements from
|
114
114
|
the data in a database.
|
115
115
|
email:
|