mysql2 0.3.18 → 0.4.7

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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -0
  3. data/LICENSE +21 -0
  4. data/README.md +135 -55
  5. data/examples/eventmachine.rb +1 -1
  6. data/examples/threaded.rb +4 -6
  7. data/ext/mysql2/client.c +368 -197
  8. data/ext/mysql2/client.h +13 -3
  9. data/ext/mysql2/extconf.rb +118 -35
  10. data/ext/mysql2/infile.c +2 -2
  11. data/ext/mysql2/mysql2_ext.c +1 -0
  12. data/ext/mysql2/mysql2_ext.h +7 -6
  13. data/ext/mysql2/mysql_enc_name_to_ruby.h +2 -2
  14. data/ext/mysql2/mysql_enc_to_ruby.h +25 -22
  15. data/ext/mysql2/result.c +512 -138
  16. data/ext/mysql2/result.h +13 -6
  17. data/ext/mysql2/statement.c +585 -0
  18. data/ext/mysql2/statement.h +19 -0
  19. data/lib/mysql2/client.rb +85 -26
  20. data/lib/mysql2/console.rb +1 -1
  21. data/lib/mysql2/em.rb +5 -6
  22. data/lib/mysql2/error.rb +18 -27
  23. data/lib/mysql2/field.rb +3 -0
  24. data/lib/mysql2/statement.rb +17 -0
  25. data/lib/mysql2/version.rb +1 -1
  26. data/lib/mysql2.rb +38 -18
  27. data/spec/configuration.yml.example +0 -6
  28. data/spec/em/em_spec.rb +22 -21
  29. data/spec/mysql2/client_spec.rb +525 -388
  30. data/spec/mysql2/error_spec.rb +38 -39
  31. data/spec/mysql2/result_spec.rb +223 -214
  32. data/spec/mysql2/statement_spec.rb +757 -0
  33. data/spec/spec_helper.rb +80 -59
  34. data/spec/ssl/ca-cert.pem +17 -0
  35. data/spec/ssl/ca-key.pem +27 -0
  36. data/spec/ssl/ca.cnf +22 -0
  37. data/spec/ssl/cert.cnf +22 -0
  38. data/spec/ssl/client-cert.pem +17 -0
  39. data/spec/ssl/client-key.pem +27 -0
  40. data/spec/ssl/client-req.pem +15 -0
  41. data/spec/ssl/gen_certs.sh +48 -0
  42. data/spec/ssl/pkcs8-client-key.pem +28 -0
  43. data/spec/ssl/pkcs8-server-key.pem +28 -0
  44. data/spec/ssl/server-cert.pem +17 -0
  45. data/spec/ssl/server-key.pem +27 -0
  46. data/spec/ssl/server-req.pem +15 -0
  47. data/support/mysql_enc_to_ruby.rb +7 -8
  48. data/support/ruby_enc_to_mysql.rb +1 -1
  49. metadata +42 -47
@@ -2,81 +2,80 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- describe Mysql2::Error do
6
- let(:client) { Mysql2::Client.new(DatabaseCredentials['root']) }
7
-
8
- let :error do
5
+ RSpec.describe Mysql2::Error do
6
+ let(:error) do
9
7
  begin
10
- client.query("HAHAHA")
8
+ @client.query("HAHAHA")
11
9
  rescue Mysql2::Error => e
12
10
  error = e
13
- ensure
14
- client.close
15
11
  end
16
12
 
17
13
  error
18
14
  end
19
15
 
20
16
  it "responds to error_number and sql_state, with aliases" do
21
- error.should respond_to(:error_number)
22
- error.should respond_to(:sql_state)
17
+ expect(error).to respond_to(:error_number)
18
+ expect(error).to respond_to(:sql_state)
23
19
 
24
20
  # Mysql gem compatibility
25
- error.should respond_to(:errno)
26
- error.should respond_to(:error)
21
+ expect(error).to respond_to(:errno)
22
+ expect(error).to respond_to(:error)
27
23
  end
28
24
 
29
- if "".respond_to? :encoding
30
- let :error do
31
- client = Mysql2::Client.new(DatabaseCredentials['root'])
25
+ context 'encoding' do
26
+ let(:valid_utf8) { '造字' }
27
+ let(:error) do
32
28
  begin
33
- client.query("\xE9\x80\xA0\xE5\xAD\x97")
29
+ @client.query(valid_utf8)
34
30
  rescue Mysql2::Error => e
35
- error = e
36
- ensure
37
- client.close
31
+ e
38
32
  end
39
-
40
- error
41
33
  end
42
34
 
43
- let :bad_err do
44
- client = Mysql2::Client.new(DatabaseCredentials['root'])
35
+ let(:invalid_utf8) { ["e5c67d1f"].pack('H*').force_encoding(Encoding::UTF_8) }
36
+ let(:bad_err) do
45
37
  begin
46
- client.query("\xE5\xC6\x7D\x1F")
38
+ @client.query(invalid_utf8)
47
39
  rescue Mysql2::Error => e
48
- error = e
49
- ensure
50
- client.close
40
+ e
51
41
  end
42
+ end
43
+
44
+ before do
45
+ pending('String#encoding is not defined') unless String.public_method_defined?(:encoding)
46
+
47
+ # sanity check
48
+ expect(valid_utf8.encoding).to eql(Encoding::UTF_8)
49
+ expect(valid_utf8).to be_valid_encoding
52
50
 
53
- error
51
+ expect(invalid_utf8.encoding).to eql(Encoding::UTF_8)
52
+ expect(invalid_utf8).to_not be_valid_encoding
54
53
  end
55
54
 
56
55
  it "returns error messages as UTF-8 by default" do
57
56
  with_internal_encoding nil do
58
- error.message.encoding.should eql(Encoding::UTF_8)
59
- error.message.valid_encoding?
57
+ expect(error.message.encoding).to eql(Encoding::UTF_8)
58
+ expect(error.message).to be_valid_encoding
60
59
 
61
- bad_err.message.encoding.should eql(Encoding::UTF_8)
62
- bad_err.message.valid_encoding?
60
+ expect(bad_err.message.encoding).to eql(Encoding::UTF_8)
61
+ expect(bad_err.message).to be_valid_encoding
63
62
 
64
- bad_err.message.should include("??}\u001F")
63
+ expect(bad_err.message).to include("??}\u001F")
65
64
  end
66
65
  end
67
66
 
68
67
  it "returns sql state as ASCII" do
69
- error.sql_state.encoding.should eql(Encoding::US_ASCII)
70
- error.sql_state.valid_encoding?
68
+ expect(error.sql_state.encoding).to eql(Encoding::US_ASCII)
69
+ expect(error.sql_state).to be_valid_encoding
71
70
  end
72
71
 
73
72
  it "returns error messages and sql state in Encoding.default_internal if set" do
74
- with_internal_encoding 'UTF-16LE' do
75
- error.message.encoding.should eql(Encoding.default_internal)
76
- error.message.valid_encoding?
73
+ with_internal_encoding Encoding::UTF_16LE do
74
+ expect(error.message.encoding).to eql(Encoding.default_internal)
75
+ expect(error.message).to be_valid_encoding
77
76
 
78
- bad_err.message.encoding.should eql(Encoding.default_internal)
79
- bad_err.message.valid_encoding?
77
+ expect(bad_err.message.encoding).to eql(Encoding.default_internal)
78
+ expect(bad_err.message).to be_valid_encoding
80
79
  end
81
80
  end
82
81
  end