mysql2 0.2.19 → 0.2.20

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/lib/mysql2/client.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Mysql2
2
2
  class Client
3
- attr_reader :query_options
3
+ attr_reader :query_options, :read_timeout
4
4
  @@default_query_options = {
5
5
  :as => :hash, # the type of object you want each row back as; also supports :array (an array of values)
6
6
  :async => false, # don't wait for a result after sending the query, you'll have to monitor the socket yourself then eventually call Mysql2::Client#async_result
@@ -15,6 +15,7 @@ module Mysql2
15
15
 
16
16
  def initialize(opts = {})
17
17
  opts = Mysql2::Util.key_hash_as_symbols( opts )
18
+ @read_timeout = nil
18
19
  @query_options = @@default_query_options.dup
19
20
  @query_options.merge! opts
20
21
 
@@ -1,3 +1,3 @@
1
1
  module Mysql2
2
- VERSION = "0.2.19"
2
+ VERSION = "0.2.20"
3
3
  end
data/spec/em/em_spec.rb CHANGED
@@ -12,6 +12,7 @@ begin
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
 
@@ -19,6 +20,7 @@ begin
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
 
@@ -34,8 +36,9 @@ begin
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 |result|
38
- results << result.first
39
+ defer2.callback do |r|
40
+ results << r.first
41
+ client.close
39
42
  EM.stop_event_loop
40
43
  end
41
44
  end
@@ -51,6 +54,7 @@ begin
51
54
  client = Mysql2::EM::Client.new DatabaseCredentials['root']
52
55
  defer = client.query "SELECT sleep(0.1) as first_query"
53
56
  defer.callback do |result|
57
+ client.close
54
58
  raise 'some error'
55
59
  end
56
60
  defer.errback do |err|
@@ -2,10 +2,6 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe Mysql2::Client do
5
- before(:each) do
6
- @client = Mysql2::Client.new DatabaseCredentials['root']
7
- end
8
-
9
5
  it "should raise an exception upon connection failure" do
10
6
  lambda {
11
7
  # The odd local host IP address forces the mysql client library to
@@ -17,17 +13,17 @@ describe Mysql2::Client do
17
13
  if defined? Encoding
18
14
  it "should raise an exception on create for invalid encodings" do
19
15
  lambda {
20
- c = Mysql2::Client.new(DatabaseCredentials['root'].merge(:encoding => "fake"))
16
+ Mysql2::Client.new(DatabaseCredentials['root'].merge(:encoding => "fake"))
21
17
  }.should raise_error(Mysql2::Error)
22
18
  end
23
19
 
24
20
  it "should not raise an exception on create for a valid encoding" do
25
21
  lambda {
26
- c = Mysql2::Client.new(DatabaseCredentials['root'].merge(:encoding => "utf8"))
22
+ Mysql2::Client.new(DatabaseCredentials['root'].merge(:encoding => "utf8"))
27
23
  }.should_not raise_error(Mysql2::Error)
28
24
 
29
25
  lambda {
30
- c = Mysql2::Client.new(DatabaseCredentials['root'].merge(:encoding => "big5"))
26
+ Mysql2::Client.new(DatabaseCredentials['root'].merge(:encoding => "big5"))
31
27
  }.should_not raise_error(Mysql2::Error)
32
28
  end
33
29
  end
@@ -88,6 +84,8 @@ describe Mysql2::Client do
88
84
  results[1]['Value'].should_not be_nil
89
85
  results[1]['Value'].should be_kind_of(String)
90
86
  results[1]['Value'].should_not be_empty
87
+
88
+ ssl_client.close
91
89
  end
92
90
 
93
91
  it "should respond to #close" do
@@ -111,20 +109,16 @@ describe Mysql2::Client do
111
109
 
112
110
  context "#warning_count" do
113
111
  context "when no warnings" do
114
- before(:each) do
115
- @client.query('select 1')
116
- end
117
112
  it "should 0" do
113
+ @client.query('select 1')
118
114
  @client.warning_count.should == 0
119
115
  end
120
116
  end
121
117
  context "when has a warnings" do
122
- before(:each) do
118
+ it "should > 0" do
123
119
  # "the statement produces extra information that can be viewed by issuing a SHOW WARNINGS"
124
120
  # http://dev.mysql.com/doc/refman/5.0/en/explain-extended.html
125
121
  @client.query("explain extended select 1")
126
- end
127
- it "should > 0" do
128
122
  @client.warning_count.should > 0
129
123
  end
130
124
  end
@@ -136,32 +130,25 @@ describe Mysql2::Client do
136
130
 
137
131
  context "#query_info" do
138
132
  context "when no info present" do
139
- before(:each) do
140
- @client.query('select 1')
141
- end
142
133
  it "should 0" do
134
+ @client.query('select 1')
143
135
  @client.query_info.should be_empty
144
136
  @client.query_info_string.should be_nil
145
137
  end
146
138
  end
147
139
  context "when has some info" do
148
- before(:each) do
140
+ it "should retrieve it" do
149
141
  @client.query "USE test"
150
142
  @client.query "CREATE TABLE IF NOT EXISTS infoTest (`id` int(11) NOT NULL AUTO_INCREMENT, blah INT(11), PRIMARY KEY (`id`))"
151
- end
152
-
153
- after(:each) do
154
- @client.query "DROP TABLE infoTest"
155
- end
156
143
 
157
- before(:each) do
158
144
  # http://dev.mysql.com/doc/refman/5.0/en/mysql-info.html says
159
145
  # # Note that mysql_info() returns a non-NULL value for INSERT ... VALUES only for the multiple-row form of the statement (that is, only if multiple value lists are specified).
160
146
  @client.query("INSERT INTO infoTest (blah) VALUES (1234),(4535)")
161
- end
162
- it "should retrieve it" do
163
- @client.query_info.should == {:records => 2, :duplicates => 0, :warnings => 0}
164
- @client.query_info_string.should eq 'Records: 2 Duplicates: 0 Warnings: 0'
147
+
148
+ @client.query_info.should eql({:records => 2, :duplicates => 0, :warnings => 0})
149
+ @client.query_info_string.should eq('Records: 2 Duplicates: 0 Warnings: 0')
150
+
151
+ @client.query "DROP TABLE infoTest"
165
152
  end
166
153
  end
167
154
  end
@@ -186,7 +173,7 @@ describe Mysql2::Client do
186
173
 
187
174
  context "#query" do
188
175
  it "should let you query again if iterating is finished when streaming" do
189
- @client.query("SELECT 1 UNION SELECT 2", :stream => true, :cache_rows => false).each {}
176
+ @client.query("SELECT 1 UNION SELECT 2", :stream => true, :cache_rows => false).each.to_a
190
177
 
191
178
  expect {
192
179
  @client.query("SELECT 1 UNION SELECT 2", :stream => true, :cache_rows => false)
@@ -277,30 +264,32 @@ describe Mysql2::Client do
277
264
  }.should raise_error(Mysql2::Error)
278
265
  end
279
266
 
280
- # XXX this test is not deterministic (because Unix signal handling is not)
281
- # and may fail on a loaded system
282
- it "should run signal handlers while waiting for a response" do
283
- mark = {}
284
- trap(:USR1) { mark[:USR1] = Time.now }
285
- begin
286
- mark[:START] = Time.now
287
- pid = fork do
288
- sleep 1 # wait for client "SELECT sleep(2)" query to start
289
- Process.kill(:USR1, Process.ppid)
290
- sleep # wait for explicit kill to prevent GC disconnect
267
+ if !defined? Rubinius
268
+ # XXX this test is not deterministic (because Unix signal handling is not)
269
+ # and may fail on a loaded system
270
+ it "should run signal handlers while waiting for a response" do
271
+ mark = {}
272
+ trap(:USR1) { mark[:USR1] = Time.now }
273
+ begin
274
+ mark[:START] = Time.now
275
+ pid = fork do
276
+ sleep 1 # wait for client "SELECT sleep(2)" query to start
277
+ Process.kill(:USR1, Process.ppid)
278
+ sleep # wait for explicit kill to prevent GC disconnect
279
+ end
280
+ @client.query("SELECT sleep(2)")
281
+ mark[:END] = Time.now
282
+ mark.include?(:USR1).should be_true
283
+ (mark[:USR1] - mark[:START]).should >= 1
284
+ (mark[:USR1] - mark[:START]).should < 1.3
285
+ (mark[:END] - mark[:USR1]).should > 0.9
286
+ (mark[:END] - mark[:START]).should >= 2
287
+ (mark[:END] - mark[:START]).should < 2.3
288
+ Process.kill(:TERM, pid)
289
+ Process.waitpid2(pid)
290
+ ensure
291
+ trap(:USR1, 'DEFAULT')
291
292
  end
292
- @client.query("SELECT sleep(2)")
293
- mark[:END] = Time.now
294
- mark.include?(:USR1).should be_true
295
- (mark[:USR1] - mark[:START]).should >= 1
296
- (mark[:USR1] - mark[:START]).should < 1.3
297
- (mark[:END] - mark[:USR1]).should > 0.9
298
- (mark[:END] - mark[:START]).should >= 2
299
- (mark[:END] - mark[:START]).should < 2.3
300
- Process.kill(:TERM, pid)
301
- Process.waitpid2(pid)
302
- ensure
303
- trap(:USR1, 'DEFAULT')
304
293
  end
305
294
  end
306
295
 
@@ -419,12 +408,12 @@ describe Mysql2::Client do
419
408
  end
420
409
 
421
410
  it "returns multiple result sets" do
422
- @multi_client.query( "select 1 as 'set_1'; select 2 as 'set_2'").first.should == { 'set_1' => 1 }
411
+ @multi_client.query( "select 1 as 'set_1'; select 2 as 'set_2'").first.should eql({ 'set_1' => 1 })
423
412
 
424
- @multi_client.next_result.should == true
425
- @multi_client.store_result.first.should == { 'set_2' => 2 }
413
+ @multi_client.next_result.should be_true
414
+ @multi_client.store_result.first.should eql({ 'set_2' => 2 })
426
415
 
427
- @multi_client.next_result.should == false
416
+ @multi_client.next_result.should be_false
428
417
  end
429
418
 
430
419
  it "does not interfere with other statements" do
@@ -453,12 +442,12 @@ describe Mysql2::Client do
453
442
 
454
443
  it "#more_results? should work" do
455
444
  @multi_client.query( "select 1 as 'set_1'; select 2 as 'set_2'")
456
- @multi_client.more_results?.should == true
445
+ @multi_client.more_results?.should be_true
457
446
 
458
447
  @multi_client.next_result
459
448
  @multi_client.store_result
460
449
 
461
- @multi_client.more_results?.should == false
450
+ @multi_client.more_results?.should be_false
462
451
  end
463
452
  end
464
453
  end
@@ -621,11 +610,11 @@ describe Mysql2::Client do
621
610
 
622
611
  it "should raise a Mysql2::Error exception upon connection failure" do
623
612
  lambda {
624
- bad_client = Mysql2::Client.new :host => "localhost", :username => 'asdfasdf8d2h', :password => 'asdfasdfw42'
613
+ Mysql2::Client.new :host => "localhost", :username => 'asdfasdf8d2h', :password => 'asdfasdfw42'
625
614
  }.should raise_error(Mysql2::Error)
626
615
 
627
616
  lambda {
628
- good_client = Mysql2::Client.new DatabaseCredentials['root']
617
+ Mysql2::Client.new DatabaseCredentials['root']
629
618
  }.should_not raise_error(Mysql2::Error)
630
619
  end
631
620
 
@@ -3,18 +3,22 @@ require 'spec_helper'
3
3
 
4
4
  describe Mysql2::Error do
5
5
  before(:each) do
6
- @client = Mysql2::Client.new(DatabaseCredentials['root'].merge(:encoding => "utf8"))
7
6
  begin
8
- @client.query("HAHAHA")
7
+ @err_client = Mysql2::Client.new(DatabaseCredentials['root'].merge(:encoding => "utf8"))
8
+ @err_client.query("HAHAHA")
9
9
  rescue Mysql2::Error => e
10
10
  @error = e
11
+ ensure
12
+ @err_client.close
11
13
  end
12
14
 
13
- @client2 = Mysql2::Client.new(DatabaseCredentials['root'].merge(:encoding => "big5"))
14
15
  begin
15
- @client2.query("HAHAHA")
16
+ @err_client2 = Mysql2::Client.new(DatabaseCredentials['root'].merge(:encoding => "big5"))
17
+ @err_client2.query("HAHAHA")
16
18
  rescue Mysql2::Error => e
17
19
  @error2 = e
20
+ ensure
21
+ @err_client2.close
18
22
  end
19
23
  end
20
24
 
@@ -38,8 +42,8 @@ describe Mysql2::Error do
38
42
  unless RUBY_VERSION =~ /1.8/
39
43
  it "#message encoding should match the connection's encoding, or Encoding.default_internal if set" do
40
44
  if Encoding.default_internal.nil?
41
- @error.message.encoding.should eql(@client.encoding)
42
- @error2.message.encoding.should eql(@client2.encoding)
45
+ @error.message.encoding.should eql(@err_client.encoding)
46
+ @error2.message.encoding.should eql(@err_client2.encoding)
43
47
  else
44
48
  @error.message.encoding.should eql(Encoding.default_internal)
45
49
  @error2.message.encoding.should eql(Encoding.default_internal)
@@ -48,8 +52,8 @@ describe Mysql2::Error do
48
52
 
49
53
  it "#error encoding should match the connection's encoding, or Encoding.default_internal if set" do
50
54
  if Encoding.default_internal.nil?
51
- @error.error.encoding.should eql(@client.encoding)
52
- @error2.error.encoding.should eql(@client2.encoding)
55
+ @error.error.encoding.should eql(@err_client.encoding)
56
+ @error2.error.encoding.should eql(@err_client2.encoding)
53
57
  else
54
58
  @error.error.encoding.should eql(Encoding.default_internal)
55
59
  @error2.error.encoding.should eql(Encoding.default_internal)
@@ -58,8 +62,8 @@ describe Mysql2::Error do
58
62
 
59
63
  it "#sql_state encoding should match the connection's encoding, or Encoding.default_internal if set" do
60
64
  if Encoding.default_internal.nil?
61
- @error.sql_state.encoding.should eql(@client.encoding)
62
- @error2.sql_state.encoding.should eql(@client2.encoding)
65
+ @error.sql_state.encoding.should eql(@err_client.encoding)
66
+ @error2.sql_state.encoding.should eql(@err_client2.encoding)
63
67
  else
64
68
  @error.sql_state.encoding.should eql(Encoding.default_internal)
65
69
  @error2.sql_state.encoding.should eql(Encoding.default_internal)
@@ -2,10 +2,6 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe Mysql2::Result do
5
- before(:each) do
6
- @client = Mysql2::Client.new DatabaseCredentials['root']
7
- end
8
-
9
5
  before(:each) do
10
6
  @result = @client.query "SELECT 1"
11
7
  end
@@ -14,7 +10,7 @@ describe Mysql2::Result do
14
10
  result = @client.query('SELECT 1')
15
11
 
16
12
  result.count.should eql(1)
17
- result.each { |r| }
13
+ result.each.to_a
18
14
  result.count.should eql(1)
19
15
  end
20
16
 
@@ -35,7 +31,7 @@ describe Mysql2::Result do
35
31
  @client.query "USE test"
36
32
  result = @client.query("SELECT * FROM mysql2_test WHERE null_test IS NOT NULL", :stream => true, :cache_rows => false)
37
33
  result.count.should eql(0)
38
- result.each {|r| }
34
+ result.each.to_a
39
35
  result.count.should eql(0)
40
36
  end
41
37
 
@@ -117,8 +113,8 @@ describe Mysql2::Result do
117
113
  result = @client.query "SELECT 1 UNION SELECT 2", :stream => true, :cache_rows => false
118
114
 
119
115
  expect {
120
- result.each {}
121
- result.each {}
116
+ result.each.to_a
117
+ result.each.to_a
122
118
  }.to raise_exception(Mysql2::Error)
123
119
  end
124
120
  end
@@ -148,11 +144,11 @@ describe Mysql2::Result do
148
144
  it "should return nil values for NULL and strings for everything else when :cast is false" do
149
145
  result = @client.query('SELECT null_test, tiny_int_test, bool_cast_test, int_test, date_test, enum_test FROM mysql2_test WHERE bool_cast_test = 1 LIMIT 1', :cast => false).first
150
146
  result["null_test"].should be_nil
151
- result["tiny_int_test"].should == "1"
152
- result["bool_cast_test"].should == "1"
153
- result["int_test"].should == "10"
154
- result["date_test"].should == "2010-04-04"
155
- result["enum_test"].should == "val1"
147
+ result["tiny_int_test"].should eql("1")
148
+ result["bool_cast_test"].should eql("1")
149
+ result["int_test"].should eql("10")
150
+ result["date_test"].should eql("2010-04-04")
151
+ result["enum_test"].should eql("val1")
156
152
  end
157
153
 
158
154
  it "should return nil for a NULL value" do
@@ -330,6 +326,7 @@ describe Mysql2::Result do
330
326
  client2.query "USE test"
331
327
  result = client2.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
332
328
  result['enum_test'].encoding.should eql(Encoding.find('us-ascii'))
329
+ client2.close
333
330
  end
334
331
 
335
332
  it "should use Encoding.default_internal" do
@@ -359,6 +356,7 @@ describe Mysql2::Result do
359
356
  client2.query "USE test"
360
357
  result = client2.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
361
358
  result['set_test'].encoding.should eql(Encoding.find('us-ascii'))
359
+ client2.close
362
360
  end
363
361
 
364
362
  it "should use Encoding.default_internal" do
@@ -441,6 +439,7 @@ describe Mysql2::Result do
441
439
  client2.query "USE test"
442
440
  result = client2.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
443
441
  result[field].encoding.should eql(Encoding.find('us-ascii'))
442
+ client2.close
444
443
  end
445
444
 
446
445
  it "should use Encoding.default_internal" do
data/spec/spec_helper.rb CHANGED
@@ -7,6 +7,14 @@ require 'yaml'
7
7
  DatabaseCredentials = YAML.load_file('spec/configuration.yml')
8
8
 
9
9
  RSpec.configure do |config|
10
+ config.before :each do
11
+ @client = Mysql2::Client.new DatabaseCredentials['root']
12
+ end
13
+
14
+ config.after :each do
15
+ @client.close
16
+ end
17
+
10
18
  config.before(:all) do
11
19
  client = Mysql2::Client.new DatabaseCredentials['root']
12
20
  client.query %[
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mysql2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.19
4
+ version: 0.2.20
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-15 00:00:00.000000000 Z
12
+ date: 2013-07-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: eventmachine