mysql2xxxx 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +4 -4
- data/Rakefile +1 -0
- data/benchmark/benchmark.rb +1 -1
- data/benchmark/results/0.0.4-20110314190640.txt +5 -5
- data/benchmark/results/0.0.4-20110315110535-ruby18.txt +6 -6
- data/bin/mysql2csv +1 -0
- data/bin/mysql2json +1 -0
- data/bin/mysql2xml +1 -0
- data/lib/mysql2xxxx.rb +10 -13
- data/lib/mysql2xxxx/cli.rb +1 -1
- data/lib/mysql2xxxx/config.rb +59 -0
- data/lib/mysql2xxxx/version.rb +1 -1
- data/lib/mysql2xxxx/writer.rb +21 -23
- data/lib/mysql2xxxx/writer/csv.rb +14 -2
- data/lib/mysql2xxxx/writer/json.rb +2 -6
- data/lib/mysql2xxxx/writer/xml.rb +1 -1
- data/mysql2xxxx.gemspec +2 -1
- data/test/test_mysql2xxxx.rb +8 -1
- metadata +117 -112
- data/lib/mysql2xxxx/properties.rb +0 -71
data/README.rdoc
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
==Binaries
|
4
4
|
|
5
|
-
mysql2csv --user=dbuser --password=dbpassword --database=dbname
|
6
|
-
mysql2json --user=dbuser --password=dbpassword --database=dbname
|
7
|
-
mysql2xml --user=dbuser --password=dbpassword --database=dbname
|
5
|
+
mysql2csv --user=dbuser --password=dbpassword --database=dbname --execute="select * from automobile_makes"
|
6
|
+
mysql2json --user=dbuser --password=dbpassword --database=dbname --execute="select * from automobile_makes"
|
7
|
+
mysql2xml --user=dbuser --password=dbpassword --database=dbname --execute="select * from automobile_makes"
|
8
8
|
|
9
9
|
To see all options
|
10
10
|
|
@@ -25,7 +25,7 @@ Note also that if you're running it inside a Rails application, it will default
|
|
25
25
|
==Well-formedness
|
26
26
|
|
27
27
|
* CSV output depends on FasterCSV <tt>to_csv</tt>
|
28
|
-
* JSON output depends on
|
28
|
+
* JSON output depends on Florian Frank's JSON <tt>JSON.generate</tt>
|
29
29
|
* XML output is written manually, but looks like the output of <tt>mysql [hyphen][hyphen]xml</tt>
|
30
30
|
|
31
31
|
Copyright 2011 Seamus Abshere
|
data/Rakefile
CHANGED
data/benchmark/benchmark.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
ENV['HERE'] = File.dirname(__FILE__)
|
4
4
|
ENV['DBUSER'] = 'root'
|
5
5
|
ENV['DBPASSWORD'] = 'password'
|
6
|
-
ENV['DBNAME'] = '
|
6
|
+
ENV['DBNAME'] = 'mysql2xxxx_benchmark'
|
7
7
|
ENV['MEMPROF_REPORT_PATH'] = File.expand_path('memprof.txt')
|
8
8
|
ENV['DUMP_PATH'] = File.expand_path('a.dump')
|
9
9
|
ENV['EXECUTE'] = 'SELECT * FROM five_thousand_rows'
|
@@ -136,12 +136,12 @@ Memprof object counts (top 25):
|
|
136
136
|
18 ./benchmark/../lib/mysql2xxxx/writer.rb:33:__node__
|
137
137
|
14 ./benchmark/../lib/mysql2xxxx/writer/xml.rb:12:__node__
|
138
138
|
12 ./benchmark/../lib/mysql2xxxx/writer.rb:11:__node__
|
139
|
-
12 ./benchmark/../lib/mysql2xxxx/
|
140
|
-
12 ./benchmark/../lib/mysql2xxxx/
|
141
|
-
12 ./benchmark/../lib/mysql2xxxx/
|
142
|
-
12 ./benchmark/../lib/mysql2xxxx/
|
139
|
+
12 ./benchmark/../lib/mysql2xxxx/config.rb:32:__node__
|
140
|
+
12 ./benchmark/../lib/mysql2xxxx/config.rb:28:__node__
|
141
|
+
12 ./benchmark/../lib/mysql2xxxx/config.rb:24:__node__
|
142
|
+
12 ./benchmark/../lib/mysql2xxxx/config.rb:20:__node__
|
143
143
|
11 ./benchmark/../lib/mysql2xxxx/writer/xml.rb:4:__node__
|
144
|
-
10 ./benchmark/../lib/mysql2xxxx/
|
144
|
+
10 ./benchmark/../lib/mysql2xxxx/config.rb:36:__node__
|
145
145
|
9 ./benchmark/../lib/mysql2xxxx/writer.rb:26:__node__
|
146
146
|
8 ./benchmark/../lib/mysql2xxxx/writer.rb:73:__node__
|
147
147
|
8 ./benchmark/../lib/mysql2xxxx/writer.rb:32:__node__
|
@@ -137,13 +137,13 @@ Memprof object counts (top 25):
|
|
137
137
|
22 ./benchmark/../lib/mysql2xxxx/writer.rb:35:__node__
|
138
138
|
20 ./benchmark/../lib/mysql2xxxx/writer.rb:16:__node__
|
139
139
|
14 ./benchmark/../lib/mysql2xxxx/writer/xml.rb:12:__node__
|
140
|
-
14 ./benchmark/../lib/mysql2xxxx/
|
140
|
+
14 ./benchmark/../lib/mysql2xxxx/config.rb:18:__node__
|
141
141
|
12 ./benchmark/../lib/mysql2xxxx/writer.rb:11:__node__
|
142
|
-
12 ./benchmark/../lib/mysql2xxxx/
|
143
|
-
12 ./benchmark/../lib/mysql2xxxx/
|
144
|
-
12 ./benchmark/../lib/mysql2xxxx/
|
145
|
-
12 ./benchmark/../lib/mysql2xxxx/
|
142
|
+
12 ./benchmark/../lib/mysql2xxxx/config.rb:36:__node__
|
143
|
+
12 ./benchmark/../lib/mysql2xxxx/config.rb:32:__node__
|
144
|
+
12 ./benchmark/../lib/mysql2xxxx/config.rb:14:__node__
|
145
|
+
12 ./benchmark/../lib/mysql2xxxx/config.rb:10:__node__
|
146
146
|
11 ./benchmark/../lib/mysql2xxxx/writer/xml.rb:4:__node__
|
147
147
|
10 ./benchmark/../lib/mysql2xxxx/writer.rb:34:__node__
|
148
|
-
10 ./benchmark/../lib/mysql2xxxx/
|
148
|
+
10 ./benchmark/../lib/mysql2xxxx/config.rb:40:__node__
|
149
149
|
9 ./benchmark/../lib/mysql2xxxx/writer.rb:26:__node__
|
data/bin/mysql2csv
CHANGED
data/bin/mysql2json
CHANGED
data/bin/mysql2xml
CHANGED
data/lib/mysql2xxxx.rb
CHANGED
@@ -3,20 +3,17 @@ unless RUBY_VERSION >= '1.9'
|
|
3
3
|
end
|
4
4
|
require 'active_support'
|
5
5
|
require 'active_support/version'
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
}.each do |active_support_3_requirement|
|
11
|
-
require active_support_3_requirement
|
12
|
-
end if ::ActiveSupport::VERSION::MAJOR == 3
|
6
|
+
require 'active_support/core_ext' if ::ActiveSupport::VERSION::MAJOR >= 3
|
7
|
+
|
8
|
+
# will use mysql2 as soon as :stream => true is supported
|
9
|
+
# https://github.com/brianmario/mysql2/pull/223
|
13
10
|
require 'mysql'
|
14
11
|
|
12
|
+
require 'mysql2xxxx/config'
|
13
|
+
require 'mysql2xxxx/writer'
|
14
|
+
require 'mysql2xxxx/writer/json'
|
15
|
+
require 'mysql2xxxx/writer/csv'
|
16
|
+
require 'mysql2xxxx/writer/xml'
|
17
|
+
|
15
18
|
module Mysql2xxxx
|
16
|
-
autoload :JSON, 'mysql2xxxx/writer/json'
|
17
|
-
autoload :CSV, 'mysql2xxxx/writer/csv'
|
18
|
-
autoload :XML, 'mysql2xxxx/writer/xml'
|
19
|
-
autoload :Writer, 'mysql2xxxx/writer'
|
20
|
-
autoload :Properties, 'mysql2xxxx/properties'
|
21
|
-
autoload :Cli, 'mysql2xxxx/cli'
|
22
19
|
end
|
data/lib/mysql2xxxx/cli.rb
CHANGED
@@ -3,7 +3,7 @@ require 'mixlib/cli'
|
|
3
3
|
module Mysql2xxxx
|
4
4
|
class Cli
|
5
5
|
include ::Mixlib::CLI
|
6
|
-
%w{ user password host Port database
|
6
|
+
%w{ user password host Port database }.each do |o|
|
7
7
|
option o.downcase.to_sym,
|
8
8
|
:short => "-#{o[0,1]} #{o.upcase}",
|
9
9
|
:long => "--#{o.downcase}=#{o.upcase}",
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Mysql2xxxx
|
2
|
+
class Config
|
3
|
+
attr_reader :options
|
4
|
+
def initialize(options = {})
|
5
|
+
@options = options.symbolize_keys
|
6
|
+
end
|
7
|
+
|
8
|
+
def user
|
9
|
+
options[:user] || active_record_config.try(:[], :username)
|
10
|
+
end
|
11
|
+
|
12
|
+
def password
|
13
|
+
options[:password] || active_record_config.try(:[], :password)
|
14
|
+
end
|
15
|
+
|
16
|
+
def host
|
17
|
+
options[:host] || active_record_config.try(:[], :host)
|
18
|
+
end
|
19
|
+
|
20
|
+
def port
|
21
|
+
options[:port] || active_record_config.try(:[], :port)
|
22
|
+
end
|
23
|
+
|
24
|
+
def socket
|
25
|
+
options[:socket] || active_record_config.try(:[], :socket)
|
26
|
+
end
|
27
|
+
|
28
|
+
def database
|
29
|
+
options[:database] || active_record_connection.try(:current_database)
|
30
|
+
end
|
31
|
+
|
32
|
+
def execute
|
33
|
+
options[:execute]
|
34
|
+
end
|
35
|
+
|
36
|
+
# Whether to write \N instead of a blank string for NULL. This is helpful for mysqlimport.
|
37
|
+
#
|
38
|
+
# Only applies to CSV
|
39
|
+
def slash_n
|
40
|
+
options.fetch :slash_n, false
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def active_record_connection
|
46
|
+
if defined?(::ActiveRecord)
|
47
|
+
::ActiveRecord::Base.connection
|
48
|
+
end
|
49
|
+
rescue
|
50
|
+
# oh well
|
51
|
+
end
|
52
|
+
|
53
|
+
def active_record_config
|
54
|
+
if active_record_connection
|
55
|
+
active_record_connection.instance_variable_get :@config
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/mysql2xxxx/version.rb
CHANGED
data/lib/mysql2xxxx/writer.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
require 'stringio'
|
2
|
-
|
3
|
-
require 'ensure/encoding'
|
4
|
-
else
|
5
|
-
require 'iconv'
|
6
|
-
end
|
2
|
+
require 'iconv'
|
7
3
|
|
8
4
|
module Mysql2xxxx
|
9
5
|
class Writer
|
10
|
-
|
6
|
+
MYSQL_CHARSET = 'utf8'
|
7
|
+
ICONV_TO = 'UTF-8//TRANSLIT'
|
8
|
+
ICONV_FROM = 'UTF-8'
|
9
|
+
|
10
|
+
attr_reader :config
|
11
11
|
|
12
12
|
def initialize(options = {})
|
13
|
-
@
|
13
|
+
@config = Config.new options
|
14
14
|
end
|
15
15
|
|
16
16
|
def keys
|
@@ -19,7 +19,7 @@ module Mysql2xxxx
|
|
19
19
|
|
20
20
|
def last_statement
|
21
21
|
return @last_statement if @last_statement.is_a? ::String
|
22
|
-
statements =
|
22
|
+
statements = config.execute.split(';').select { |statement| statement.to_s.strip.length > 0 }
|
23
23
|
@last_statement = statements.pop
|
24
24
|
statements.each do |statement|
|
25
25
|
dbh.query statement
|
@@ -37,8 +37,8 @@ module Mysql2xxxx
|
|
37
37
|
def dbh
|
38
38
|
return @dbh if @dbh.is_a? ::Mysql
|
39
39
|
@dbh = ::Mysql.init
|
40
|
-
@dbh.options ::Mysql::SET_CHARSET_NAME,
|
41
|
-
@dbh.real_connect
|
40
|
+
@dbh.options ::Mysql::SET_CHARSET_NAME, MYSQL_CHARSET
|
41
|
+
@dbh.real_connect config.host, config.user, config.password, config.database, config.port, config.socket
|
42
42
|
# so that we can use_result instead of store_result
|
43
43
|
@dbh.query_with_result = false
|
44
44
|
@dbh
|
@@ -61,24 +61,16 @@ module Mysql2xxxx
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def recode_as_utf8(raw_str)
|
64
|
-
|
65
|
-
|
66
|
-
$stderr.puts "[mysql2xxxx] Raw - #{raw_str}" if ::ENV['MYSQL2XXXX_DEBUG'] == 'true'
|
67
|
-
recoded_str = raw_str.ensure_encoding 'UTF-8', :external_encoding => properties.encoding, :invalid_characters => :transcode
|
68
|
-
$stderr.puts "[mysql2xxxx] Recoded - #{recoded_str}" if ::ENV['MYSQL2XXXX_DEBUG'] == 'true'
|
69
|
-
recoded_str
|
70
|
-
else
|
71
|
-
$stderr.puts "[mysql2xxxx] Raw - #{raw_str}" if ::ENV['MYSQL2XXXX_DEBUG'] == 'true'
|
72
|
-
recoded_str = ::Iconv.conv('UTF-8//TRANSLIT', properties.encoding, raw_str.to_s + ' ')[0..-2]
|
73
|
-
$stderr.puts "[mysql2xxxx] Recoded - #{recoded_str}" if ::ENV['MYSQL2XXXX_DEBUG'] == 'true'
|
74
|
-
recoded_str
|
64
|
+
unless raw_str.nil?
|
65
|
+
[ iconv.iconv(raw_str), iconv.iconv(nil) ].join
|
75
66
|
end
|
76
67
|
end
|
77
68
|
|
78
69
|
def close
|
70
|
+
@dead = true
|
71
|
+
iconv.close
|
79
72
|
result.free
|
80
73
|
dbh.close
|
81
|
-
@dead = true
|
82
74
|
end
|
83
75
|
|
84
76
|
def to_s
|
@@ -94,10 +86,16 @@ module Mysql2xxxx
|
|
94
86
|
end
|
95
87
|
|
96
88
|
def to_path(path)
|
97
|
-
f = ::File.open(path, 'w')
|
89
|
+
f = ::RUBY_VERSION >= '1.9' ? ::File.open(path, 'w', :binmode => true) : ::File.open(path, 'w')
|
98
90
|
to_file f
|
99
91
|
f.close
|
100
92
|
nil
|
101
93
|
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def iconv
|
98
|
+
@iconv ||= ::Iconv.new(ICONV_TO, ICONV_FROM)
|
99
|
+
end
|
102
100
|
end
|
103
101
|
end
|
@@ -6,10 +6,22 @@ end
|
|
6
6
|
|
7
7
|
module Mysql2xxxx
|
8
8
|
class CSV < Writer
|
9
|
+
SLASH_N = '\N'.freeze
|
9
10
|
def to_file(f)
|
10
|
-
|
11
|
+
slash_n = config.slash_n
|
12
|
+
|
13
|
+
if slash_n
|
14
|
+
f.write keys.map { |v| v.nil? ? SLASH_N : v }.to_csv
|
15
|
+
else
|
16
|
+
f.write keys.to_csv
|
17
|
+
end
|
18
|
+
|
11
19
|
stream_arrays do |ary|
|
12
|
-
|
20
|
+
if slash_n
|
21
|
+
f.write ary.map { |v| v.nil? ? SLASH_N : v }.to_csv
|
22
|
+
else
|
23
|
+
f.write ary.to_csv
|
24
|
+
end
|
13
25
|
end
|
14
26
|
nil
|
15
27
|
end
|
@@ -1,8 +1,4 @@
|
|
1
|
-
|
2
|
-
active_support/json/encoding
|
3
|
-
}.each do |active_support_3_requirement|
|
4
|
-
require active_support_3_requirement
|
5
|
-
end if ::ActiveSupport::VERSION::MAJOR == 3
|
1
|
+
require 'json'
|
6
2
|
|
7
3
|
module Mysql2xxxx
|
8
4
|
class JSON < Writer
|
@@ -15,7 +11,7 @@ module Mysql2xxxx
|
|
15
11
|
else
|
16
12
|
f.write ','
|
17
13
|
end
|
18
|
-
f.write hsh
|
14
|
+
f.write ::JSON.generate(hsh)
|
19
15
|
end
|
20
16
|
f.write ']'
|
21
17
|
nil
|
@@ -9,7 +9,7 @@ module Mysql2xxxx
|
|
9
9
|
# i tried to use builder, but the String#to_xs nonsense got in the way
|
10
10
|
def to_file(f)
|
11
11
|
f.write %{<?xml version="1.0" encoding="utf-8" ?>}
|
12
|
-
f.write %{<resultset statement="#{
|
12
|
+
f.write %{<resultset statement="#{config.execute.to_xs}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">}
|
13
13
|
stream_arrays do |ary|
|
14
14
|
f.write %{<row>}
|
15
15
|
ary.each_with_index do |v, i|
|
data/mysql2xxxx.gemspec
CHANGED
@@ -24,8 +24,9 @@ Gem::Specification.new do |s|
|
|
24
24
|
s.add_dependency 'mixlib-cli'
|
25
25
|
s.add_dependency 'fast_xs'
|
26
26
|
s.add_dependency 'fastercsv'
|
27
|
-
s.add_dependency '
|
27
|
+
s.add_dependency 'json'
|
28
28
|
|
29
|
+
s.add_development_dependency 'rake'
|
29
30
|
s.add_development_dependency 'activerecord'
|
30
31
|
s.add_development_dependency 'shell-executer'
|
31
32
|
s.add_development_dependency 'posix-spawn'
|
data/test/test_mysql2xxxx.rb
CHANGED
@@ -6,7 +6,7 @@ class TestMysql2xxxx < Test::Unit::TestCase
|
|
6
6
|
a = Mysql2xxxx::JSON.new @options
|
7
7
|
str = a.to_s
|
8
8
|
assert str.include?('Acura')
|
9
|
-
assert str.include?(
|
9
|
+
assert str.include?('Citroën')
|
10
10
|
assert !str.include?('DaimlerChrysler')
|
11
11
|
end
|
12
12
|
|
@@ -25,4 +25,11 @@ class TestMysql2xxxx < Test::Unit::TestCase
|
|
25
25
|
assert str.include?('Citroën')
|
26
26
|
assert !str.include?('DaimlerChrysler')
|
27
27
|
end
|
28
|
+
|
29
|
+
def test_4_slash_n_for_nulls
|
30
|
+
a = Mysql2xxxx::CSV.new @options
|
31
|
+
assert a.to_s.include?(',,')
|
32
|
+
b = Mysql2xxxx::CSV.new @options.merge(:slash_n => true)
|
33
|
+
assert b.to_s.include?(',\N,')
|
34
|
+
end
|
28
35
|
end
|
metadata
CHANGED
@@ -1,140 +1,148 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: mysql2xxxx
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.1.1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Seamus Abshere
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-01-16 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
17
15
|
name: activesupport
|
18
|
-
|
19
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &2154830840 !ruby/object:Gem::Requirement
|
20
17
|
none: false
|
21
|
-
requirements:
|
22
|
-
- -
|
23
|
-
- !ruby/object:Gem::Version
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
24
21
|
version: 2.3.10
|
25
22
|
type: :runtime
|
26
|
-
version_requirements: *id001
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: mysql
|
29
23
|
prerelease: false
|
30
|
-
|
24
|
+
version_requirements: *2154830840
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: mysql
|
27
|
+
requirement: &2154830240 !ruby/object:Gem::Requirement
|
31
28
|
none: false
|
32
|
-
requirements:
|
33
|
-
- -
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version:
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
36
33
|
type: :runtime
|
37
|
-
version_requirements: *id002
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: mixlib-cli
|
40
34
|
prerelease: false
|
41
|
-
|
35
|
+
version_requirements: *2154830240
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: mixlib-cli
|
38
|
+
requirement: &2154829640 !ruby/object:Gem::Requirement
|
42
39
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version:
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
47
44
|
type: :runtime
|
48
|
-
version_requirements: *id003
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: fast_xs
|
51
45
|
prerelease: false
|
52
|
-
|
46
|
+
version_requirements: *2154829640
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: fast_xs
|
49
|
+
requirement: &2154828940 !ruby/object:Gem::Requirement
|
53
50
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version:
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
58
55
|
type: :runtime
|
59
|
-
version_requirements: *id004
|
60
|
-
- !ruby/object:Gem::Dependency
|
61
|
-
name: fastercsv
|
62
56
|
prerelease: false
|
63
|
-
|
57
|
+
version_requirements: *2154828940
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: fastercsv
|
60
|
+
requirement: &2154828140 !ruby/object:Gem::Requirement
|
64
61
|
none: false
|
65
|
-
requirements:
|
66
|
-
- -
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version:
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
69
66
|
type: :runtime
|
70
|
-
version_requirements: *id005
|
71
|
-
- !ruby/object:Gem::Dependency
|
72
|
-
name: ensure-encoding
|
73
67
|
prerelease: false
|
74
|
-
|
68
|
+
version_requirements: *2154828140
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: json
|
71
|
+
requirement: &2154821260 !ruby/object:Gem::Requirement
|
75
72
|
none: false
|
76
|
-
requirements:
|
77
|
-
- -
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
version:
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
80
77
|
type: :runtime
|
81
|
-
version_requirements: *id006
|
82
|
-
- !ruby/object:Gem::Dependency
|
83
|
-
name: activerecord
|
84
78
|
prerelease: false
|
85
|
-
|
79
|
+
version_requirements: *2154821260
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: rake
|
82
|
+
requirement: &2154820760 !ruby/object:Gem::Requirement
|
86
83
|
none: false
|
87
|
-
requirements:
|
88
|
-
- -
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version:
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
91
88
|
type: :development
|
92
|
-
version_requirements: *id007
|
93
|
-
- !ruby/object:Gem::Dependency
|
94
|
-
name: shell-executer
|
95
89
|
prerelease: false
|
96
|
-
|
90
|
+
version_requirements: *2154820760
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: activerecord
|
93
|
+
requirement: &2154820120 !ruby/object:Gem::Requirement
|
97
94
|
none: false
|
98
|
-
requirements:
|
99
|
-
- -
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version:
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
102
99
|
type: :development
|
103
|
-
version_requirements: *id008
|
104
|
-
- !ruby/object:Gem::Dependency
|
105
|
-
name: posix-spawn
|
106
100
|
prerelease: false
|
107
|
-
|
101
|
+
version_requirements: *2154820120
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: shell-executer
|
104
|
+
requirement: &2154819500 !ruby/object:Gem::Requirement
|
108
105
|
none: false
|
109
|
-
requirements:
|
110
|
-
- -
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version:
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *2154819500
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: posix-spawn
|
115
|
+
requirement: &2154818880 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
113
121
|
type: :development
|
114
|
-
version_requirements: *id009
|
115
|
-
- !ruby/object:Gem::Dependency
|
116
|
-
name: ruby-debug19
|
117
122
|
prerelease: false
|
118
|
-
|
123
|
+
version_requirements: *2154818880
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: ruby-debug19
|
126
|
+
requirement: &2154818240 !ruby/object:Gem::Requirement
|
119
127
|
none: false
|
120
|
-
requirements:
|
121
|
-
- -
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
version:
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
124
132
|
type: :development
|
125
|
-
|
126
|
-
|
127
|
-
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: *2154818240
|
135
|
+
description: Gives you binaries like mysql2csv, mysql2json, and mysql2xml, and Ruby
|
136
|
+
classes to match.
|
137
|
+
email:
|
128
138
|
- seamus@abshere.net
|
129
|
-
executables:
|
139
|
+
executables:
|
130
140
|
- mysql2csv
|
131
141
|
- mysql2json
|
132
142
|
- mysql2xml
|
133
143
|
extensions: []
|
134
|
-
|
135
144
|
extra_rdoc_files: []
|
136
|
-
|
137
|
-
files:
|
145
|
+
files:
|
138
146
|
- .gemtest
|
139
147
|
- .gitignore
|
140
148
|
- Gemfile
|
@@ -153,7 +161,7 @@ files:
|
|
153
161
|
- bin/mysql2xml
|
154
162
|
- lib/mysql2xxxx.rb
|
155
163
|
- lib/mysql2xxxx/cli.rb
|
156
|
-
- lib/mysql2xxxx/
|
164
|
+
- lib/mysql2xxxx/config.rb
|
157
165
|
- lib/mysql2xxxx/version.rb
|
158
166
|
- lib/mysql2xxxx/writer.rb
|
159
167
|
- lib/mysql2xxxx/writer/csv.rb
|
@@ -169,35 +177,32 @@ files:
|
|
169
177
|
- test/test_multiline_sql.rb
|
170
178
|
- test/test_mysql2xxxx.rb
|
171
179
|
- test/test_well_formedness.rb
|
172
|
-
has_rdoc: true
|
173
180
|
homepage: https://github.com/seamusabshere/mysql2xxxx
|
174
181
|
licenses: []
|
175
|
-
|
176
182
|
post_install_message:
|
177
183
|
rdoc_options: []
|
178
|
-
|
179
|
-
require_paths:
|
184
|
+
require_paths:
|
180
185
|
- lib
|
181
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
186
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
182
187
|
none: false
|
183
|
-
requirements:
|
184
|
-
- -
|
185
|
-
- !ruby/object:Gem::Version
|
186
|
-
version:
|
187
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - ! '>='
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '0'
|
192
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
193
|
none: false
|
189
|
-
requirements:
|
190
|
-
- -
|
191
|
-
- !ruby/object:Gem::Version
|
192
|
-
version:
|
194
|
+
requirements:
|
195
|
+
- - ! '>='
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0'
|
193
198
|
requirements: []
|
194
|
-
|
195
199
|
rubyforge_project: mysql2xxxx
|
196
|
-
rubygems_version: 1.
|
200
|
+
rubygems_version: 1.8.10
|
197
201
|
signing_key:
|
198
202
|
specification_version: 3
|
199
|
-
summary: In a memory-sensitive way (but not fast), dump mysql tables to JSON, CSV,
|
200
|
-
|
203
|
+
summary: In a memory-sensitive way (but not fast), dump mysql tables to JSON, CSV,
|
204
|
+
XML.
|
205
|
+
test_files:
|
201
206
|
- test/fixtures/automobile_make_years.sql
|
202
207
|
- test/fixtures/automobile_makes.sql
|
203
208
|
- test/helper.rb
|
@@ -1,71 +0,0 @@
|
|
1
|
-
module Mysql2xxxx
|
2
|
-
class Properties
|
3
|
-
attr_reader :options
|
4
|
-
def initialize(options = {})
|
5
|
-
@options = options.dup
|
6
|
-
@options.stringify_keys!
|
7
|
-
end
|
8
|
-
|
9
|
-
def user
|
10
|
-
options['user'] || active_record_config.try(:[], :username)
|
11
|
-
end
|
12
|
-
|
13
|
-
def password
|
14
|
-
options['password'] || active_record_config.try(:[], :password)
|
15
|
-
end
|
16
|
-
|
17
|
-
def host
|
18
|
-
options['host'] || active_record_config.try(:[], :host)
|
19
|
-
end
|
20
|
-
|
21
|
-
# MySQL connection charset
|
22
|
-
#
|
23
|
-
# If you change this, you also have to change :encoding
|
24
|
-
#
|
25
|
-
# Default: utf8
|
26
|
-
def charset
|
27
|
-
options['charset'] || 'utf8'
|
28
|
-
end
|
29
|
-
|
30
|
-
# Encoding
|
31
|
-
#
|
32
|
-
# If you change this, you also have to change :charset
|
33
|
-
#
|
34
|
-
# Default: UTF-8
|
35
|
-
def encoding
|
36
|
-
options['encoding'] || 'UTF-8'
|
37
|
-
end
|
38
|
-
|
39
|
-
def port
|
40
|
-
options['port'] || active_record_config.try(:[], :port)
|
41
|
-
end
|
42
|
-
|
43
|
-
def socket
|
44
|
-
options['socket'] || active_record_config.try(:[], :socket)
|
45
|
-
end
|
46
|
-
|
47
|
-
def database
|
48
|
-
options['database'] || active_record_connection.try(:current_database)
|
49
|
-
end
|
50
|
-
|
51
|
-
def execute
|
52
|
-
options['execute']
|
53
|
-
end
|
54
|
-
|
55
|
-
private
|
56
|
-
|
57
|
-
def active_record_connection
|
58
|
-
if defined?(::ActiveRecord)
|
59
|
-
::ActiveRecord::Base.connection
|
60
|
-
end
|
61
|
-
rescue
|
62
|
-
# oh well
|
63
|
-
end
|
64
|
-
|
65
|
-
def active_record_config
|
66
|
-
if active_record_connection
|
67
|
-
active_record_connection.instance_variable_get :@config
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|