mysql2xxxx 0.0.4 → 0.1.0
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/.gemtest +0 -0
- data/README.rdoc +3 -3
- data/lib/mysql2xxxx/cli.rb +1 -1
- data/lib/mysql2xxxx/properties.rb +12 -4
- data/lib/mysql2xxxx/version.rb +1 -1
- data/lib/mysql2xxxx/writer.rb +23 -2
- data/lib/mysql2xxxx/writer/json.rb +0 -5
- data/mysql2xxxx.gemspec +2 -3
- data/test/test_mysql2xxxx.rb +1 -1
- metadata +31 -8
data/.gemtest
ADDED
File without changes
|
data/README.rdoc
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
==Binaries
|
4
4
|
|
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"
|
5
|
+
mysql2csv --user=dbuser --password=dbpassword --database=dbname [--charset=utf8] [--encoding=UTF-8] --execute="select * from automobile_makes"
|
6
|
+
mysql2json --user=dbuser --password=dbpassword --database=dbname [--charset=utf8] [--encoding=UTF-8] --execute="select * from automobile_makes"
|
7
|
+
mysql2xml --user=dbuser --password=dbpassword --database=dbname [--charset=utf8] [--encoding=UTF-8] --execute="select * from automobile_makes"
|
8
8
|
|
9
9
|
To see all options
|
10
10
|
|
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 }.each do |o|
|
6
|
+
%w{ user password host Port database charset encoding }.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}",
|
@@ -18,14 +18,22 @@ module Mysql2xxxx
|
|
18
18
|
options['host'] || active_record_config.try(:[], :host) || '127.0.0.1'
|
19
19
|
end
|
20
20
|
|
21
|
-
#
|
21
|
+
# MySQL connection charset
|
22
|
+
#
|
23
|
+
# If you change this, you also have to change :encoding
|
24
|
+
#
|
25
|
+
# Default: utf8
|
22
26
|
def charset
|
23
|
-
'utf8'
|
27
|
+
options['charset'] || 'utf8'
|
24
28
|
end
|
25
29
|
|
26
|
-
#
|
30
|
+
# Encoding
|
31
|
+
#
|
32
|
+
# If you change this, you also have to change :charset
|
33
|
+
#
|
34
|
+
# Default: UTF-8
|
27
35
|
def encoding
|
28
|
-
'UTF-8'
|
36
|
+
options['encoding'] || 'UTF-8'
|
29
37
|
end
|
30
38
|
|
31
39
|
def port
|
data/lib/mysql2xxxx/version.rb
CHANGED
data/lib/mysql2xxxx/writer.rb
CHANGED
@@ -1,4 +1,10 @@
|
|
1
1
|
require 'stringio'
|
2
|
+
if ::RUBY_VERSION >= '1.9'
|
3
|
+
require 'ensure/encoding'
|
4
|
+
else
|
5
|
+
require 'iconv'
|
6
|
+
end
|
7
|
+
|
2
8
|
module Mysql2xxxx
|
3
9
|
class Writer
|
4
10
|
attr_reader :properties
|
@@ -41,7 +47,7 @@ module Mysql2xxxx
|
|
41
47
|
def stream_arrays
|
42
48
|
raise "dead connection" if @dead
|
43
49
|
while ary = result.fetch_row do
|
44
|
-
yield ary
|
50
|
+
yield ary.map { |v| recode_as_utf8 v }
|
45
51
|
end
|
46
52
|
close
|
47
53
|
end
|
@@ -49,11 +55,26 @@ module Mysql2xxxx
|
|
49
55
|
def stream_hashes
|
50
56
|
raise "dead connection" if @dead
|
51
57
|
while hsh = result.fetch_hash do
|
52
|
-
yield hsh
|
58
|
+
yield hsh.inject({}) { |memo, (k, v)| memo[recode_as_utf8(k)] = recode_as_utf8(v); memo }
|
53
59
|
end
|
54
60
|
close
|
55
61
|
end
|
56
62
|
|
63
|
+
def recode_as_utf8(raw_str)
|
64
|
+
return if raw_str.nil?
|
65
|
+
if ::RUBY_VERSION >= '1.9'
|
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
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
57
78
|
def close
|
58
79
|
result.free
|
59
80
|
dbh.close
|
@@ -15,11 +15,6 @@ module Mysql2xxxx
|
|
15
15
|
else
|
16
16
|
f.write ','
|
17
17
|
end
|
18
|
-
if RUBY_VERSION >= '1.9'
|
19
|
-
# the mysql gem isn't encoding aware, so even if mysql returns proper utf-8, ruby 1.9 treats it as ASCII-8BIT
|
20
|
-
# here we force ruby to treat these strings as utf-8 without any further conversion
|
21
|
-
hsh.each { |k, v| hsh[k] = v.nil? ? nil : v.force_encoding(properties.encoding) }
|
22
|
-
end
|
23
18
|
f.write hsh.to_json
|
24
19
|
end
|
25
20
|
f.write ']'
|
data/mysql2xxxx.gemspec
CHANGED
@@ -23,9 +23,8 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency 'mysql'
|
24
24
|
s.add_dependency 'mixlib-cli'
|
25
25
|
s.add_dependency 'fast_xs'
|
26
|
-
|
27
|
-
|
28
|
-
end
|
26
|
+
s.add_dependency 'fastercsv'
|
27
|
+
s.add_dependency 'ensure-encoding'
|
29
28
|
|
30
29
|
s.add_development_dependency 'activerecord'
|
31
30
|
s.add_development_dependency 'shell-executer'
|
data/test/test_mysql2xxxx.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: mysql2xxxx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0
|
5
|
+
version: 0.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Seamus Abshere
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-05-08 00:00:00 -05:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
type: :runtime
|
59
59
|
version_requirements: *id004
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
|
-
name:
|
61
|
+
name: fastercsv
|
62
62
|
prerelease: false
|
63
63
|
requirement: &id005 !ruby/object:Gem::Requirement
|
64
64
|
none: false
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: "0"
|
69
|
-
type: :
|
69
|
+
type: :runtime
|
70
70
|
version_requirements: *id005
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
72
|
+
name: ensure-encoding
|
73
73
|
prerelease: false
|
74
74
|
requirement: &id006 !ruby/object:Gem::Requirement
|
75
75
|
none: false
|
@@ -77,10 +77,10 @@ dependencies:
|
|
77
77
|
- - ">="
|
78
78
|
- !ruby/object:Gem::Version
|
79
79
|
version: "0"
|
80
|
-
type: :
|
80
|
+
type: :runtime
|
81
81
|
version_requirements: *id006
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
|
-
name:
|
83
|
+
name: activerecord
|
84
84
|
prerelease: false
|
85
85
|
requirement: &id007 !ruby/object:Gem::Requirement
|
86
86
|
none: false
|
@@ -91,7 +91,7 @@ dependencies:
|
|
91
91
|
type: :development
|
92
92
|
version_requirements: *id007
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
|
-
name:
|
94
|
+
name: shell-executer
|
95
95
|
prerelease: false
|
96
96
|
requirement: &id008 !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
@@ -101,6 +101,28 @@ dependencies:
|
|
101
101
|
version: "0"
|
102
102
|
type: :development
|
103
103
|
version_requirements: *id008
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: posix-spawn
|
106
|
+
prerelease: false
|
107
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: "0"
|
113
|
+
type: :development
|
114
|
+
version_requirements: *id009
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: ruby-debug19
|
117
|
+
prerelease: false
|
118
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: "0"
|
124
|
+
type: :development
|
125
|
+
version_requirements: *id010
|
104
126
|
description: Gives you binaries like mysql2csv, mysql2json, and mysql2xml, and Ruby classes to match.
|
105
127
|
email:
|
106
128
|
- seamus@abshere.net
|
@@ -113,6 +135,7 @@ extensions: []
|
|
113
135
|
extra_rdoc_files: []
|
114
136
|
|
115
137
|
files:
|
138
|
+
- .gemtest
|
116
139
|
- .gitignore
|
117
140
|
- Gemfile
|
118
141
|
- README.rdoc
|