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.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1 -220
  3. data/LICENSE +21 -0
  4. data/README.md +370 -79
  5. data/examples/eventmachine.rb +1 -1
  6. data/examples/threaded.rb +4 -6
  7. data/ext/mysql2/client.c +1017 -305
  8. data/ext/mysql2/client.h +35 -11
  9. data/ext/mysql2/extconf.rb +222 -34
  10. data/ext/mysql2/infile.c +122 -0
  11. data/ext/mysql2/infile.h +1 -0
  12. data/ext/mysql2/mysql2_ext.c +1 -0
  13. data/ext/mysql2/mysql2_ext.h +12 -14
  14. data/ext/mysql2/mysql_enc_name_to_ruby.h +168 -0
  15. data/ext/mysql2/mysql_enc_to_ruby.h +249 -0
  16. data/ext/mysql2/result.c +664 -166
  17. data/ext/mysql2/result.h +16 -6
  18. data/ext/mysql2/statement.c +595 -0
  19. data/ext/mysql2/statement.h +19 -0
  20. data/lib/mysql2/client.rb +118 -211
  21. data/lib/mysql2/console.rb +5 -0
  22. data/lib/mysql2/em.rb +23 -5
  23. data/lib/mysql2/error.rb +62 -6
  24. data/lib/mysql2/field.rb +3 -0
  25. data/lib/mysql2/statement.rb +17 -0
  26. data/lib/mysql2/version.rb +1 -1
  27. data/lib/mysql2.rb +66 -3
  28. data/spec/configuration.yml.example +11 -0
  29. data/spec/em/em_spec.rb +96 -10
  30. data/spec/my.cnf.example +9 -0
  31. data/spec/mysql2/client_spec.rb +779 -205
  32. data/spec/mysql2/error_spec.rb +58 -45
  33. data/spec/mysql2/result_spec.rb +316 -159
  34. data/spec/mysql2/statement_spec.rb +776 -0
  35. data/spec/spec_helper.rb +97 -56
  36. data/spec/ssl/ca-cert.pem +17 -0
  37. data/spec/ssl/ca-key.pem +27 -0
  38. data/spec/ssl/ca.cnf +22 -0
  39. data/spec/ssl/cert.cnf +22 -0
  40. data/spec/ssl/client-cert.pem +17 -0
  41. data/spec/ssl/client-key.pem +27 -0
  42. data/spec/ssl/client-req.pem +15 -0
  43. data/spec/ssl/gen_certs.sh +48 -0
  44. data/spec/ssl/pkcs8-client-key.pem +28 -0
  45. data/spec/ssl/pkcs8-server-key.pem +28 -0
  46. data/spec/ssl/server-cert.pem +17 -0
  47. data/spec/ssl/server-key.pem +27 -0
  48. data/spec/ssl/server-req.pem +15 -0
  49. data/spec/test_data +1 -0
  50. data/support/5072E1F5.asc +432 -0
  51. data/support/libmysql.def +219 -0
  52. data/support/mysql_enc_to_ruby.rb +81 -0
  53. data/support/ruby_enc_to_mysql.rb +61 -0
  54. metadata +77 -196
  55. data/.gitignore +0 -12
  56. data/.rspec +0 -3
  57. data/.rvmrc +0 -1
  58. data/.travis.yml +0 -7
  59. data/Gemfile +0 -3
  60. data/MIT-LICENSE +0 -20
  61. data/Rakefile +0 -5
  62. data/benchmark/active_record.rb +0 -51
  63. data/benchmark/active_record_threaded.rb +0 -42
  64. data/benchmark/allocations.rb +0 -33
  65. data/benchmark/escape.rb +0 -36
  66. data/benchmark/query_with_mysql_casting.rb +0 -80
  67. data/benchmark/query_without_mysql_casting.rb +0 -56
  68. data/benchmark/sequel.rb +0 -37
  69. data/benchmark/setup_db.rb +0 -119
  70. data/benchmark/threaded.rb +0 -44
  71. data/mysql2.gemspec +0 -29
  72. data/tasks/benchmarks.rake +0 -20
  73. data/tasks/compile.rake +0 -71
  74. data/tasks/rspec.rake +0 -16
  75. data/tasks/vendor_mysql.rake +0 -40
@@ -1,68 +1,81 @@
1
1
  # encoding: UTF-8
2
+
2
3
  require 'spec_helper'
3
4
 
4
- describe Mysql2::Error do
5
- before(:each) do
6
- @client = Mysql2::Client.new :encoding => "utf8"
5
+ RSpec.describe Mysql2::Error do
6
+ let(:error) do
7
7
  begin
8
8
  @client.query("HAHAHA")
9
9
  rescue Mysql2::Error => e
10
- @error = e
11
- end
12
-
13
- @client2 = Mysql2::Client.new :encoding => "big5"
14
- begin
15
- @client2.query("HAHAHA")
16
- rescue Mysql2::Error => e
17
- @error2 = e
10
+ error = e
18
11
  end
19
- end
20
12
 
21
- it "should respond to #error_number" do
22
- @error.should respond_to(:error_number)
13
+ error
23
14
  end
24
15
 
25
- it "should respond to #sql_state" do
26
- @error.should respond_to(:sql_state)
27
- end
16
+ it "responds to error_number and sql_state, with aliases" do
17
+ expect(error).to respond_to(:error_number)
18
+ expect(error).to respond_to(:sql_state)
28
19
 
29
- # Mysql gem compatibility
30
- it "should alias #error_number to #errno" do
31
- @error.should respond_to(:errno)
20
+ # Mysql gem compatibility
21
+ expect(error).to respond_to(:errno)
22
+ expect(error).to respond_to(:error)
32
23
  end
33
24
 
34
- it "should alias #message to #error" do
35
- @error.should respond_to(:error)
36
- end
25
+ context 'encoding' do
26
+ let(:valid_utf8) { '造字' }
27
+ let(:error) do
28
+ begin
29
+ @client.query(valid_utf8)
30
+ rescue Mysql2::Error => e
31
+ e
32
+ end
33
+ end
37
34
 
38
- if RUBY_VERSION =~ /1.9/
39
- it "#message encoding should match the connection's encoding, or Encoding.default_internal if set" do
40
- if Encoding.default_internal.nil?
41
- @error.message.encoding.should eql(@client.encoding)
42
- @error2.message.encoding.should eql(@client2.encoding)
43
- else
44
- @error.message.encoding.should eql(Encoding.default_internal)
45
- @error2.message.encoding.should eql(Encoding.default_internal)
35
+ let(:invalid_utf8) { ["e5c67d1f"].pack('H*').force_encoding(Encoding::UTF_8) }
36
+ let(:bad_err) do
37
+ begin
38
+ @client.query(invalid_utf8)
39
+ rescue Mysql2::Error => e
40
+ e
46
41
  end
47
42
  end
48
43
 
49
- it "#error encoding should match the connection's encoding, or Encoding.default_internal if set" do
50
- if Encoding.default_internal.nil?
51
- @error.error.encoding.should eql(@client.encoding)
52
- @error2.error.encoding.should eql(@client2.encoding)
53
- else
54
- @error.error.encoding.should eql(Encoding.default_internal)
55
- @error2.error.encoding.should eql(Encoding.default_internal)
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
50
+
51
+ expect(invalid_utf8.encoding).to eql(Encoding::UTF_8)
52
+ expect(invalid_utf8).to_not be_valid_encoding
53
+ end
54
+
55
+ it "returns error messages as UTF-8 by default" do
56
+ with_internal_encoding nil do
57
+ expect(error.message.encoding).to eql(Encoding::UTF_8)
58
+ expect(error.message).to be_valid_encoding
59
+
60
+ expect(bad_err.message.encoding).to eql(Encoding::UTF_8)
61
+ expect(bad_err.message).to be_valid_encoding
62
+
63
+ expect(bad_err.message).to include("??}\u001F")
56
64
  end
57
65
  end
58
66
 
59
- it "#sql_state encoding should match the connection's encoding, or Encoding.default_internal if set" do
60
- if Encoding.default_internal.nil?
61
- @error.sql_state.encoding.should eql(@client.encoding)
62
- @error2.sql_state.encoding.should eql(@client2.encoding)
63
- else
64
- @error.sql_state.encoding.should eql(Encoding.default_internal)
65
- @error2.sql_state.encoding.should eql(Encoding.default_internal)
67
+ it "returns sql state as ASCII" do
68
+ expect(error.sql_state.encoding).to eql(Encoding::US_ASCII)
69
+ expect(error.sql_state).to be_valid_encoding
70
+ end
71
+
72
+ it "returns error messages and sql state in Encoding.default_internal if set" do
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
76
+
77
+ expect(bad_err.message.encoding).to eql(Encoding.default_internal)
78
+ expect(bad_err.message).to be_valid_encoding
66
79
  end
67
80
  end
68
81
  end