mysql2 0.3.8 → 0.4.10
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +1 -220
- data/LICENSE +21 -0
- data/README.md +370 -79
- data/examples/eventmachine.rb +1 -1
- data/examples/threaded.rb +4 -6
- data/ext/mysql2/client.c +1017 -305
- data/ext/mysql2/client.h +35 -11
- data/ext/mysql2/extconf.rb +222 -34
- data/ext/mysql2/infile.c +122 -0
- data/ext/mysql2/infile.h +1 -0
- data/ext/mysql2/mysql2_ext.c +1 -0
- data/ext/mysql2/mysql2_ext.h +12 -14
- data/ext/mysql2/mysql_enc_name_to_ruby.h +168 -0
- data/ext/mysql2/mysql_enc_to_ruby.h +249 -0
- data/ext/mysql2/result.c +664 -166
- data/ext/mysql2/result.h +16 -6
- data/ext/mysql2/statement.c +595 -0
- data/ext/mysql2/statement.h +19 -0
- data/lib/mysql2/client.rb +118 -211
- data/lib/mysql2/console.rb +5 -0
- data/lib/mysql2/em.rb +23 -5
- data/lib/mysql2/error.rb +62 -6
- data/lib/mysql2/field.rb +3 -0
- data/lib/mysql2/statement.rb +17 -0
- data/lib/mysql2/version.rb +1 -1
- data/lib/mysql2.rb +66 -3
- data/spec/configuration.yml.example +11 -0
- data/spec/em/em_spec.rb +96 -10
- data/spec/my.cnf.example +9 -0
- data/spec/mysql2/client_spec.rb +779 -205
- data/spec/mysql2/error_spec.rb +58 -45
- data/spec/mysql2/result_spec.rb +316 -159
- data/spec/mysql2/statement_spec.rb +776 -0
- data/spec/spec_helper.rb +97 -56
- data/spec/ssl/ca-cert.pem +17 -0
- data/spec/ssl/ca-key.pem +27 -0
- data/spec/ssl/ca.cnf +22 -0
- data/spec/ssl/cert.cnf +22 -0
- data/spec/ssl/client-cert.pem +17 -0
- data/spec/ssl/client-key.pem +27 -0
- data/spec/ssl/client-req.pem +15 -0
- data/spec/ssl/gen_certs.sh +48 -0
- data/spec/ssl/pkcs8-client-key.pem +28 -0
- data/spec/ssl/pkcs8-server-key.pem +28 -0
- data/spec/ssl/server-cert.pem +17 -0
- data/spec/ssl/server-key.pem +27 -0
- data/spec/ssl/server-req.pem +15 -0
- data/spec/test_data +1 -0
- data/support/5072E1F5.asc +432 -0
- data/support/libmysql.def +219 -0
- data/support/mysql_enc_to_ruby.rb +81 -0
- data/support/ruby_enc_to_mysql.rb +61 -0
- metadata +77 -196
- data/.gitignore +0 -12
- data/.rspec +0 -3
- data/.rvmrc +0 -1
- data/.travis.yml +0 -7
- data/Gemfile +0 -3
- data/MIT-LICENSE +0 -20
- data/Rakefile +0 -5
- data/benchmark/active_record.rb +0 -51
- data/benchmark/active_record_threaded.rb +0 -42
- data/benchmark/allocations.rb +0 -33
- data/benchmark/escape.rb +0 -36
- data/benchmark/query_with_mysql_casting.rb +0 -80
- data/benchmark/query_without_mysql_casting.rb +0 -56
- data/benchmark/sequel.rb +0 -37
- data/benchmark/setup_db.rb +0 -119
- data/benchmark/threaded.rb +0 -44
- data/mysql2.gemspec +0 -29
- data/tasks/benchmarks.rake +0 -20
- data/tasks/compile.rake +0 -71
- data/tasks/rspec.rake +0 -16
- data/tasks/vendor_mysql.rake +0 -40
data/spec/em/em_spec.rb
CHANGED
@@ -4,45 +4,131 @@ begin
|
|
4
4
|
require 'eventmachine'
|
5
5
|
require 'mysql2/em'
|
6
6
|
|
7
|
-
describe Mysql2::EM::Client do
|
7
|
+
RSpec.describe Mysql2::EM::Client do
|
8
8
|
it "should support async queries" do
|
9
9
|
results = []
|
10
10
|
EM.run do
|
11
|
-
client1 = Mysql2::EM::Client.new
|
11
|
+
client1 = Mysql2::EM::Client.new DatabaseCredentials['root']
|
12
12
|
defer1 = client1.query "SELECT sleep(0.1) as first_query"
|
13
13
|
defer1.callback do |result|
|
14
14
|
results << result.first
|
15
|
+
client1.close
|
15
16
|
EM.stop_event_loop
|
16
17
|
end
|
17
18
|
|
18
|
-
client2 = Mysql2::EM::Client.new
|
19
|
+
client2 = Mysql2::EM::Client.new DatabaseCredentials['root']
|
19
20
|
defer2 = client2.query "SELECT sleep(0.025) second_query"
|
20
21
|
defer2.callback do |result|
|
21
22
|
results << result.first
|
23
|
+
client2.close
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
25
|
-
results[0].keys.
|
26
|
-
results[1].keys.
|
27
|
+
expect(results[0].keys).to include("second_query")
|
28
|
+
expect(results[1].keys).to include("first_query")
|
27
29
|
end
|
28
30
|
|
29
31
|
it "should support queries in callbacks" do
|
30
32
|
results = []
|
31
33
|
EM.run do
|
32
|
-
client = Mysql2::EM::Client.new
|
34
|
+
client = Mysql2::EM::Client.new DatabaseCredentials['root']
|
33
35
|
defer1 = client.query "SELECT sleep(0.025) as first_query"
|
34
36
|
defer1.callback do |result|
|
35
37
|
results << result.first
|
36
38
|
defer2 = client.query "SELECT sleep(0.025) as second_query"
|
37
|
-
defer2.callback do |
|
38
|
-
results <<
|
39
|
+
defer2.callback do |r|
|
40
|
+
results << r.first
|
41
|
+
client.close
|
39
42
|
EM.stop_event_loop
|
40
43
|
end
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
44
|
-
results[0].keys.
|
45
|
-
results[1].keys.
|
47
|
+
expect(results[0].keys).to include("first_query")
|
48
|
+
expect(results[1].keys).to include("second_query")
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should not swallow exceptions raised in callbacks" do
|
52
|
+
expect {
|
53
|
+
EM.run do
|
54
|
+
client = Mysql2::EM::Client.new DatabaseCredentials['root']
|
55
|
+
defer = client.query "SELECT sleep(0.1) as first_query"
|
56
|
+
defer.callback do
|
57
|
+
client.close
|
58
|
+
fail 'some error'
|
59
|
+
end
|
60
|
+
defer.errback do
|
61
|
+
# This _shouldn't_ be run, but it needed to prevent the specs from
|
62
|
+
# freezing if this test fails.
|
63
|
+
EM.stop_event_loop
|
64
|
+
end
|
65
|
+
end
|
66
|
+
}.to raise_error('some error')
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'when an exception is raised by the client' do
|
70
|
+
let(:client) { Mysql2::EM::Client.new DatabaseCredentials['root'] }
|
71
|
+
let(:error) { StandardError.new('some error') }
|
72
|
+
before { allow(client).to receive(:async_result).and_raise(error) }
|
73
|
+
after { client.close }
|
74
|
+
|
75
|
+
it "should swallow exceptions raised in by the client" do
|
76
|
+
errors = []
|
77
|
+
EM.run do
|
78
|
+
defer = client.query "SELECT sleep(0.1) as first_query"
|
79
|
+
defer.callback do
|
80
|
+
# This _shouldn't_ be run, but it is needed to prevent the specs from
|
81
|
+
# freezing if this test fails.
|
82
|
+
EM.stop_event_loop
|
83
|
+
end
|
84
|
+
defer.errback do |err|
|
85
|
+
errors << err
|
86
|
+
EM.stop_event_loop
|
87
|
+
end
|
88
|
+
end
|
89
|
+
expect(errors).to eq([error])
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should fail the deferrable" do
|
93
|
+
callbacks_run = []
|
94
|
+
EM.run do
|
95
|
+
defer = client.query "SELECT sleep(0.025) as first_query"
|
96
|
+
EM.add_timer(0.1) do
|
97
|
+
defer.callback do
|
98
|
+
callbacks_run << :callback
|
99
|
+
# This _shouldn't_ be run, but it is needed to prevent the specs from
|
100
|
+
# freezing if this test fails.
|
101
|
+
EM.stop_event_loop
|
102
|
+
end
|
103
|
+
defer.errback do
|
104
|
+
callbacks_run << :errback
|
105
|
+
EM.stop_event_loop
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
expect(callbacks_run).to eq([:errback])
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should not raise error when closing client with no query running" do
|
114
|
+
callbacks_run = []
|
115
|
+
EM.run do
|
116
|
+
client = Mysql2::EM::Client.new DatabaseCredentials['root']
|
117
|
+
defer = client.query("select sleep(0.025)")
|
118
|
+
defer.callback do
|
119
|
+
callbacks_run << :callback
|
120
|
+
end
|
121
|
+
defer.errback do
|
122
|
+
callbacks_run << :errback
|
123
|
+
end
|
124
|
+
EM.add_timer(0.1) do
|
125
|
+
expect(callbacks_run).to eq([:callback])
|
126
|
+
expect {
|
127
|
+
client.close
|
128
|
+
}.not_to raise_error
|
129
|
+
EM.stop_event_loop
|
130
|
+
end
|
131
|
+
end
|
46
132
|
end
|
47
133
|
end
|
48
134
|
rescue LoadError
|